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.

6 Gedanken zu „Überwachung der CPU-Temperatur in OpenHab

  1. Ronny Holzmann

    Hallo.
    Die Anleitung ist super aber ich hänge fest am Rechte anpassen.
    Sobald ich über SSH auf den Taspberry zugreifen und den oben genannten Befehl eingeben, kommt irgend eine Meldung das es eine Directory ist.
    Komme auch nicht über SSH in den Scripte Ordner, kann diesen nur über Vidusl Studio erreichen, da kann ich aber keinen Sudu Befehl ausführen.
    Bitte um Anleitung.

    MfG, Ronny

    Antworten
    1. schmidhuber

      Hallo,
      also da bräuchte ich dann schon die Info was du genau eingegeben hast und die Fehlermeldung im Wortlaut.

      Antworten
  2. Alexander Pani

    2 kleine Fehler sind mir aufgefallen!

    Beim script muss mann "#! /bin/bash" anführen - sonst klappts nicht

    Und es muss das Addon Binding "RegEx Transformation" installiert sein.

    Antworten
    1. schmidhuber

      Danke für das Feedback. Daran, dass ich das Addon installieren musste kann ich mich nicht mehr erinnern 🙂

      Antworten
  3. Tilo

    Sag mal, was mache ich den mit:

    [WARN ] [ng.exec.internal.handler.ExecHandler] - Tried to execute 'bash /etc/openhab2/scripts/pi_health.sh', but it is not contained in whitelist.

    Antworten
  4. Nico

    Hallo,
    ich kam vor ein paar Tagen auch auf die Idee mir die Temperaturen meines Raspi Clusters in openHAB anzeigen zu lassen, scheitere aber wie so viele an der visuellen Ausgabe in openHAB.
    Was ich will: Zeige mir die Temperaturen in meiner Sitemap.

    Was ich versucht habe: Ich habe im Exec Binding ein Thing angelegt das den "vcgencmd measure_temp" Befehl ausführt und mir den Wert in folgender REGEX((.*)) Transformation ausgeben soll.

    Was ich bekomme ist ein 255 im Rückgabestatus oder wenn ich über vcgencmd measure_temp | sed 's/temp=//' | sed "s/'C//" abfrage eine 0.

    Welche Channels habe ich verknüpft?: "Letzte Ausführung", "Ausführung" und Rückgabestatus.

    Was habe ich installiert: openHAB 2.5.9, Buster, Exec Binding und RegEx Transformation.
    Mein nicht Programmierer Hirn sagt mir dass das eigentlich reichen sollte umzu bekommen was ich will aber es reicht anscheinend nicht.

    Kann mir hier einer noch weiterhelfen, da ich bald verzweifle? Ich habe bestimmt ein Dutzend Anleitungen gelesen aber keine bringts.

    Die Lösung sollte über die Paper UI konfigurierbar sein und ich will am Ende nur die Temperatur sehen.

    Habt ihr eine eventuell noch einen Geistesblitz für mich?

    Danke und Gruß

    Antworten

Schreibe einen Kommentar zu Tilo Antworten abbrechen

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