INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Überprüfung Datenübermittlung
23.01.2019, 18:09
Beitrag #1
Überprüfung Datenübermittlung
Hallo,

ich habe folgendes Problem:
wenn ich Daten von meinem Arduino auf eine Webseite sende kann ich mir nicht sicher sein (schlechte Internetverbindung) das die Daten immer vollständig ankommen.

Code:
#include <Seeed_BME280.h>
#include <Wire.h>
BME280 bme280;
float Temperature;
float Pressure;
float Humidity;

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFD };
IPAddress ip(192,168,178,67);
IPAddress gateway(192,168,178,1);
IPAddress dnServer(192,168,178,1);
EthernetClient client;
char server[] = "www.SERVER.eu";
const char* pfad[1][1]={"test/"};
float Kontrollsumme;


void setup() {

  Serial.begin(9600);
  Serial.println("Setup startet");

  if(!bme280.init())
    { Serial.println("FEHLER!!! Keine Datenabfrage vom BME280 moeglich");}
  while (!Serial) {
    ;
  }
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);
  if (Ethernet.begin(mac) == 0) Serial.println("Fehler bei der Konfiguration des Ethernet-Adapters ueber DHCP");
  Serial.print("IP Addresse des Arduino:  ");
  Serial.println(Ethernet.localIP());
  delay(5000);
  Serial.println("Setup beendet");
  Serial.println("-------------------------------------------------------");
}


void loop() {
    BME280();
    Datenuebertrag();
    Serialausgabe();
    delay(120000);
}

void BME280() {
      Temperature = bme280.getTemperature();
      Pressure = bme280.getPressure() / 100.0F;
      Humidity = bme280.getHumidity();
}

void Datenuebertrag() {
    Kontrollsumme = round(Temperature+Pressure+Humidity);
      for (byte i = 0; i < 5; i++) {
        if (client.connect (server, 80)){
          client.print ("GET /");
          client.print (pfad[0][0]);
          client.print ("datenlogger.php?Temperature=");
          client.print (Temperature);  
          client.print ("&Pressure=");
          client.print (Pressure);  
          client.print ("&Humidity=");
          client.print (Humidity);
          client.print ("&Kontrollsumme=");
          client.print (Kontrollsumme);
          client.println (" HTTP/1.1");
          client.print   ("Host:");
          client.println (server);
          client.println ("Connection: close");
          client.println ();
          Serial.print   ("Verbindung zum Server erfolgreich      for-Durchläufe:   ");
          Serial.print   (i+1);
          Serial.println ("/5");
        }
        else Serial.println("Verbindung zum Server fehlgeschlagen");
        int c;
        c = client.read();
          if (c <'1') {
            i=10;
            Serial.print ("Upload der Daten war erfolgreich       Client read:      ");
            Serial.println (c);
          }
      };
      client.stop();
      client.flush();
      delay(1000);
      Serial.println ("Verbindung getrennt");
}

void Serialausgabe() {
    Serial.println(">> BME280");
    Serial.print("     Temperatur:          ");
    Serial.print(Temperature);
    Serial.println(" °C");
    Serial.print("     Luftdruck:           ");
    Serial.print(Pressure);
    Serial.println(" mbar");
    Serial.print("     Luftfeuchtigkeit:    ");
    Serial.print(Humidity);
    Serial.println(" %");
    Serial.print("     > Kontrollsumme:     ");
    Serial.println(Kontrollsumme);
    Serial.println("-------------------------------------------------------");
}

Serielle Ausgabe:
Code:
-------------------------------------------------------
Verbindung zum Server erfolgreich      for-Durchläufe:   1/5
Upload der Daten war erfolgreich       Client read:      -1
Verbindung getrennt
>> BME280
     Temperatur:          22.14 °C
     Luftdruck:           976.99 mbar
     Luftfeuchtigkeit:    51.00 %
     > Kontrollsumme:     1050.00
