Messwerte eines RPis mittels eines anderen RPis auslesen und visualisieren

  • Hallo zusammen,

    für folgende Problemstellung bräuchte ich mal einen Denkanstoß:

    Im Rahmen meines noch laufenden Projekts "YAWST - yet another weather station" dient ein Raspberry Pi 4 als Wetterstation.

    Dieser misst alle 5 min Temperatur, Luftfeuchte und Luftdruck (das zugrundeliegende Python-Programm wird mittels cronjob aufgerufen). Die Messwerte werden lokal mittels RRDtool in einem Round-Robin-Archiv gespeichert (aus dem RRDtool heraus werden dann diverse Diagramme erzeugt).

    Neben der Messwerterfassung alle 5 min wird in dem Python-Programm auch jedesmal eine statische html-Datei ("index.html") erzeugt, welche über einen lokalen Webserver im lokalen Netzwerk aufrufbar ist. Dort sind dann alle aktuellen Messwerte zusammengefasst, inkl. Verlinkungen auf die Diagramme aus dem RRDtool.

    Das läuft alles fehlerfrei, zuverlässig und gut.

    Nun zu meinem Problem:

    An meinem anderen RPi 400 auf meinem Schreibtisch ist ein I²C-LC-Display angeschlossen.

    Auf diesem Display würde ich gerne auch alle 5 min die neusten Wetterdaten ausgeben lassen, die der Wetterstation-RPi4 (YAWST) misst. Quasi immer das aktuelle Wetter im Blick, ohne den Monitor einzuschalten und die Webseite aufzurufen.

    Die (Text-)Ausgabe auf dem Display an sich stellt kein Problem dar, das bekomme ich hin.

    Nur wie bekomme ich die Messwerte von einem RPi auf den anderen RPi ? Über welches Interface kann man gehen bzw. wie würde man den zyklischen Datenaustausch zwischen zwei RPis am besten konzeptionell angehen ?

    Ich bin gespannt auf Eure Ideen.

  • Messwerte eines RPis mittels eines anderen RPis auslesen und visualisieren? Schau mal ob du hier fündig wirst!

  • Die Messwerte werden lokal mittels RRDtool in einem Round-Robin-Archiv gespeichert

    Ich wuerde empfehlen die Sensordatenpublizierung von der Sensordatenverarbeitung bzw -darstellung ueber MQTT zu trennen.

    D.h. Deine Sensoren schicken ihre Daten einfach an einen MQTT Server (mosquitto). Ein jeder Client der die Daten nutzen will subscribed sich an die Sensortopics und kann sie dann entweder grafisch darstellen oder textuell oder wie auch immer verarbeiten. Smartphone Apps kann man z.B. auch sehr schoen nutzen um die Daten anzuzeigen.

    Das bedeutet allerdings dass Du bei Dir etwas umbauen bzw -programmieren musst. Du musst die Daten einmal per MQTT zuscriben um sie in Deinem rrd darstellen zu koennen. Dann subscribest Du dieselben Daten von Deiner zweiten Raspi und stellst sie dar. Mit MQTT bist Du absolut frei und kannst beliebige weitere Clients mit den Sensordaten versorgen. Das Verteilen der Sensordaten erledigt MQTT fuer Dich.

  • Du baust eine .html-Seite, die aus dem Netzwerk abrufbar ist. Dein RPi 400 ist im selben Netzwerk?

    Generiere zusätzlich zur .html noch eine .csv, in der die jeweils aktuellen Rohdaten stehen, leg sie neben die .html und rufe sie regelmäßig über HTTP ab. Zur Synchronisierung zwischen den Geräten kannst Du den Zeitstempel in die .csv legen und damit die Abrufe so timen, dass Du immer halbwegs aktuelle Daten hast.

  • Du baust eine .html-Seite, die aus dem Netzwerk abrufbar ist. Dein RPi 400 ist im selben Netzwerk?

    Generiere zusätzlich zur .html noch eine .csv, in der die jeweils aktuellen Rohdaten stehen, leg sie neben die .html und rufe sie regelmäßig über HTTP ab. Zur Synchronisierung zwischen den Geräten kannst Du den Zeitstempel in die .csv legen und damit die Abrufe so timen, dass Du immer halbwegs aktuelle Daten hast.

    Diesen Ansatz werde ich erst einmal verfolgen. Sicher nicht der eleganteste Ansatz, aber das sollte ohne großen Aufwand und mit meinen Programmierkenntnissen einigermaßen machbar sein.
    Die Ausgabe der aktuellen Werte in eine csv-Datei funktioniert schon, diese ist auch im lokalen Netz abrufbar. Jetzt fehlt nur noch das Einlesen auf dem Zielrechner inkl. Verarbeitung und Visualisierung.

  • Ich weiß nicht, womit Du programmierst, aber für python3 habe ich gute Erfahrungen mit dem Modul csv gemacht. Gibt's sicher auch für python2.

    Nachtrag: Was die Eleganz angeht: Du benutzt eine ohnehin bestehende Server-Infrakstruktur, ein menschenlesbares und sehr triviales Dateiformat für den Transport und überlässt dem Client (bzw. den Clients, das dürfte innerhalb des Haushalts faktisch unbegrenzt skalierbar sein) Abruf und Interpretation. Mir persönlich wäre das wohl elegant genug. :)

    Achte übrigens bei den Schreibvorgängen auf das Medium, das Du beschreibst. Und bau vielleicht 2 *.csv-Dateien, eine mit lediglich den aktuellen Daten (oder den aktuellen und den vorherigen) und eines, in dem das gesamte Log steht. Wenn Du eh alle 5min schreibst, dann macht das zusätzliche Append den Braten auch nicht mehr fett, denke ich. :) Und logs sind nice, damit kann man irgendwann hübsche Graphen bauen. :)

  • Sicher nicht der eleganteste Ansatz, aber das sollte ohne großen Aufwand und mit meinen Programmierkenntnissen einigermaßen machbar sein.

    Eine Entkopplung von Datenlieferant und Datennutzer ueber MQTT ist sicherlich eleganter :)

    Du hast aber schon entsprechenden Programmieraufwand in Deine funktionierende Implementierung gesteckt und ob sich es lohnt das alles wieder umzumodeln ist fraglich. Solltest Du aber vorhaben noch weitere Clients auf die Sensordaten zugreifen und aufbereiten zu lassen wie z.B. von mehreren Handies machst Du Dir das Leben definitiv einfacher wenn Du auf MQTT umsteigst ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!