summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfishsoupisgood <github@madingley.org>2021-01-24 10:12:38 +0000
committerfishsoupisgood <github@madingley.org>2021-01-24 10:12:38 +0000
commit25fbb8a03c72f473a2d7f6cfb5961a1c43b1a6a2 (patch)
treed7292ae8122c45672d9e7080d246cb8b8563602a
parent77f347fb4e37666e2d687cee99dfa4cb4e441b8a (diff)
downloadheating-25fbb8a03c72f473a2d7f6cfb5961a1c43b1a6a2.tar.gz
heating-25fbb8a03c72f473a2d7f6cfb5961a1c43b1a6a2.tar.bz2
heating-25fbb8a03c72f473a2d7f6cfb5961a1c43b1a6a2.zip
add piano alarm
-rw-r--r--piano-alarm/.gitignore1
-rw-r--r--piano-alarm/mt300-v2/Makefile11
-rw-r--r--piano-alarm/mt300-v2/etc/crontabs/root1
-rw-r--r--piano-alarm/mt300-v2/etc/msmtprc30
-rw-r--r--piano-alarm/mt300-v2/etc/panaceas-ca.crt32
-rwxr-xr-xpiano-alarm/mt300-v2/usr/bin/piano_alarm55
-rwxr-xr-xpiano-alarm/mt300-v2/usr/bin/sensor.pl93
7 files changed, 223 insertions, 0 deletions
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 <piano-alarm@ourano.org>" 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;
+