nacitani hodnot z PHP na synology

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: nacitani hodnot z PHP na synology

Příspěvek od KamilV » 29 říj 2021, 17:15

Vs. Tvé:

Kód: Vybrat vše

client.println("GET http://konycz.eu/doma/test/cas.php");
client.println(" HTTP/1.0"); 
Vidíš ten rozdíl? Hlavně máš odřádkovaný GET od specifikace HTTP, což není validní request.

Co tohle?

Kód: Vybrat vše

client.println("GET /doma/test/cas.php HTTP/1.1");
client.println("Host: konycz.eu"); 

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: nacitani hodnot z PHP na synology

Příspěvek od Kony » 30 říj 2021, 11:37

no ted uz to vypisuje :

Kód: Vybrat vše

11:36:42.643 -> Cas : HTTP/1.1 200 OK

11:36:42.643 -> _________________________
11:36:48.639 -> Cas : HTTP/1.1 200 OK

11:36:48.639 -> _________________________
11:36:54.629 -> Cas : HTTP/1.1 200 OK

11:36:54.629 -> _________________________
11:37:00.670 -> Cas : HTTP/1.1 200 OK

11:37:00.670 -> _________________________
11:37:06.663 -> Cas : HTTP/1.1 200 OK

11:37:06.663 -> _________________________
ale vypis stranky co ma vypsat ne a ne :)

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: nacitani hodnot z PHP na synology

Příspěvek od KamilV » 30 říj 2021, 11:45

Špatně parsuješ response.
Teď si tiskneš první řádek z response. Dříve zaslaný kód tohle určitě nevrací a aktuální kód jsi neposlal, takže můžeme jen potvrdit, že výpis stránky ne a ne...

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: nacitani hodnot z PHP na synology

Příspěvek od Kony » 30 říj 2021, 14:21

aktualni

Kód: Vybrat vše

#include <ESP8266WiFi.h>

// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kony";
// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "heslowifi";
char server[] = "192.168.1.250"; //URL adresa serveru
WiFiClient client;
unsigned long cas = 0;
String cas_aktualni;

void setup() {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600); 
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");

 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");


 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
}


void hodiny() {
  if (millis() - cas >= 6000 || cas == 0) {
    cas = millis();
    if (client.connect(server, 80)) {  //starts client connection, checks for connection
        client.println("GET /doma/test/cas.php HTTP/1.1");
        client.println("Host: 192.168.1.250");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        delay(1000);
        while (client.connected()) {
      String line = client.readStringUntil('\n');
        Serial.println(line); //ak chceme vypísať HTTP header
        if (line == "\r") {
          break;
        }
      }
      String line = client.readStringUntil('\n');
    //  Serial.println("Nacitany payload response: Cas - ");
   //   Serial.println(line); //odpoveď webservera - naše dáta
      cas_aktualni = line;
    } 
    else {
      Serial.println("Pripojenie na webserver sa nepodarilo");
    }
    client.stop();
    }
  Serial.print("Cas : "); 
  Serial.println(cas_aktualni);
}


void loop() {   
                hodiny();
                Serial.println("_________________________");
                delay(5000);
}

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: nacitani hodnot z PHP na synology

Příspěvek od KamilV » 30 říj 2021, 19:44

Kód: Vybrat vše

while (client.connected()) {
      String headers = client.readStringUntil('\r');
      String data = client.readStringUntil('\r');
}

Serial.print("Headers: "); 
Serial.println(headers);

Serial.print("Data: "); 
Serial.println(data);
Tohle vypíše co?

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: nacitani hodnot z PHP na synology

Příspěvek od Kony » 30 říj 2021, 19:57

To mam takto zadat do loopu ??

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: nacitani hodnot z PHP na synology

Příspěvek od Kony » 30 říj 2021, 20:17

Kód: Vybrat vše

#include <ESP8266WiFi.h>

// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kony";
// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "heslowifi";
char server[] = "192.168.1.250"; //URL adresa serveru
WiFiClient client;
unsigned long cas = 0;
String cas_aktualni;
String headers1;
String data;

void setup() {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600); 
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");

 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");


 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
}


