NEWS
[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?
-
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...
-
Hallo,
ich lese die Coretemperaturen des Proxmox-Servers mittels Script aus. Dazu muss auf dem Proxmox das Paket curl sowie das Paket lm-sensors installiert werden. Die Datenpunkte müssen in iobroker angelegt sein:
Dann das Script auf den Proxmox kopieren, ausführbar machen und einen Cronjob für den User Root angelegt.
Das Script habe ich aus dem Netz, leicht abgewandelt auf meine Gegebenheiten:#!/bin/bash #ioBroker-Datenpunkt DP=javascript.0.System.Temperatur.Core_0 DP1=javascript.0.System.Temperatur.Core_1 DP2=javascript.0.System.Temperatur.Core_0_last_change DP3=javascript.0.System.Temperatur.Core_1_last_change DP4=javascript.0.System.Temperatur.Core_2 DP5=javascript.0.System.Temperatur.Core_3 DP6=javascript.0.System.Temperatur.Core_2_last_change DP7=javascript.0.System.Temperatur.Core_3_last_change DP8=javascript.0.System.Temperatur.Core_4 DP9=javascript.0.System.Temperatur.Core_5 DP10=javascript.0.System.Temperatur.Core_4_last_change DP11=javascript.0.System.Temperatur.Core_5_last_change #ioBroker-IP:Port IPP=192.168.1.100:8087 for((c=1; c<=5; c++)) do sleep 10 SQL=$(sensors | grep 'Core 0:' | awk '{print $3}' | cut -c2-3) d0=`date +%Y-%m-%d@%H:%M` SQL1=$(sensors | grep 'Core 1:' | awk '{print $3}' | cut -c2-3) d1=`date +%Y-%m-%d@%H:%M` SQL2=$(sensors | grep 'Core 2:' | awk '{print $3}' | cut -c2-3) d2=`date +%Y-%m-%d@%H:%M` SQL3=$(sensors | grep 'Core 3:' | awk '{print $3}' | cut -c2-3) d3=`date +%Y-%m-%d@%H:%M` SQL4=$(sensors | grep 'Core 4:' | awk '{print $3}' | cut -c2-3) d4=`date +%Y-%m-%d@%H:%M` SQL5=$(sensors | grep 'Core 5:' | awk '{print $3}' | cut -c2-3) d5=`date +%Y-%m-%d@%H:%M` #an ioBroker senden curl http://${IPP}/set/${DP}?value={$SQL} curl http://${IPP}/set/${DP2}?value={$d0} curl http://${IPP}/set/${DP1}?value={$SQL1} curl http://${IPP}/set/${DP3}?value={$d1} curl http://${IPP}/set/${DP4}?value={$SQL2} curl http://${IPP}/set/${DP6}?value={$d2} curl http://${IPP}/set/${DP5}?value={$SQL3} curl http://${IPP}/set/${DP7}?value={$d3} curl http://${IPP}/set/${DP8}?value={$SQL4} curl http://${IPP}/set/${DP10}?value={$d4} curl http://${IPP}/set/${DP9}?value={$SQL5} curl http://${IPP}/set/${DP11}?value={$d5} done
Funktioniert bei mir ohne Probleme, Daten werden in Flot geloggt, und auch auf der VIS angezeigt:
Cronjob:
Diagramm:
-
@marcuskl
Ich habe das nun exakt (nur um meine iobroker-IP und meinen Scriptnamen verändert) wie bei dir hier nachgebaut, habe allerdings das Problem, das bei mir "Connection refused":
curl: (7) Failed to connect to 192.168.178.21 port 8087: Connection refusedangezeigt wird wenn ich das Script mit
bash /usr/local/bin/CPUTemp.sh teste- Simple API installiert und auf Port 8087 eingestellt.
- Datenpunkt unter "Objekte" für das Schreiben freigegeben
Jemand einen Hinweis woran es liegen könnte?
-
@henning-hi & @opossum warum nutzt Ihr nicht einfach den ProxMox Adapter? Der liefert das ohne Aufwand direkt...
-
@ahnungsbefreit
Läuft in einer VM auf Nuc in Proxmox.
Habe den Fehler aber gerade gefunden, hatte nicht die IP von ioBroker eingestellt, sondern vom Proxmox-Host -
@henning-hi Ah sorry,Ihr habt natürlich Recht, die CPU Temperatur liefert der Proxmox Adapter nicht, nur CPU Auslastung, memory etc
-
Hallo zusammen,
ich hab lm-seonsors installiert und erhalte auch eine Gradzahl:root@proxmox:~# sensors | grep Package -m 1 | awk '{print $4}' +56.0°C
allerdings im DP vom ioBroker hb ich nen Sonderzeichen drin nun:
56.0°C
die Ausgabe bei Seonsors sieht wie folgt aus:
root@proxmox:~# sensors acpitz-acpi-0 Adapter: ACPI interface temp1: +27.8°C (crit = +105.0°C) temp2: +29.8°C (crit = +105.0°C) coretemp-isa-0000 Adapter: ISA adapter Package id 0: +55.0°C (high = +100.0°C, crit = +100.0°C) Core 0: +55.0°C (high = +100.0°C, crit = +100.0°C) Core 1: +54.0°C (high = +100.0°C, crit = +100.0°C)
Was muss ich ändern, damit ich ne Zahl erhalte ohne Sonderzeichen im ioBroker-state?
Danke euch und vG, Thorsten
-
@kueppert sagte in [Gelöst] CPU Temperatur von Proxmox VM:
Was muss ich ändern, damit ich ne Zahl erhalte ohne Sonderzeichen im ioBroker-state?
ich habe diesen Befehl
sensors | grep Package -m 1 | awk '{print $4}' | awk '{print substr($1, length($0)-6,2)}'