MQTT und NodeRed empfange Daten in eine TXT-Datei schreiben.

  • Hallo zusammen,

    ich habe auf meinem Raspberry Pi 3+ mittlerweile MQTT und NodeRed eingerichtet.

    Auch habe ich Daten vom ESP 8266 D1 Mini zum Broker gesendet.

    Soweit so gut..


    Hier meine Frage:

    Kann ich die empfangenen Daten mit MQTT auf einer TXT-Datei die im Internet z.B. http://www.beispiel.de liegt speichern, bzw. übertragen.

    Ich dachte an die Http-Request die MQTT hat.


    Ich bin Neuling auf dem Gebiet und es ist einfach nur eine Idee.

    Vielleicht gibt es auch Infos hierzu.

    Gibt es eine Erklärung irgendwo zu den Funktionen der einzelnen Nodes?


    Gruß Wafud

  • Wafud

    Changed the title of the thread from “MQTT und NodeRed empfange Daten in ein TXT-Datei schreiben.” to “MQTT und NodeRed empfange Daten in eine TXT-Datei schreiben.”.
  • Zum Levelset: Beim mir subscribed sich ein NR auf den MQTT Broker, wertet die Daten von Sensoren aus und steuert damit Geraete @home. Auch werden die Daten in eine InfluxDB via Telegraf geschoben damit ich sie via Grafana auswerten kann.


    Vielleicht erklaerst Du uns was Du eigentlich erreichen willst. Dann verstehen wird Dich besser und finden u.U. auch einen anderen und besseren Weg Dein Problem zu loesen ;)

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert =O Bei mir tut das raspiBackup automatisch ;)

  • Zum Levelset: Beim mir subscribed sich ein NR auf den MQTT Broker, wertet die Daten von Sensoren aus und steuert damit Geraete @home. Auch werden die Daten in eine InfluxDB via Telegraf geschoben damit ich sie via Grafana auswerten kann.


    Vielleicht erklaerst Du uns was Du eigentlich erreichen willst. Dann verstehen wird Dich besser und finden u.U. auch einen anderen und besseren Weg Dein Problem zu loesen ;)

    Hier nochmals: Ich bekomme meine Daten von einem ESP8266 mit BME280 Sensor zu mousquitto gesendet. Temperatur, Luftfeuchte und Luftdruck.

    Diese Daten habe ich mir mit NodeRed auf meinem Handy anzeigen lassen oder im Browser auf meinem PC. MQTT und NodeRed laufen auf meinem Raspberry Pi.


    Ich habe auch noch eine kleine Wetterstation im Garten bei der ich auch Temperatur, Luftfeuchte und Luftdruck auslese.

    Allerdings läuft das NICHT über MQTT. Hier sende ich die Daten mit einem HTTP/Get Request an ein PHP-Scriipt auf meinen Internet Sever.

    Dieses PHP-Script schreib die Daten in eine TXT-Datei die ich dann auswerten oder sonst wie verarbeiten kann.

    Ich könnte auch in eine CVS-Datei schreiben, käme aufs gleiche raus.

    Ich will keine Datenbank anlegen, die TXT Datei reicht vollkommen aus.


    Meine Überlegungen sind also, die Daten über MQTT laufen zu lassen und dann in diese TXT-Datei zu schreiben und auch bei Bedarf wieder aus zu lesen.


    Ich hoffe ich habe das jetzt richtig ausgedrückt und ihr wisst was ich meine ?


    Gruß Wafud

  • Meine Überlegungen sind also, die Daten über MQTT laufen zu lassen

    D.h. Du moechtest Die Daten die bislang direkt auf Deinen Internetserver geschrieben werden per MQTT an Deinen Broker senden? Ist definitiv eine gute Entscheidung. Dann hast Du alle Daten zentral ueber den Broker zugreifbar und kannst von beliebiger Quelle per MQTT drauf zugreifen bzw subscriben.

    und dann in diese TXT-Datei zu schreiben und auch bei Bedarf wieder aus zu lesen.

    Mit Nodered kann man auch Dateien lesen und schreiben. csv wird auch unterstuetzt. Damit solltest Du alles haben. Oder muss die Datei auf Deinem Server liegen?

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert =O Bei mir tut das raspiBackup automatisch ;)

  • Installier mal die mosquitto-clients:

    Code
    sudo apt-get install mosquitto-clients

    Dann finde heraus, auf welchem MQTT Topic die Daten Deines Interesses kommen, also Z.B.

    "DEVICE/TEMPERATUR", ich nehme an, der MQTT-Broker läuft auf demselben Pi:


    Dann verwende mal


    Code
    mosquitto_sub -t "DEVICE/TEMPERATUR" -h localhost


    Und letzteres sollte nun Deine Daten auf die Konsole asgeben. Das kannst Du ganz einfach in eine Datei umleiten:

    Code
    mosquitto_sub -t "DEVICE/TEMPERATUR" -h localhost >> Daten.txt


    Wenn Du mehrere Daten vom MQTT als verschiedene Spalten in eine Datei schreiben möchtest, dann wird es aufwaendiger. Entweder hinterher meherer einzeldateien zu einer Tabelle zusammenfügen, oder gleich ein dediziertes Script für die MQTT nach-Datei-Umleitung schreiben. Dafür kannst Du python verwenden, ich nehme dafür ein C-Prograemmchen (aus der Vorlage von MQTT-Hyperdash rule engines). Es geht aber auch mit BASIC (mqtt version von X11-Basic) oder mit einfachen Shell-Scripten (

    Code
    A=`mosquitto_sub -C  -t "DEVICE/TEMPERATUR" -h localhost`
    B=`mosquitto_sub -C  -t "DEVICE/TEMPERATUR2" -h localhost`
    ...


    Mag als Anregung dienen....

  • D.h. Du moechtest Die Daten die bislang direkt auf Deinen Internetserver geschrieben werden per MQTT an Deinen Broker senden? Ist definitiv eine gute Entscheidung. Dann hast Du alle Daten zentral ueber den Broker zugreifbar und kannst von beliebiger Quelle per MQTT drauf zugreifen bzw subscriben.

    Mit Nodered kann man auch Dateien lesen und schreiben. csv wird auch unterstuetzt. Damit solltest Du alles haben. Oder muss die Datei auf Deinem Server liegen?

    Die Datei in die ich schreiben , bzw. lesen will liegt nicht auf dem Raspi, sie liegt im Internet auf dem Server meiner Homepage.

    Die URL zur Datei wäre z.B. http://www.beispiel.de/daten.txt oder daten.csv


    Wenn ich die Datei im Browser aufrufe wird sie mir gleich angezeigt. Ich will aber das ich sie über den Broker in NodeRed anzeigen lassen und auch darauf schreiben kann um neue Daten von den Sensoren ein zu tragen.

  • Das ist was ich jetzt soweit verstehe: Du benutzt also eine Datei die auf einem Webserver liegt als einfache Datenbank und willst von ihr per MQTT lesen sowie per MQTT updaten.


    Warum die Daten auf einem Webservern liegen weisst nur Du. Einfacher waere es sie laegen auf Deiner Raspi. Auch weisst nur Du warum Du eine Datei und keine Datenbank benutzt . Auch dadurch wuerde alles einfacher werden.


    ich denke Du wirst nicht umhin kommen die Datei per HTTP GET im NodeRed lokal zu spiegeln und zu updaten. Die Frage ist wie Dateiupdates gehandhabt werden sollen: Sofort die lokale Kopie updaten und per HTTP POST uploaden oder erst sammeln und einmal pro Tag updaten? Wie ist es mit parallelen Updates der Datei? Koennen die stattfinden? Dann wird es noch komplizierter :conf:

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert =O Bei mir tut das raspiBackup automatisch ;)

    Edited once, last by framp ().

  • Das ist was ich jetzt soweit verstehe: Du benutzt also eine Datei die auf einem Webserver liegt als einfache Datenbank und willst von ihr per MQTT lesen sowie per MQTT updaten.

    Genau so soll es sein!


    Quote

    Warum die Daten auf einem Webservern liegen weisst nur Du. Einfacher waere es sie laegen auf Deiner Raspi. Auch weisst nur Du warum Du eine Datei und keine Datenbank benutzt . Auch dadurch wuerde alles einfacher werden.

    Ich will nichts auf dem Raspi speichern, das viele lesen und schreiben auf die SD-Karte ist nicht gerade vorteilhaft was die Haltbarkeit betrifft.

    Mir reicht eine einfach Text oder CSV-Datei vollkommen aus, warum da eine Datenbank für 3 Werte ?

    Quote

    ich denke Du wirst nicht umhin kommen die Datei per HTTP GET im NodeRed lokal zu spiegeln und zu updaten. Die Frage ist wie Dateiupdates gehandhabt werden sollen: Sofort die lokale Kopie updaten und per HTTP POST uploaden oder erst sammeln und einmal pro Tag updaten? Wie ist es mit parallelen Updates der Datei? Koennen die stattfinden? Dann wird es noch komplizierter :conf:

    Wie ich oben schon schrieb sendet der ESP8266 die 3 Werte per HTTP GET zum Server, dort schreibt sie ein PHP-Script in die Text-Datei.


    Die Frage ist doch nur geht das mit MQTT auch?

    Kann ich damit die Werte vom ESP855 im Broker empfangen und dann weiter in die Text-Datei schreiben?

    (Werte vom ESP855 im Broker empfangen geht und habe ich auch schon getestet.)


    Die Werte werden alle 15 Min gesendet und aktualisiert.

    Diese Werte also nur noch in eine TXT-Datei schreiben die auf dem Sever liegt.


    Ich brauche keine lokale Kopie und muss auch auf dem Raspi nichts updaten.


    Warum muss man alles so kompliziert machen wenn der einfache Weg vollkommen ausreicht.

  • Die Frage ist doch nur geht das mit MQTT auch?

    Mit MQTT kannst Du keinen HTTP GET zum Lesen und keine HTTP POST zum Schreiben ausfuehren.

    Mir reicht eine einfach Text oder CSV-Datei vollkommen aus, warum da eine Datenbank für 3 Werte ?

    Ok. Verstanden. Aber dadurch dass die Daten auf Deinem Webserver liegen kommst Du nicht per MQTT dran :( Du musst Dir irgendwas schreiben was die Daten vom Server liest und per MQTT published. Weiterhin etwas was auf einen Topic im MQTT subscribed und die Daten auf dem Server ablegt.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert =O Bei mir tut das raspiBackup automatisch ;)

  • Hast Du denn cloud-Zugriff auf den Server, der deine Web-Seite hostet? Dann könntest Du dort einen MQTT-broker installieren und ein kleines skript laufen lassen, was MQTT-Messages in eine Datei schreibt.

  • Mit MQTT kannst Du keinen HTTP GET zum Lesen und keine HTTP POST zum Schreiben ausfuehren.

    Ok. Verstanden. Aber dadurch dass die Daten auf Deinem Webserver liegen kommst Du nicht per MQTT dran :( Du musst Dir irgendwas schreiben was die Daten vom Server liest und per MQTT published. Weiterhin etwas was auf einen Topic im MQTT subscribed und die Daten auf dem Server ablegt.

    Das ist doch mal eine klare Aussage: Mit MQTT geht es nicht!


    Dann muss ich es wie bisher über PHP machen.


    Vielen Dank

  • Hast Du denn cloud-Zugriff auf den Server, der deine Web-Seite hostet? Dann könntest Du dort einen MQTT-broker installieren und ein kleines skript laufen lassen, was MQTT-Messages in eine Datei schreibt.

    Ich verstehe nich ganz was du mit "cloud-Zugriff auf den Server," meinst.

    Ich habe ein FTP-Zugriff um meine Daten hoch bzw. runter zu laden.

  • ch verstehe nich ganz was du mit "cloud-Zugriff auf den Server," meinst.

    Er meint sicherlich dass Du einen unmanaged Server hast auf dem Du mosquitto installieren kannst. Reiner FTP Zugriff reicht dazu nicht. Das waere aber sicherlich eine Moeglichkeit dass Du MQTT nutzen kannst.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert =O Bei mir tut das raspiBackup automatisch ;)