načtení obsahu http do proměnné

jiri255
Příspěvky: 15
Registrován: 16 led 2018, 18:47
Reputation: 0

Re: načtení obsahu http do proměnné

Příspěvek od jiri255 » 21 led 2018, 19:33

to je super máš pravdu špatně jsem to pochopil má tam být:

Kód: Vybrat vše

String url = "/"; // za / napr index.html .. atď podla potreby

a host musí být zapsán takto:

Kód: Vybrat vše

const char* host = "192.168.9.25";
a teď se mi teda zobrazí jen:

<!DOCTYPE HTML>

omlouvám se za možná hloupý dotaz, ale jde v tom kódu ještě nějak upravit, aby se mi nenačítala jen ta hlavička,
ale načetla se mi celá stránka?

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: načtení obsahu http do proměnné

Příspěvek od martinius96 » 21 led 2018, 20:05

Myslel som si, že to vypíše len 1. riadok :-D Treba tam nejak navolit správny ukončovací znak alebo ich kombináciu.
Je potrebné pozmeniť origo zápis, ktorý bol:

Kód: Vybrat vše

 
 while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }
  String line = client.readStringUntil('\n');
  Serial.println(line); //nasa premenna
  }
  
Nemám tu dosku, aby som to skúsil, ale skús to nahradiť celé za:

Kód: Vybrat vše

   
    while (client.connected()) {
    String line = client.readStringUntil('\r');
    }
alebo za nejakú kombináciu

Kód: Vybrat vše

 while (client.connected()) {
String line = client.readStringUntil('\r\n');
}
Prípadne tú kombináciu naopak :-) S jedným to snáď pôjde. Je to rozsah pokial má čítať.
Alebo ešte funkcia z Arduina od Ethernet shiledu.. ale neviem či je podporovaná.. (potom nejak orezat)

Kód: Vybrat vše

  
  while (client.connected()) {
  char c = client.read(); 
  }

jiri255
Příspěvky: 15
Registrován: 16 led 2018, 18:47
Reputation: 0

Re: načtení obsahu http do proměnné

Příspěvek od jiri255 » 21 led 2018, 21:02

díky tak, když je tam toto:

Kód: Vybrat vše

    
void loop() {

    digitalWrite(ledka, HIGH);
  delay(5000);

  Serial.println("Pripajam sa na web");
  Serial.println(host);
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 88; //port
  if (!client.connect(host, httpPort)) { 
    Serial.println("pripojenie neuspesne");
    return;
  }
  
  // We now create a URI for the request
  String url = "/"; // za / napr index.html .. atď podla potreby

  Serial.print("request na url: ");
  Serial.println(url);
  
  // Request na samostny server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
     while (client.connected()) {
    String line = client.readStringUntil('\r');
     Serial.println(line);

    }
    
  Serial.println();
  Serial.println("zatvaram spojenie");

  delay(5000);
  
}

tak už se v proměnné zobrazuje celá http stránka, ale všiml jsem si, že to nodemcu po cca 30 cyklech nevím přesně
zamrzlo a musel jsem dát tlačítkem reset, aby se to znova rozběhlo, tak to ještě musím odzkoušet nevím přesně co se stalo...

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: načtení obsahu http do proměnné

Příspěvek od martinius96 » 21 led 2018, 21:09

Pridaj si to setupu toto :-):

Kód: Vybrat vše

Serial.setDebugOutput(true);
Možno niečo vypíše pred/po resete, môžeš pridať aj výpis millisu.
Ešte za while môžeš dať

Kód: Vybrat vše

client.stop();
alebo

Kód: Vybrat vše

client.close();
Neviem ktorá varianta sa používa. Skôr asi tá stop.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: načtení obsahu http do proměnné

Příspěvek od pavel1tu » 22 led 2018, 07:17

Ahoj,

chápu dobře, ře na nějakém Arduini provozuješ WWW server a z jiného Arduina potřebuješ vyčíst třeba naměřené hodnoty ?

Pokud ano, já to vyřešil tak, ře na straně WWW serveru mimo klasické stránky generuji TXT soubor, který má těch 5 hodnot co potřebuje pěkně na 5ti řádcích a kámoš si dálkově ode mne vyčítá mnou právě naměřené hodnoty.

Jen nápad .... (okopíroval jsem to z nějakého německého serveru).

