Displaying CPU Temperature in Proxmox Summary in Real Time
Source: Reddit
-
Lets install lm-sensors to show us the information we need. Type the following in the proxmox shell
apt-get install lm-sensors
Next we can check if its working. To do this we can type sensors
The main part we are interested in is:
root@pve:~# sensors coretemp-isa-0000 Adapter: ISA adapter Package id 0: +23.0°C (high = +84.0°C, crit = +100.0°C) Core 0: +21.0°C (high = +84.0°C, crit = +100.0°C) Core 1: +21.0°C (high = +84.0°C, crit = +100.0°C) Core 2: +22.0°C (high = +84.0°C, crit = +100.0°C) Core 3: +19.0°C (high = +84.0°C, crit = +100.0°C)
If you see this you are good to go!
-
Adding the output of sensors to information
Here we will edit some files. In your shell, type the following:
vi /usr/share/perl5/PVE/API2/Nodes.pm
Next, you can search for my $dinfo and press Enter
The code should look like this:
$res->{pveversion} = PVE::pvecfg::package() . "/" . PVE::pvecfg::version_text(); my $dinfo = df('/', 1); # output is bytes
We are going to add the following line of code in between: $res->{thermalstate} = \sensors;
So the final result should look like this:
$res->{pveversion} = PVE::pvecfg::package() . "/" . PVE::pvecfg::version_text(); $res->{thermalstate} = `sensors`; my $dinfo = df('/', 1); # output is bytes
Now save and exit.
-
Making space for the new information
Next we will need to edit another file
Type the following command into your shell:
vi /usr/share/pve-manager/js/pvemanagerlib.js
Once in press search for my widget.pveNodeStatus and press Enter
You will get a snippit of code that looks like this:
Ext.define('PVE.node.StatusView', { extend: 'PVE.panel.StatusView', alias: 'widget.pveNodeStatus', height: 300, bodyPadding: '5 15 5 15', layout: { type: 'table', columns: 2, tableAttrs: { style: { width: '100%' } } },
Next change the bodyPadding: '5 15 5 15', to bodyPadding: '20 15 20 15',
As well as height: 300, to height: 360,
Dont close the file this time!
-
Final part to edit
Now search for PVE Manager Version and press Enter
You will see a section of code like this:
{ itemId: 'version', colspan: 2, printBar: false, title: gettext('PVE Manager Version'), textField: 'pveversion', value: '' }
Ok now we need to add some code after this part. The code is:
{ itemId: 'thermal', colspan: 2, printBar: false, title: gettext('CPU Thermal State'), textField: 'thermalstate', renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)Â/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)Â/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)Â/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)Â/)[1]; return `Core 0: ${c0} ℃ | Core 1: ${c1} ℃ | Core 2: ${c2} ℃ | Core 3: ${c3} ℃` } }
Therefore your final result should look something like this:
{ itemId: 'version', colspan: 2, printBar: false, title: gettext('PVE Manager Version'), textField: 'pveversion', value: '' }, { itemId: 'thermal', colspan: 2, printBar: false, title: gettext('CPU Thermal State'), textField: 'thermalstate', renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)Â/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)Â/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)Â/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)Â/)[1]; return `Core 0: ${c0} ℃ | Core 1: ${c1} ℃ | Core 2: ${c2} ℃ | Core 3: ${c3} ℃` } }
Now we can finally save and exit.
-
Restart the summery page
To do this you will have to type in the following command:
systemctl restart pveproxy
If you got kicked out of the shell or it froze, dont worry this is normal! As the final step, either refresh your webpage with F5 or ideally close you browser and open proxmox again.