kostenloser Webspace werbefrei: lima-city


Datenübergabe von arduino mittels PHP-Datei an SQL-DB

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Hallo allerseits,
    ich möchte Messwerte von 4 Sensoren, die am Arduino angeschlossen sind an eine PHP-Datei auf meinem Webserver "xxx.lima.city.de" mit der GET-Methode übergeben. Diese PHP-Datei soll diese Daten dann in eine SQL-Datenbank weiterreichen.
    - Das System habe ich auf meinem eigenen PC mit Apache Webserver zum laufen bekommen.
    - Wenn ich die PHP-Datei auf meinem Server im Browser aufrufe mit dem Anhang (z.B.) ?T=999 wird der Wert 999 auch in die DB geschrieben.
    - Die PHP-Datei heißt der Einfachheit halber mal "1.php" und liegt auf meinem Server in dem Verzeichnis "xxx.lima-city.de

    Die relevanten Codezeilen im Arduino sind :

    char server[]="https://xxx.lima-city.de"; //(ich habs schon probiert ohne "https://", mit "http://", mit "http/https.www", mit "www", ohne alles)
    .
    .
    if (client.connect(server,80)) {
    Serial.print ("connected to ");
    Serial.println (server);
    client.print("GET /N.php?T=65&D=565&F=78&H=666");

    serial.print zeigt einen Connect an, es werden aber keine Daten in die DB geschrieben. Im Prinzip macht die PHP-Datei das aber - s.oben.

    Müssen noch Benutzer und Passwort angegeben werden? In welcher Form? Probiert habe ich das auch schon, bin mir aber nicht sicher in welcher Form das ggf. geschehen muss.



    Die PHP-Datei sieht ganz einfach so aus:

    <?php
    isset($_GET['T']) ? $T=$_GET['T'] : $T='';
    isset($_GET['D']) ? $D=$_GET['D'] : $D='';
    isset($_GET['F']) ? $F=$_GET['F'] : $F='';
    isset($_GET['H']) ? $H=$_GET['H'] : $H='';

    $db = mysqli_connect("xxx.lima-db.de","USER00000","00000000","da00000");
    $SQL_Befehl = "INSERT INTO erste (Zeit, Temperatur, Luftdruck, Feuchtigkeit, Helligkeit) Values (NOW(), '$T', '$D', '$F', '$H' )" ;
    $result = mysqli_query ($db,$SQL_Befehl);

    ?>




  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ein Passwort musst du nicht angeben.
    Stimmt der Dateiname? Im Text nennst du sie 1.php im Code steht N.php (klar du hast alles vereinfacht)
    Sende mal mit deinem Browser Daten an die 1.php und schau, ob es dann funktioniert.
    Ob der Fehler beim Arduino oder bei Lima ist. Dann geht die Fehlersuche schneller.
  4. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Oh, das war jetzt dumm. Die Datei heißt wirklich "N.php", wie im Code. "1.php" ist ein Fehler im Text. Ich hab mit Filezilla nochmal nachgeschaut, was wirklich bei Lima liegt. Also "N.php" - und damit gehts nicht.
    Was könnte ich sonst noch machen?
  5. Funktioniert es, wenn du diesen Link im Browser verwendest?
    https://bsob-leinenborn.lima-city.de/N.php?T=65&D=565&F=78&H=666
    Funktioniert also die PHP-Datei? Andernfalls kannst du mal die Fehler ausgeben lassen. Ich tippe dann auf einen Tippfehler bei den Datenbank Zugangsdaten.
  6. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Ja , das geht. Du hast es wohl auch schonmal probiert. Um 18:37 Uhr sind diese Daten in die DB geschrieben worden. Ich war da nicht zugange.
    Mir ist beim Experimentieren mit dem Sketch etwa Sonderbares aufgefallen. Ich kann als Servername einen beliebigen, nicht existenten Servernamen eintragen (z.B.: www.Ach_du_dickes_Ei.de), die Zeilen :
    " if (client.connect(server,80)) {
    Serial.print ("connected to ");
    Serial.println (server);"
    ergeben immer in der seriellen Ausgabe "www.connected to Ach_du_dickes_Ei.de."
    Also möglicherweise bin ich in den Server auf www.BSob-leineborn.lima-city.de garnicht connected, obwohl es so aussieht.

  7. Getestet hab ich es nicht. Ich erwarte schließlich auch keine Rückmeldung von der PHP.

    Wir wissen jetzt, dass das Problem beim Arduino liegt. An der Stelle kann ich dir leider nicht helfen, da ich mich damit nicht auskenne.

    Weißt du, wie integer als boolean interpretiert werden? Sind -1, -2,... false? Das Codebeispiel auf arduino.cc ist identisch mit deinem, daher gehe ich mal davon aus, dass es stimmt, aber du könntest dir dennoch mal den Rückgabe Wert von client.connect ausgeben lassen (SUCCESS 1, TIMED_OUT -1, INVALID_SERVER -2, TRUNCATED -3, INVALID_RESPONSE -4). Falls es etwas ausmacht, kannst du es auch umgehen, indem du zuerst client.connect ausführst und anschließend mit if(client.connected()) die Verbindung überprüfst.
    Aber das führt uns dem Problem auch nicht wirklich näher.

    In einem Code-Stück habe ich auch noch gesehen, dass nach client.connect ein delay() ausgeführt wurde.
    Vielleicht ist das nötig.
  8. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Vollständig heißt das, glaube ich, : if(client.connect(server,80)>0)...
    Ein connect ist also gegeben bei positiven Rückgabewerten.
    Ich hab mal das gemacht:
    int x = client.connect(server,80);
    serial.print(x);

    Das ergab für x bei www.dudickesei.de den Wert "1".

    Aber wie du schon sagst - so richtig weiter bringt das nicht.

    Ich werd mich mal in einem speziellen Arduino-Forum umhören.

    Danke für deine Bemühungen...
  9. Hallo.

    Mir ist an deinem Codebeispiel aufgefallen, dass du noch keinen vollständigen Request sendest.

    Nimm diese Codezeile aus dem anfangs geposteten Code:
    client.print("GET /N.php?T=65&D=565&F=78&H=666");

    und erweitere das in dieser Form:
    client.println("GET /N.php?T=65&D=565&F=78&H=666 HTTP/1.1"); // Protokoll und Zeilenumbruch ergänzt
    client.println("User-Agent: Arduino"); // Lima-City braucht ein User-Agent, sonst wird der Request abgewiesen
    client.println(); // Request abschließen mit einer Leerzeile
    Ich hoffe, das hilft dir weiter.
  10. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Ja, auch mit diesen zusätzlichen Zeilen hatte ich das mal probiert - ohne Erfolg.
    Ich liste hier mal den vollständigen Code - der Übersichtlichkeit halber abgespeckt auf die reinen Client-Funktionen. Wenn das mal funktioniert, ist dann die Datenerfassung schnell eingefügt.
    Also mit diesem Code funktioniert es nicht!
    #include <SPI.h>
    #include <Ethernet.h>
    
    byte mac[] = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 };
    char server[]="www.bsob-leinenborn.lima-city.de";
    IPAddress ip(192,168,2,199);
    EthernetClient client;
    
    void setup() {
    Serial.begin(9600);
    Ethernet.begin(mac,ip);
    delay(1000);
    }
    
    void loop() {
    
      Serial.println();
      Serial.println("Verbindung aufbauen...");
    
     int x = client.connect(server,80);
     Serial.println(x);
     if (x > 0) {
       Serial.print ("connected to ");
       Serial.println (server);
       client.print("GET /N.php?T=65&D=565&F=78&H=666 HTTP/1.1");
       client.print("Host: www.bsob-leinenborn.lima-city.de");
       client.println("User-Agent: Arduino");
       client.println("Accept: text/html");
       client.println();
       delay(1000);
        
     } 
       else {
       Serial.println("keine Verbindung");
    } 
    client.stop();
    delay (5000);
    }


    Die PHP-Datei hab ich mal etwas geändert, dass sie eine Rückmeldung gibt, wenn sie mit dem Browser aufgerufen wird.
  11. www.bsob-leinenborn.lima-city.de als auch bsob-leinenborn.lima-city.de erzwingen eine Weiterleitung auf HTTPS.
    Du verbindest dich ja direkt über HTTP auf Port 80 -> unverschlüsselt.
    Wie geht dein HTTP-Client damit um? Vermutlich registriert er nur die Weiterleitung und macht nichts mehr.
    Damit kommen die Daten natürlich auch nicht ans PHP-Script und der Eintrag wird nicht in die DB geschrieben.

    Über www.bsob-leinenborn.lima-city.de zu gehen ist eh blöd, weil das SSL-Zertifikat nur für bsob-leinenborn.lima-city.de gilt.
  12. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    www.bsob-leinenborn.lima-city.de als auch bsob-leinenborn.lima-city.de erzwingen eine Weiterleitung auf HTTPS.
    Du verbindest dich ja direkt über HTTP auf Port 80 -> unverschlüsselt.
    Wie geht dein HTTP-Client damit um? Vermutlich registriert er nur die Weiterleitung und macht nichts mehr.
    Damit kommen die Daten natürlich auch nicht ans PHP-Script und der Eintrag wird nicht in die DB geschrieben.


    Also, ich stell mir auch vor, dass das Problem nicht bei meiner PHP-Datei liegt und auch nicht im Arduino-Sketch. Was du schreibst kommt mir einleuchtend vor. Ich weiß aber nicht, wie ich damit umgehen soll. Dafür sind meine Kenntnisse etwas zu dürftig.

    Was meinst du mit
    Über www.bsob-leinenborn.lima-city.de zu gehen ist eh blöd, weil das SSL-Zertifikat nur für bsob-leinenborn.lima-city.de gilt.

    Wie kann ich sonst einsteigen?
  13. Ich weiß je nicht ob du über eine eigene .htaccess oder die Möglichkeit in der Verwaltung nutzt. Über eine eigene .htaccess kannst du natürlich zum testen eine Ausnahme für die N.php festlegen.

    Um das Problem der SSL-Warnung zu umgehen nutzt du einfach "bsob-leinenborn.lima-city.de" und nicht
    www.bsob-leinenborn.lima-city.de

    Edit: Im Endeffekt macht es natürlich Sinn SSL zu nutzen. Du solltest im Arduino auch mal schauen wie du SSL-Verbindungen herstellst.

    Beitrag zuletzt geändert: 23.6.2016 14:04:28 von muellerlukas
  14. Zu dem geposteten Code:

    Stimmt, du hast noch das Host-Feld ergänzt. Das hatte ich vergessen, ist aber ebenfalls essenziell.
    Dann solltest du noch in den Zeilen 25 und 26 das "print" durch "println" ersetzen.

    Hier nochmal der ganze Code:
    #include <SPI.h>
    #include <Ethernet.h>
    
    byte mac[] = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 };
    char server[]="www.bsob-leinenborn.lima-city.de";
    IPAddress ip(192,168,2,199);
    EthernetClient client;
    
    void setup() {
    Serial.begin(9600);
    Ethernet.begin(mac,ip);
    delay(1000);
    }
    
    void loop() {
    
      Serial.println();
      Serial.println("Verbindung aufbauen...");
    
     int x = client.connect(server,80);
     Serial.println(x);
     if (x > 0) {
       Serial.print ("connected to ");
       Serial.println (server);
       client.println("GET /N.php?T=65&D=565&F=78&H=666 HTTP/1.1");
       client.println("Host: www.bsob-leinenborn.lima-city.de");
       client.println("User-Agent: Arduino");
       client.println("Accept: text/html");
       client.println();
       delay(1000);
        
     } 
       else {
       Serial.println("keine Verbindung");
    } 
    client.stop();
    delay (5000);
    }

    Und zu dem Thema SSL:
    Ich empfehle dir, wie auch schon muellerlukas meinte, den Request vorerst (zum Testen) unverschlüsselt über HTTP zum Laufen zu bringen. Danach kannst du immernoch zu HTTPS wechseln.
    Das Problem mit dem "www" vor der Domain wird dann wichtig, sobald du auf HTTPS umsteigst.
  15. Noch eine kleine Anmerkung:
    Wenn du HTTPS verwendest, musst du natürlich noch den Port von 80 auf 443 ändern.
  16. test42test schrieb:
    Noch eine kleine Anmerkung:
    Wenn du HTTPS verwendest, musst du natürlich noch den Port von 80 auf 443 ändern.

    Nicht nur das, er muss natürlich auch die Kommunikation über SSL abwickeln.
    Was er aktuell ist macht ist eine einfache Verbindung zum Server und die Header für eine HTTP-Post-Anfrage zu senden. Nix weiter. Port auf 443 zu ändern wird zwar eine Verbindung zum SSL-fähigen Server ermöglichen aber keine Kommunikation.

    Die ersten Treffer, die Google dazu ausspuckt ist: Nicht wirklich möglich. Du wirst also wohl um Plain HTTP nicht rumkommen.
    http://forum.arduino.cc/index.php?topic=17540.0
  17. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Datensicherheit spielt hier keine Rolle. Was ich mache, ist nur Spielerei. Kann man bei lima-city http-Übertragung einstellen? Ich hab nichts gefunden. Wenn das nicht geht, muss ich mir wohl einen anderen Webspacelieferanten suchen.
  18. Genau genommen musst du explizit HTTPS irgendwo eingestellt haben.
    Entweder hier https://www.lima-city.de/usercp/websites oder du hast es mit einer .htaccess auf deinem Webspace konfiguriert.
  19. Autor dieses Themas

    bsob-leinenborn

    bsob-leinenborn hat kostenlosen Webspace.

    Heureka!! rief der alte Grieche.
    Hinter meiner Domaine war ein kleines grünes Schloss, das muss ich irgendwann mal unbewußt von schwar/offen nach grün/geschlossen geclickt haben. Wieder nach schwarz geclickt - und schon laufen die Daten in der DB ein.

    vielen Dank nochmal allen !
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!