Proxmox [Tuto] Afficher la température CPU dans Proxmox VE 8

  • Auteur du sujet Auteur du sujet EVO
  • Date de début Date de début
Voila les valeurs pour CPU RYZEN

Taper sensors
Et récupérer la valeur :

vohhY0a.png


Ensuite pour le fichier NODE :
$res->{thermalstate} = `sensors k10temp-pci-00c3`;

Et dans PVMANAGERLIB :

Code:
{
            itemId: 'thermal',
            colspan: 2,
            printBar: false,
            title: gettext('CPU Thermal State'),
            textField: 'thermalstate',        
            renderer:function(value){
                           const tdie = value.match(/Tctl.*?\+([\d\.]+)/)[1];
                           return `${tdie} °C `;
                }
        }

Bon j'ai modifier un peu le visuel pour ma part, sa donne ceci :

diiM19e.png
Bonjour à tous,

Je confirme qu'avec ton code cela fonctionne très bien chez moi aussi avec Ryzen 5 5560U.

Merci a tous.

Bonne fin de semaine.
 
Ha !
Je peux envisager d'adapter le script alors.

Par contre, pour savoir, est-ce que la chaine de caractères k10temp-pci-00c3 à placer après la commande sensors est la même pour tous ?
Si oui, ce sera facile d'adapter le script, sinon, il me faudra des cobayes pour tester l'extraction de cette chaine avec la commande sensors | grep ... | sed ou awk à voir... .

Dernière chose, @Loutre38
La partie modifiée de ton fichier de configuration, elle ressemble à quoi après la modification ? Car dans le post de @Sebidou , ça n'est pas très clair...
 
Par contre, pour savoir, est-ce que la chaine de caractères k10temp-pci-00c3 à placer après la commande sensors est la même pour tous ?
Si oui, ce sera facile d'adapter le script, sinon, il me faudra des cobayes pour tester l'extraction de cette chaine avec la commande sensors | grep ... | sed ou awk à voir....
Pour moi oui, je ne l'ai pas modifié.
Par conte cela doit dépendre du retour de la commande : sensors et surtout des CPUs.

Dernière chose, @Loutre38
La partie modifiée de ton fichier de configuration, elle ressemble à quoi après la modification ? Car dans le post de @Sebidou , ça n'est pas très clair...

Voici mon code après modification (info de @Sebidou) :
Code:
    {
         itemId: 'thermal',
         colspan: 2,
         printBar: false,
         title: gettext('CPU Thermal State'),
         textField: 'thermalstate',
         renderer:function(value){
               const tdie = value.match(/Tctl.*?\+([\d\.]+)/)[1];
                return `${tdie} °C `;
             }
    }
1697184331774.png
 
Oh mais c'est moi le boulet, la modif avec sensors c'est pour le fichier Node.pm, et la dernière modification c'est un autre fichier 😅
Je ne comprenais pas pourquoi la commande sensors .... n'apparaissait pas dans le dernier fichier :ROFLMAO:
 
Pour la valeur de la sonde cpu, sa dépend surement du CPU Ryzen.
Mais je peux pas te le certifier.
Je viens de le faire avec le sensors -j

Voici les modifs :
Code:
nano /usr/share/perl5/PVE/API2/Nodes.pm

Rechercher ( touche F6 ) : my $dinfo

Dans le bloc :
Code:
$res->{pveversion} = PVE::pvecfg::package() . "/" .
            PVE::pvecfg::version_text();

        my $dinfo = df('/', 1);     # output is bytes

Insérer : $res->{thermalstate} = `sensors -j`;

Code:
nano /usr/share/pve-manager/js/pvemanagerlib.js

Rechercher ( touche F6 ) : itemId: 'load',

Apres le bloc :
Code:
{
            itemId: 'load',
            iconCls: 'fa fa-fw fa-tasks',
            title: gettext('Load average'),
            printBar: false,
            textField: 'loadavg',
        },

