X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=serial.pl;h=11b693d11a3bdfc5ebf19bd8787207caac841573;hb=10b0e1aa15c548fbc141ea41caa786ac5d23297f;hp=06a1d15b96235d41f5d987468c5ed1b93b458937;hpb=95f8429ee183074531fb3f33c6fd69a141439770;p=vaillant-thermostat diff --git a/serial.pl b/serial.pl index 06a1d15..11b693d 100755 --- a/serial.pl +++ b/serial.pl @@ -4,13 +4,17 @@ use strict; use Device::SerialPort; use Data::Dump qw(dump); use Time::HiRes qw(time); +use LWP::UserAgent; my $read_len = 255; -my $path = shift @ARGV || '/dev/serial/by-path/platform-20980000.usb-usb-0:1.3.1:1.0-port0'; +# bottom serial on rpi +my $path = shift @ARGV || '/dev/serial/by-path/platform-1c14400.usb-usb-0:1:1.0-port0'; $|=1; +my $ua = LWP::UserAgent->new; + connect_again: my $s = new Device::SerialPort( $path ) || die $!; @@ -30,9 +34,9 @@ my $sym; sub _mqtt_pub { my ( $t, $m ) = @_; - my $cmd = "mosquitto_pub -h rpi2 -t 'stat/rpi/$t' -m '$m'"; + my $cmd = "mosquitto_pub -h rpi2 -t '$t' -m '$m'"; #warn "# _mqtt_pub [$t] = [$m]\n"; - warn "## $cmd"; + #warn "## $cmd"; system $cmd; } @@ -45,8 +49,9 @@ while (1) { my $hex = unpack('H*',$string); $hex =~ s/(..)/$1 /g; - my $temp = `curl localhost:3000/temp.txt`; + my $temp = `curl --silent rpi:3000/temp.txt`; $temp =~ s/\s+/ /gs; + $temp =~ s/^\s+//; #printf "%s %2d %s\n", time(), $len, $hex; printf "%8.4f %6.2f %2d %s | %s\n", $ts, $ts - $t, $len, $hex, $temp; @@ -67,6 +72,37 @@ while (1) { _mqtt_pub "stat/boiler/" . chr(ord('a') + $_) => $d[$_] foreach 0 .. $#d; } + my @v = split(/\s+/, $temp, 4); + my @n = qw( DS18B20/temperature DHT22/temperature DHT22/humidity DHT22/errors ); + @n = qw( DS18B20/temperature DHT22/temperature DHT22/humidity DHT22/errors ) if $#v == 1; # no DS18B20 + foreach (@v) { + _mqtt_pub "stat/boiler/" . shift(@n) => $_; + } + + my $t = int( $ts * 1_000_000_000 ); + my @a = split(/ /, $hex); + if ( $#a == 66 ) { + my $measurement = "boiler " . join(',', + "o19=".hex( $a[19] ), + "o25=".hex( $a[35] . $a[36] ), + "o30=".hex( $a[38] . $a[39] ), + "o41=".hex( $a[41] ), + "o47=".hex( $a[47] ), + "o49=".hex( $a[49] ), + "o50=".hex( $a[50] ), + "o51=".hex( $a[51] ), + "o53=".hex( $a[53] ), + "ds18b20_temp=$v[0]", "dht22_temp=$v[1]", "dht22_hum=$v[2]" + ); + my $response = $ua->post( "http://10.60.0.92:8086/write?db=rot13", Content => $measurement ); + chomp(my $content = $response->content()); + if ($response->is_success()) { + #warn "OK $content\n"; + } else { + warn "ERROR $content\n"; + die $response->status_line; + } + } } }