From 25fbb8a03c72f473a2d7f6cfb5961a1c43b1a6a2 Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Sun, 24 Jan 2021 10:12:38 +0000 Subject: add piano alarm --- piano-alarm/.gitignore | 1 + piano-alarm/mt300-v2/Makefile | 11 ++++ piano-alarm/mt300-v2/etc/crontabs/root | 1 + piano-alarm/mt300-v2/etc/msmtprc | 30 +++++++++++ piano-alarm/mt300-v2/etc/panaceas-ca.crt | 32 +++++++++++ piano-alarm/mt300-v2/usr/bin/piano_alarm | 55 +++++++++++++++++++ piano-alarm/mt300-v2/usr/bin/sensor.pl | 93 ++++++++++++++++++++++++++++++++ 7 files changed, 223 insertions(+) create mode 100644 piano-alarm/.gitignore create mode 100644 piano-alarm/mt300-v2/Makefile create mode 100644 piano-alarm/mt300-v2/etc/crontabs/root create mode 100644 piano-alarm/mt300-v2/etc/msmtprc create mode 100644 piano-alarm/mt300-v2/etc/panaceas-ca.crt create mode 100755 piano-alarm/mt300-v2/usr/bin/piano_alarm create mode 100755 piano-alarm/mt300-v2/usr/bin/sensor.pl diff --git a/piano-alarm/.gitignore b/piano-alarm/.gitignore new file mode 100644 index 0000000..b9120be --- /dev/null +++ b/piano-alarm/.gitignore @@ -0,0 +1 @@ +mt300-v2/stamp diff --git a/piano-alarm/mt300-v2/Makefile b/piano-alarm/mt300-v2/Makefile new file mode 100644 index 0000000..c86bede --- /dev/null +++ b/piano-alarm/mt300-v2/Makefile @@ -0,0 +1,11 @@ +STUFF=$(shell find etc usr \! -type d -print) + +stamp: ${STUFF} + tar cf - ${STUFF} | ssh boiler-monster "cd / && tar xvpf -" + touch $@ + +tidy: + perltidy -b usr/bin/sensor.pl + +clean: + rm -f usr/bin/sensor.pl.bak diff --git a/piano-alarm/mt300-v2/etc/crontabs/root b/piano-alarm/mt300-v2/etc/crontabs/root new file mode 100644 index 0000000..2b70fe3 --- /dev/null +++ b/piano-alarm/mt300-v2/etc/crontabs/root @@ -0,0 +1 @@ +0 * * * * /usr/bin/piano_alarm diff --git a/piano-alarm/mt300-v2/etc/msmtprc b/piano-alarm/mt300-v2/etc/msmtprc new file mode 100644 index 0000000..ae88f9b --- /dev/null +++ b/piano-alarm/mt300-v2/etc/msmtprc @@ -0,0 +1,30 @@ +# Example for a system wide configuration file + +# A system wide configuration file is optional. +# If it exists, it usually defines a default account. +# This allows msmtp to be used like /usr/sbin/sendmail. +account default + +# The SMTP smarthost. +host smtp.panaceas.org +from piano-alarm@ourano.org + +# Construct envelope-from addresses of the form "user@oursite.example". +#auto_from on +#maildomain fish + +# Use TLS. +#tls on + +# Syslog logging with facility LOG_MAIL instead of the default LOG_USER. +syslog LOG_MAIL + +auth on +user piano-alarm +password fae7Kees + +tls on +tls_starttls off +#tls_certcheck off + +tls_trust_file /etc/panaceas-ca.crt diff --git a/piano-alarm/mt300-v2/etc/panaceas-ca.crt b/piano-alarm/mt300-v2/etc/panaceas-ca.crt new file mode 100644 index 0000000..d4d33ed --- /dev/null +++ b/piano-alarm/mt300-v2/etc/panaceas-ca.crt @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgIJALpKS9TB9wWiMA0GCSqGSIb3DQEBBQUAMDQxGDAWBgNV +BAoTD3BhbmFjZWFzLm9yZyBDQTEYMBYGA1UEAxMPY2EucGFuYWNlYXMub3JnMB4X +DTE0MDMyOTA5MDE1OFoXDTI0MDMyNjA5MDE1OFowNDEYMBYGA1UEChMPcGFuYWNl +YXMub3JnIENBMRgwFgYDVQQDEw9jYS5wYW5hY2Vhcy5vcmcwggIiMA0GCSqGSIb3 +DQEBAQUAA4ICDwAwggIKAoICAQC8poSmhM9TKrFn1n3vaVgjt5z8l+nJ7SwBOeBJ +evGYoZWHQGCFgZVs+o7JRxK3/Z2eqPuKqlgxUnQTuDxXrPxr0wK3q2EPSaQFgN6G +/ATlCQx2k810tJu/cEhsULZ9QUgQwscbDDK88UkM9oYHicaRD/OHMAQ+IYhzDhgb +3ip0OZHkL65NkoUOX0EVHhwtgxmT69K8JFZW8pNT+pNdjlLVNOtm35EYrHUKc31R +DL3CLeztsd9TpQHlKVt8ZOeLkyf8R+FjDDDAhLZgD3sjpYS8QsTal7xZmdNp7PCS +7aEumNqpLeNJ/rwzh1GI2ZpTPgOqNRAFqtETGw1IZt69rXZj3l3flhOZiOaTYudf +dLbwbF1tEyE5TTKle4ZQMdfrzphT9jMVfjOYKy7wb7VobDhIlyiiy796bLuYMgT8 +0ahbJdxip2z8Kaf8Pzm4mQxDo6/JWbpO4XnrZCJUtgd3pzMMtqTuD82+4rgipSv2 +MN3A4EX81Rm4KRffySi8SpdlW0G4KbF+YKLs7TU8qXz2adFS07uMVgtn4C9vdMu/ +Nimki4oGg0/7nGtNQNkvvlZGPmUnJRkH+mzpEeDdshYD299sqPAd8spyE8V1opm3 +/XQ8qD5m4D0UT/QGwdfsfuXPljLTCKDzUY48NJVxgl3mhYAsNxFBy0ziQDRN19hV +DFDIQQIDAQABo4GWMIGTMB0GA1UdDgQWBBQtqqDqmOD7V+lv/gT9cz/8Zp8p6jBk +BgNVHSMEXTBbgBQtqqDqmOD7V+lv/gT9cz/8Zp8p6qE4pDYwNDEYMBYGA1UEChMP +cGFuYWNlYXMub3JnIENBMRgwFgYDVQQDEw9jYS5wYW5hY2Vhcy5vcmeCCQC6SkvU +wfcFojAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4ICAQCcXX1j1n4DI4gV ++6lPm4KAxRvgqCFXDYfg6Yb0YNzzCJK/v7R2ARUIeqcFDi42EPxPh4YrMBFY8BX1 +UTUYvAZKqS+VjMNt4ffVpWzUYsjEzSCLIwkeozQg+BIoNqm7e+8eYcT9oEkbh+RS +XfGD1HOaZlogJ5Viqz7wGKAn51sIVt9oWf01SNcuBciX3W7UsDvcNXCUQc74X9uV +aZjsGlTrCg29Ocssnlq4hZD3J1KsB6bXuPmhdrgNeXc+k8NJHGWju4AwWGvBGJfL +99TwkSTkIrNCfVSvAKTQ5OiERTqXzGxDKXQpAxQqpfaF73nxtS9fSmcKk/UbyhGd +BaGdqX6LXxXIwqEDEi19d2wtVjuOnRz1wGK9NaWFPj+7ndyRdYaja2eO5VPO5sVl +Tk6ROZNyzouupDZKd23XB0gcNEv5YHbD7PqUkN8ModdAWiQpkxcYVzwyV/qHJnNM +NowhxhJDP0ZJ4svN1LkXYCfd+StqhwplJ/4eIdklku6Gwc6VCcFTC1yLyS2adUwi +aTX19aEYzavXdUtRpC8U4QQ/UWL+r9QtDmNJXOxeM8R1oGbuT3bnH1UYs9fJ6/t8 +DVY3sXog5PyxWQiQqC6Pn6VRSUei5WPsuGuzre0W2Jl0emtv2Ojyhb5/ynP7psH9 +4vIbkKZEEvnsV8l7ZF+1DuWJP/fAfw== +-----END CERTIFICATE----- diff --git a/piano-alarm/mt300-v2/usr/bin/piano_alarm b/piano-alarm/mt300-v2/usr/bin/piano_alarm new file mode 100755 index 0000000..de5677c --- /dev/null +++ b/piano-alarm/mt300-v2/usr/bin/piano_alarm @@ -0,0 +1,55 @@ +#!/bin/sh + +message() +{ +STATE="$1" +echo -e "Subject: 41hpa piano alarm: ${STATE} \n\nPiano alarm at 41hpa says ${STATE}.\n" | /usr/sbin/sendmail -f "Piano Alarm " monitoring@madingley.org +} + +TL=17000 +TH=22000 + +HL=450 +HH=700 + +T=`sensor.pl -t -i` +H=`sensor.pl -h -i` + +exit 0 + +BAD=0 + +if [ -z "$T" ]; then + BAD=1 +fi +if [ -z "$H" ]; then + BAD=1 +fi + +if [ "$T" -lt "$TL" ]; then + BAD=1 +fi +if [ "$T" -gt "$TH" ]; then + BAD=1 +fi + +if [ "$H" -lt "$HL" ]; then + BAD=1 +fi + +if [ "$H" -gt "$HH" ]; then + BAD=1 +fi + +if [ "$1" == "test" ]; then + BAD=1 +fi + +if [ "$BAD" -eq 1 ]; then + message "T=$T (should be $TL-$TH) H=$H (should be $HL-$HH)" +fi + +echo "piano_alarm T=$T H=$H" +logger "piano_alarm T=$T H=$H" + + diff --git a/piano-alarm/mt300-v2/usr/bin/sensor.pl b/piano-alarm/mt300-v2/usr/bin/sensor.pl new file mode 100755 index 0000000..9a5501d --- /dev/null +++ b/piano-alarm/mt300-v2/usr/bin/sensor.pl @@ -0,0 +1,93 @@ +#!/usr/bin/env perl + +use strict; + +use Device::SerialPort; + +sub get_line($) { + my $port = shift; + + my $ret = ""; + + while (1) { + my ( $count, $byte ) = $port->read(1); + + if ( $count > 0 ) { + $ret .= $byte; + return $ret if $byte eq "\n"; + } + else { + return $ret; + } + } +} + +sub display($$$$$$) { + my ( $t, $h, $show_t, $show_h, $int, $mrtg ) = @_; + + if ( $int or $mrtg ) { + $t = int( $t * 100 ); + $h = int( $h * 10 ); + } + + if ($mrtg) { + if ($show_t) { + print "$t\n"; + print "0\n"; + print "long time\n"; + print "temperature\n"; + } + + if ($show_h) { + print "$t\n"; + print "0\n"; + print "long time\n"; + print "humidity\n"; + } + } + else { + print "$t\n" if $show_t; + print "$h\n" if $show_h; + } +} + +my $keypad_port = "/dev/ttyS1"; +my $keypad = new Device::SerialPort($keypad_port) + || die "can't open $keypad_port\n"; + +$keypad->baudrate(115200); +$keypad->parity("none"); +$keypad->databits(8); +$keypad->stopbits(1); +$keypad->stty_icanon(0); + +$keypad->read_char_time(0); +$keypad->read_const_time(1000); + +my $mrtg = 0; +my $temp = 0; +my $humid = 0; +my $int = 0; + +for my $opt (@ARGV) { + $mrtg = 1 if $opt eq '-m'; + $temp = 1 if $opt eq '-t'; + $humid = 1 if $opt eq '-h'; + $int = 1 if $opt eq '-i'; +} + +for ( my $tries = 0 ; $tries < 4 ; ++$tries ) { + my $line = get_line($keypad); + + chomp $line; + chomp $line; + + if ( $line =~ /\$SNTHD,([-.0-9]+),([-.0-9]+)/ ) { + + display( $1, $2, $temp, $humid, $int, $mrtg ); + exit 0; + } +} + +exit 1; + -- cgit v1.2.3