Ajouter ceci :
Code:
{
      itemId: 'thermal',
      printBar: false,
      iconCls: 'fa fa-fw fa-thermometer-half',
      title: gettext('Température CPU'),
      textField: 'thermalstate',
      renderer: function(value) {
                let objValue = JSON.parse(value);
                let tctl = objValue["k10temp-pci-00c3"]["Tctl"]["temp1_input"];
                return `${tctl} °C`;
            }
  },

Ce qui vous donne :
Code:
{
            itemId: 'load',
            iconCls: 'fa fa-fw fa-tasks',
            title: gettext('Load average'),
            printBar: false,
            textField: 'loadavg',
        },
{
      itemId: 'thermal',
      printBar: false,
      iconCls: 'fa fa-fw fa-thermometer-half',
      title: gettext('Température CPU'),
      textField: 'thermalstate',
      renderer: function(value) {
                let objValue = JSON.parse(value);
                let tctl = objValue["k10temp-pci-00c3"]["Tctl"]["temp1_input"];
                return `${tctl} °C`;
            }
  },

Relancer la WebUI : systemctl restart pveproxy

Ce qui vous donnera ceci :
MJbdtgT.png
 
Dernière édition:
Hello,
Bon je viens de tenter la modification pour un CPU Intel Core i9-13900H.
Ça ne fonctionne pas : écran loading en continue.

En investiguant, j'ai pu voir que la commande sensors -j ne retournait pas les mêmes chose que sur le vieu Core i5 que j'ai sur le pc fixe.
Et même elle me retourne cette erreur :
Code:
ERROR: Can't get value of subfeature temp1_input: Can't read
Il manque d'ailleurs certains coeurs de CPU... :
1697375575477.png
Voilà la sortie JSON sur le Core i9-13900H :
Code:
{
   "iwlwifi_1-virtual-0":{
      "Adapter": "Virtual device",
      "temp1":{

      }
   },
   "acpitz-acpi-0":{
      "Adapter": "ACPI interface",
      "temp1":{
         "temp1_input": 27.800,
         "temp1_crit": 105.000
      }
   },
   "coretemp-isa-0000":{
      "Adapter": "ISA adapter",
      "Package id 0":{
         "temp1_input": 34.000,
         "temp1_max": 100.000,
         "temp1_crit": 100.000,
         "temp1_crit_alarm": 0.000
      },
      "Core 0":{
         "temp2_input": 25.000,
         "temp2_max": 100.000,
         "temp2_crit": 100.000,
         "temp2_crit_alarm": 0.000
      },
      "Core 4":{
         "temp3_input": 30.000,
         "temp3_max": 100.000,
         "temp3_crit": 100.000,
         "temp3_crit_alarm": 0.000
      },
      "Core 8":{
         "temp4_input": 26.000,
         "temp4_max": 100.000,
         "temp4_crit": 100.000,
         "temp4_crit_alarm": 0.000
      },
      "Core 12":{
         "temp5_input": 32.000,
         "temp5_max": 100.000,
         "temp5_crit": 100.000,
         "temp5_crit_alarm": 0.000
      },
      "Core 16":{
         "temp6_input": 29.000,
         "temp6_max": 100.000,
         "temp6_crit": 100.000,
         "temp6_crit_alarm": 0.000
      },
      "Core 20":{
         "temp7_input": 28.000,
         "temp7_max": 100.000,
         "temp7_crit": 100.000,
         "temp7_crit_alarm": 0.000
      },
      "Core 24":{
         "temp8_input": 30.000,
         "temp8_max": 100.000,
         "temp8_crit": 100.000,
         "temp8_crit_alarm": 0.000
      },
      "Core 25":{
         "temp9_input": 30.000,
         "temp9_max": 100.000,
         "temp9_crit": 100.000,
         "temp9_crit_alarm": 0.000
      },
      "Core 26":{
         "temp10_input": 30.000,
         "temp10_max": 100.000,
         "temp10_crit": 100.000,
         "temp10_crit_alarm": 0.000
      },
      "Core 27":{
         "temp11_input": 30.000,
         "temp11_max": 100.000,
         "temp11_crit": 100.000,
         "temp11_crit_alarm": 0.000
      },
      "Core 28":{
         "temp12_input": 30.000,
         "temp12_max": 100.000,
         "temp12_crit": 100.000,
         "temp12_crit_alarm": 0.000
      },
      "Core 29":{
         "temp13_input": 30.000,
         "temp13_max": 100.000,
         "temp13_crit": 100.000,
         "temp13_crit_alarm": 0.000
      },
      "Core 30":{
         "temp14_input": 30.000,
         "temp14_max": 100.000,
         "temp14_crit": 100.000,
         "temp14_crit_alarm": 0.000
      },
      "Core 31":{
         "temp15_input": 30.000,
         "temp15_max": 100.000,
         "temp15_crit": 100.000,
         "temp15_crit_alarm": 0.000
      }
   },
   "nvme-pci-0100":{
      "Adapter": "PCI adapter",
      "Composite":{
         "temp1_input": 33.850,
         "temp1_max": 89.850,
         "temp1_min": -273.150,
         "temp1_crit": 94.850,
         "temp1_alarm": 0.000
      },
      "Sensor 1":{
         "temp2_input": 33.850,
         "temp2_max": 65261.850,
         "temp2_min": -273.150
      },
      "Sensor 2":{
         "temp3_input": 21.850,
         "temp3_max": 65261.850,
         "temp3_min": -273.150
      }
   }
}

