USB-WDE1: Wetterdaten mit Opsview überwachen

Jetzt ist es endlich soweit. Eine neue Wetterstation musste her.

Da kam mein Spieltrieb voll in Gang und eines war klar. Das Teil muss an den Server 😉

 

Es wurde dann schließlich ein System von ELV. Dazu passend dann gleich noch den USB-WDE1 und ein zusätzlicher Aussensensor.

Das System arbeitet per Funk auf 868 MHz. Der WDE1 (Wetterdatenempfänger) wird einfach per USB an den Rechner angeschlossen. Unter Win7 und Ubuntu 10.04 wird er automatisch erkannt und als seriellen Port eingerichtet (/dev/ttyUSB[N]).

 

Zur Verbindung mit dem WDE müssen die folgenden Parameter genutzt werden 9600 bit/s, Keine Parität, 8 Datenbits, 1 Stopbit. Also 9600 8N1.

$1;1;;19,9;23,0;;;;;;;70;67;;;;;;;;;;;;0

Er ermöglicht den Empfang von bis zu 8 Sensoren + 1 Kombisensor. Die Sensoren werden per Schiebeschalter auf eine Adresse kodiert und sind darüber dann im System eindeutig.

Der Output ist zum Glück mit einem Trennzeichen versehen, sodass eine simple kleine Perlroutine die Daten auswertet und in das Nagios external Commandfile schieben kann.

#!/usr/bin/perl

#use strict;

$temp_offset = 3;
$humidity_offset = 11;

@ServiceChecks = ( ["Hostname1", 4.5, 39, 20, 70], ["Hostname", 17, 30, 20, 70] );
# ["Hostname", MinTemp, MaxTemp, MinFeuchte, MaxFeuchte] ...

while () {

        $Input = $_;

        @Values = split(";", $Input);

        open(PLAININPUT, ">>/var/log/WeatherInput.log");

        print PLAININPUT $Input;

        close(PLAININPUT);

        for ($counter=0; $counter < $#ServiceChecks+1; $counter++)
        {

                $Hostname = $ServiceChecks[$counter][0];
                $min = $ServiceChecks[$counter][1];
                $min = $ServiceChecks[$counter][2];
                $temperatur = $Values[$temp_offset + $counter];
                $luftfeuchte = $Values[$humidity_offset + $counter];

                if ($temperatur != "")
                {
                        GenerateOutput($Hostname, "Temperatur", $ServiceChecks[$counter][1], $ServiceChecks[$counter][2], $temperatur);
                }

                if ($luftfeuchte != "")
                {
                        GenerateOutput($Hostname, "Luftfeuchte", $ServiceChecks[$counter][3], $ServiceChecks[$counter][4], $luftfeuchte);
                }

        }
}

GenerateOutput verkettet die Eingabeinformationen zu einem String, der dann in die Pipe /usr/local/nagios/var/rw/nagios.cmd geschrieben wird. Die Daten kommen über STDIN rein. Abgerufen werden sie von der TTYS via

socat /dev/ttyUSB0,b9600 stdout | ./auswertung.pl

Heraus kommt dann sowas 😉

 

opsview_scs_1

Dieser Beitrag wurde unter Computer, Linux, System Monitoring veröffentlicht. Setze ein Lesezeichen auf den Permalink.