Stránka 2 z 5

Re: nacitani hodnot z PHP na synology

Napsal: 29 říj 2021, 17:15
od KamilV
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"); 

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 11:37
od Kony
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 :)

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 11:45
od KamilV
Š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...

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 14:21
od Kony
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);
}

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 19:44
od KamilV

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?

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 19:57
od Kony
To mam takto zadat do loopu ??

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 20:17
od Kony

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 -> _________________________

Re: nacitani hodnot z PHP na synology

Napsal: 30 říj 2021, 23:42
od martinius96
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

Re: nacitani hodnot z PHP na synology

Napsal: 31 říj 2021, 09:37
od Kony
Super, tak toto mi uz funguje.. a jak z toho vypsat pouze ten cas ??
Abaych odfiltroval vse ostatni ¨?

Re: nacitani hodnot z PHP na synology

Napsal: 31 říj 2021, 12:43
od peterple
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ť