From 333fd680de160cba0cb7e63fa5aa702c13aa5e5c Mon Sep 17 00:00:00 2001 From: eisler Date: Fri, 8 Feb 2019 15:06:01 +0000 Subject: [PATCH] 12_HProtocolGateway: PMS-IB checksum calculation corrected git-svn-id: https://svn.fhem.de/fhem/trunk@18532 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/12_HProtocolGateway.pm | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 988080a17..b3562c325 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - bugfix: 12_HProtocolGateway: PMS-IB checksum calculation corrected - change: 12_HProtocolGateway: move sensorSystem attribute to HProtocolTank - feature: 98_Verkehrsinfo.pm: add attribut timeout - feature: 12_HProtocolGateway: added 843 protocol for PMS-IB P20 diff --git a/fhem/FHEM/12_HProtocolGateway.pm b/fhem/FHEM/12_HProtocolGateway.pm index 53d0eb91e..8978a4305 100644 --- a/fhem/FHEM/12_HProtocolGateway.pm +++ b/fhem/FHEM/12_HProtocolGateway.pm @@ -189,19 +189,20 @@ sub HProtocolGateway_ParseMessage($$) { my $sensorSystem = AttrVal($tankHash->{NAME}, 'sensorSystem', ""); - my ($tanknumber,$error,$temperature,$tankdata,$water,$checksum,$version,$probe_offset); + my ($tanknumber,$error,$temperature,$tankdata,$water,$checksum,$version,$probe_offset,$test); # PMS-IB if ( $sensorSystem eq "PMS-IB") { ($tanknumber,$error,$temperature,$tankdata,$water,$checksum)=split(/=/,$data); + $test = substr($data, 0, length($data)-3); # checksum - my @ascii = unpack("C*", $data); + my @ascii = unpack("C*", $test); my $sum = 0; foreach my $val (@ascii) { $sum = $sum + $val; } - if ($sum > 255) { + while ($sum > 255) { $sum = $sum - 255; } @@ -212,7 +213,7 @@ sub HProtocolGateway_ParseMessage($$) { $data =~ s/^.//; # remove # ($tankdata,$water,$temperature,$probe_offset,$version,$error,$checksum)=split(/@/,$data); - my $test = "#".$tankdata.$water.$temperature.$probe_offset.$version.$error; + $test = "#".$tankdata.$water.$temperature.$probe_offset.$version.$error; # calculate XOR CRC my $check = 0;