@EVOTk @Drthrax74 @Sebidou
Ssauriez-vous comment faire pour récupérer tous les cœurs ?

PS : d'ailleurs dans le JSON les n° des coeurs ne correspondent pas au n° du tempXX :ROFLMAO:
 
Hello,
Bon je viens de tenter la modification pour un CPU Intel Core i9-13900H.
Ça ne fonctionne pas : écran loading en continue.

En investiguant, j'ai pu voir que la commande sensors -j ne retournait pas les mêmes chose que sur le vieu Core i5 que j'ai sur le pc fixe.
Et même elle me retourne cette erreur :
Code:
ERROR: Can't get value of subfeature temp1_input: Can't read
Il manque d'ailleurs certains coeurs de CPU... :
Voir la pièce jointe 10259
Voilà la sortie JSON sur le Core i9-13900H :
Code:
{
   "iwlwifi_1-virtual-0":{
      "Adapter": "Virtual device",
      "temp1":{

      }
   },
   "acpitz-acpi-0":{
      "Adapter": "ACPI interface",
      "temp1":{
         "temp1_input": 27.800,
         "temp1_crit": 105.000
      }
   },
   "coretemp-isa-0000":{
      "Adapter": "ISA adapter",
      "Package id 0":{
         "temp1_input": 34.000,
         "temp1_max": 100.000,
         "temp1_crit": 100.000,
         "temp1_crit_alarm": 0.000
      },
      "Core 0":{
         "temp2_input": 25.000,
         "temp2_max": 100.000,
         "temp2_crit": 100.000,
         "temp2_crit_alarm": 0.000
      },
      "Core 4":{
         "temp3_input": 30.000,
         "temp3_max": 100.000,
         "temp3_crit": 100.000,
         "temp3_crit_alarm": 0.000
      },
      "Core 8":{
         "temp4_input": 26.000,
         "temp4_max": 100.000,
         "temp4_crit": 100.000,
         "temp4_crit_alarm": 0.000
      },
      "Core 12":{
         "temp5_input": 32.000,
         "temp5_max": 100.000,
         "temp5_crit": 100.000,
         "temp5_crit_alarm": 0.000
      },
      "Core 16":{
         "temp6_input": 29.000,
         "temp6_max": 100.000,
         "temp6_crit": 100.000,
         "temp6_crit_alarm": 0.000
      },
      "Core 20":{
         "temp7_input": 28.000,
         "temp7_max": 100.000,
         "temp7_crit": 100.000,
         "temp7_crit_alarm": 0.000
      },
      "Core 24":{
         "temp8_input": 30.000,
         "temp8_max": 100.000,
         "temp8_crit": 100.000,
         "temp8_crit_alarm": 0.000
      },
      "Core 25":{
         "temp9_input": 30.000,
         "temp9_max": 100.000,
         "temp9_crit": 100.000,
         "temp9_crit_alarm": 0.000
      },
      "Core 26":{
         "temp10_input": 30.000,
         "temp10_max": 100.000,
         "temp10_crit": 100.000,
         "temp10_crit_alarm": 0.000
      },
      "Core 27":{
         "temp11_input": 30.000,
         "temp11_max": 100.000,
         "temp11_crit": 100.000,
         "temp11_crit_alarm": 0.000
      },
      "Core 28":{
         "temp12_input": 30.000,
         "temp12_max": 100.000,
         "temp12_crit": 100.000,
         "temp12_crit_alarm": 0.000
      },
      "Core 29":{
         "temp13_input": 30.000,
         "temp13_max": 100.000,
         "temp13_crit": 100.000,
         "temp13_crit_alarm": 0.000
      },
      "Core 30":{
         "temp14_input": 30.000,
         "temp14_max": 100.000,
         "temp14_crit": 100.000,
         "temp14_crit_alarm": 0.000
      },
      "Core 31":{
         "temp15_input": 30.000,
         "temp15_max": 100.000,
         "temp15_crit": 100.000,
         "temp15_crit_alarm": 0.000
      }
   },
   "nvme-pci-0100":{
      "Adapter": "PCI adapter",
      "Composite":{
         "temp1_input": 33.850,
         "temp1_max": 89.850,
         "temp1_min": -273.150,
         "temp1_crit": 94.850,
         "temp1_alarm": 0.000
      },
      "Sensor 1":{
         "temp2_input": 33.850,
         "temp2_max": 65261.850,
         "temp2_min": -273.150
      },
      "Sensor 2":{
         "temp3_input": 21.850,
         "temp3_max": 65261.850,
         "temp3_min": -273.150
      }
   }
}

