Auslastung und Temperatur eines Raspberry an CCU übergeben

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
unlight
Beiträge: 484
Registriert: 23.12.2012, 13:03
Wohnort: Ruhrpott

Auslastung und Temperatur eines Raspberry an CCU übergeben

Beitrag von unlight » 24.03.2014, 21:32

Mit diesem kurzen Script kann man in Intervallen die Auslastung und Temperatur eines Raspberry Pi (CCUiO o.Ä.)
oder anderen Linux Rechners an die CCU übergeben und in einer Variable speichern.
Die Localisation des Raspis steht bei mir auf Englisch, ansonsten gibt es Probleme beim Auslesen des Loads weil als Trennzeichen Kommas benutzt werden.
Dieses kurze Script mit den IDs auf der CCU und IP der CCU vervollständigen, als CCU.sh auf dem Raspberry unter /home/pi speichern und per chmod ausführbar machen:

Code: Alles auswählen

#!/bin/bash

cpuTemp0=$(cat /sys/class/thermal/thermal_zone*/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
url="http://XXXXXXXXIPderCCUXXXXXXXXX/config/xmlapi/statechange.cgi?ise_id=XXXXXXXXXXID der Variable für TemperaturXXXXXXXXXXXXX&new_value="${cpuTemp1}"."${cpuTempM}""
curl $url > /dev/null 2>&1
loadtot=$(uptime)
SSUBSTRING=`echo $loadtot| cut -d',' -f 5`
SUBSTRING=${SSUBSTRING:1}
SUBSTRING2=`echo |awk '{ print "'"$SUBSTRING"'"*100}'`
url2="http://XXXXXXXXXXXIP der CCUXXXXXXXXXXXXX/config/xmlapi/statechange.cgi?ise_id=XXXXXXXXXXXID der Variable für AuslastungXXXXXXXXXXXXXXXX&new_value="${SUBSTRING2}""
curl $url2 > /dev/null 2>&1

exit 0
Auf dem Pi per SSH einloggen und

Code: Alles auswählen

crontab -e
eingeben.
Folgenden Eintrag hinzufügen und mit ctrl-x und y speichern:

Code: Alles auswählen

*/5 * * * *    /home/pi/CCU.sh
Jetzt wird alle 5 Minuten der durchschnittliche Load-Wert der letzten 5 Minuten in Prozent (ACHTUNG: Kann auch höher als 100 sein!)
und die aktuelle Temperatur in ºC in die Variablen geschrieben.

Gruß
Unlight
“Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us.”

ich77
Beiträge: 8
Registriert: 10.08.2014, 15:22

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von ich77 » 02.12.2014, 17:21

Hallo,

super, vielen Dank für den Beitrag, was ähnliches möchte ich auch machen, ich möchte die Aussentemperatur aus Weewx an die CCU übergeben. Dazu habe ich ein PHP-Skript geschrieben, welches mir genau den XML-API-Link aufbaut. Allerdings bekomme ich es nicht hin, dass ich über CURL das in bash abgeschickt bekomme.
Mit dem Aufruf

Code: Alles auswählen

curl http://192.x.x.x/config/xmlapi/statechange.cgi?ise_id=yyyy&new_value=14
schreibt er 0 in die Systemvariable und gibt in der Shell folgendes aus:

Code: Alles auswählen

pi@raspberrypi ~ $ curl http://192.x.x.x/config/xmlapi/statechange.cgi?ise_id=yyyy&new_value=14
[1] 7720
pi@raspberrypi ~ $ <?xml version="1.0" encoding="ISO-8859-1"?><result><changed id="yyyy" new_value="" /></result>
[1]+ Fertig curl
http://192.x.x.x/config/xmlapi/statechange.cgi?ise_id=yyyy
pi@raspberrypi ~ $
Verstehe gerade nicht, was ich falsch mache, dass er den "new_value" nicht annimmt???

Danke

rascal
Beiträge: 817
Registriert: 02.10.2012, 23:30

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von rascal » 02.12.2014, 18:03

cooles ding... gibts das auch für den cubietruck? :)

habe versucht das script für den cubie anzupassen, kommt aber eine Fehlermeldung, obwohl er eine Zahl in die SysVar schreibt:
Fehlermeldung: "CCU.sh: 11: CCU.sh: Bad substitution"

Code: Alles auswählen

#!/bin/bash

cpuTemp0=$(cat /sys/class/hwmon/hwmon0/device/temp1_input)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
url="http://xxxxxxx/config/xmlapi/statechange.cgi?ise_id=2027&new_value="${cpuTemp1}"."${cpuTempM}""
curl $url > /dev/null 2>&1
loadtot=$(uptime)
SSUBSTRING=`echo $loadtot| cut -d',' -f 5`
SUBSTRING=${SSUBSTRING:1}
SUBSTRING2=`echo |awk '{ print "'"$SUBSTRING"'"*100}'`
url2="http://xxxxxx/config/xmlapi/statechange.cgi?ise_id=2027&new_value="${SUBSTRING2}""
curl $url2 > /dev/null 2>&1

exit 0

dtp
Beiträge: 10659
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von dtp » 04.12.2014, 12:19

