Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] CPU Temperatur von Proxmox VM

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] CPU Temperatur von Proxmox VM

    This topic has been deleted. Only users with topic management privileges can see it.
    • Dr. Bakterius
      Dr. Bakterius Most Active last edited by

      @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 " " -f3

      In 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...

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Dr. Bakterius last edited by

        @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

        1 Reply Last reply Reply Quote 0
        • siggi85
          siggi85 @TeNNo2k5 last edited by

          @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. 🤔

          1 Reply Last reply Reply Quote 0
          • TeNNo2k5
            TeNNo2k5 last edited by

            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.

            1 Reply Last reply Reply Quote 1
            • M
              martinschm last edited by

              @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 ?

              1 Reply Last reply Reply Quote 0
              • TeNNo2k5
                TeNNo2k5 last edited by

                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 😁

                cputemp.PNG

                cputempGraf.PNG

                <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>
                
                1 Reply Last reply Reply Quote 1
                • M
                  martinschm last edited by

                  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.

                  1 Reply Last reply Reply Quote 1
                  • M
                    martinschm last edited by

                    Muss man den Code eigentlich in ein Skript (.sh) packen oder kann iobroker den Befehl direkt ausführen?

                    TeNNo2k5 1 Reply Last reply Reply Quote 0
                    • M
                      martinschm last edited by

                      Bekommt man auch andere Daten wie Prozessorlast (load) raus?

                      crunchip 1 Reply Last reply Reply Quote 0
                      • crunchip
                        crunchip Forum Testing Most Active @martinschm last edited by crunchip

                        @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
                        Screenshot_20191022-184101_ioBrokervis.jpg
                        Hier der Link
                        https://prometheus.io/docs/guides/node-exporter/

                        M B 2 Replies Last reply Reply Quote 0
                        • M
                          martinschm @crunchip last edited by

                          @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
                          Screenshot_20191022-184101_ioBrokervis.jpg
                          Hier der Link
                          https://prometheus.io/docs/guides/node-exporter/

                          Das sieht ja schonmal nett aus. 🙂
                          Nur wie komme ich an die Werte ran?

                          crunchip 1 Reply Last reply Reply Quote 0
                          • crunchip
                            crunchip Forum Testing Most Active @martinschm last edited by

                            @martinschm wie schon geschrieben...prometheus( node exporter) grafana
                            Entweder google oder es gibt auch hier im Forum einen grösseren Beitrag

                            1 Reply Last reply Reply Quote 0
                            • M
                              martinschm @TeNNo2k5 last edited by

                              @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

                              S 1 Reply Last reply Reply Quote 0
                              • TeNNo2k5
                                TeNNo2k5 @martinschm last edited by TeNNo2k5

                                @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
                                Martin

                                exec im Javascript Adapter erlaubt (Instanzen -> javascript.0 -> Erlaube das Kommando "exec") ?

                                1 Reply Last reply Reply Quote 0
                                • Scrounger
                                  Scrounger Developer last edited by

                                  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.

                                  1 Reply Last reply Reply Quote 2
                                  • B
                                    Berchemer last edited by Berchemer

                                    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.

                                    https://forum.iobroker.net/post/430091

                                    Thomas 18147 1 Reply Last reply Reply Quote 0
                                    • Thomas 18147
                                      Thomas 18147 @Berchemer last edited by

                                      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/bash

                                      var=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:~

                                      Dr. Bakterius 1 Reply Last reply Reply Quote 0
                                      • Dr. Bakterius
                                        Dr. Bakterius Most Active @Thomas 18147 last edited by

                                        @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 18147 1 Reply Last reply Reply Quote 0
                                        • Thomas 18147
                                          Thomas 18147 @Dr. Bakterius last edited by

                                          @dr-bakterius Danke, so scheint es auch zu funktionieren:

                                          tempi=sensors | grep Package -m 1 | awk '{print $4}' | awk '{print substr($1, length($0)-6,2)}'

                                          gibt es daran etwas auszusetzen?

                                          Dr. Bakterius 1 Reply Last reply Reply Quote 0
                                          • Dr. Bakterius
                                            Dr. Bakterius Most Active @Thomas 18147 last edited by

                                            @thomas-reißmann Wenn es funktioniert... 👍

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.1k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly javascript monitoring
                                            31
                                            129
                                            20229
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo