Seite 1 von 1

[gelöst] CPU Temperatur auslesen

Verfasst: 14. Jul 2020 22:41
von earlybird
Hallo zusammen,
ich habe versucht nach dieser Anleitung:
[https://blog.schmidhuber.org/ueberwachu ... penhab/url]
die Temperatur der Raspberry-Pi-CPU auszulesen und abzubilden.

In der Datei cpu_temp.rules sind in VS-Code alle Zeilen markiert.

Code: Alles auswählen

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 

Als Fehler wird angegeben:
message": "The type Cpu_tempRules is already defined in cpu_temp.rules.",
"startLineNumber": 11, "startColumn": 1, "endLineNumber": 17, "endColumn": 5



Was muss ich ändern damit die Rule funktioniert ?

Mit freundlichem Gruß
Jürgen

Re: CPU Temperatur auslesen

Verfasst: 14. Jul 2020 22:46
von Pepe1907
Richte alles über PaperUi mit hilfe des System info binding ein. Ist kinderleicht einfsch binding installieren. Dann thing erstellen, dann auf die verknüpften channels dann cpu temp wählen und ein Item erstellen. Dieses Item dann einfach in die Sitemap einfügen.

Gesendet von meinem SM-G981B mit Tapatalk


Re: CPU Temperatur auslesen

Verfasst: 15. Jul 2020 11:19
von peter-pan
Es gibt verschiedene Möglichkeiten, wie @pepe1907 schon geschrieben hat, die CPU-Temperatur auszulesen und darzustellen. Ich benutze neben der von ihm beschriebenen mit dem System-Binding, auch noch eine Methode mit dem Exec-Binding und eine weitere per MQTT (man kann ja nicht genug haben ;) ).

Die Fehlermeldung zeigt auf eine Zeile 11 in deinem Rule-File hin. Die gibt es aber gar nicht in deinem Rules-File. Wie sieht denn dein ganzes Rule-File (cpu_temp.rules) aus? Die Definition der beiden Items "Health_JSON" und "Health_CPU_Temperature" wäre auch ganz hilfreich. (Die Beschreibung in deinem Link ist für mich etwas schwer verständlich :( ).
Aber ich denke, dass ich den beschriebenen Weg per Exec-Binding (fast) :lol: auch benutze. Welche Version in openHAB benutzt du denn ?

Re: CPU Temperatur auslesen

Verfasst: 15. Jul 2020 19:24
von earlybird
Hallo Pepe1907,
herzlichen Dank für deine schnelle Antwort!
Ich habe mir gerade diese Anleitung ausgesucht da in ihr alles über die Dateien konfiguriert wird.
Mit der Paper UI hatte ich schon mal keine "gute" Erfahrung gemacht, daher versuche ich alles über
die Konfigurationsdateien zu erstellen.
Wenn es nicht funktioniert werde ich deinen Vorschlag versuchen umzusetzen.
Mit freundlichem Gruß
Jürgen

Re: CPU Temperatur auslesen

Verfasst: 15. Jul 2020 19:50
von earlybird
Hallo peter-pan,
auch Dir herzlichen Dank für deine schnelle Antwort!!
in Zeile 11 beginnt bei mir die Rule mit:

Code: Alles auswählen

rule "Health-JSON zu Items" 
 usw....]
Die Items sehen so aus:

Code: Alles auswählen

String Health_Json "CPU Temperatur [%s]" {channel="exec:command:cpu_temp:output"}
DateTime Health_LastExecution "Zuletzt ausgeführt [%1$td.%1$tm. %1$tH:%1$tM:%1$tS]" {channel="exec:command:cpu_temp:lastexecution"} 
Number Health_CPU_Temperature "CPU Temperatur [%.1f °C]"
Ich benutze openHAB 2.5.5-1 und das

Exec Binding von
Author: Karel Goderis

Kannst Du mit diesen Informationen etwas anfangen?
Mit freundlichem Gruß
Jürgen

Re: CPU Temperatur auslesen

Verfasst: 15. Jul 2020 20:17
von heiko74
Hallo,

hast du dir das https://www.openhab.org/addons/bindings/systeminfo/ schon mal angeschaut. Hiermit kann auch u.v.a. die Temperatur ausgelesen werden. Bei mir funktioniert das über txt-Dateien ohne Probleme.

Re: CPU Temperatur auslesen

Verfasst: 15. Jul 2020 22:50
von earlybird
Hallo heiko74 ,
herzlichen Dank für deine Nachricht!
Das liest sich ja wirklich gut. Von diesem Binding hatte ich noch nichts gelesen. Werde es mal versuchen.
Bin allerdings Anfänger und suche immer nach Anleitungen.
Mit freundlichem Gruß
Jürgen

Re: CPU Temperatur auslesen

Verfasst: 15. Jul 2020 23:15
von earlybird
Hallo heiko74 ,
Danke!! Für den Tipp. Das funktioniert Super(!) und bringt jede Menge Information ;-)
Mit freundlichem Gruß
Jürgen

Re: [gelöst] CPU Temperatur auslesen

Verfasst: 16. Jul 2020 01:12
von peter-pan
... Super, dass es mit dem System-Binding geklappt hat. Der guten Ordnung halber will ich dir aber auch noch die Möglichkeit mit dem Exec-Binding aufzeigen, wie ich das gelöst habe.
Du brauchst 2 Items,
.items:

Code: Alles auswählen

String CPU_Temp               "OH2_CPU Temp-String EXEC [%s °C]"    <temperature> (gSystem)    { channel="exec:command:cpu_temp:output"}
Number CPU_Temp_num           "CPU-OH2-Pi Temperatur EXEC[%.2f °C]" <temperature> (gSystem)
1 Thing,
.things:

Code: Alles auswählen

Thing exec:command:cpu_temp "OH2-PI Temperatur" @ "Buero" 
                    [command="/bin/bash /etc/openhab2/scripts/cpu_temp.sh", interval=120, timeout=30, transform="REGEX((.*?))"]
1Rule,
.rules:

Code: Alles auswählen

rule "OpenhabPi Temperature String to Number"
  when
    Item CPU_Temp changed
  then
    CPU_Temp_num.postUpdate(Float::parseFloat(String::format("%s",CPU_Temp.state).replace(' ','')))
end
und 1 Shell-Script im scripts-Ordner:
cpu_temp.sh:

Code: Alles auswählen

#!/bin/bash
INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp)
TEMP=$(echo "scale=2; $INPUT / 1000" | bc)
echo $TEMP
Das Shell-Script wird gemäss den Einstellungen im Exec-Thing alle 2 Minuten (interval=120) ausgeführt und übergibt den Temperaturwert an das gebundene Item "String CPU_Temp". Mit der Regel wird dann der Stringwert in einen numerischen Wert umgewandelt.(Exec-Binding liefert nur Strings)

Eine JSON-Transformation, wie in deiner Regel wird hier leider nicht klappen, da kein JSON-String vom Exec-Binding bzw. vom Shell-Script übergeben wird.

Und bitte nicht vergessen, den Befehl "/bin/bash /etc/openhab2/scripts/cpu_temp.sh" in die whitelist einzutragen.

Was die Fehlermeldung in deiner Regel betrifft, denke ich, dass hier ein Fehler in deinem "cpu_temp.rules"-File vorliegt. Der kann z.B. auch eine Zeile weiter vorne liegen und hat wahrscheinlich etwas mit dem String/Variable "Cpu_tempRules" zu tun. Der Fehler kann aber auch in Zeile 18 sein ("startLineNumber": 11, "startColumn": 1, "endLineNumber": 17)