<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>An It-Slave in the digital saltmine &#187; 1-wire</title>
	<atom:link href="http://www.it-slav.net/blogs/category/1-wire/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.it-slav.net/blogs</link>
	<description>Another Blog from a Geek that has no life</description>
	<lastBuildDate>Fri, 02 Jul 2010 07:33:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Nagios or op5 Monitor plugin for 1-wire humidity measurement</title>
		<link>http://www.it-slav.net/blogs/2009/02/25/nagios-or-op5-monitor-plugin-for-1-wire-humidity-measurement/</link>
		<comments>http://www.it-slav.net/blogs/2009/02/25/nagios-or-op5-monitor-plugin-for-1-wire-humidity-measurement/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 18:46:35 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Cool things]]></category>
		<category><![CDATA[Geek stuff]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[op5 Monitor]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[Nagios lugin humidity]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=802</guid>
		<description><![CDATA[
This article describe howto get a 1-wire humidity probe to work with Nagios or op5 Monitor.
In an earlier article I have described a 1-wire temperature plugin.


Pre requriments
To get it working you need:

1-wire humidity probe i.e. this, it is based on  DS2438 &#38; HIH-4000
A working owfs installation, instructions can be found here 
Nagios or op5 [...]]]></description>
			<content:encoded><![CDATA[<p><br class="spacer_" /></p>
<p>This article describe howto get a 1-wire humidity probe to work with Nagios or op5 Monitor.</p>
<p>In an earlier article I have described a <a href="http://www.it-slav.net/blogs/?p=115" target="_blank">1-wire temperature plugin</a>.</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<h2>Pre requriments</h2>
<p>To get it working you need:</p>
<ul>
<li>1-wire humidity probe i.e. <a href="https://shop.temperatur.nu/luftfuktighetsmatare-for-1wire-p-72.html?osCsid=cb8ce34ce11b4856fb5fc8134ba52cc4" target="_blank">this</a>, it is based on  DS2438 &amp; HIH-4000</li>
<li>A working <a href="http://www.owfs.org/" target="_blank">owfs</a> installation, instructions can be found <a href="http://www.it-slav.net/blogs/?p=67" target="_blank">here</a> </li>
<li><a href="http://www.nagios.org" target="_blank">Nagios</a> or <a href="http://www.op5.com/op5/products/monitor" target="_blank">op5 Monitor</a></li>
</ul>
<p><span id="more-802"></span></p>
<p><br class="spacer_" /></p>
<h2>check_1-wirehumid</h2>
<p>The plugin is written in perl and version 1.0 can be downloaded <a href="http://www.it-slav.net/~peter/check_1-wirehumid/version-1.0/" target="_blank">here</a></p>
<pre>#!/usr/bin/perl -w
#
# Check humidity of 1Wire device
# Requires use of Fuse and owfs
#
#
# By Peter Andersson
# peter@it-slav.net
# http://www.it-slav.net/blogs/?p=802
# Licence GPLv2
# Version 1.0

use strict;
use Getopt::Std;
use OW;

my $owserver = "127.0.0.1:3001";
my(%ERRORS) = ( OK=&gt;0, WARNING=&gt;1, CRITICAL=&gt;2, UNKNOWN=&gt;3 );

my $humidity;
my $status=$ERRORS{OK};;
my $message;

my $debug_flag=0;

our($opt_c, $opt_w, $opt_W, $opt_C, $opt_h, $opt_o, $opt_i);

getopts("w:W:c:C:ho:i:");

sub printhelp () {
	print "Usage: check_1-wirehumid [-h] -c lowhumidcritical -w lowhumidwarning -W highhumidwarning -C highhumidcritical -i id [-o owserver:port]\n";
	print "-h Help, this text\n-c num Critical threshold for low humidity\n-w num Warning threshold for low humidity\n";
	print "-W num Warning threshold for high humidity\n-C num Critical threshold for high humidity\n";
	print "-o &lt;name|ip&gt;:port, Servername of 1-wire server and portnumber the owserver use, default 127.0.0.1:3001\n";
	print "-i 1-wire ID, i.e. 10.DEF05F01080015\n";
	print "\n\t\tby Peter Andersson\n\t\tpeter\@it-slav.net\n\t\thttp://www.it-slav.net/blogs/?p=802\n";
	exit $status;
}

#sanity check
if (!$opt_c||!$opt_w||!$opt_W||!$opt_C||$opt_h) {
	$status= $ERRORS{UNKNOWN};
	&amp;printhelp;
} elsif ($opt_c &gt; $opt_w) {
	print "Critical low threshold must be higher or equal to warning low threshold\n";
	$status= $ERRORS{UNKNOWN};
	&amp;printhelp;
} elsif ($opt_w &gt; $opt_W || $opt_c &gt; $opt_C) {
	print "Lower tresholds must be lower then higher thresholds\n";
	$status= $ERRORS{UNKNOWN};
	&amp;printhelp;
} elsif ($opt_C &lt; $opt_W) {
	print "Higher critical threshold must be higher or equal to higher warning threshold\n";
	$status= $ERRORS{UNKNOWN};
	&amp;printhelp;
}

if ($opt_o) {
	$owserver = $opt_o;
}

unless(OW::init($owserver)) {
	$status = $ERRORS{CRIT};
	$message = "OWServer not running at $owserver\n";
	exit $status;
}
$humidity = OW::get("$opt_i/humidity");
$humidity =~ s/^\s*(.*?)\s*$/$1/; #remove whitespaces
unless (($humidity =~ /^-?(?:\d+(?:\.\d*)?|\.\d+)$/) || ($humidity =~ /^[+-]?\d+$/)) #check that it is an integer or decimal returned
{
	$message="Did not got an integer or a decimal from humidity probe";
        $status=$ERRORS{CRITICAL};
}
$humidity = sprintf("%.0f", $humidity);

if ($debug_flag) {
	print "opt_c:$opt_c opt_w:$opt_w opt_W:$opt_W opt_C:$opt_C opt_h:$opt_h owserver:$owserver opt_i:$opt_i Humidity:$humidity\n";
}

if ($humidity &lt;= $opt_c) {
	$status=$ERRORS{CRITICAL};
	$message="CRITICAL";
} elsif ($humidity &gt; $opt_c &amp;&amp; $humidity &lt;= $opt_w) {
	$status=$ERRORS{WARNING};
	$message="WARNING";
} elsif ($humidity &gt;  $opt_w &amp;&amp; $humidity &lt;  $opt_W) {
	$status=$ERRORS{OK};
	$message="OK";
} elsif ($humidity &gt;= $opt_W &amp;&amp; $humidity &lt; $opt_C) {
	$status=$ERRORS{WARNING};
	$message="WARNING";
} elsif ($humidity &gt;= $opt_C) {
	$status=$ERRORS{CRITICAL};
	$message="CRITICAL";
} else { #This should never happend
	$status=$ERRORS{UNKNOWN};
	$message="UNKNOW";
}

print "$message: $humidity \%\|humidity=$humidity\%\;$opt_c;$opt_w;$opt_W;$opt_C\n";
exit $status;
</pre>
<p><br class="spacer_" /></p>
<p>Test the plugin by run:</p>
<pre>[root@op5 custom]# ./check_1-wirehumid -c 10 -w 20 -W 90 -C 95 -i 26.D7EABC000000
OK: 31 %|humidity=31%;10;20;90;95
</pre>
<p>So I have 31 % humidity.</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<h2>Nagios config files</h2>
<p>In checkcommands.cfg, define check_1-wirehumid</p>
<pre># command 'check_1-wirehumid'
define command{
    command_name                   check_1-wirehumid
    command_line                   $USER1$/custom/check_1-wirehumid -c $ARG1$ -w $ARG2$ -W$ARG3$ -C$ARG4$ -i $ARG5$ -o $ARG6$
    }
</pre>
<p>In serviced.cfg, define the check. I have a service group called Environemnt where all my Environments probes are.</p>
<pre># service 'Washroom Humidity'
define service{
    use                            default-service
    host_name                      monitor
    service_description            Washroom Humidity
    check_command                  check_1-wirehumid!10!20!80!90!26.D7EABC000000!127.0.0.1:3001
    servicegroups                  Environment
    contact_groups                 it-slav_msn,it-slav_mail,call_it-slav
    }
</pre>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<h2>Screenshots</h2>
<p><a href="http://www.it-slav.net/blogs/wp-content/uploads/2009/02/environmentservicegroup.png"><img class="alignnone size-full wp-image-808" title="environmentservicegroup" src="http://www.it-slav.net/blogs/wp-content/uploads/2009/02/environmentservicegroup.png" alt="" width="777" height="147" /></a></p>
<p>This is a screen shoot from op5 Monitor showing my Servicegroup Environment.</p>
<p><br class="spacer_" /></p>
<p><a href="http://www.it-slav.net/blogs/wp-content/uploads/2009/02/humidity.png"><img class="alignnone size-full wp-image-809" title="humidity" src="http://www.it-slav.net/blogs/wp-content/uploads/2009/02/humidity.png" alt="" width="583" height="531" /></a></p>
<p>If you have op5 Monitor or PNP for Nagios, graphs like this will automatically be created. Note that I had a shower 6.20 and the humidity went from approx 25% to 95% in a couple of minutes.<br class="spacer_" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2009/02/25/nagios-or-op5-monitor-plugin-for-1-wire-humidity-measurement/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Temperature measurment for temperatur.nu</title>
		<link>http://www.it-slav.net/blogs/2009/02/11/temperature-measurment-for-temperaturnu/</link>
		<comments>http://www.it-slav.net/blogs/2009/02/11/temperature-measurment-for-temperaturnu/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 19:11:16 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Cool things]]></category>
		<category><![CDATA[Geek stuff]]></category>
		<category><![CDATA[Hints]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[it-slav.net]]></category>
		<category><![CDATA[swedish]]></category>
		<category><![CDATA[temperature.nu]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=732</guid>
		<description><![CDATA[It-Slav.net is proud to announce as one of the temperature providers to temperatur.nu
It-slav.net provides temperature measurement for STHLM/Huddinge area in Sweden to the very popular site temperatur.nu

The measurment is done by a 1-wire temperature probe DS18S20.

The script that collects the temperature and stores it in a file that is presented as a webpage, the webpage [...]]]></description>
			<content:encoded><![CDATA[<h2>It-Slav.net is proud to announce as one of the temperature providers to temperatur.nu</h2>
<p>It-slav.net provides temperature measurement for STHLM/Huddinge area in Sweden to the very popular site <a href="http://www.temperatur.nu/">temperatur.nu</a></p>
<p><br class="spacer_" /></p>
<p>The measurment is done by a 1-wire temperature probe DS18S20.</p>
<p><span id="more-732"></span></p>
<p>The script that collects the temperature and stores it in a file that is presented as a webpage, the webpage is polled regularly by temperatur.nu</p>
<pre>#!/usr/bin/perl
 #
 # rrd_tempsensor.pl</pre>
<pre>#use lib qw(/usr/local/rrdtool-1.2.15/lib/perl);
 use RRDs;
 use OW;</pre>
<pre># define location of rrdtool databases
 my $rrd = '/root/owfs/script/rrd_db';
 # define location of images
 my $img = '/home/peter/public_html/temps';</pre>
<pre># process data for each interface (add/delete as required)
 &amp;ProcessSensor(0, "Temperatur_Huddinge", "op5.mynet",3001,"10.DEF05F010800");</pre>
<pre>sub ProcessSensor
 {
 # process sensor
 # inputs: $_[0]: sensor number (ie, 0/1/2/etc)
 #         $_[1]: sensor description
 print "number:$_[0] desc:$_[1], server:$_[2] port:$_[3], id: $_[4]\n";
 my $owserver = "$_[2]:$_[3]";</pre>
<pre>unless(OW::init($owserver)) {
 $status = $ERRORS{CRIT};
 $message = "OWServer not running at $owserver\n";
 exit $status;
 }</pre>
<pre># get temperature from sensor
 my $handle = OW::get("$_[4]/temperature");
 #    print "handle=$handle\n";
 $handle =~ s/^\s*(.*?)\s*$/$1/;
 ## Check if input is an integer or decimal
 unless (($handle =~ /^-?(?:\d+(?:\.\d*)?|\.\d+)$/) || ($handle =~ /^[+-]?\d+$/))
 {
 print "Not an integer or a decimal\n";
 return($ERRORS{CRITICAL});
 }</pre>
<pre>$temp=$handle;
 # remove eol chars
 chomp($temp);</pre>
<pre>print "sensor $_[0]: $temp degrees C\n";</pre>
<pre># check for error code from temp sensor
 if (int $temp eq 85)
 {
 print "failed to read value from sensor $_[0]\n";
 }
 else
 {
 #Create webpage
 open WEBPAGE, "&gt;$img/$_[1]"
 or die "Cannot create $img/$_[1]: $!";
 print WEBPAGE "$temp\n";
 }
 }</pre>
<p>Links:</p>
<ul>
<li><a href="http://www.temperatur.nu/temperatur-1-7_0.html" target="_blank">http://www.temperatur.nu</a> temperatures from alot of places in Sweden</li>
<li><a href="http://www.temperatur.nu/temperatur-1-5_1.html#huddinge" target="_blank">My info</a> page at temperatur.nu</li>
<li><a href="http://www.temperatur.nu/temperatur-1-0_0_26.html" target="_blank">Temperature graphs</a> made by data from me</li>
<li>The <a href="http://www.it-slav.net/~peter/temps/Temperatur_Huddinge" target="_blank">&#8220;webpage&#8221;</a> that the script  create</li>
<li style="text-align: left;"><a href="http://www.it-slav.net/blogs/?cat=11" target="_blank">More</a> information about 1-wire at this blog</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2009/02/11/temperature-measurment-for-temperaturnu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nagios or op5 Monitor status to an LCD display using 1-wire</title>
		<link>http://www.it-slav.net/blogs/2009/01/15/1-wire-lcd/</link>
		<comments>http://www.it-slav.net/blogs/2009/01/15/1-wire-lcd/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 20:42:47 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Cool things]]></category>
		<category><![CDATA[Geek stuff]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[op5 Monitor]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=125</guid>
		<description><![CDATA[To get output to an LCD display 1-wire can be used. This article will describe how to that and include an example to get status from Nagios or op5 Monitor on the display.
I use it to get a quick overview how my DataCenter is doing. When the LCD display is flashing something has either WARNING [...]]]></description>
			<content:encoded><![CDATA[<p>To get output to an LCD display 1-wire can be used. This article will describe how to that and include an example to get status from Nagios or <a href="http://www.op5.com/op5/products/monitor" target="_blank">op5 Monitor</a> on the display.</p>
<p>I use it to get a quick overview how my DataCenter is doing. When the LCD display is flashing something has either WARNING or CRITICAL status.</p>
<p><br class="spacer_" /></p>
<p><a href="http://www.it-slav.net/blogs/wp-content/uploads/2009/01/dsc00011.jpg"><img class="alignnone size-full wp-image-558" title="dsc00011" src="http://www.it-slav.net/blogs/wp-content/uploads/2009/01/dsc00011.jpg" alt="" width="500" height="375" /></a></p>
<p><br class="spacer_" /></p>
<p><span id="more-125"></span></p>
<h2><strong>Step by step guide</strong></h2>
<p>1. Get the Hardware, I bought it from http://shop.temperatur.nu.</p>
<p style="padding-left: 30px;">LCD controller <a href="http://shop.temperatur.nu/1wire-lcd-kontroller-p-74.html" target="_blank">http://shop.temperatur.nu/1wire-lcd-kontroller-p-74.html</a></p>
<p style="padding-left: 30px;">LCD Display <a href="http://shop.temperatur.nu/hd44780-20x4-character-lcd-display-bla-bakgrundsbelysning-p-75.html" target="_blank">http://shop.temperatur.nu/hd44780-20&#215;4-character-lcd-display-bla-bakgrundsbelysning-p-75.html</a></p>
<p>2. Make sure that your 1-wire bus works</p>
<p style="padding-left: 30px;">Read my earlier <a href="http://www.it-slav.net/blogs/?cat=11" target="_blank">articles</a></p>
<p>3. Send a text to the LCD Display</p>
<p style="padding-left: 30px;">echo &#8220;Test&#8221; &gt; /1-wire/FF.A30300000100/line20.0</p>
<p style="padding-left: 30px;">If you get text on your LCD everything works</p>
<p>4. Use the script below as a template to get Nagios or <a href="http://www.op5.com/op5/products/monitor" target="_blank">op5 Monitor</a> data to your LCD display. It is a modified nagios2lcd perl script.</p>
<p>I have put it in /etc/rc.local so it starts everytime my machine boots.</p>
<pre>#!/usr/bin/perl
# +----------------------------------------------------------------------------+
# |                                StackSys                                    |
# |                         ron.sweeney@gmail.com                              |
# |                        http://www.stacksys.com                             |</pre>
<pre># |----------------------------------------------------------------------------|
# | Modified by peter@it-slav.net
# | http://www.it-slav.net/blogs/
# |----------------------------------------------------------------------------|
# | FILE       : nagios2lcd.pl                                                 |
# | CLASS      : Toys                                                          |
# | PURPOSE    : Show nagios status on an lcdproc server.                      |
# | USAGE      : ./nagios2lcd.pl server port interval                          |
# | NOTE       : This script runs on versions 2.0 of Nagios (Tested on 2.01b)  |
# | RESOURCE   : Nagios(http://www.nagios.org) LCDPROC(http://www.lcdproc.org/)|
# +----------------------------------------------------------------------------+

#&amp;usage if (! $ARGV[0]);
use OW;

my $owserver = "127.0.0.1:3001";
unless(OW::init($owserver)) {
 $status = $ERRORS{CRIT};
 $message = "OWServer not running at $owserver\n";
 exit $status;
}

while (true) {
&amp;message;
}
sub message {

#@nagios = `/usr/local/nagios/bin/nagiostats`;
@nagios = `/opt/monitor/bin/nagiostats`;
foreach $line (@nagios) {

 if ($line =~m/Hosts Up\/Down\/Unreach/ ) {
 @hosts = split(/  +/, $line);

 @hostsvalues = split(/\//, $hosts[1]);

 $hostup = $hostsvalues[0];
 $hostdown = $hostsvalues[1];
 $hostunreach = $hostsvalues[2];
 $hostup =~s/ //g;
 $hostdown =~s/ //g;
 $hostunreach =~s/ //g;
 chop($hostunreach);
}
 elsif ($line =~m/Services Ok\/Warn\/Unk\/Crit/ ) {
 @services = split(/  +/, $line);

 @servicevalues = split(/\//, $services[1]);

 $serviceok = $servicevalues[0];
 $servicewarn = $servicevalues[1];
 $serviceunk = $servicevalues[2];
 $servicecrit = $servicevalues[3];

 $serviceok =~s/ //g;
 $servicewarn =~s/ //g;
 $serviceunk =~s/ //g;
 $servicecrit =~s/ //g;

 chop($servicecrit);

 }
 elsif ($line =~m/Status File Age:/ ) {
 @version = split(/  +/, $line);

 #@versionvalues = split(/  +/, $version[1]);
 $nagiosversion = $version[1];
 chop($nagiosversion);
 }
}

#Get indoor and outdoor temperatures
$tempinne = OW::get('10.04E060010800/temperature');
$tempinne =~ s/^\s*(.*?)\s*$/$1/;
$tempinne = sprintf("%.2f", $tempinne);

$tempute = OW::get('10.DEF05F010800/temperature');
$tempute =~ s/^\s*(.*?)\s*$/$1/;
$tempute = sprintf("%.2f", $tempute);

$datum=`/bin/date`;

OW::put('FF.A30300000100/line20.0','Temperatur');
OW::put('FF.A30300000100/line20.1',"PDC:     $tempinne\xdfC");
OW::put('FF.A30300000100/line20.2',"Outdoor: $tempute\xdfC");
#OW::put('FF.A30300000100/line20.3',"$datum");

for ($i=1;$i&lt;5;$i++) {
 $datum=`/bin/date`;
 OW::put('FF.A30300000100/line20.3',"$datum");
 sleep (1);
}

my $gar="N/A";

OW::put('FF.A30300000100/line20.0'," ");
OW::put('FF.A30300000100/line20.1',"    It-Slav.net");
OW::put('FF.A30300000100/line20.2'," ");
#OW::put('FF.A30300000100/line20.3'," ");

for ($i=1;$i&lt;5;$i++) {
 $datum=`/bin/date`;
 OW::put('FF.A30300000100/line20.3',"$datum");
 sleep (1);
}

#sleep(3);

#If any problem, flash the display
if ($hostdown!=0||$hostunreach&gt;=1||$servicewarn!=0||$servicecrit&gt;=1||$serviceunk&gt;=1) {
 $blink=1;
 }
else {
 $blink=0;
}

OW::put('FF.A30300000100/line20.0','Op5 Monitor Status');
OW::put('FF.A30300000100/line20.1',"Host:U-$hostup D-$hostdown U-$hostunreach");
OW::put('FF.A30300000100/line20.2',"Serv:O-$serviceok W-$servicewarn ");
if ($servicecrit==0) {
 OW::put('FF.A30300000100/line20.3',"     C-$servicecrit  U-$serviceunk");
} else {
 OW::put('FF.A30300000100/line20.3',"     C-$servicecrit U-$serviceunk");
}

for($i=0;$i&lt;=50;$i++) {
 if ($blink==1) {
 OW::put('FF.A30300000100/backlight','0');
 }
 OW::put('FF.A30300000100/backlight','1');
}

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2009/01/15/1-wire-lcd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>op5 Monitor or Nagios plugin for 1-wire temperature measurement</title>
		<link>http://www.it-slav.net/blogs/2008/11/17/op5-monitor-or-nagios-plugins-for-1-wire-temperature-measurement/</link>
		<comments>http://www.it-slav.net/blogs/2008/11/17/op5-monitor-or-nagios-plugins-for-1-wire-temperature-measurement/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 19:42:21 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[op5 Monitor]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[nagios plugin]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[temperature]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=115</guid>
		<description><![CDATA[After got the 1-wire stuff working it is time to use the temperature probes to get some use of measuring your environment. This article describe how you can create an op5 Monitor or Nagios plugin to monitor your temperatures.
Read my previous articles to get the 1-wire bus up and running:

1-wire http://www.it-slav.net/blogs/?p=62
1-wire getting started http://www.it-slav.net/blogs/?p=67
Temperature graphs [...]]]></description>
			<content:encoded><![CDATA[<p>After got the 1-wire stuff working it is time to use the temperature probes to get some use of measuring your environment. This article describe how you can create an op5 Monitor or Nagios plugin to monitor your temperatures.</p>
<p>Read my previous articles to get the 1-wire bus up and running:</p>
<ul>
<li>1-wire <a target="_blank" href="http://www.it-slav.net/blogs/?p=62">http://www.it-slav.net/blogs/?p=62</a></li>
<li>1-wire getting started <a target="_blank" href="http://www.it-slav.net/blogs/?p=67">http://www.it-slav.net/blogs/?p=67</a></li>
<li>Temperature graphs <a target="_blank" href="http://www.it-slav.net/blogs/?p=75">http://www.it-slav.net/blogs/?p=75</a></li>
</ul>
<p>I found a 1-wire temperature Nagios plugin on internet, but it had some disadvantages:</p>
<ul>
<li>Used Fahrenheit instead of Celsius</li>
<li>Did not accept thresholds below zero degrees, in Sweden that is quite common temperature during winter.</li>
<li>Strange License, it just said Copyright and a name and email address that bounced.</li>
</ul>
<p>The Nagios plugin was written in Perl so it was straight forward to modify and fix the obstacles I found. But the copyright bothered me because I wanted to publish the changes, I tried to email the email address I found in the script but it bounced, so I decided to write my own plugin.</p>
<p>I have published the script at <a target="_blank" href="http://www.nagiosexchange.org/cgi-bin/page.cgi?g=Detailed%2F2814.html;d=1">nagiosexchange</a>.</p>
<h2><span id="more-115"></span></h2>
<h2>The files</h2>
<p>The plugin check_1-wiretemp version 1.0 can be found <a target="_blank" href="http://www.it-slav.net/~peter/check_1-wiretemp/version-1.0/">here</a> or below.</p>
<pre>
#!/usr/bin/perl -w
#
# Check temperature of 1Wire device
# Requires use of owfs
#
# By Peter Andersson
# peter@it-slav.net
# http://www.it-slav.net/blogs/?p=115
# Licence GPLv2
# Version 1.0

use strict;
use Getopt::Std;
use OW;

my $owserver = &quot;127.0.0.1:3001&quot;;
my(%ERRORS) = ( OK=&gt;0, WARNING=&gt;1, CRITICAL=&gt;2, UNKNOWN=&gt;3 );

my $temperature;
my $status=$ERRORS{OK};;
my $message;

my $debug_flag=0;

our($opt_c, $opt_w, $opt_W, $opt_C, $opt_h, $opt_o, $opt_i);

getopts(&quot;w:W:c:C:ho:i:&quot;);

sub printhelp () {
        print &quot;Usage: check_1-wiretemp [-h] -c lowtempcritical -w lowtempwarning -W higtempwarning -C higtempcritical -i id [-o owserver:port]\n&quot;;
        print &quot;-h Help, this text\n-c num Critical threshold for low temp\n-w num Warning threshold for low temp\n&quot;;
        print &quot;-W num Warning threshold for hightemp\n-C num Critical threshold for hightemp\n&quot;;
        print &quot;-o &lt;name|ip&gt;:port, Servername of 1-wire server and portnumber the owserver use, default 127.0.0.1:3001\n&quot;;
        print &quot;-i 1-wire ID, i.e. 10.DEF05F01080015\n&quot;;
        print &quot;\n\t\tby Peter Andersson\n\t\tpeter\@it-slav.net\n\t\thttp://www.it-slav.net/blogs/?p=115\n&quot;;
        if ($debug_flag) {
                print &quot;opt_c:$opt_c opt_w:$opt_w opt_W:$opt_W opt_C:$opt_C opt_h:$opt_h owserver:$owserver opt_i:$opt_i Temperture:$temperature\n&quot;;
        }

        exit $status;
}

#sanity check
if (!defined $opt_c||!defined $opt_w||!defined $opt_W||!defined $opt_C||$opt_h) {
        $status= $ERRORS{UNKNOWN};
        &amp;printhelp;
} elsif ($opt_c &gt; $opt_w) {
        print &quot;Critical low threshold must be higher or equal to warning low threshold\n&quot;;
        $status= $ERRORS{UNKNOWN};
        &amp;printhelp;
} elsif ($opt_w &gt; $opt_W || $opt_c &gt; $opt_C) {
        print &quot;Lower tresholds must be lower then higher thresholds\n&quot;;
        $status= $ERRORS{UNKNOWN};
        &amp;printhelp;
} elsif ($opt_C &lt; $opt_W) {
        print &quot;Higher critical threshold must be higher or equal to higher warning threshold\n&quot;;
        $status= $ERRORS{UNKNOWN};
        &amp;printhelp;
}

if ($opt_o) {
        $owserver = $opt_o;
}

unless(OW::init($owserver)) {
        $status = $ERRORS{CRIT};
        $message = &quot;OWServer not running at $owserver\n&quot;;
        exit $status;
}
$temperature = OW::get(&quot;$opt_i/temperature&quot;);
$temperature =~ s/^\s*(.*?)\s*$/$1/; #remove whitespaces
unless (($temperature =~ /^-?(?:\d+(?:\.\d*)?|\.\d+)$/) || ($temperature =~ /^[+-]?\d+$/)) #check that it is an integer or decimal returned
{
        $message=&quot;Did not got an integer or a decimal from temperature probe&quot;;
        $status=$ERRORS{CRITICAL};
}
$temperature = sprintf(&quot;%.2f&quot;, $temperature);

if ($debug_flag) {
        print &quot;opt_c:$opt_c opt_w:$opt_w opt_W:$opt_W opt_C:$opt_C opt_h:$opt_h owserver:$owserver opt_i:$opt_i Temperture:$temperature\n&quot;;
}

if ($temperature &lt;= $opt_c) {
        $status=$ERRORS{CRITICAL};
        $message=&quot;CRITICAL&quot;;
} elsif ($temperature &gt; $opt_c &amp;&amp; $temperature &lt;= $opt_w) {
        $status=$ERRORS{WARNING};
        $message=&quot;WARNING&quot;;
} elsif ($temperature &gt;  $opt_w &amp;&amp; $temperature &lt;  $opt_W) {
        $status=$ERRORS{OK};
        $message=&quot;OK&quot;;
} elsif ($temperature &gt;= $opt_W &amp;&amp; $temperature &lt; $opt_C) {
        $status=$ERRORS{WARNING};
        $message=&quot;WARNING&quot;;
} elsif ($temperature &gt;= $opt_C) {
        $status=$ERRORS{CRITICAL};
        $message=&quot;CRITICAL&quot;;
} else { #This should never happend
        $status=$ERRORS{UNKNOWN};
        $message=&quot;UNKNOW&quot;;
}

print &quot;$message: $temperature C\|temperature=$temperature;$opt_c;$opt_w;$opt_W;$opt_C\n&quot;;
exit $status;
</pre>
<p>&nbsp;</p>
<p>The Metadata in op5 Monitor /opt/monitor/etc/checkcommands.cfg or Nagios checkcommands.cfg:</p>
<pre>
# command 'check_1-wiretemp'
define command{
    command_name                   check_1-wiretemp
    command_line                   $USER1$/custom/check_1-wiretemp -c $ARG1$ -w $ARG2$ -W$ARG3$ -C$ARG4$ -i $ARG5$ -o $ARG6$
    }
</pre>
<p>The service command definitions /opt/monitor/etc/services.cfg:</p>
<pre>
# service 'Temperature Outdoor'
define service{
    use                            default-service
    host_name                      monitor
    service_description            Temperature Outdoor
    check_command                  check_1-wiretemp!-20!-15!25!30!10.DEF05F01080015!127.0.0.1:3001
    contact_groups                 call_it-slav,it-slav_mail
    }
</pre>
<p>The graph map /opt/monitor/op5/nagiosgraph/map_custom/1-wiretemp.map:</p>
<pre>
# peter@it-slav.net
# http://www.it-slav.net/blogs/?p=115
# Service type: 1-wire-temperature
#   output: OK: 22.88 C
#   perfdata: temperature=2.56;-20;-15;25;30
/perfdata:temperature=(-?\d+.\d+);(-?\d+);(-?\d+);(-?\d+);(-?\d+)/
and push @s, [ temperature,
               [ &quot;current&quot;, GAUGE, $1 ],
               [ &quot;critical_low&quot;, GAUGE, $2 ],
               [ &quot;warning_low&quot;, GAUGE, $3 ],
               [ &quot;warning_high&quot;, GAUGE, $4 ],
               [ &quot;critical_high&quot;, GAUGE, $5 ] ];
</pre>
<address>Hint: If you do not want to graph the thresholds remove $2, $3 ,$4, $5 gauges</address>
<pre>
</pre>
<h2>Step by step guide</h2>
<p>Step by step guide for op5 Monitor users, Nagios (or op5 Monitor) users can copy and paste the information above to the configuration files:</p>
<p>1. Copy the plugin to the correct path, i.e. /opt/plugins/custom/</p>
<p>2. Test the plugin</p>
<pre>
[root@op5 custom]# ./check_1-wiretemp -c 0 -w 1 -W 20 -C 23 -i 10.DEF05F01080015
OK: 3.56 C|temperature=3.56;0;1;20;23
</pre>
<p>Yes it works!</p>
<p>3. Define the command in op5 Monitor (in Nagios edit the</p>
<p>configure-&gt;commands</p>
<p>Choose &quot;Add new command&quot;</p>
<p>Enter</p>
<p>command name: check_1-wiretemp</p>
<p>command line: $USER1$/custom/check_1-wiretemp -c $ARG1$ -w $ARG2$ -W$ARG3$ -C$ARG4$ -i $ARG5$ -o $ARG6$</p>
<p>Press Apply button</p>
<p>To test:</p>
<p>Press Test this command</p>
<p>Change $ARG1$ $ARG2$ and so on to:</p>
<p>/opt/plugins/custom/check_1-wiretemp -c 0 -w 1 -W20  -C23 -i  10.DEF05F01080015 -o 127.0.0.1:3001</p>
<p>Press continue</p>
<p><a href="http://www.it-slav.net/blogs/wp-content/uploads/2008/11/check_1-wiretemp-commandconfig.png"><img height="312" width="500" alt="" src="http://www.it-slav.net/blogs/wp-content/uploads/2008/11/check_1-wiretemp-commandconfig.png" title="check_1-wiretemp-commandconfig" class="alignnone size-full wp-image-321" /></a></p>
<p>And the test works</p>
<p>Press &quot;Save&quot; to update the configuration files.</p>
<p>4. Configure the check_1-wiretemp</p>
<p>Press &quot;Configure&quot;</p>
<p>Pick the host, i.e. monitor</p>
<p>Press &quot;Go&quot;</p>
<p>Click &quot;Services for monitor&quot;</p>
<p>Choose &quot;Add new service&quot;</p>
<p>Service description i.e: Temperature Outdoor</p>
<p>check_command: check_1-wiretemp</p>
<p>check_command_args: -20!-15!25!30!10.DEF05F01080015!127.0.0.1:3001</p>
<p>(Critical low -20 C, Warning low -15 C, Warning high 25 C, Critical High 30 C, ID #10.DEF05F01080015, Host 127.0.0.1, port 3001)</p>
<p>Choose contact groups according to your preferences</p>
<p>To test, press &quot;Test this service&quot;</p>
<p><a href="http://www.it-slav.net/blogs/wp-content/uploads/2008/11/1-wiretemp-config1.png"><img height="312" width="500" alt="" src="http://www.it-slav.net/blogs/wp-content/uploads/2008/11/1-wiretemp-config1.png" title="1-wiretemp-config1" class="alignnone size-full wp-image-325" /></a></p>
<p>If everything looks fine press &quot;Save&quot; and your temperature service check is defined.</p>
<p>5. Create graphs</p>
<p>Copy and paste 1-wiretemp.map from above and put it in /opt/monitor/op5/nagiosgraph/map_custom/1-wiretemp.map</p>
<p>&nbsp;</p>
<p>Congratulations, now you monitor your temperature and get alarms if it falls aout och thresholds.</p>
<p>&nbsp;</p>
<p>Links</p>
<ul>
<li><a target="_blank" href="http://www.nagiosexchange.com/cgi-bin/page.cgi?d=1">Nagiosexchange</a></li>
<li><a target="_blank" href="http://www.op5.com/op5/products/monitor">op5 Monitor</a></li>
<li><a target="_blank" href="http://www.nagios.org/">Nagios</a></li>
<li><a target="_blank" href="http://www.maxim-ic.com/products/1-wire/index.cfm?CMP=WP-7">1-wire</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2008/11/17/op5-monitor-or-nagios-plugins-for-1-wire-temperature-measurement/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Temperature Graphs</title>
		<link>http://www.it-slav.net/blogs/2008/11/05/temperature-graphs/</link>
		<comments>http://www.it-slav.net/blogs/2008/11/05/temperature-graphs/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 05:51:57 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Cool things]]></category>
		<category><![CDATA[Geek stuff]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=75</guid>
		<description><![CDATA[After succefully get your 1-wire bus working with OWFS and been able to read the temperatures, it is time to create some nice graphs. The red line is the temperature and the blue is the sliding avarage temperature the last 24 hours. I&#8217;m using RRDTools to store the data and create the graphs. If you [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://www.it-slav.net/blogs/?p=67" target="_blank">succefully</a> get your 1-wire bus working with <a href="http://www.owfs.org/" target="_blank">OWFS</a> and been able to read the temperatures, it is time to create some nice <a href="http://www.it-slav.net/~peter/temps/" target="_blank">graphs.</a> The red line is the temperature and the blue is the sliding avarage temperature the last 24 hours. I&#8217;m using <a href="http://oss.oetiker.ch/rrdtool/" target="_blank">RRDTools</a> to store the data and create the graphs. If you want to use RRDTools and RRDGraph for your own purposes I recommend you to read the manual pages several times and start easy and build more and more complex solutions.</p>
<p>Here is the script that I&#8217;m using to read the temperatures, store the data in a round robin database and finally create the graphs.</p>
<pre>#!/usr/bin/perl</pre>
<pre># By Peter Andersson peter@it-slav.net</pre>
<pre># rrd_tempsensor.pl</pre>
<pre>use RRDs;</pre>
<pre>use OW;</pre>
<pre># define location of rrdtool databases</pre>
<pre>my $rrd = '/root/owfs/script/rrd_db';</pre>
<pre># define location of images</pre>
<pre>my $img = '/home/peter/public_html/temps';</pre>
<pre># process data for each interface (add/delete as required)</pre>
<pre>&amp;ProcessSensor(0, "Temperatur i garaget", "127.0.0.1" , "3001" , "10.87507C010800");</pre>
<pre>&amp;ProcessSensor(1, "Temperatur i PDCn", "op5.mynet",3001, "10.04E060010800");</pre>
<pre>&amp;ProcessSensor(2, "Temperatur ute", "op5.mynet",3001,"10.DEF05F010800");</pre>
<pre>sub ProcessSensor</pre>
<pre>{</pre>
<pre># process sensor</pre>
<pre># inputs: $_[0]: sensor number (ie, 0/1/2/etc)</pre>
<pre>#         $_[1]: sensor description</pre>
<pre>        print "number:$_[0] desc:$_[1], server:$_[2] port:$_[3], id: $_[4]\n";</pre>
<pre>        my $owserver = "$_[2]:$_[3]";</pre>
<pre>        unless(OW::init($owserver)) {</pre>
<pre>            $status = $ERRORS{CRIT};</pre>
<pre>            $message = "OWServer not running at $owserver\n";</pre>
<pre>            exit $status;</pre>
<pre>        }</pre>
<pre>        # get temperature from sensor</pre>
<pre>        my $handle = OW::get("$_[4]/temperature");</pre>
<pre>#       print "handle=$handle\n";</pre>
<pre>        $handle =~ s/^\s*(.*?)\s*$/$1/;</pre>
<pre>        ## Check if input is an integer or decimal</pre>
<pre>        unless (($handle =~ /^-?(?:\d+(?:\.\d*)?|\.\d+)$/) || ($handle =~ /^[+-]?\d+$/))</pre>
<pre>        {</pre>
<pre>                print "Not an integer or a decimal\n";</pre>
<pre>                return($ERRORS{CRITICAL});</pre>
<pre>        }</pre>
<pre>        $temp=$handle;</pre>
<pre>        # remove eol chars</pre>
<pre>        chomp($temp);</pre>
<pre>        print "sensor $_[0]: $temp degrees C\n";</pre>
<pre>        # if rrdtool database doesn't exist, create it</pre>
<pre>        if (! -e "$rrd/temp$_[0].rrd")</pre>
<pre>        {</pre>
<pre>                print "creating rrd database for temp sensor $_[0]...\n";</pre>
<pre>                RRDs::create "$rrd/temp$_[0].rrd",</pre>
<pre>                        "-s 300",</pre>
<pre>                        "DS:temp:GAUGE:600:U:U",</pre>
<pre>                        "RRA:AVERAGE:0.5:1:2016",</pre>
<pre>                        "RRA:AVERAGE:0.5:6:1344",</pre>
<pre>                        "RRA:AVERAGE:0.5:24:2190",</pre>
<pre>                        "RRA:AVERAGE:0.5:144:3650";</pre>
<pre>        }</pre>
<pre>        if ($ERROR = RRDs::error) { print "$0: failed to create $_[0] database file: $ERROR\n"; }</pre>
<pre>        # check for error code from temp sensor</pre>
<pre>        if (int $temp eq 85)</pre>
<pre>        {</pre>
<pre>                print "failed to read value from sensor $_[0]\n";</pre>
<pre>        }</pre>
<pre>        else</pre>
<pre>        {</pre>
<pre>                # insert values into rrd</pre>
<pre>                RRDs::update "$rrd/temp$_[0].rrd",</pre>
<pre>                        "-t", "temp",</pre>
<pre>                        "N:$temp";</pre>
<pre>                if ($ERROR = RRDs::error) { print "$0: failed to insert $_[0] data into rrd: $ERROR\n"; }</pre>
<pre>        }</pre>
<pre>        # create graphs for current sensor</pre>
<pre>        &amp;CreateGraph($_[0], "day", $_[1]);</pre>
<pre>        &amp;CreateGraph($_[0], "week", $_[1]);</pre>
<pre>        &amp;CreateGraph($_[0], "month", $_[1]);</pre>
<pre>        &amp;CreateGraph($_[0], "year", $_[1]);</pre>
<pre>}</pre>
<pre>sub CreateGraph</pre>
<pre>{</pre>
<pre># creates graph</pre>
<pre># inputs: $_[0]: sensor number (ie, 0/1/2/etc)</pre>
<pre>#         $_[1]: interval (ie, day, week, month, year)</pre>
<pre>#         $_[2]: sensor description</pre>
<pre>        RRDs::graph "$img/temp$_[0]-$_[1].png",</pre>
<pre>                "-s -1$_[1]",</pre>
<pre>                "-t $_[2]",</pre>
<pre>                "-h", "150", "-w", "475",</pre>
<pre>                "-a", "PNG",</pre>
<pre>                "-v WWW.It-Slav.Net",</pre>
<pre>                "--slope-mode",</pre>
<pre>                "DEF:temp=$rrd/temp$_[0].rrd:temp:AVERAGE",</pre>
<pre>                "LINE2:temp#FF0000::",</pre>
<pre>                "CDEF:tempavarage=temp,86400,TREND",</pre>
<pre>                "LINE1:tempavarage#000088::",</pre>
<pre>                "GPRINT:temp:MIN:  Min\\: %6.1lf",</pre>
<pre>                "GPRINT:temp:MAX:  Max\\: %6.1lf",</pre>
<pre>                "GPRINT:temp:AVERAGE: Snitt\\: %6.1lf",</pre>
<pre>                "GPRINT:temp:LAST: Nuvarande\\: %6.1lf grader C\\n";</pre>
<pre>        if ($ERROR = RRDs::error) { print "$0: unable to generate sensor $_[0] $_[1] graph: $ERROR\n"; }</pre>
<pre>}</pre>
<p>Use crontab to run it every 5 minutes:</p>
<pre>*/5     *       *       *       *       /root/owfs/script/tempgraph.pl &gt; /dev/null</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2008/11/05/temperature-graphs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>1-wire getting started</title>
		<link>http://www.it-slav.net/blogs/2008/11/01/1-wire-getting-started/</link>
		<comments>http://www.it-slav.net/blogs/2008/11/01/1-wire-getting-started/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 15:28:31 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Cool things]]></category>
		<category><![CDATA[Geek stuff]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=67</guid>
		<description><![CDATA[To make my computer to be able to use the 1-wire protocol I&#8217;m using OWFS. The packages to get it running on CentOS5 or RHEL5 can be found here. It has several options and I like the client-server model mainly because it is easy to use the 1-wire stuff in perl in his case.
To start [...]]]></description>
			<content:encoded><![CDATA[<p>To make my computer to be able to use the 1-wire protocol I&#8217;m using <a title="OWFS 1-Wire File System" href="http://www.owfs.org/" target="_blank">OWFS</a>. The packages to get it running on CentOS5 or RHEL5 can be found <a href="http://www.it-slav.net/owfs/" target="_blank">here</a>. It has several options and I like the client-server model mainly because it is easy to use the 1-wire stuff in perl in his case.</p>
<p>To start the owfs server I put the following line in /etc/rc.local<br />
<code>/usr/sbin/owserver -u -C --usb_regulartime -p 3001</code></p>
<p>A good idea to browse the 1-wire bus is to use owhttp and a webbrowser. Start the owhttpd with<br />
<code>/usr/sbin/owhttpd -s localhost:3001 -p 12345</code><br />
and use a webbrowser to cennect to http://the-host-that-is-running-owhttpd:12345</p>
<p>If you prefer to use files to communicate with the 1-wire bus start the owfs with<br />
<code>/usr/sbin/owfs -s localhost:3001 -m /1-wire</code></p>
<p>Now you can read the temperature by running<br />
<code># cat /1-wire/10.DEF05F010800/temperature<br />
4.4375</code></p>
<p>So now I know that the outdoor temperature is 4.4 degrees Celcius.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2008/11/01/1-wire-getting-started/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>1-wire</title>
		<link>http://www.it-slav.net/blogs/2008/11/01/1-wire/</link>
		<comments>http://www.it-slav.net/blogs/2008/11/01/1-wire/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 15:25:41 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[1-wire]]></category>
		<category><![CDATA[Cool things]]></category>
		<category><![CDATA[Geek stuff]]></category>

		<guid isPermaLink="false">http://www.it-slav.net/blogs/?p=62</guid>
		<description><![CDATA[It all started with that I wanted to keep track of the temperature in my DataCenter, called PDC (Peters DataCenter), in my basement. I have a couple of computers running 24&#215;7 and if the doors are closed and the outdoor temperature is hot it can get very warm. I have an op5 Monitor system that [...]]]></description>
			<content:encoded><![CDATA[<p>It all started with that I wanted to keep track of the temperature in my DataCenter, called PDC (Peters DataCenter), in my basement. I have a couple of computers running 24&#215;7 and if the doors are closed and the outdoor temperature is hot it can get very warm. I have an op5 Monitor system that monitors the temperatue and sends SMS messages and emails if the thresholds are broken.</p>
<p>The first alternative, Sensatronic probes was to expensive for a project like this. After some investigation I stumbled over 1-wire technology and found an excellent <a target="_blank" href="http://shop.temperatur.nu/" title="Temperatur.nu Webshop">shop</a> in Sweden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.it-slav.net/blogs/2008/11/01/1-wire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