-------------------------------------------------------
Die Rückantwort des Servers "-1", was "TIMED_OUT" bedeuten soll, jedoch werden die Daten übertragen.

Ich habe es schon versucht die "Kontrollsumme" per Textfinder wieder einzulesen und zu vergleichen, jedoch ohne Erfolg.

Meine Frage gibt es eine Möglichkeit sicher zu stellen, das die Daten vollständig und korrekt übertragen wurden?


Vielen Dank schonmal im voraus!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.01.2019, 18:27
Beitrag #2
RE: Überprüfung Datenübermittlung
Das kannst Du über die Rückantwort des Servers herausbekommen.
Der Server sendet einige Headerzeilen als Antwort. Wenn da drin steht 200 OK, dann war die Übertragung vollständig.
Am Besten Du lässt Dir erst mal alle Zeichen ausgeben, die vom Client gelesen werden.
Dann siehst Du, wieviel Platz Du für die längste Zeile brauchst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.01.2019, 18:32
Beitrag #3
RE: Überprüfung Datenübermittlung
Wenn Dein Empfänger die erhaltene Information zurücksendet kannst Du auf Senderseite die Information überprüfen und den Wert ggf noch einmal senden.

(23.01.2019 18:09)BitsAndBytes schrieb:  Hallo,

ich habe folgendes Problem:
wenn ich Daten von meinem Arduino auf eine Webseite sende kann ich mir nicht sicher sein (schlechte Internetverbindung) das die Daten immer vollständig ankommen.

Code:
#include <Seeed_BME280.h>
#include <Wire.h>
BME280 bme280;
float Temperature;
float Pressure;
float Humidity;

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFD };
IPAddress ip(192,168,178,67);
IPAddress gateway(192,168,178,1);
IPAddress dnServer(192,168,178,1);
EthernetClient client;
char server[] = "www.SERVER.eu";
const char* pfad[1][1]={"test/"};
float Kontrollsumme;


void setup() {

  Serial.begin(9600);
  Serial.println("Setup startet");

  if(!bme280.init())
    { Serial.println("FEHLER!!! Keine Datenabfrage vom BME280 moeglich");}
  while (!Serial) {
    ;
  }
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);
  if (Ethernet.begin(mac) == 0) Serial.println("Fehler bei der Konfiguration des Ethernet-Adapters ueber DHCP");
  Serial.print("IP Addresse des Arduino:  ");
  Serial.println(Ethernet.localIP());
  delay(5000);
  Serial.println("Setup beendet");
  Serial.println("-------------------------------------------------------");
}


void loop() {
    BME280();
    Datenuebertrag();
    Serialausgabe();
    delay(120000);
}

void BME280() {
      Temperature = bme280.getTemperature();
      Pressure = bme280.getPressure() / 100.0F;
      Humidity = bme280.getHumidity();
}

void Datenuebertrag() {
    Kontrollsumme = round(Temperature+Pressure+Humidity);
      for (byte i = 0; i < 5; i++) {
        if (client.connect (server, 80)){
          client.print ("GET /");
          client.print (pfad[0][0]);
          client.print ("datenlogger.php?Temperature=");
          client.print (Temperature);  
          client.print ("&Pressure=");
          client.print (Pressure);  
          client.print ("&Humidity=");
          client.print (Humidity);
          client.print ("&Kontrollsumme=");
          client.print (Kontrollsumme);
          client.println (" HTTP/1.1");
          client.print   ("Host:");
          client.println (server);
          client.println ("Connection: close");
          client.println ();
          Serial.print   ("Verbindung zum Server erfolgreich      for-Durchläufe:   ");
          Serial.print   (i+1);
          Serial.println ("/5");
        }
        else Serial.println("Verbindung zum Server fehlgeschlagen");
        int c;
        c = client.read();
          if (c <'1') {
            i=10;
            Serial.print ("Upload der Daten war erfolgreich       Client read:      ");
            Serial.println (c);
          }
      };
      client.stop();
      client.flush();
      delay(1000);
      Serial.println ("Verbindung getrennt");
}

