Springe zum Inhalt

Überwachung der CPU-Temperatur in OpenHab

OpenHab kennt Things, Channels, und Items. Dabei sind Things Dinge aus der "echten" Welt, die ihre Funktionen und Daten als eigenständige Channels  bereitstellen, und Items abstrakte Funktionen/Funktionsergebnisse (in unserem Fall eine Temperatur). 

Zur Abfrage der Temperatur wird ein Shell-Skript verwendet. Dazu muss zunächst das Exec Binding installiert werden (unter Add-ons > Bindings). Zusätzlich noch  die JSONPath Tranformation (unter Add-ons > Tranfomations).  Anschließend wird auf dem Raspberry ein Skript erstellt um die Temperatur abzufragen. Das Ergebnis gebe ich als JSON zurück, damit ich es später noch erweitern kann.

/etc/openhab2/scripts/pi_health.sh

!/bin/bash
TEMPIN=$(</sys/class/thermal/thermal_zone0/temp)
TEMPOUT=$(echo "scale=2;$TEMPIN/1000" | bc)
echo "{\"cpu\": $TEMPOUT }"

Dann werden die Rechte angepasst sudo chmod 755 ./pi_health.sh und geprüft ob unser openhab User das Ganze auch ausführen darf sudo -u openhab ./pi_health.sh .

Funktioniert schon mal. Als nächstens wird das Thing dazu angelegt. Just in diesem Moment besinnte ich mich darauf, dass openhabian automatisch Netzwerkfreigaben bei der Installation anlegt. Und dass es eine OpenHab Erweiterung für VS Code gibt. Meine Empfehlung ist also, damit weiterzuarbeiten. 

Nun zu den weiteren Dateien:

pi_health.things

Thing exec:command:pi_health "Mein Pi" [command="bash /etc/openhab2/scripts/pi_health.sh", interval=10, transform="REGEX((.*?))"]

pi_health.items

// JSONPATH($.cpu) funzt nicht im Control Panel
String Health_Json "Pi Gesundheit [%s]" {channel="exec:command:pi_health:output"}
// @see https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax
DateTime Health_LastExecution "Zuletzt ausgeführt [%1$td.%1$tm. %1$tH:%1$tM:%1$tS]" {channel="exec:command:pi_health:lastexecution"}
// Items ohne verknüpften Channel tauchen im Control Panel nicht auf.
// Sie müssen explizit in einer Sitemap verwendet werden !
Number Health_CPU_Temperature "CPU Temperatur [%.1f °C]"

Den Json-String parse ich mit einer Regel:

pi_health.rules

rule "Health-JSON zu Items"
when
Item Health_Json changed
then
val cpu = transform("JSONPATH", "$.cpu", Health_Json.state.toString)
Health_CPU_Temperature.postUpdate( cpu )
end

Zu beachten ist dabei, dass Items ohne verknüpften Channel nicht im Control Panel auftauchen. Wir müssen diese Items zu einer Sitemap hinzufügen um sie sehen zu können.

test.sitemap

sitemap test label="Meine Testsite" {
Frame {
Text label="Pi Gesundheit" icon="temperature" {
Text item=Health_CPU_Temperature label="CPU"
Text item=Health_LastExecution label="Status von"
}
}
}

Und fertig. OpenHab lädt die Konfigurationsdateien automatisch neu wenn sie geändert werden. Eventuelle Fehlermeldungen kann man in den Logdateien unter /var/log/openhab2 finden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.