@EVOTk @Drthrax74 @Sebidou
Ssauriez-vous comment faire pour récupérer tous les cœurs ?

PS : d'ailleurs dans le JSON les n° des coeurs ne correspondent pas au n° du tempXX :ROFLMAO:
C'est quoi ton renderer que tu as fait ?
Pourquoi vouloir la temp de tous les cœurs ?
Le package ne suffit pas ?
 
C'est quoi ton renderer que tu as fait ?
Pourquoi vouloir la temp de tous les cœurs ?
Le package ne suffit pas ?
Heuuu... je n'ai pas tout compris 😅
Je n'ai fait qu'appliquer le tuto à la lettre, et ce faisant, l'interface du "summary" ne fonctionne plus. J'ai la roulette infinie.
 
Heuuu... je n'ai pas tout compris 😅
Je n'ai fait qu'appliquer le tuto à la lettre, et ce faisant, l'interface du "summary" ne fonctionne plus. J'ai la roulette infinie.
Cette partie la pour toi, tu as mis quoi ?

Code:
{
      itemId: 'thermal',
      printBar: false,
      iconCls: 'fa fa-fw fa-thermometer-half',
      title: gettext('Température CPU'),
      textField: 'thermalstate',
      renderer: function(value) {
                let objValue = JSON.parse(value);
                let tctl = objValue["k10temp-pci-00c3"]["Tctl"]["temp1_input"];
                return `${tctl} °C`;
            }
  },
 
Alors je n'y arrive pas non plus :D

Voici le résultat de la commande utilisée :

Code:
root@batuu:~# sensors k10temp-pci-00c3
k10temp-pci-00c3
Adapter: PCI adapter
Tctl:         +28.0°C
 
Voila les valeurs pour CPU RYZEN

Taper sensors
Et récupérer la valeur :

vohhY0a.png


Ensuite pour le fichier NODE :
$res->{thermalstate} = `sensors k10temp-pci-00c3`;

Et dans PVMANAGERLIB :

Code:
{
            itemId: 'thermal',
            colspan: 2,
            printBar: false,
            title: gettext('CPU Thermal State'),
            textField: 'thermalstate',        
            renderer:function(value){
                           const tdie = value.match(/Tctl.*?\+([\d\.]+)/)[1];
                           return `${tdie} °C `;
                }
        }

