From 4c4ac1b3c73200728f1f56193fe9905aa391abd4 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 29 Sep 2019 11:40:15 +0200 Subject: [PATCH] check crc --- pms3003.pl | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pms3003.pl b/pms3003.pl index 1c5067b..2d52db8 100755 --- a/pms3003.pl +++ b/pms3003.pl @@ -5,10 +5,12 @@ use strict; use Device::SerialPort; use Data::Dump qw(dump); -my $port = shift @ARGV || '/dev/ttyUSB1'; +my $port = shift @ARGV || '/dev/ttyUSB0'; 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 $debug = $ENV{DEBUG} || 0; + my $s = new Device::SerialPort( $port ) || die $!; $s->baudrate(9600); $s->databits(8); @@ -36,11 +38,19 @@ while (1) { my ($len, $string) = $s->read(24); 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],"; -- 2.20.1