ESP 8266 Daten senden an Pi DB

  • Hallo an alle,


    mein ESP 8266 soll die Daten per Wlan an den Pi senden. Dieser verfügt über ein PostgreSql Datenbank. Die übermittelten Werte sollen in die Datenbank gespeichert werden,


    hierzu sammelt ein MCP3008 kräftig Daten.


    Leider bekomme ich die TCP Verbindung nicht hin! Ich erhalte stets "connection failed"


    IP des Host ist richtig. Laut einer Doku soll der Port 5555 genutzt werden. Ist der beim pi zu?


  • Moin tutter,


    schau dir in der Arduino Ide die Beispiele für den ESP8266 an. Ins besondere PostHTTPClient.ino.


    Das ist einfacher als hier alles zu schreiben.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Post by Hofei ().

    This post was deleted by the author themselves ().
  • client.print(String("GET htp://192.68.178.29/postgre-php?")+

    Bist Du sicher, dass hier nicht http:// stehen sollte? Mit einem t habe ich das noch nie gesehen...


    Wobei, wenn Du tatsächlich nur "connection failed" erhältst, kommst Du gar nicht so weit.


    Leider kenne ich diese "PostgreSql" Datenbank nicht - aber die lauscht tatsächlich auf Port 5555 nach den TCP Daten? Keine hilfreiche (Fehler)meldung auf Seite des PI?

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

    Edited 2 times, last by VeryPrivat: Tippfehler ; statt : bei HTTP (nach Hinweis durch WaldiBVB) ().

  • Post by WaldiBVB ().

    This post was deleted by the author themselves: doppelt und ich brauche Kaffee ().
  • Post by WaldiBVB ().

    This post was deleted by the author themselves ().
  • GET htp://192.68.178.29/postgre-php?

    Außer dem t fehlt da wohl auch noch eine 1 für eine vollständige 168

  • erstmal vielen Dank euch allen. Leider ist es heute schon zu spät für mich, deswegen schau ich mir das erst morgen an.

  • Ok ich habe das Skript heute doch noch mal mir angeschaut. Ich konnte dank eurer Hilfe noch diverse Fehler ausbauen.


    Nun erhalte ich aber ">>> Client Timeout !".


    Der SQL Befehl funktioniert den konnte ich testen. Was kann ich nun noch testen? An was kann es liegen?

  • Schön, dass Du einen Schritt weiter bist. Aufgrund Deiner Erfahrung hier im Forum (143 Beiträge) sollte es eigentlich selbstverständlich sein, dass wir nur raten können, solange wir nicht wissen, was Du genau machst. Es wäre also sehr hilfreich, wenn Du die Änderungen oder den aktuellen Code von dem Du "sprichst" postest...
    Da sich vermutlich die Meisten nicht so intensiv wie Du mit dem Thema beschäftigt haben, wäre es auch hilfreich, wenn Du uns die Quelle auf Basis deren Du Deinen Code gemacht hast nennen könntest.

    Wie testest Du den SQL Befehl? Welchen "Testbefehl" hast Du verwendet?

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • VeryPrivat da hast du natürlich recht!


    Wie ich das testen soll habe ich mich am Anfang auch gefragt. Deswegen habe ich erst einmal das getestet was ich testen kann. Deswegen habe ich einen php Aufruf mit $_GET gemacht zb: http://192.168.178.29/postgre.php?temperatur=34&humidity=45 Danach habe ich geschaut ob dies in der Datenbank ankam.


    Ja das tat es. Somit war es möglich Daten in Datenbank zu schreiben.


    Nun musste es ja an dem Skript vom ESP liegen.

    Hier überlegte ich mir die ganze Zeit warum der ESP an den Port 5555 oder 5432 senden soll. 5555 ist ein Port den der Pi nicht kennt! und 5432 (Postgre) würde nur etwas bringen wenn ich direkt in die DB "ballern" könnte. Da ich das aber nicht kann und den Umweg über HTTP machen muss, muss es doch ein HTTP-Port sein?!.

    Da ich in solchen Themen nicht so tief in Thema bin, half nur "Weiterbildung" und sie da es muss Port 80 sein.


    Noch mal vielen Dank an die vielen guten Ideen und Hinweise!


    Ein Frage hätte ich noch. Ich würde gern 60 Sekunden lang die Werte sammeln (vielleicht in einem Array?) und im Anschluss nur die Min, Max und Durchschnittswert hochladen. Also jede Minute, pro gemessenen Wert, jeweils Min, Max und average.


    Gibt es eine Möglichkeit dafür? Ist das zu viel für den kleinen ESP?



    Somit ergibt sich:


    PHP:



    ESP:


    Edited once, last by tutter ().

  • tutter Einfach so Zeichenketten, die man von aussen übers Netz bekommt, in eine SQL-Anfrage einzusetzen ist eine ganz schlechte Idee.

    “The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.” — Nathaniel Borenstein

  • __blackjack__ : Ja das ist ein erster Schritt, in die richtige Richtung. Sicher kann ich das noch auf $_Post umstellen. Im nächsten Schritt würde ich gern etwas mit API´s machen. Aber es läuft erstmal und das war das erste Ziel. Außerdem kann ich beruhigt sein, da es in einem separaten Netz läuft das nur für so ein Spielkram gemacht ist.

    Aber danke für den Hinweis!

  • Ich würde gern 60 Sekunden lang die Werte sammeln (vielleicht in einem Array?) und im Anschluss nur die Min, Max und Durchschnittswert hochladen. Also jede Minute, pro gemessenen Wert, jeweils Min, Max und average

    Das ist eigentlich relativ einfach. Dazu brauchst Du kein Array.:

    • Für den Mittelwert addiere einfach alle Werte und dividiere nachdem du die gewünschte Anzahl erreicht hast durch die Anzahl. Achte beim Addieren darauf, dass die Summiervariable nicht überläuft.
    • Max: Initialisiere eine Variable MAX mit 0. Ist der aktuelle Wert höher als der in der MAX Variable, dann schreibe diesen Wert in die MAX Variable. Nach der gewünschten Anzahl von Werten steht der Wert drinnen, der das Maximum war.
    • Min: Analog zu MAX halt nur mit einem größeren Wert als das mögliche Maximum initialisieren und den jeweils kleineren Wert in die Variable übernehmen.

    Gibt es eine Möglichkeit dafür? Ist das zu viel für den kleinen ESP?

    Wenn Du Dich ausgiebig damit beschäftigst, wirst Du Dich noch wundern, was man mit einem ESP alles machen kann.

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Hier überlegte ich mir die ganze Zeit warum der ESP an den Port 5555 oder 5432 senden soll. 5555 ist ein Port den der Pi nicht kennt! und 5432 (Postgre) würde nur etwas bringen wenn ich direkt in die DB "ballern" könnte. Da ich das aber nicht kann und den Umweg über HTTP machen muss, muss es doch ein HTTP-Port sein?!.

    Wenn du das so machst muß es natürlich der http-Port (80) sein. Ich nutze nur noch den ESP als Sensor. Inzwischen spare ich mir das Scripten und nutze ESPeasy. Solltest du dir mal anschauen.