Bon j'ai modifier un peu le visuel pour ma part, sa donne ceci :

diiM19e.png
Hello !

Merci beaucoup, cela a fonctionné pour moi avec un Ryzen 5 7600X également :

1700043855467.png

J'ai fais quelques ajustement sur la variable Tdie remplacé par Tctl, ça fait plus propre :)
 
Voila les valeurs pour CPU RYZEN

Taper sensors
Et récupérer la valeur :

vohhY0a.png


Ensuite pour le fichier NODE :
$res->{thermalstate} = `sensors k10temp-pci-00c3`;

Et dans PVMANAGERLIB :

Code:
{
            itemId: 'thermal',
            colspan: 2,
            printBar: false,
            title: gettext('CPU Thermal State'),
            textField: 'thermalstate',        
            renderer:function(value){
                           const tdie = value.match(/Tctl.*?\+([\d\.]+)/)[1];
                           return `${tdie} °C `;
                }
        }

Bon j'ai modifier un peu le visuel pour ma part, sa donne ceci :

diiM19e.png
Je confirme sa fonctionne de mon côter les modification merci a toi ;)
Bonne soirée
 
Hello à tous, je tente d'exécuter le fameux script fourni mais voici l'erreur que j'ai ...
Capture d'écran 2024-03-28 125042.png
Si quelqu'un saurait m'aider ça serait top !
 
Salut @SultaN

Je n'ai pas de NUC AMD sur lequel est proxmox, donc je ne peux pas tester le script que j'ai fourni.

Cela dit, pour un NUC Intel que j'ai, la version intel bien que fonctionnel du point de vue du script, fait que l'interface est figée, et n'affiche pas les témpérature...
J'ai dû renoncer à ça sur mon NUC Intel.
 
Salut @SultaN

Je n'ai pas de NUC AMD sur lequel est proxmox, donc je ne peux pas tester le script que j'ai fourni.

Cela dit, pour un NUC Intel que j'ai, la version intel bien que fonctionnel du point de vue du script, fait que l'interface est figée, et n'affiche pas les témpérature...
J'ai dû renoncer à ça sur mon NUC Intel.
Merci pour ton retour, j'ai finalement réussi à exécuter le script mais malheureusement je n'ai toujours pas la valeur de température sur mon interface...
 
Salut à vous.

Je suis parvenu avec pas mal de difficultés à afficher la température de mon CPU AMD GX-222GC
Pour ma part je n'avais ni "Tdie" ni "Tclt" mais "temp1" à la place... j'ai mis un moment à comprendre...

