HOWTO: Temperature Monitoring with coretemp in Sysinfo widget
-
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 supportHere 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.ko1. 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 addcoretemp_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 - - /images/misc/bar_left.gif" height="15" width="4" border="0" align="middle" alt="left bar" />/images/misc/bar_blue.gif" height="15" name="tempwidtha" id="tempwidtha" width="" border="0" align="middle" alt="red bar" />/images/misc/bar_gray.gif" height="15" name="tempwidthb" id="tempwidthb" width="" border="0" align="middle" alt="gray bar" />/images/misc/bar_right.gif" height="15" width="5" border="0" align="middle" alt="right bar" /> - - " /> + + for ($i=0; $i <sizeof($temp); $i++)="" {="" ?="">+ /images/misc/bar_left.gif" height="15" width="4" border="0" align="middle" alt="left bar" />/images/misc/bar_blue.gif" height="15" name="tempwidtha" id="tempwidtha" width="" border="0" align="middle" alt="red bar" />/images/misc/bar_gray.gif" height="15" name="tempwidthb" id="tempwidthb" width="" border="0" align="middle" alt="gray bar" />/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.patchThis 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. -
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 ? -
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 :) -
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.
-
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
-
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.
-
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 :'(
-
-
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 -
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? :)
-
If you don't get a sysctl value at the command line the widget will never work.
What cpu do you have?Steve
-
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+
-
-
-
Yes, the name is a little ambiguous. Glad it worked I've not ever run it myself. ;)
Steve
-
Works as described, I patched manually. Thanks great work show-p1984!
-
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???
-
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
-
Thanks! This is great and should be included in the default install IMO!!
Again, Thanks alot!
Cheers
E -
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