Welcome to It-Slav.Net blog
Peter Andersson
peter@it-slav.net

I've already got a female to worry about. Her name is the Enterprise.
-- Kirk, "The Corbomite Maneuver", stardate 1514.0

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 or CRITICAL status.



Step by step guide

1. Get the Hardware, I bought it from http://shop.temperatur.nu.

LCD controller http://shop.temperatur.nu/1wire-lcd-kontroller-p-74.html

LCD Display http://shop.temperatur.nu/hd44780-20×4-character-lcd-display-bla-bakgrundsbelysning-p-75.html

2. Make sure that your 1-wire bus works

Read my earlier articles

3. Send a text to the LCD Display

echo “Test” > /1-wire/FF.A30300000100/line20.0

If you get text on your LCD everything works

4. Use the script below as a template to get Nagios or op5 Monitor data to your LCD display. It is a modified nagios2lcd perl script.

I have put it in /etc/rc.local so it starts everytime my machine boots.

#!/usr/bin/perl
# +----------------------------------------------------------------------------+
# |                                StackSys                                    |
# |                         ron.sweeney@gmail.com                              |
# |                        http://www.stacksys.com                             |
# |----------------------------------------------------------------------------|
# | 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/)|
# +----------------------------------------------------------------------------+

#&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) {
&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<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<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>=1||$servicewarn!=0||$servicecrit>=1||$serviceunk>=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<=50;$i++) {
 if ($blink==1) {
 OW::put('FF.A30300000100/backlight','0');
 }
 OW::put('FF.A30300000100/backlight','1');
}

}

Leave a Reply





Book reviews
FreePBX 2.5
Powerful Telephony Solutions






Asterisk 1.6
Build a feature rich telephony system with Asterisk






Learning NAGIOS 3.0





Cacti 0.8 Network Monitoring,
Monitor your network with ease!