PS: mám to tedy na RPi, protože UNO to už neutáhlo, ale princip bude jistě stejný a jednodušší než pracně hledat ty hodnoty v celé WWW stránce ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jiri255
Příspěvky: 15
Registrován: 16 led 2018, 18:47
Reputation: 0

Re: načtení obsahu http do proměnné

Příspěvek od jiri255 » 22 led 2018, 15:41

ty kody odzkouším a dám vědět, jak jsem dopadl s tím zamrzáním...

No na těch zařízeních různě po domě jsou jen jednoduché stránky ...tedy popisek a teplota, max. dva popisky a dvě teploty nebo teplota a něco.
Jsou to různý zařízení, jak jsem postupně zkoušel co bude pro mě nejlepší tedy uno, mega, nodemcu a dal jsem je bohužel do né úplně dobře rozebíratelných krabiček a samozřejmě na né moc dobře přístupný místa. Už jsem prostě nepočítal, že se k tomu budu někdy vracet nebo to nějak dál upravovat/nahrávat tam jiný programy a rozšiřovat ....což byla asi chyba.

Tak abych neměl na pc otevřených několik oken a v tom ty jednotlivý zařízení a nemusel to všechno předělávat, tak jsem si říkal, že budu mít jedno hlavní zařízení (vyhrálo momentálně nodemcu), které přečte stránky těch jednotlivých podružných měřičů a zobrazí je v jednom okně.
Navíc bych si k němu ještě doplnil čas a sd kartu a ty proměnné těch stránek ještě ukládal na kartu, protože samostaná zařízení funkci ukládání
na kartu nemají.
Nevadí mě, když se mi na kartu uloží něco jako "22-1-2018 15:30 <h1>teplomer 2</h1><h3>teplota 22,32°C</h3>" ,protože v excelu už si to potom ošetřím podle potřeby.

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: načtení obsahu http do proměnné

Příspěvek od martinius96 » 22 led 2018, 16:40

Čo tak si to centralizovať na web do internetu? Do nejakej databázy si ukládať dáta, alebo mať real-time dáta?
Ja som to robil cez HTTP requesty na web raz za 2 sekundy ak ide o teplotu, stačí aj raz za 5-10min. Senzory dáš na OneWire zbernicu na krútenú dvojlinku a dáš ju za lištu :) Keď som odosielal real-time dáta tak som nemal problém ani s odozvou napríklad keď som hral hry. A to mám internetu 3/1Mbps (DW/UP). Keď máš každé zariadenie ako webserver, môžeš mať každé ako webclient.
Hosting mam u php5.sk (je i php.cz) a máš stránku zdarma rovnako aj db.. Mám v databáze cez 8000 záznamov teplôt a funguje to spoľahlivo ďalej.
Obrázek
Na stránke si môžem meniť názvy miestností, kde mám teplotné senzory, spúšťať a vypínať kúrenie, alebo ho nechat na automatiku. Ďalej môžem na diaľku resetnúť dosku, prípadne to resetovať automaticky cez cron, aby som predišiel vytuhnutiu dosky. Takto by si to mal lepšie :) Centralizované, s prístupom z práce atď.
Obrázek
Dal by som na to celé jednu Megu :-) Dosť pinov, Ethernet shield W5100, kabel je kabel.

jiri255
Příspěvky: 15
Registrován: 16 led 2018, 18:47
Reputation: 0

Re: načtení obsahu http do proměnné

Příspěvek od jiri255 » 22 led 2018, 19:36

