Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    HOWTO: Temperature Monitoring with coretemp in Sysinfo widget

    Scheduled Pinned Locked Moved Hardware
    38 Posts 16 Posters 18.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      show-p1984
      last edited by

      I installed 2.0.1-RELEASE (amd64) two days ago and after everything had been set up (voip… vomit) I wanted to have a way to show the current CPU temp of my Atom N550 on the dashboard.
      Since this wasn't included in the original release I got creative and after searching the board I came up with this.
      I know that there are probably way better ways to do this and which are already included in a future version of pfsense but maybe this is useable for anyone else. :)
      (I like it. Simple, in style with pfsense and informative :p)

      My modification features:
      fetch temps from sysctl
      CPU Temperature @ sysinfo widget
      Multicore support

      What does it look like?

      Here is what you need to do:

      First of all install the coretemp module.
      for 32bit: http://files.pfsense.org/jimp/ko-8.1/i386/coretemp.ko
      for 64bit: http://files.pfsense.org/jimp/ko-8.1/amd64/coretemp.ko

      1. Copy the above downloaded appropriate (32 or 64) coretemp.ko into /boot/modules. (since I couldn't get wget to install because of a 404 error from the installation package I was forced to use WinSCP to copy it over)
      2. Edit /boot/loader.conf.local and add

      coretemp_load="YES"
      

      to the end.
      3. open a shell, execute:

      kldload coretemp
      

      Now 'sysctl -a | grep temperature' should throw you your cpu temps.

      To get this shown on the dashboard I modified these files:

      /usr/local/www/includes/functions.inc.php

      
      @@ -136,7 +136,10 @@
      
       function has_temp() {
      
      -	/* no known temp monitors available at present */
      +	/* Figure out if we support sysctl temperatures */
      +	if(`sysctl -a | grep temperature` <> "") {
      +		return true;
      +	}
      
       	/* should only reach here if there is no hardware monitor */
       	return false;
      @@ -148,12 +151,30 @@
       }
      
       function get_temp() {
      -	switch(get_hwtype()) {
      -		default:
      -			return;
      +
      +	//get our temperatures
      +	$temp = `sysctl -a | grep temperature | cut -d":" -f2`;
      +
      +	//remove empty lines
      +	$temp = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $temp);
      +
      +	//split on new lines
      +	$temp = preg_split( '/\r\n|\r|\n/', $temp );
      +
      +	for ($i=0; $i<sizeof($temp); $i++)="" {<br="">+		//check for empty array elements and remove them
      +		if ($temp[$i] == "") {
      +			unset($temp[$i]);
      +			continue;
      +		}
      +		//Cut "C" on each lines end
      +		$temp[$i] = substr_replace($temp[$i] ,"",-1);
      +
      +		//remove all whitespaces
      +		$temp[$i] = preg_replace('/\s+/', '', $temp[$i]);
       	}
      
      -	return $ret;
      +	return $temp;
       }
      
       function disk_usage()</sizeof($temp);> 
      

      /usr/local/www/widgets/widgets/system_information.widget.php

      @@ -232,12 +232,15 @@
       		if(has_temp()):
       ?>
      
      -			Temperature
      +			CPU Temperature
      
      -				
      -				![](./themes/<?= $g[)/images/misc/bar_left.gif" height="15" width="4" border="0" align="middle" alt="left bar" />![](./themes/<?= $g[)/images/misc/bar_blue.gif" height="15" name="tempwidtha" id="tempwidtha" width="" border="0" align="middle" alt="red bar" />![](./themes/<?= $g[)/images/misc/bar_gray.gif" height="15" name="tempwidthb" id="tempwidthb" width="" border="0" align="middle" alt="gray bar" />![](./themes/<?= $g[)/images/misc/bar_right.gif" height="15" width="5" border="0" align="middle" alt="right bar" />
      -				 
      -				" />
      +				+				for ($i=0; $i <sizeof($temp); $i++)="" {="" ?="">+					![](./themes/<?= $g[)/images/misc/bar_left.gif" height="15" width="4" border="0" align="middle" alt="left bar" />![](./themes/<?= $g[)/images/misc/bar_blue.gif" height="15" name="tempwidtha" id="tempwidtha" width="" border="0" align="middle" alt="red bar" />![](./themes/<?= $g[)/images/misc/bar_gray.gif" height="15" name="tempwidthb" id="tempwidthb" width="" border="0" align="middle" alt="gray bar" />![](./themes/<?= $g[)/images/misc/bar_right.gif" height="15" width="5" border="0" align="middle" alt="right bar" />
      +					 
      +					" />
      +					
      
      +</sizeof($temp);> 
      

      or just apply this patch:
      http://rserver8.de/pfsense/pfsense_coretemp_sysinfodashboard.patch

      This thread contains information I searched together from this forum as well as genuine stuff.
      Sources:
      http://forum.pfsense.org/index.php/topic,39595.0.html
      http://forum.pfsense.org/index.php?topic=49635.15
      My brain.

      Before you ask questions, read and understand this! -> catb.org/~esr/faqs/smart-questions.html

      1 Reply Last reply Reply Quote 0
      • S
        stratoscott
        last edited by

        Hi,
        I have followed touy post and now I have this error message on webgui interface after copy/paste the "function has_temp" in my functions.inc.php :
        Parse error: syntax error, unexpected T_IF in /usr/local/www/includes/functions.inc.php on line 141
        The error is on this line :
        if (sysctl -a | grep temperature <> "") {
        An idea ?

        1 Reply Last reply Reply Quote 0
        • S
          show-p1984
          last edited by

          @stratoscott:

          Hi,
          I have followed touy post and now I have this error message on webgui interface after copy/paste the "function has_temp" in my functions.inc.php :
          Parse error: syntax error, unexpected T_IF in /usr/local/www/includes/functions.inc.php on line 141
          The error is on this line :
          if (sysctl -a | grep temperature <> "") {
          An idea ?

          Give me your whole file after the patch was applied and I can tell you what went wrong.
          Usually something like this is caused by applying a patch to another version of the file. Mine was 2.0.1 amd64, so if you apply the patch to anything else, it is likely to break if the file has changed and you just blindly apply the patch :)

          Before you ask questions, read and understand this! -> catb.org/~esr/faqs/smart-questions.html

          1 Reply Last reply Reply Quote 0
          • K
            kb1ujs
            last edited by

            I followed the instructions here on an i386 install of 2.0.1 and it worked fine.  I did manually edit the files, but it looked like the patches would be the same for i386.

            1 Reply Last reply Reply Quote 0
            • H
              hisoka01
              last edited by

              Thanks!! I followed your instructions and successfully added temperature display to sysinfo.  ;) :D ;D
              It seems that there is a "}" omitted in /usr/local/www/includes/functions.inc.php for the statement "switch(get_hwtype()) { …" in your post. ???

              I just changed cpu to core, since my system display one more value.. :o

              temp.jpg
              temp.jpg_thumb

              1 Reply Last reply Reply Quote 0
              • S
                show-p1984
                last edited by

                @hisoka01:

                Thanks!! I followed your instructions and successfully added temperature display to sysinfo.  ;) :D ;D
                It seems that there is a "}" omitted in /usr/local/www/includes/functions.inc.php for the statement "switch(get_hwtype()) { …" in your post. ???

                I just changed cpu to core, since my system display one more value.. :o

                Glad it worked for you :)
                There is no } omitted. I posted the file modifications in the patch format, that means:

                -	switch(get_hwtype()) {
                -		default:
                -			return;
                

                Is to be removed.

                The first character in each line means:

                (nothing) = Do nothing, leave everything as is.

                (minus) = remove this line.

                [+] (plus( = insert this line.

                marked lines from the code in my post you should have your file. :)

                (If you did everything right)

                You can check for your additional value with:

                sysctl -a | grep temperature
                

                This will show you what it is. Maybe your board has a pwm sensor or a nb sensor too.

                Before you ask questions, read and understand this! -> catb.org/~esr/faqs/smart-questions.html

                1 Reply Last reply Reply Quote 0
                • H
                  hisoka01
                  last edited by

                  I finally discover a { without+- under the for loop, sorry for that~ :o

                  "sysctl -a | grep temperature" shows:

                  
                  hw.acpi.thermal.tz0.temperature: 26.8C
                  dev.cpu.0.temperature: 40.0C
                  dev.cpu.1.temperature: 40.0C
                  dev.cpu.2.temperature: 45.0C
                  dev.cpu.3.temperature: 45.0C
                  
                  

                  If 26.8C indicate CPU temp by another sensor, it seems core temp should be more accurate… :o very big difference indeed :'(

                  1 Reply Last reply Reply Quote 0
                  • F
                    fredfred5
                    last edited by

                    Just configured this on my 2.0.1 amd64 install and its working perfectly  8)

                    Thanks!

                    1 Reply Last reply Reply Quote 0
                    • S
                      stratoscott
                      last edited by

                      @show-p1984:

                      Give me your whole file after the patch was applied and I can tell you what went wrong.
                      Usually something like this is caused by applying a patch to another version of the file. Mine was 2.0.1 amd64, so if you apply the patch to anything else, it is likely to break if the file has changed and you just blindly apply the patch :)

                      Hello,
                      sorry but I was very busy, I send tot you a pm with the file. It's the same version.
                      Thanks

                      1 Reply Last reply Reply Quote 0
                      • simon24S
                        simon24
                        last edited by

                        Hi!

                        I've done exactly like U wrote but it doesn't work…
                        I attached my files so u can look if there is something wrong. I'm not getting any errors in any case.

                        But when I'm running sysctl -a | grep temperature it doesnt do anything…

                        [2.0.1-RELEASE][root@pfsense.localdomain]/root(14): sysctl -a | grep temperature
                        [2.0.1-RELEASE][root@pfsense.localdomain]/root(15):
                        
                        

                        I've allready wrote kldload coretemp but if I'm doing it again it will just print a message: File exists

                        [2.0.1-RELEASE][root@pfsense.localdomain]/root(15): kldload coretemp
                        kldload: can't load coretemp: File exists
                        
                        

                        What's wrong? :)

                        system_information.widget.php.txt
                        functions.inc.php.txt

                        1 Reply Last reply Reply Quote 0
                        • stephenw10S
                          stephenw10 Netgate Administrator
                          last edited by

                          If you don't get a sysctl value at the command line the widget will never work.
                          What cpu do you have?

                          Steve

                          1 Reply Last reply Reply Quote 0
                          • simon24S
                            simon24
                            last edited by

                            @stephenw10:

                            If you don't get a sysctl value at the command line the widget will never work.
                            What cpu do you have?

                            Steve

                            AMD Athlon™ 64 X2 Dual Core Processor 6000+

                            1 Reply Last reply Reply Quote 0
                            • stephenw10S
                              stephenw10 Netgate Administrator
                              last edited by

                              Not an Intel Core processor hence coretemp won't work.
                              Instead you need the amdtemp.ko module (32bit or 64bit).

                              Steve

                              1 Reply Last reply Reply Quote 0
                              • simon24S
                                simon24
                                last edited by

                                @stephenw10:

                                Not an Intel Core processor hence coretemp won't work.
                                Instead you need the amdtemp.ko module (32bit or 64bit).

                                Steve

                                Thanks! I didn't realise it was for Intel :)
                                Now it works like a charm! :)

                                1 Reply Last reply Reply Quote 0
                                • stephenw10S
                                  stephenw10 Netgate Administrator
                                  last edited by

                                  Yes, the name is a little ambiguous. Glad it worked I've not ever run it myself.  ;)

                                  Steve

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    RocKKer
                                    last edited by

                                    Works as described, I patched manually. Thanks great work show-p1984!

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      saxonbeta
                                      last edited by

                                      I tried this on my system, but it did not work :(. I have a AMD Athlon™ XP 3200+ and I used the amdtemp.ko module.

                                      Any sugestions???

                                      1 Reply Last reply Reply Quote 0
                                      • stephenw10S
                                        stephenw10 Netgate Administrator
                                        last edited by

                                        The amdtemp module supports AMD K8 microarchitecture or newer. The Athlon XP is K7.

                                        To get the temperature of earlier CPUs you could try using mbmon. You will have to do some coding to make it work with this widget though.

                                        Steve

                                        1 Reply Last reply Reply Quote 0
                                        • E
                                          esnakk
                                          last edited by

                                          Thanks! This is great and should be included in the default install IMO!!

                                          Again, Thanks alot!

                                          Cheers
                                          E

                                          –
                                          Cheers,
                                          E

                                          1 Reply Last reply Reply Quote 0
                                          • K
                                            kilthro
                                            last edited by

                                            Hello,
                                            I tried applying the patch that is located in the main post. I downloaded the package system patch and have tried it via command line with the same result. When I test the patch I get errors saying it cant be applied cleanly. Is this due to showp1984 stuff? should it be removed? not that experienced with troubleshooting patches..

                                            Output of full patch apply test:

                                            /usr/bin/patch –directory=/ -t -p4 -i /var/patches/50be92a047646.patch --check --forward

                                            Hmm...  Looks like a unified diff to me...
                                            The text leading up to this was:

                                            |diff -Naur /home/showp1984/Desktop/a/usr/local/www/includes/functions.inc.php /home/showp1984/Desktop/b/usr/local/www/includes/functions.inc.php
                                            |--- /home/showp1984/Desktop/a/usr/local/www/includes/functions.inc.php 2012-08-07 01:01:33.902057913 +0200

                                            +++ /home/showp1984/Desktop/b/usr/local/www/includes/functions.inc.php 2012-08-06 06:13:12.000000000 +0200
                                            No file to patch.  Skipping...
                                            Hunk #1 ignored at 136.
                                            Hunk #2 ignored at 151.
                                            2 out of 2 hunks ignored--saving rejects to a/usr/local/www/includes/functions.inc.php.rej
                                            Hmm...  The next patch looks like a unified diff to me...
                                            The text leading up to this was:

                                            |diff -Naur /home/showp1984/Desktop/a/usr/local/www/widgets/widgets/system_information.widget.php /home/showp1984/Desktop/b/usr/local/www/widgets/widgets/system_information.widget.php
                                            |--- /home/showp1984/Desktop/a/usr/local/www/widgets/widgets/system_information.widget.php 2012-08-07 01:01:27.446742521 +0200

                                            +++ /home/showp1984/Desktop/b/usr/local/www/widgets/widgets/system_information.widget.php 2012-08-06 06:10:46.000000000 +0200
                                            No file to patch.  Skipping...
                                            Hunk #1 ignored at 232.
                                            1 out of 1 hunks ignored--saving rejects to a/usr/local/www/widgets/widgets/system_information.widget.php.rej
                                            done
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.