void Serialausgabe() {
    Serial.println(">> BME280");
    Serial.print("     Temperatur:          ");
    Serial.print(Temperature);
    Serial.println(" °C");
    Serial.print("     Luftdruck:           ");
    Serial.print(Pressure);
    Serial.println(" mbar");
    Serial.print("     Luftfeuchtigkeit:    ");
    Serial.print(Humidity);
    Serial.println(" %");
    Serial.print("     > Kontrollsumme:     ");
    Serial.println(Kontrollsumme);
    Serial.println("-------------------------------------------------------");
}

Serielle Ausgabe:
Code:
-------------------------------------------------------
Verbindung zum Server erfolgreich      for-Durchläufe:   1/5
Upload der Daten war erfolgreich       Client read:      -1
Verbindung getrennt
>> BME280
     Temperatur:          22.14 °C
     Luftdruck:           976.99 mbar
     Luftfeuchtigkeit:    51.00 %
     > Kontrollsumme:     1050.00
-------------------------------------------------------
Die Rückantwort des Servers "-1", was "TIMED_OUT" bedeuten soll, jedoch werden die Daten übertragen.

Ich habe es schon versucht die "Kontrollsumme" per Textfinder wieder einzulesen und zu vergleichen, jedoch ohne Erfolg.

Meine Frage gibt es eine Möglichkeit sicher zu stellen, das die Daten vollständig und korrekt übertragen wurden?


Vielen Dank schonmal im voraus!
Diese Nachricht in einer Antwort zitieren
25.01.2019, 17:34
Beitrag #4
RE: Überprüfung Datenübermittlung
Vielen Dank für die schnellen Antworten.
Ich versuche eure Vorschläge umzusetzen und teile euch dann meine Erkenntnisse mit.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 20:01
Beitrag #5
RE: Überprüfung Datenübermittlung
Ich habe es nun geschafft die Rückantwort zu bekommen.
Ich bekomme die Meldung "200OK" und damit müsste die Übertragung erfolgreich sein ?!

Ich schaffe es aber nicht, die Rückantwort auf die "datenlogger.php" zu beziehen, sondern nur auf eine Test-HTML Seite, was in meinen Augen aber nicht das gewünschte Ergebnis bringt, da ich ja die Datenübertragung zu datenlogger.php überwachen möchte.


Code:
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 27 Jan 2019 18:39:56 GMT
Content-Type: text/html
Content-Length: 345
Connection: close
Vary: Accept-Encoding
X-Accel-Version: 0.01
Last-Modified: Sun, 27 Jan 2019 18:31:55 GMT
ETag: "159-58074c64f7f05"
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
X-Powered-By: PleskLin

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>

<body>
<p>Test index.html</p>
</body>
</html>

disconnecting.
Received 680 bytes in 0.6635, rate = 1.02 kbytes/second

Oder kann ich davon ausgehen wenn die Rückantwort zur HTML ok ist, dass die Datenübertragung davor auch vollständig erfolgt ist?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 20:06 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2019 20:11 von Tommy56.)
Beitrag #6
RE: Überprüfung Datenübermittlung
Auch die PHP sollte ein 200 OK bringen, ansonsten ist das PHP falsch programmiert.

Gruß Tommy

Edit: Wenn alles ok ist, sollte das PHP antworten
PHP-Code:
header("HTTP/1.1 200 OK"); 

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 21:03
Beitrag #7
RE: Überprüfung Datenübermittlung
Stimmt!!
Die php-Seite war "falsch programmiert". Ich hatte nur das php-Script, jedoch keinen html Teil Confused
Jetzt bekomme ich auch von dieser Seite eine positive "HTTP/1.1 200 OK" Rückmeldung.
Nun muss ich das nur noch alles mit meinem Code kombinieren und in einen loop unterbringen.

Vielen dank!!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe bei eigenem Spiel( Überprüfung von Zufallsvariablen) JanGamer11 6 1.934 16.12.2015 22:21
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste