, , , , ,

Quicktipp – Temperatur auf allen Homematic Plattformen (außer CCU2) in Systemvariable schreiben, überwachen und anzeigen

Weil in den letzten Tagen das Thema „Temperatur Überwachung der HomeMatic-Zentrale“ wieder häufiger angefragt wurde, möchte ich euch hier ein wirklich einfaches Skript vorstellen, welches im Forum bereits von Alex in Bezug auf eine piVCCU Umgebung erklärt wurde und auch in einem Kommentar von Herbert Grebe hier im Blog. Vielen Dank für diese Anregung und dieser kurze Artikel soll allen Anwendern helfen, die Temperatur auslesen zu können und in eine Systemvariable zu schreiben. Anschließend kann man sich diese Temperatur auf dem WebUI Startbildschirm anzeigen lassen, oder auch via PUSH Nachricht informieren lassen, wenn der Schwellwert überschritten wird. Das Schöne an diesem Skript ist, das es auf einer CCU3, einer piVCCU- oder RaspberryMatic Installation auf einem Raspberry Pi x oder auf einem Tinker Board funktioniert. Lediglich auf der „alten“ CCU2 läuft der Befehl ins Leere.

Umsetzung in drei Schritten

  • Systemvariable anlegen

Als ersten Schritt ist über die WebUi eine Systemvariable vom Typ Zahl mit dem Minimalwert: 0 und dem Maximalwert: 100 anzulegen. Als Maßeinheit ist °C einzutragen. Im nachfolgenden Screenshot seht ihr eine solche Systemvariable:

  • WebUI Programm erstellen

Im zweiten Schritt müsst ihr ein WebUI Programm erstellen. In meinem Beispiel wird dieses Program periodisch alles 10 Minuten ausgeführt. Ihr könnt natürlich auch einen anderen Interval wählen. Um es einfach zu machen, verzichte ich auf den Einsatz des AddOns CUxD. Hier seht ihr das entsprechende Programm:

  • Skript zum Kopieren

Im Letzten Schritt müsst ihr das Skript kopieren und in das WebUI Programm einfügen, damit ihr es nicht abtippen müsst, findet ihr es nachfolgend:

! CPU-Temperatur auslesen und in eine Systemvariable schreiben
string stdout;
string stderr;
system.Exec("cat /sys/class/thermal/thermal_zone0/temp", &stdout, &strerr);
var ccutemperatur = stdout.ToFloat() / 1000;
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Temperatur Raspberry Pi 4").State(ccutemperatur);

Viel Erfolg und Spass beim Ausprobieren. Ich finde über die aktuelle Temperatur der Zentrale informiert zu sein, ist kein Fehler.

Es gab 2017 von technikkram auch schon mal einen Beitrag zu dem Thema und 2018 auch von Michael Schellenberger, welchen ich bisher nicht kannte. Meine Information kam aus dem Homematic Forum von Alexander Reinert, dem Entwickler von piVCCU. Der wesentliche Unterschied ist, das der Befehl „vcgencmd measure_temp“, welcher in den beiden „älteren“ Beitragen beschrieben wird, nicht im piVCCU funktioniert. Das oben beschriebene Skript dagegen funktioniert auch in piVCCU und nicht nur in RaspberryMatic. Da Michael in seinem Beitrag auf technikkram verweist, möchte ich nicht versäumen, auch seinen Artikel zu verlinken: https://www.schellenberger.biz/raspberrymatic-temperatur-des-raspberry-abfragen/

9 Kommentare
  1. Joerg Franke
    Joerg Franke sagte:

    Ich habe das Script mal auf meiner CCU3 mit RaspberryMatic installiert . Es wird aber eine Temperatur vom 0.00 Grad C angezeigt.

    Antworten
  2. Herbert Grebe
    Herbert Grebe sagte:

    Hallo,
    ich habe jetzt zwei PI 4 am Rennen, einer mit Debmatic und der andere mit Raspimatic.
    Die werden sehr schnell warm.
    Dann mit einen Dremel etnsprechende Löcher gefräßt und 5V Minilüfter installiert.
    Erstmal über die vorhanden USB versorgt, kühlt runter auf unter 40 Grad.
    Der nächste Schritt, ist die Versorgung über einen USB-HUB, der bei Überschreiten einer bestimmten Temp, über eine Schaltsteckdose den USB-HUB einschaltet.
    mfg
    herby

    Antworten
  3. duweistschonwer
    duweistschonwer sagte:

    Könnt Ihr auch eine Version für die Luftfeuchte veröffentlichen?

    Wie warm es ist ist mir Wurst solange nichts einfriert.

    Wenn im Keller die Sachen schimmeln ist es weniger angenehm.

    Antworten
    • Mathias
      Mathias sagte:

      Die „Version“ mit der Luftfeuchtigkeit wird nicht machbar sein.
      Alleine schon aus dem Grund, weil kein Feuchtigkeitssensor im Raspberry verbaut wurde.
      Du kannst jedoch einen externen Feuchtigkeitssensor irgendwo im Keller platzieren und den regelmäßig auslesen lassen.
      Gruß,
      Mathias

      Antworten
  4. Mathias
    Mathias sagte:

    auf die gefahr hin, daß mein Post wieder mal gelöscht wird, hier ein Skript, bei dem mehrere Abfragen gemaht werden:

    string temp;
    system.Exec(„cat /sys/class/thermal/thermal_zone0/temp | sed ’s/.\{3\}$/.&/'“, &temp);
    if(temp != „“) {
    dom.GetObject(ID_SYSTEM_VARIABLES).Get(„CPU_Temp“).State(temp);
    }
    system.Exec(„cat /proc/loadavg | cut -d‘ ‚ -f-3 | tr -d ‚\n'“, &temp);
    if(temp != „“) {
    dom.GetObject(ID_SYSTEM_VARIABLES).Get(„CPU_Load“).State(temp);
    }
    system.Exec(„free -m | grep Mem: | awk ‚{ printf(\“%.1f\“, $3/$2*100) }'“, &temp);
    if(temp != „“) {
    dom.GetObject(ID_SYSTEM_VARIABLES).Get(„RAM_Usage“).State(temp);
    }
    system.Exec(„awk ‚{s=int($1);d=int(s/86400);h=int(s % 86400/3600);m=int(s % 3600 / 60); printf \“%d days, %02d:%02d\“, d, h, m}‘ /proc/uptime“, &temp);
    if(temp != „“) {
    dom.GetObject(ID_SYSTEM_VARIABLES).Get(„SYS_Uptime“).State(temp);
    }
    system.Exec(„/usr/bin/ntpq -pn | grep ‚*‘ | awk ‚{print $9}'“, &temp);
    if(temp != „“) {
    dom.GetObject(ID_SYSTEM_VARIABLES).Get(„SYS_NTPOffset“).State(temp);
    }

    Es müssen noch folgende Systemvariablen angelegt werden:

    CCU_Temp (Zahl) = Temperatur der CCU
    CPU_Load (Zeichenkette)
    RAM_Usage (Zahl) = Prozent des RAM
    SYS_Uptime (Zeichenkette) =wie lange die RM nun im Betrieb ist
    SYS_NTPOffset (Zahl) = hier wird mit dem NTP-Server die Zeit verglichen, in wie weit die innere Uhr vor- bzw nach geht.

    Antworten
    • Mathias
      Mathias sagte:

      ….bei mir hat sich ein Schreibfehler eingeschlichen!
      Die erste neue Systemvariable muß natürlich CPU_Temp heißen und als Zahl angelegt werden.

      Antworten
  5. JK
    JK sagte:

    Hallo, in dem Script müssen in Zeile 4 & durch & ersetzt werden, außerdem gibt es in Zeile 1 einen Schreibfehler: Systemvriable -> da fehlt ein a.
    Sonst funktioniert es einwandfrei!

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

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