void hodiny() {
  if (millis() - cas >= 6000 || cas == 0) {
    cas = millis();
    if (client.connect(server, 80)) {  //starts client connection, checks for connection
        client.println("GET /doma/test/cas.php HTTP/1.1");
        client.println("Host: 192.168.1.250");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        delay(1000);
        while (client.connected()) {
      headers1 = client.readStringUntil('\r');
      data = client.readStringUntil('\r');

         }
        Serial.print("Headers: "); 
        Serial.println(headers1);

        Serial.print("Data: "); 
        Serial.println(data);
         
    //  Serial.println("Nacitany payload response: Cas - ");
   //   Serial.println(line); //odpoveď webservera - naše dáta
//      cas_aktualni = line;
    } 
    else {
      Serial.println("Pripojenie na webserver sa nepodarilo");
    }
    client.stop();
    }
  Serial.print("Cas : "); 
  Serial.println(cas_aktualni);
}


void loop() {   
                hodiny();
                Serial.println("_________________________");
                delay(5000);
}

Kód: Vybrat vše

20:16:55.352 -> Headers: 
20:16:55.352 -> Data: 
20:16:55.352 -> Cas : 
20:16:55.352 -> _________________________

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

Re: nacitani hodnot z PHP na synology

Příspěvek od martinius96 » 30 říj 2021, 23:42

Kony píše:
29 říj 2021, 15:54
Tak taky ne, stejny vysledek

Schvalne muzes vyzkouset

Kód: Vybrat vše

http://213.211.34.227/testik/cas.php
Funguje mi to úplne bez problému. Použil som example kód pre HTTP request z Githubu (Arduino Core pre ESP8266).
Payload je načítaný kompletne, ak by tam bolo viac riadkov payloadu, tak ho načíta celý (ak by bol napr. HTML kód okolo a potreboval by si sa dostať k riadku tvojej premennej a orezať ju, tak je možné načítavať aj po riadkoch).

Kód: Vybrat vše

//Pripojenie na webserver a nacitanie HTTP hlavicky, Payloadu (text / HTML / JSON...)

#include <ESP8266WiFi.h>

const char* ssid = "SSID_NAME"; //SSID WiFi siete
const char* password = "SSID_PASSWORD"; //HESLO WiFi siete
const char* host = "213.211.34.227"; //IP adresa, alebo domena webservera
const int httpPort = 80;
WiFiClient client; //pre HTTP
void hodiny();

void setup() {
  Serial.begin(115200); //rychlost seriovej linky
  Serial.println();
  Serial.print(F("Pripajanie na WiFi siet: "));
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(F("."));
  }
  Serial.println(F(""));
  Serial.println(F("Wifi pripojene"));
  Serial.print(F("Pridelena IP adresa z DHCP: "));
  Serial.println(WiFi.localIP());
  hodiny();
}

void loop() {

}

void hodiny() {
  client.stop();
  if (client.connect(host, httpPort)) {
    String url = F("/testik/cas.php");
    Serial.println(F("Pripojenie uspesne, nacitavam odpoved servera"));
    client.print(String(F("GET ")) + url + F(" HTTP/1.0\r\n") + F("Host: ") + host + F("\r\n") + F("User-Agent: NodeMCU\r\n") + F("Connection: close\r\n\r\n"));
    while (client.connected()) {
      String line = client.readStringUntil('\n'); //HTTP HEADER
      Serial.println(line);
      if (line == F("\r")) {
        break;
      }
    }
    String line = client.readString(); //PAYLOAD
    Serial.println(line);
  } else if (!client.connect(host, httpPort)) {
    Serial.println(F("Nepodarilo sa pripojit na webserver"));
  }
}
Výstup na UART:
Obrázek

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: nacitani hodnot z PHP na synology

Příspěvek od Kony » 31 říj 2021, 09:37

Super, tak toto mi uz funguje.. a jak z toho vypsat pouze ten cas ??
Abaych odfiltroval vse ostatni ¨?

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: nacitani hodnot z PHP na synology

Příspěvek od peterple » 31 říj 2021, 12:43

Skús sa zamyslieť prečo vyzerá hlavička práve tak ako vyzerá. Potom možno objavíš tento algoritmus:
  1. načitaj riadol odpovede
  2. najdi v riadku znak dvojbodka
  3. čo je predním je klúčové slovo, čo je zaním je hodnota
  4. ak je to klúčové slovo čo ma zaujíma, tak mám aj hodnotu.
Samozrejme dá sa to ja inak. Ignorovať hlavičku a potom zobrať data stránky. Pre začiatok si skús vypísať len data. Možno zistíš že ten tvoj pôvodný kód by na to už fungoval, alebo ho stačí len mierne modifikovať

Odpovědět

Kdo je online

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