diff options
-rw-r--r-- | ats-watch/99_ats-watch.rules | 3 | ||||
-rwxr-xr-x | ats-watch/ats-watch.pl | 42 |
2 files changed, 45 insertions, 0 deletions
diff --git a/ats-watch/99_ats-watch.rules b/ats-watch/99_ats-watch.rules new file mode 100644 index 0000000..11a67da --- /dev/null +++ b/ats-watch/99_ats-watch.rules @@ -0,0 +1,3 @@ +# /etc/udev/rules.d/99_ats-watch.rules + +SUBSYSTEMS=="usb", KERNEL=="ttyACM*", ATTRS{product}=="ats-watch", SYMLINK+="ats-watch" diff --git a/ats-watch/ats-watch.pl b/ats-watch/ats-watch.pl new file mode 100755 index 0000000..f374295 --- /dev/null +++ b/ats-watch/ats-watch.pl @@ -0,0 +1,42 @@ +#!/usr/bin/perl -w + +use strict; +use Device::SerialPort; +use Mail::Sendmail; + +my $port = new Device::SerialPort("/dev/ats-watch"); +$port->baudrate(38400); +$port->parity("none"); +$port->databits(8); +$port->stopbits(1); +$port->handshake("none"); +$port->read_const_time(500); +$port->read_char_time(5); +$port->write_settings; + +$port->lookclear; +$port->write("s"); + +my %mail = ( To => 'logs@helsinki.at', + From => 'noreply@helsinki.at', + ); + +while(1) { + my ($count, $line) = $port->read(100); + if($count > 0) { + if($line =~ /Status: (\w+), Input (\w) is selected \(A: (\w+), B: (\w+)\)/) { + my $state = $1; + if($3 ne 'Online' && $4 ne 'Online') { + $state = 'critical'; + } elsif($3 ne 'Online' || $4 ne 'Online') { + $state = 'degraded'; + } + $mail{Subject} = "[ATS-Watch] PDU0 state $state"; + $mail{Message} = "Current State: $1\n" . "Current Input: $2\n" . "Input A: $3\n" . "Input B: $4\n"; + } else { + $mail{Subject} = '[ATS-Watch] PDU0 state unknown'; + $mail{Message} = $line; + } + sendmail( %mail ) or print $Mail::Sendmail::error . "\n"; + } +} |