Code:
root@Pmox:~# sensors
radeon-pci-0008
Adapter: PCI adapter
temp1:        +48.0°C  (crit = +120.0°C, hyst = +90.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +49.2°C  (high = +70.0°C)
                       (crit = +100.0°C, hyst = +99.0°C)

Du coup ca fonctionne avec :
Code:
        {
            itemId: 'thermal',
            colspan: 2,
            printBar: false,
            title: gettext('CPU Temp'),
            textField: 'thermalstate',        
            renderer:function(value){
                           const tdie = value.match(/temp1.*?\+([\d\.]+)/)[1];
                           return `${tdie} °C `;
                                                 }
        }

1712443112058.png
 
Dernière édition:
Bien joué pour cette modif.
Pour info avec la version 8.3, recherche la chaine "Manager Version" au lieu de "PVE Manager Version", voir la chaine "pveversion"
Ligne 45051
 
Salutations à tous !

Je suis arrivé sur ce forum tout-à-fait par hasard... je cherchais justement une solution pour intégrer la température de mon CPU sur la page "Sommaire" de mon Proxmox fraîchement installé.

Comme j'avais des soucis de température, et que mon CPU semblait chauffer sans raison alors qu'il était en mode calme (idle), je voulais justement pouvoir voir à quelle température mon Proxmox tournait. Finalement, j'ai démonté le PC, le water-cooling, le CPU ; tout nettoyé, remis de la pâte, et tout refixé et ça semble reparti... j'ai pas trop bien compris ce qu'il s'est passé. Peut-être un défaut de montage (je suis pourtant habitué à faire ça régulièrement, mais bon, on n'est pas à l'abri de faire une erreur). Enfin bref...

Donc, j'ai suivi ce tutoriel qui, je dois l'avouer, est encore fonctionnel, même sous Proxmox VE 9 !
Certes, ce topic est un peu ancien, mais il reste très utile. C'est pourquoi j'ai souhaité apporter ma petite pierre à l'édifice.

Toutefois, il y a quelques étapes qui sont nettement différentes selon le type de CPU que l'on souhaite surveiller. Pour ma part, j'ai un Core i5 8600 et voici ce que j'ai dû corriger pour que Proxmox puisse m'afficher la température. En somme, j'ai suivi ce post très précisément ! J'ai fait les mêmes modifications pour le fichier Nodes.pm mais j'ai adapté le fichier pvemanagerlib.js de cette façon :

Au même endroit dans le fichier, recherche de $dinfo, puis j'ai ajouté ce code :
Code:
        {
            itemId: 'thermal',
            printBar: false,
            iconCls: 'fa fa-fw fa-thermometer-half',
            title: gettext('CPU Temperature'),
            textField: 'thermalstate',
              renderer: function(value) {
                let objValue = JSON.parse(value);
                let tctl = objValue["coretemp-isa-0000"]["Package id 0"]["temp1_input"];
                return `${tctl} °C`;
                }
        },

ce qui donne ceci :
Code:
        {
            itemId: 'load',
            iconCls: 'fa fa-fw fa-tasks',
            title: gettext('Load average'),
            printBar: false,
            textField: 'loadavg',
        },
        {
            itemId: 'thermal',
            printBar: false,
            iconCls: 'fa fa-fw fa-thermometer-half',
            title: gettext('CPU Temperature'),
            textField: 'thermalstate',
              renderer: function(value) {
                let objValue = JSON.parse(value);
                let tctl = objValue["coretemp-isa-0000"]["Package id 0"]["temp1_input"];
                return `${tctl} °C`;
                }
        },

Et le résultat dans Proxmox (ce CPU est reconnu pour chauffer un peu, malheureusement, même en 'idle'. Avant, je tournais à 72/74°, avec la même configuration, même OS Proxmox, sans VM en fonctionnement) :
Screenshot 2025-10-13 171054.png

Pourquoi ces modifications ? Tout simplement parce que la commande sensors ne renvoit pas forcément les mêmes résultats, même si le fabricant est identique (ici, Intel).

Sortie des commandes sensors -j et sensors :
Screenshot 2025-10-13 171946.png

J'ai donc dû piocher des infos ailleurs pour que ça fonctionne :
Screenshot 2025-10-13 171656_2.png
- couleur "jaune" = le nom de la sonde détectée par Proxmox sur ce CPU Core i5 8600
- couleur "lavande" = la moyenne des températures de la totalité des coeurs de ce CPU (ce n'est pas une vraie moyenne, mais c'est tout comme)
- enfin, la croix rouge ici montre que, selon les sorties dans Proxmox, les infos ne sont pas toujours identiques, surtout la dernière ! Ici on remarque qu'elle affiche la même info que celle du CPU... Or, il s'agit en réalité de la température du Chipset de la Carte Mère. Et elle varie beaucoup moins que celle du CPU, ce qui m'a permis de comprendre que la valeur de température que je voulais voir apparaître ne correspondait pas au CPU... et celle entre les 2, correspond à la température interne du boitier

Conclusion : c'est en testant que l'on devient testeur... XD
Je dis ça parce que c'est la première fois que je fais ce type d'ajustement sur un système Linux (je connais un peu Debian, mais je ne maîtrise absolument pas l'écosystème dans son ensemble. Par contre, j'ai des notions assez solides, on va dire). Bref, je n'ai pas peur de mettre les mains dans le cambouis technique par contre. Donc j'y suis allé, et j'ai testé... jusqu'à ce que ça fonctionne !

Voilà ! En espérant que ça en aide d'autres qui passeraient par là. Un jour.

Au plaisir,
V.