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 $!;
my $hex = unpack('H*',$string);
$hex =~ s/(..)/$1 /g;
- my $temp = `curl --silent localhost:3000/temp.txt`;
+ my $temp = `curl --silent rpi:3000/temp.txt`;
$temp =~ s/\s+/ /gs;
$temp =~ s/^\s+//;
_mqtt_pub "stat/boiler/" . chr(ord('a') + $_) => $d[$_] foreach 0 .. $#d;
}
- my @v = split(/\s+/, $temp, 3);
- my @n = qw( DS18B20/temperature DHT22/temperature DHT22/humidity );
+ 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;
+ }
+ }
}
}