Kurze Gegenfrage. Kann der rpi-Adapter von CCU.IO das nicht auch schon alles?

Nur zur Klarstellung. Das soll keine Kritik an den obigen Beiträgen sein. Meine Frage ist durchaus konstruktiv gemeint.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
unlight
Beiträge: 484
Registriert: 23.12.2012, 13:03
Wohnort: Ruhrpott

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von unlight » 04.12.2014, 12:52

Kann gut sein, hatte das Skript damals erstellt ohne von der Existenz des Adapters zu wissen. :)
“Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us.”

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von Homoran » 04.12.2014, 13:50

rascal hat geschrieben:cooles ding... gibts das auch für den cubietruck? :)

habe versucht das script für den cubie anzupassen, kommt aber eine Fehlermeldung, obwohl er eine Zahl in die SysVar schreibt:
Fehlermeldung: "CCU.sh: 11: CCU.sh: Bad substitution"

Code: Alles auswählen

#!/bin/bash

cpuTemp0=$(cat /sys/class/hwmon/hwmon0/device/temp1_input)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
url="http://xxxxxxx/config/xmlapi/statechange.cgi?ise_id=2027&new_value="${cpuTemp1}"."${cpuTempM}""
curl $url > /dev/null 2>&1
loadtot=$(uptime)
SSUBSTRING=`echo $loadtot| cut -d',' -f 5`
SUBSTRING=${SSUBSTRING:1}
SUBSTRING2=`echo |awk '{ print "'"$SUBSTRING"'"*100}'`
url2="http://xxxxxx/config/xmlapi/statechange.cgi?ise_id=2027&new_value="${SUBSTRING2}""
curl $url2 > /dev/null 2>&1

exit 0
Ich hatte damals den rpi-Adapter für den Cubietruck angepasst.
Der Pfad für die Temperatur ist

Code: Alles auswählen

/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input
mit dem Pfad des RasPi klappt es nicht.

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

rascal
Beiträge: 817
Registriert: 02.10.2012, 23:30

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von rascal » 04.12.2014, 14:10

hey,
danke, jetzt schreibt er mir nach wie vor den Fehler, aber er füllt die Variable mit ... im Moment: 49
Sind das °C der CPU?

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von Homoran » 04.12.2014, 14:33

rascal hat geschrieben:...aber er füllt die Variable mit ... im Moment: 49
Sind das °C der CPU?
Wahrscheinlich ;-)

Der Fehler müsste sich auf diese Zeile beziehen:

Code: Alles auswählen

SUBSTRING=${SSUBSTRING:1}
Leider kann ich nicht programmieren :(

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

Benutzeravatar
Murmelbaerchen69
Beiträge: 274
Registriert: 01.12.2013, 22:55
Wohnort: @home

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von Murmelbaerchen69 » 11.01.2015, 13:32

Hallo,
Homoran hat geschrieben:
Der Fehler müsste sich auf diese Zeile beziehen:

Code: Alles auswählen

SUBSTRING=${SSUBSTRING:1}
Gruß
Rainer
hier ist ein Fehler, da ich genau die selbe Meldung erhalte. :cry:
Nur das funktioniert:

Code: Alles auswählen

#!/bin/bash

cpuTemp0=$(cat /sys/class/thermal/thermal_zone*/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
url="http://192.168.178.199/config/xmlapi/statechange.cgi?ise_id=30764&new_value="${cpuTemp1}"."${cpuTempM}""
curl $url > /dev/null 2>&1

exit 0
Gruß Ralf
Das soll ein neuer Computer sein ? Warum steht den auf der Tastatur "ALT" ?

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Auslastung und Temperatur eines Raspberry an CCU übergeb

Beitrag von Homoran » 11.01.2015, 13:48

Hallo Ralf,
wie oben bereits geschrieben, kann ich (eigentlich) nicht linux oder php oder js programmieren.
...Aber dafür gibt's ja Tante Google und einige snippets.

Ich habe jetzt ein paar Minuten Zeit und werde mal versuchen mich da rein zu hacken ;-)

Fragen:
Welche Variable muss man für das gesamte script von rascal anlegen?
Hat du auch einen CT oder was?

EDIT:
also die Temperaturabfrage müsste funktionieren. (tut sie ja anscheinend für RaspBi und Cubie auch)
bei dem Rest mit 'cut' usw. habe ich leider Verständnisprobleme.
Auf dem Cubie erscheint nach dem Befehl 'uptime' die folgende Antwort:

Code: Alles auswählen

 13:52:02 up 1 day, 16:09,  1 user,  load average: 0.00, 0.04, 0.12
wie das jetzt zerlegt werden muss und wie an die CCU ausgegeben habe ich keine Ahnung - Leider :(

EDIT2:
Habe mir den Beitrag von Unlight noch mal genau angesehen und dabei zwei Stolpersteine gefunden:
Die Localisation des Raspis steht bei mir auf Englisch, ansonsten gibt es Probleme beim Auslesen des Loads weil als Trennzeichen Kommas benutzt werden.
Außerdem müssen zwei verschidenen ise_id's angegeben werden - sind ja 2 Variable. Bei rascal ist es 2x die selbe!

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“