NEWS
[Gelöst] CPU Temperatur von Proxmox VM
-
@TeNNo2k5 sagte in [Gelöst] CPU Temperatur von Proxmox VM:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp)
| column -s $'\t' -t | sed 's/(.)..$/.\1/' | grep x86_pkg_temp | cut -d " " -f3In der VM klappt das bei mir nicht (gibt keine Verzeichnisse 'thermal_zone*'). Im Host funktioniert es aber. Man sieht: viele Wege führen nach Rom. Danke für den Tipp...
-
@Dr-Bakterius sagte in [Gelöst] CPU Temperatur von Proxmox VM:
gibt keine Verzeichnisse 'thermal_zone*
Das ist das Problem!
wenn es die gäbe würde auch der rpi2 Daten bekommen
-
@TeNNo2k5 sagte in [Gelöst] CPU Temperatur von Proxmox VM:
Ich bin vor kurzem auf die gleiche Idee gekommen und habe es etwas simpler gelöst, ich poste es mal als alternative Lösung da es vielleicht der ein oder andere brauchen kann.
Per Bashscript führe ich folgenden Befehl 1x pro Minute per Blockly Script aus:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) \ | column -s $'\t' -t | sed 's/\(.\)..$/.\1/' | grep x86_pkg_temp | cut -d " " -f3
Ausgegeben wird nur der CPU Temperatur Wert vom Host also nicht die Werte der einzelnen Cores, dafür funktioniert der Code ootb, es müssen keine Abhängigkeiten oder Adapter installiert werden.
Der code kann entweder direkt auf dem Proxmox Host, oder innerhalb einer VM/LXC ausgeführt werden, ich führe es auf dem Container vom iobroker aus.
Muss dafür auch vorher was installiert werden?! Bei mir ist der Wert leer.
-
Muss eigentlich nichts installiert werden, habe es aber nur unter Ubuntu und Proxmox (Debian) gestestet.
Probiere mal folgenden Befehl:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'
Dies liefert eventuell mehr Temperatur Sensor Daten, da ich ja im ersten Code Schnipssel nur nach "x86_pkg_temp" gefiltertet habe.
-
@TeNNo2k5 said in [Gelöst] CPU Temperatur von Proxmox VM:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/(.)..$/.\1°C/'
Hi,
hab bei mir unter der Proxmox VE lmsensors installiert. Wenn ich den Befehl auf der Shell in iobroker ausführe bekomme ich
acpitz 49.0°C iwlwifi 50.0°C x86_pkg_temp 48.0°C
Auf der Proxmox VE wenn ich sensors aufrufe kommt
coretemp-isa-0000 Adapter: ISA adapter Package id 0: +48.0°C (high = +105.0°C, crit = +105.0°C) Core 0: +48.0°C (high = +105.0°C, crit = +105.0°C) Core 1: +48.0°C (high = +105.0°C, crit = +105.0°C) Core 2: +47.0°C (high = +105.0°C, crit = +105.0°C) Core 3: +47.0°C (high = +105.0°C, crit = +105.0°C) acpitz-acpi-0 Adapter: ACPI interface temp1: +49.0°C (crit = +100.0°C) iwlwifi-virtual-0 Adapter: Virtual device temp1: +50.0°C
Passt also. Vielen Dank.
Wie verarbeitest du die Werte dann weiter, wenn du den Befehl per Blockly ausgeführt hast ?
-
Ich lasse den Wert einmal pro Minute in einen Datenpunkt schreiben, Änderungen werden per SQL Adapter aufgezeichnet (History geht genauso) und als letzte Spielerei werden via Grafana daraus bunte Diagramme erzeugt
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="undefined" id="schedule">schedule</variable> <variable type="" id="wE[v=vc50${rU3ekzIi2">error</variable> <variable type="" id="b,qov7h6f=6:IJp(0J1*">result</variable> </variables> <block type="create" id="DMP?Qpyuf`CO!~je[(xC" x="-437" y="88"> <field name="NAME">CpuTemp</field> <value name="VALUE"> <block type="math_number" id="(uiUN}@3JGVOpjsN_JaU"> <field name="NUM">0</field> </block> </value> <statement name="STATEMENT"> <block type="schedule_create" id="Oy[c$./2HV.XXoFa;!fI"> <field name="NAME">schedule</field> <value name="SCHEDULE"> <shadow type="field_cron" id="kkT)xZ2O4|7z;AO5:..A"> <field name="CRON">* * * * *</field> </shadow> </value> <statement name="STATEMENT"> <block type="exec" id="mrqBs..fusm}-O:*((HY"> <mutation with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="#9FNJ?:CgTyNZ)rk3UoG"> <field name="TEXT"></field> </shadow> <block type="text" id="QVsV;ybhSd6K:;+`Udt5"> <field name="TEXT">/home/iobroker/CpuTemp.sh</field> </block> </value> <statement name="STATEMENT"> <block type="debug" id="P~R{p[+r52G*?6bd8$,0" disabled="true"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="ID0]fZg?7VmMu}}^v{uH"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="H?IydK_(km26-i=)#@G5"> <field name="VAR" id="b,qov7h6f=6:IJp(0J1*" variabletype="">result</field> </block> </value> <next> <block type="update" id="o^OjBm[K5za=V1O77Dn?"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.CpuTemp</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_tonumber" id="5xC]QAX9`RmF!X[1,lX["> <value name="VALUE"> <block type="variables_get" id="7+yjT7lNyzIZBF$*]UsA"> <field name="VAR" id="b,qov7h6f=6:IJp(0J1*" variabletype="">result</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> <block type="debug" id="nDlJ$tL0aEOC1%G-u#t(" x="95" y="1063"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="rx`G3b(6lx|%dng}iq2C"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="UC@}=b[L!4nQJQ,|P}6S"> <field name="VAR" id="wE[v=vc50${rU3ekzIi2" variabletype="">error</field> </block> </value> </block> <block type="debug" id="rA9Uy6:=qxtVzLx8(QvS" x="-280" y="1088"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="f)!0U@B:Zf}*^oHOt*mb"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="I!v]d,`EI36^,|8ryqom"> <field name="VAR" id="b,qov7h6f=6:IJp(0J1*" variabletype="">result</field> </block> </value> </block> <block type="debug" id="i~bO.RuBtWOLutUY1p*J" x="-252" y="1144"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="f)!0U@B:Zf}*^oHOt*mb"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="?IiC5BipePg(P-1tj0-W"> <field name="VAR" id="b,qov7h6f=6:IJp(0J1*" variabletype="">result</field> </block> </value> </block> </xml>
-
Sehr cool. Hab übersehen, das du beim ersten Codeschnipsel nur eine Temperatur bekommst. Die kannst du natürlich direkt weiterverarbeiten. Bei dem Code den ich ausgeführt hab, werden ja drei Temperaturen ausgegeben.
-
Muss man den Code eigentlich in ein Skript (.sh) packen oder kann iobroker den Befehl direkt ausführen?
-
Bekommt man auch andere Daten wie Prozessorlast (load) raus?
-
@martinschm ich habe z.b. Prometheus im Zusammenspiel mit Grafana und InfluxDB laufen. Somit habe ich sämtliche Servermetriken, falls du nach "mehr" suchst.
Sieht dann so z.b. aus
Hier der Link
https://prometheus.io/docs/guides/node-exporter/ -
@crunchip said in [Gelöst] CPU Temperatur von Proxmox VM:
@martinschm ich habe z.b. Prometheus im Zusammenspiel mit Grafana und InfluxDB laufen. Somit habe ich sämtliche Servermetriken, falls du nach "mehr" suchst.
Sieht dann so z.b. aus
Hier der Link
https://prometheus.io/docs/guides/node-exporter/Das sieht ja schonmal nett aus.
Nur wie komme ich an die Werte ran? -
@martinschm wie schon geschrieben...prometheus( node exporter) grafana
Entweder google oder es gibt auch hier im Forum einen grösseren Beitrag -
@TeNNo2k5 said in [Gelöst] CPU Temperatur von Proxmox VM:
Ich bin vor kurzem auf die gleiche Idee gekommen und habe es etwas simpler gelöst, ich poste es mal als alternative Lösung da es vielleicht der ein oder andere brauchen kann.
Per Bashscript führe ich folgenden Befehl 1x pro Minute per Blockly Script aus:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) \ | column -s $'\t' -t | sed 's/\(.\)..$/.\1/' | grep x86_pkg_temp | cut -d " " -f3
Ausgegeben wird nur der CPU Temperatur Wert vom Host also nicht die Werte der einzelnen Cores, dafür funktioniert der Code ootb, es müssen keine Abhängigkeiten oder Adapter installiert werden.
Der code kann entweder direkt auf dem Proxmox Host, oder innerhalb einer VM/LXC ausgeführt werden, ich führe es auf dem Container vom iobroker aus.
Hi,
hab das Skript auch angelegt und rufe es auch über dein Blockly Skript auf. Leider bekomme ich nur null zurück. Wenn ich den Befehl auf der shell aufrufe bekomme ich einen Wert zurück.
Müssen da noch irgendwelche Rechte gesetzt werden ?
ciao
Martin -
@martinschm sagte in [Gelöst] CPU Temperatur von Proxmox VM:
Muss man den Code eigentlich in ein Skript (.sh) packen oder kann iobroker den Befehl direkt ausführen?
Wenn du eine alte iobroker Installation ohne den iobroker User hast geht das, bei der aktuellen Variante nein bzw. eingeschr, ich kenne den genauen technischen Hintergrund nicht aber vemute das die User Shell von iobroker User aus Sicherheitsgründen technisch eingeschränkt ist.Edit: Hatte da was verwechselt, grundsätzlich gehen Shell befehle via exec Block, aber dieser Code Schnipsel nicht, vermutlich werden irgendwelche Zeichen anders intepretiert.
@martinschm sagte in [Gelöst] CPU Temperatur von Proxmox VM:
@TeNNo2k5 said in [Gelöst] CPU Temperatur von Proxmox VM:
Ich bin vor kurzem auf die gleiche Idee gekommen und habe es etwas simpler gelöst, ich poste es mal als alternative Lösung da es vielleicht der ein oder andere brauchen kann.
Per Bashscript führe ich folgenden Befehl 1x pro Minute per Blockly Script aus:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) \ | column -s $'\t' -t | sed 's/\(.\)..$/.\1/' | grep x86_pkg_temp | cut -d " " -f3
Ausgegeben wird nur der CPU Temperatur Wert vom Host also nicht die Werte der einzelnen Cores, dafür funktioniert der Code ootb, es müssen keine Abhängigkeiten oder Adapter installiert werden.
Der code kann entweder direkt auf dem Proxmox Host, oder innerhalb einer VM/LXC ausgeführt werden, ich führe es auf dem Container vom iobroker aus.
Hi,
hab das Skript auch angelegt und rufe es auch über dein Blockly Skript auf. Leider bekomme ich nur null zurück. Wenn ich den Befehl auf der shell aufrufe bekomme ich einen Wert zurück.
Müssen da noch irgendwelche Rechte gesetzt werden ?
ciao
Martinexec im Javascript Adapter erlaubt (Instanzen -> javascript.0 -> Erlaube das Kommando "exec") ?
-
Hier noch eine Lösung wenn ihr https aktiviert habt und mit sauberer uri encode (z.B. bei Sonderzeichen im Passwort):
#!/bin/bash #ioBroker-Datenpunkt core0Dp=linkeddevices.0.System.Temperatur.Core_0 core1Dp=linkeddevices.0.System.Temperatur.Core_1 #ioBroker-IP:Port IPP=XXX.XXX.XXX.XXX:XXXX #Zugangsdaten user=XXXXX pw=XXXXXX #an ioBroker senden for((c=1; c<=6; c++)) do #Temperaturen abfragen core0=$(sensors | grep 'Core 0:' | awk '{print $3}' | cut -c2-3) core1=$(sensors | grep 'Core 1:' | awk '{print $3}' | cut -c2-3) #an IoBroker mit simple api senden curl --insecure -G https://${IPP}/set/${core0Dp} --data-urlencode user=${user} --data-urlencode pass=${pw} --data-urlencode value=${core0} --data-urlencode "ack=true" curl --insecure -G https://${IPP}/set/${core1Dp} --data-urlencode user=${user} --data-urlencode pass=${pw} --data-urlencode value=${core1} --data-urlencode "ack=true" sleep 10 done
Sollte ihr ein kein self signed certificate haben, dann könnt ihr
--insecure
auch weglassen. -
Danke für die gesamte Vorarbeit, die hier von allen geleistet wurde
Ich habe für meinen Geschmack eine etwas andere Variante dieser Ausarbeitung umgesetzt, indem ich den SystemInfo-Adapter, welcher bei mir sowieso mitläuft genutzt habe.
Unter folgendem Link steht hier im Forum, wie es im Zusammenhang mit dem Adapter und natürlich installiertem lm-sensors (Installation siehe hier weiter oben) unter Linux geht.
-
Moin, hab diesen Fehler:
Das auslesen des Sensors mittels : sensors | grep Package -m 1 | awk '{print $4}' klappt.
In die Datei von Iobroker schreiben mittels: curl "http://192.168.2.187:8087/set/0_userdata.0.cpu?value=66" klappt auch.Aber mit dem Skript kommen diese Fehler.
#!/bin/bashvar
=sensors | grep Package -m 1 | awk '{print $4}'
curl "http://192.168.2.187:8087/set/0_userdata.0.cpu?value=$var"root@media:~# var
=sensors | grep Package -m 1 | awk '{print $4}'
-bash: =sensors: command not found
-bash: var: command not found
root@media:~# curl "http://192.168.2.187:8087/set/0_userdata.0.cpu?value=$var"
{"id":"0_userdata.0.cpu","value":null,"val":null}root@media:~ -
@thomas-reißmann Wenn du eine Ausgabe in eine Variable schreiben möchte sollte das so aussehen:
var=$(sensors | grep Package -m 1 | awk '{print $4}')
-
-
@thomas-reißmann Wenn es funktioniert...