2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

44_TEK603.pm: added crc check to fix wrong values

git-svn-id: https://svn.fhem.de/fhem/trunk@10663 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
eisler 2016-01-30 10:31:14 +00:00
parent 5ef175bef5
commit aa8f1fd5d4
2 changed files with 19 additions and 3 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # 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. # Do not insert empty lines here, update check depends on it.
- bugfix: 44_TEK603: fixed wrong values.
- bugfix: 49_SSCam: fixed the problem a recording may still stay active if - bugfix: 49_SSCam: fixed the problem a recording may still stay active if
fhem will be restarted after a recording was triggered and fhem will be restarted after a recording was triggered and
the recordtime wasn't be over, the recordtime wasn't be over,

View File

@ -28,6 +28,8 @@ package main;
use strict; use strict;
use warnings; use warnings;
use Digest::CRC; # libdigest-crc-perl
sub TEK603_Initialize($); sub TEK603_Initialize($);
sub TEK603_define($$); sub TEK603_define($$);
sub TEK603_doInit($); sub TEK603_doInit($);
@ -159,7 +161,12 @@ sub TEK603_read($) {
#my $epromEnd = hex(substr($hash->{buffer},22,4)); #my $epromEnd = hex(substr($hash->{buffer},22,4));
my $payloadlenght = $lenght - 26 - 4; my $payloadlenght = $lenght - 26 - 4;
my $payload = substr($hash->{buffer},26,$payloadlenght); my $payload = substr($hash->{buffer},26,$payloadlenght);
#my $crc = substr($hash->{buffer},26 + $payloadlenght,4); my $crc = substr($hash->{buffer},26 + $payloadlenght,4);
my $ctx = Digest::CRC->new(width=>16, init=>0x0, poly=>0x1021, refout=>0, xorout=>0);
$ctx->add(pack 'H*',(substr($hash->{buffer},0,26 + $payloadlenght)));
my $digest = $ctx->hexdigest;
return '' if($crc ne $digest);
# payload # payload
my $temp = sprintf '%.2f', ((hex(substr($payload, 0,2)) - 40 - 32) / 1.8); my $temp = sprintf '%.2f', ((hex(substr($payload, 0,2)) - 40 - 32) / 1.8);
@ -170,7 +177,6 @@ sub TEK603_read($) {
#Log3 $name, 5, $hash->{buffer}; #Log3 $name, 5, $hash->{buffer};
Log3 $name, 5, "Time:$time Temp:$temp Ullage:$Ullage RemainingUsableLevel:$RemainingUsableLevel TotalUsableCapacity:$TotalUsableCapacity"; Log3 $name, 5, "Time:$time Temp:$temp Ullage:$Ullage RemainingUsableLevel:$RemainingUsableLevel TotalUsableCapacity:$TotalUsableCapacity";
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "Time", $time); readingsBulkUpdate($hash, "Time", $time);
readingsBulkUpdate($hash, "Temperature", $temp); readingsBulkUpdate($hash, "Temperature", $temp);
@ -195,6 +201,7 @@ sub TEK603_reconnect($) {
DevIo_OpenDev($hash, 0, 'TEK603_doInit'); DevIo_OpenDev($hash, 0, 'TEK603_doInit');
} }
1; 1;
=pod =pod
@ -208,6 +215,14 @@ sub TEK603_reconnect($) {
<br /> <br />
<b>Prerequisites</b><br>
The module requires the perl module Digest::CRC<br>
On a debian based system the module can be installed with<br>
<code>
sudo apt-get install libdigest-crc-perl<br>
</code>
<br /><br />
<a name="TEK603_Define"></a> <a name="TEK603_Define"></a>
<b>Define</b> <b>Define</b>
<ul> <ul>
@ -234,7 +249,7 @@ sub TEK603_reconnect($) {
<li>RemainingUsableLevel<br /> <li>RemainingUsableLevel<br />
This is the usable level, with deductions due to the sensor offset and outlet height. (Liters)</li> This is the usable level, with deductions due to the sensor offset and outlet height. (Liters)</li>
<li>TotalUsableCapacity<br /> <li>TotalUsableCapacity<br />
This is the usable volume, with deductions due to the sensor offset and outlet height. (Litres)</li> This is the usable volume, with deductions due to the sensor offset and outlet height. (Liters)</li>
</ul><br /> </ul><br />