X-Git-Url: http://git.rot13.org/?p=air-quality;a=blobdiff_plain;f=pms3003.pl;h=0f73e96c095819a20e8f6b70e7ce98a720b42aba;hp=1c5067b552798eafbeac1719a5bdd18fc64d73dc;hb=42b7874fd94e776acce9f6fcbea694474d848368;hpb=5fba484d7844c3c48e854df28dbea4a6b40b4327 diff --git a/pms3003.pl b/pms3003.pl index 1c5067b..0f73e96 100755 --- a/pms3003.pl +++ b/pms3003.pl @@ -3,11 +3,13 @@ use warnings; use strict; # sudo apt install libdevice-serialport-perl libdata-dump-perl use Device::SerialPort; +use Time::HiRes; use Data::Dump qw(dump); -my $port = shift @ARGV || '/dev/ttyUSB1'; -my $influx_url = shift @ARGV || 'http://10.13.37.229:8186/write?db=telegraf'; -$influx_url = 'http://10.13.37.92:8086/write?db=rot13'; +my $port = shift @ARGV || '/dev/ttyUSB0'; +my $influx_url = shift @ARGV || 'http://10.13.37.92:8086/write?consistency=any&db=rot13'; + +my $debug = $ENV{DEBUG} || 0; my $s = new Device::SerialPort( $port ) || die $!; $s->baudrate(9600); @@ -34,18 +36,29 @@ pm10_r while (1) { my ($len, $string) = $s->read(24); + my $t = int( Time::HiRes::time() * 1_000_000_000 ); + die $! if ! defined($len); if ( $len > 0 ) { my @v = unpack('n*', $string); - warn "# $len ",dump($string), dump( @v ), $/; + warn "# $len ",dump($string), dump( @v ), $/ if $debug; my $header = shift @v; - if ( $header == 0x424d ) { + my $checksum = pop @v; # remove checksum + + my $sum = 0; + foreach my $b ( unpack('C*', substr($string,0,-2) ) ) { + $sum += $b; + } + $sum = $sum & 0xffff; + + if ( $header == 0x424d && $sum == $checksum ) { shift @v; # skip len - pop @v; # remove checksum + my $influx = "pms3003,dc=trnjanska "; foreach my $i ( 0 .. $#v ) { $influx .= "$names[$i]=$v[$i],"; }; $influx =~ s/,$//; + $influx .= " $t"; print "$influx\n"; system "curl --silent -XPOST '$influx_url' --data-binary '$influx'" }