http://www.perlmonks.org?node_id=565803

Bruce32903 has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to develop the ability to read the temperature sensors on my motherboard with perl. I have been doing a lot of Googling and have learned quite a bit. But, I seem to be running out of time faster than I am running out of things to learn. Thus, I'm hoping someone out there has done something similar and can give me a little help.

Here are a few details of where I am at:

OS: The system has Win-XP on it. Thus, it would be nice to be able to use something like ActivePerl (www.activestate.com) and XP. I would prefer to use Linux, but it is an XP box so this has to be on my wish list. There will be times when I must be running XP and a live-CD will not always be an option.

LINUX can be run at times from a live CD. Damn Small Linux (www.damnsmalllinux.org) with its MyDSL system for adding packages looks very handy. The Damn Small Linux - Not (www.damnsmalllinux.org/dsl-n/) big brother looks even better.

MOTHERBOARD: Ampro LittleBoard 800 with a Pentium M processor.

The motherboard has an Intel 82810DB I/O controller hub "Northbridge" on the System Management Bus (SMBus) at $D800 as reported by SpeedFan.

The motherboard has an Analog Devices ADM1021 temperature chip on the SMBus at $4E as reported by SpeedFan.

The SpeedFan 4.29 package (www.almico.com/speedfan.php) found two temperature sensors on the motherboard and one in the hard drive. The motherboard sensors are accessed via the SMBus (www.smbus.org/specs/) and the hard drive sensor is accesses via the Self Monitoring Analysis and Reporting Technology System (SMART).

Included is a dump of the information available through SpeedFan. Most of it makes sense but I don't know how to get to it from perl. I don't know what is being referred to with the "sensors base address = $0C00" statement. This address doesn't match the SMBus or other sensor address given.

There are probably sensors or LMsensors packages available that will be helpful on the Linux operating system. I doubt that there is a similar resource available under Win-XP.

=== READINGS TAB of SpeedFan ===
Win9x:NO 64Bit:NO GiveIO:YES SpeedFan:YES
I/O properly initialized
Linked ISA BUS at $0290
Linked Intel 82801DB ICH4 SMBUS at $D800
Scanning ISA BUS at $0290...
SuperIO Chip=LPC47b27x
Sensor's Base Address : $0C00
Scanning Intel SMBus at $D800...
ADM1021 (ID=$00) found on SMBus at $4E
SMART Enabled for drive 0
Found HTC426060G9AT00 (60.0GB)
End of detection

=== REPORTED TEMPERATURES by SpeedFan ===
Local Temp: 28C
Remote Temp: 44C
HD0: 28C

=== INFO TAB of SpeedFan ===
Scanning SMBus at $D800...
Decoding DIMM #0
Memory type is DDR
Module Rows : 2
Levels : 2.5V
Parity : NO PARITY
Refresh Rate : 7.8us
Total Size : 1024MB

Bottom line ... I would like to read the two SMBus motherboard temperature sensors and the one SMART hard drive temperature sensor from perl. Linux is my preferred OS (live-CD would be used), XP is the OS that must be permanently on the box. Any ideas or suggestions would be appreciated.

Thank you,
Bruce