How to display Proxmox CPU temperature.

1) 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!

2) Adding the output of sensors to information

Here we will use Nano to edit some files. In your shell, type the following:

    nano /usr/share/perl5/PVE/API2/Nodes.pm 

Next, you can press F6 to 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 press Ctrl+O to save and Ctrl+X to exit.

3) Making space for the new information

Next we will need to edit another file, So once again we will use Nano

Type the following command into your shell: nano /usr/share/pve-manager/js/pvemanagerlib.js

Once in press F6 to 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!

4) Final part to edit

Ok so you know the drill by now press F6 to 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 press Ctrl+O to save and Ctrl+X to exit.

4)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.

Leave a Reply 0

Your email address will not be published. Required fields are marked *