to vypadá dobře možná se k tomu časem taky přikloním....
tak se mi to nepodařilo vyřešit stop ani close nepomohlo, chvílu to běží pak to zamrzne :-( tak nevím co by tam mohlo být ještě za problém.
Jediné co jsem našel bylo, že používání stringu je prý ok, ale může to způsobovat problémy, tak nevím jestli by to nemohlo být tím?

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: načtení obsahu http do proměnné

Příspěvek od pavel1tu » 22 led 2018, 20:37

jiri255 píše:
22 led 2018, 15:41
ty kody odzkouším a dám vědět, jak jsem dopadl s tím zamrzáním...

No na těch zařízeních různě po domě jsou jen jednoduché stránky ...tedy popisek a teplota, max. dva popisky a dvě teploty nebo teplota a něco.
Jsou to různý zařízení, jak jsem postupně zkoušel co bude pro mě nejlepší tedy uno, mega, nodemcu a dal jsem je bohužel do né úplně dobře rozebíratelných krabiček a samozřejmě na né moc dobře přístupný místa. Už jsem prostě nepočítal, že se k tomu budu někdy vracet nebo to nějak dál upravovat/nahrávat tam jiný programy a rozšiřovat ....což byla asi chyba.

Tak abych neměl na pc otevřených několik oken a v tom ty jednotlivý zařízení a nemusel to všechno předělávat, tak jsem si říkal, že budu mít jedno hlavní zařízení (vyhrálo momentálně nodemcu), které přečte stránky těch jednotlivých podružných měřičů a zobrazí je v jednom okně.
Navíc bych si k němu ještě doplnil čas a sd kartu a ty proměnné těch stránek ještě ukládal na kartu, protože samostaná zařízení funkci ukládání
na kartu nemají.
Nevadí mě, když se mi na kartu uloží něco jako "22-1-2018 15:30 <h1>teplomer 2</h1><h3>teplota 22,32°C</h3>" ,protože v excelu už si to potom ošetřím podle potřeby.
Tak to bych to předělal na centrální WEB, ale na něčem silnějším, já mám RBpi2 a na něm bych rozjel databázi+www server - a máš po starostech.
Ono totiž pak PHP+databáze žerou dost paměti a hlavně k nim jde dát nějaký starý SSD nebo 2,5" disk.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: načtení obsahu http do proměnné

Příspěvek od martinius96 » 22 led 2018, 21:03

Pre odoslanie dat na web, ktoré si prekonvertujem na string a zapisujem ich do requestu používam:

Kód: Vybrat vše

void odosli_teploty() {
  sensors.requestTemperatures();
  delay(500);
  WiFiClientSecure client;
  if (client.verify(fingerprint, host)) {} else {}
  if (client.connect(host, httpsPort)) {
    String teplota1 = String(sensors.getTempCByIndex(0));
    String teplota2 = String(sensors.getTempCByIndex(1));
    String teplota3 = String(sensors.getTempCByIndex(2));
    String teplota4 = String(sensors.getTempCByIndex(3));
    String teplota5 = String(sensors.getTempCByIndex(4));
    String teplota6 = String(sensors.getTempCByIndex(5));

    String url = "/rosko/system/nodemcu/zapisteplotu.php?teplota1=" + teplota1 + "&teplota2=" + teplota2 + "&teplota3=" + teplota3 + "&teplota4=" + teplota4 + "&teplota5=" + teplota5 + "&teplota6=" + teplota6; //--------------------------------------------------------------------------------DOPLN LINK
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
    Serial.println("Odoslane teploty:");
    Serial.println(teplota1);
    Serial.println(teplota2);
    Serial.println(teplota3);
  } else if (!client.connect(host, httpsPort)) {
    Serial.println("Neuspesne pripojenie pre odoslanie teplot - offline rezim");
  }
}
Doplň si na začiatok loopu:

Kód: Vybrat vše

if (WiFi.status() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
  }
Keď dáta čítam z texťáku napr používam:

Kód: Vybrat vše

void referencna_hodnota() {
  WiFiClientSecure client;

  if (client.verify(fingerprint, host)) {} else {}
  if (client.connect(host, httpsPort)) {
    String url = "/rosko/system/values/nastavenytermostat.txt";
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");

    while (client.connected()) {
      String nastavenytermostat = client.readStringUntil('\n');
      if (nastavenytermostat == "\r") {
        break;
      }
    }
    String nastavenytermostat = client.readStringUntil('\n');
    referenciatermostat = nastavenytermostat.toFloat();
    Serial.println("Referencia termostatu ma hodnotu: ");
    Serial.println(referenciatermostat);
  } else if (!client.connect(host, httpsPort)) {
    Serial.println("Referencia termostatu sa nepodarilo zistit z internetu - offline rezim s hodnotou");
    Serial.println(referenciatermostat);
  }
}
Nemám tam nič špeci proti záseku alebo tak.. odosielam a čítam niekoľko údajov za sebou.. teploty, referencie teplôt z internetu pre offline režim.. atď.. Ja si myslím, že ti vypadne wifi, napr u DHCP ti skončí IP adresa a to je problém, lebo nema IP v sieti.. Ak pridáš na začiatok slučky tú podmienku, tak ťa nanovo na wifi napojí. Nevieš, či to vytuhlo, alebo sa iba odpojilo :-)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů