Schnelleres Plotten mit der Software RPi Monitor

Begonnen von Cr0n, 23 Januar 2017, 22:04:49

Vorheriges Thema - Nächstes Thema

Cr0n

Moin,

ich habe eine Konfigurationsdatei für "RPi-Monitor" klick geschrieben damit das Programm auf Daten von FHEM zurückgreifen kann, um diese dann später mit dessen schnelleren Plot-Engine plotten zu können. Konkret geht es mir um die Temperatur und Ventilposition von MAX!-Thermostaten, allerdings lässt sich das Vorgehen auf quasi alle plotbaren Werte in FHEM anwenden.

Die folgende Erklärung geht von einer FHEM-Installation mit aktiver sqlite Datenbank, aufgesetzt nach einer Anleitung in der FHEM Wiki, aus.

Grundsätzlich fängt alles mit dem dem Aufrufen eines Wertes aus einer sqlite Datenbank direkt aus der Kommandozeile heraus an:

sqlite3 /opt/fhem/fhem.db "SELECT VALUE FROM history WHERE READING='temperature' AND DEVICE='MAX_13fabc' ORDER BY TIMESTAMP DESC LIMIT 1"

Durch diesen Beispielcode wird durch 'ORDER BY TIMESTAMP DESC LIMIT 1' der zeitlich Letzte 'value'-Eintrag aus dem 'reading' "temperature" für das FHEM-Device "MAX_13fabc" aus der Tabelle "history" aus der sql Datenbank "fhem.db" gelesen und ausgeben.
Das ganze ist nun eben der Befehl um sqlite Daten direkt in der Unix Kommandozeile auszugeben, muss dann also auch direkt in der Kommandozeile funktionieren.

Um diesen Befehl besser zu verstehen:
-> Im DbLog Wiki Artikel ist die SQL Tabellenstruktur gelistet
-> Hier kann z.B. die grundsätzlich Funktion dieser SQL-where-clauses nachgelesen werden.
-> im neuen Charting Frontend von FHEM können beim Erstellen neuer Plots (Charts -> Create new Charts) die Namen der gesuchten 'devices' und 'readings' gefunden werden.

Für RPi-Monitor habe ich dann im wesentlichen die schon vorhandene Konfiguration für einen dht11 Sensor genommen und verändert:

########################################################################
# Extract temperature for MAX!-Thermostates via FHEM sqlite3 database
#  Page: 2
#  Information               Status     Statistics
#  - Temperatur              - yes      - yes
#  - Ventilposition          - yes      - yes
#######################################################################
#
# Add new pages (number 2)
web.status.2.name=FHEM
web.statistics.2.name=FHEM

# Get dynamic data
dynamic.1.name=ist_Temperatur
dynamic.1.source=sqlite3 /opt/fhem/fhem.db "SELECT VALUE FROM history WHERE READING='temperature' AND DEVICE='MAX_13fabc' ORDER BY TIMESTAMP DESC LIMIT 1"
dynamic.1.regexp=(.*)
dynamic.1.postprocess=
dynamic.1.rrd=GAUGE
dynamic.1.interval=90

dynamic.2.name=soll_Temperatur
dynamic.2.source=sqlite3 /opt/fhem/fhem.db "SELECT VALUE FROM history WHERE READING='desiredTemperature' AND DEVICE='MAX_13fabc' ORDER BY TIMESTAMP DESC LIMIT 1"
dynamic.2.regexp=(.*)
dynamic.2.postprocess=
dynamic.2.rrd=GAUGE
dynamic.2.interval=90

dynamic.3.name=ventilposition
dynamic.3.source=sqlite3 /opt/fhem/fhem.db "SELECT VALUE FROM history WHERE READING='valveposition' AND DEVICE='MAX_13fabc' ORDER BY TIMESTAMP DESC LIMIT 1"
dynamic.3.regexp=(.*)
dynamic.3.postprocess=
dynamic.3.rrd=GAUGE
dynamic.3.interval=90

