• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login
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 Aug 6, 2012, 11:12 PM

    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 Aug 10, 2012, 11:55 AM Aug 10, 2012, 8:03 AM

      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 Aug 10, 2012, 4:07 PM

        @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 Aug 22, 2012, 11:26 PM

          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 Aug 26, 2012, 1:28 PM Aug 26, 2012, 1:26 PM

            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 Aug 26, 2012, 5:02 PM Aug 26, 2012, 4:59 PM

              @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 Aug 27, 2012, 11:51 AM

                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 Aug 28, 2012, 10:14 AM

                  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 Sep 3, 2012, 9:28 AM Sep 3, 2012, 9:23 AM

                    @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 Sep 13, 2012, 8:53 PM

                      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 Sep 13, 2012, 9:28 PM

                        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 Sep 13, 2012, 9:29 PM

                          @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 Sep 13, 2012, 9:33 PM

                            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 Sep 13, 2012, 10:11 PM

                              @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 Sep 14, 2012, 10:32 AM

                                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 Sep 18, 2012, 5:48 PM

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

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    saxonbeta
                                    last edited by Sep 29, 2012, 10:12 PM

                                    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 Sep 30, 2012, 12:19 AM

                                      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 Oct 2, 2012, 8:12 AM

                                        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 Dec 5, 2012, 12:16 AM

                                          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.
                                            This community forum collects and processes your personal information.
                                            consent.not_received