# Add a line of status in page number 2
web.status.2.content.1.name=Raumname
web.status.2.content.1.icon=cpu_temp.png
web.status.2.content.1.line.1="soll Temperatur: <b>"+data.soll_Temperatur+"&deg;C</b>"
web.status.2.content.1.line.2="ist Temperatur: <b>"+data.ist_Temperatur+"&deg;C</b>"
web.status.2.content.1.line.3="Ventilöffnung: <b>"+data.ventilposition+"%</b>"


# Add a statistic graph (with 2 curves suing separate scales) in page number 2
web.statistics.2.content.1.name=Raumname
web.statistics.2.content.1.graph.1=ist_Temperatur
web.statistics.2.content.1.graph.2=soll_Temperatur
web.statistics.2.content.1.graph.3=ventilposition
web.statistics.2.content.1.ds_graph_options.ist.label=ist (&deg;C)
web.statistics.2.content.1.ds_graph_options.soll.label=soll (&deg;C)
web.statistics.2.content.1.ds_graph_options.ventil.label=Ventilöffnung (%)
web.statistics.2.content.1.ds_graph_options.ventil.yaxis=2
web.statistics.2.content.1.graph_options.y2axis={ position: "right", min: 0, max: 100 }


Das ganze habe ich als /etc/rpimonitor/template/MAX.conf gespeichert und via

include=/etc/rpimonitor/template/MAX.conf

in /etc/rpimonitor/data.conf in RPi-Monitor eingebunden.

Wie RPi-Monitor grundsätzlich so funktioniert wird auf der Projektseite in einigen Artikeln und FAQs erklärt.
In der  data.conf Datei sind noch recht viele Erklärungen.

Wenn jemand Temperaturen von MAX!-Thermostate plotten möchte, muss er im wesentlichen nur den obigen Code nehmen und das 'device' verändern.

Um mehrere Plots einzubinden kann man entweder neue Seiten zu RPi-Monitor hinzufügen (vgl. die Zeilen unter "# Add new pages (number 2)") oder eben auf der Seite zu jedem Block neue Geräte hinzufügen. Im o.g. Beispiel also dann:

Um Daten zu loggen:
bei # Get dynamic data:
dynamic.4...
dynamic.6...
...

Um Daten auf der Übersichtsseite zu zeigen:
bei # Add a line of status in page number 2
web.status.2.content.2...
...

Um Plots zu generieren:
bei # Add a statistic graph (with 2 curves suing separate scales) in page number 2:
web.statistics.2.content.2...
...

LG!

ulobo60

hi Cr0n,

toller Beitrag! Sehr verständlich, excellente Erklärungen zu Details.
Um das Nachzubauen braucht man (fast) nur STRG+C/V. Okay, man muss noch die eigenen Device-Namen einsetzen  :)

Ich habe  (neben dem raspi, auf dem FHEM läuft) noch 4 raspis im Einsatz. 2 für KODI in 2 Wohnräumen und 2 zur Überwachung mit raspicam-Modul und mmal_motion zur Video-Aufzeichnung bei Bewegungserkennung.
Auf die KODI-Systeme kann ich ja RPi-Monitor nicht installieren, die sind für die weiter folgenden Überlegungen außen vor.
Für die übrigen 3 raspis (Haustür-cam, Carport-cam, FHEM) habe ich Friends-pages erstellt, die ich üblicherweise unter http://192.168.xxx.xxx:8888 aufrufen kann.

Frage:
In meiner FHEM Tablet-UI möchte ich gerne 1 Seite mit den Übersichtswerten für die aktuellen System-Daten der 3 raspis aufbauen.
Siehst Du eine Möglichkeit, dass ich diese einzelnen fertigen Info-Elemente aus RPi-Monitor in die FHEM Tablet-UI integrieren kann (vor allem die Plots, vielleicht auch die RPi-Icons) oder
würdest Du mir empfehlen, alle dafür benötigten Daten zusätzlich in FHEM zu loggen (benutze MySQL) und für FTUI einzeln neu aufzubauen?

3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI