From bb350fa9d275351c2f8a226d032d8f6b86951130 Mon Sep 17 00:00:00 2001 From: bjoernh <> Date: Sat, 7 Jan 2017 07:49:53 +0000 Subject: [PATCH] 14_CUL_TCM97001: fix KW9010 sensor git-svn-id: https://svn.fhem.de/fhem/trunk@12994 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/14_CUL_TCM97001.pm | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 54aa84285..697fd20ec 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: 14_CUL_TCM97001: fix KW9010 sensor - feature: 70_Pushover: add new msg set syntax and introduce Apple Watch glance support - change: 70_Pushover: old msg set syntax was declared as being deprecated. diff --git a/fhem/FHEM/14_CUL_TCM97001.pm b/fhem/FHEM/14_CUL_TCM97001.pm index 086d8f4ea..30e21cadf 100755 --- a/fhem/FHEM/14_CUL_TCM97001.pm +++ b/fhem/FHEM/14_CUL_TCM97001.pm @@ -159,6 +159,7 @@ sub checkCRC { # sub checkCRCKW9010 { my $msg = shift; + Log3 "CUL_TCM97001", 5 , "crc calc for: $msg"; my @a = split("", $msg); my $bitReverse = undef; my $x = undef; @@ -173,6 +174,8 @@ sub checkCRCKW9010 { my $CRC = (hex($aReverse[0])+hex($aReverse[1])+hex($aReverse[2])+hex($aReverse[3]) +hex($aReverse[4])+hex($aReverse[5])+hex($aReverse[6])+hex($aReverse[7])) & 15; + Log3 "CUL_TCM97001", 5 , "calc crc is: $CRC"; + Log3 "CUL_TCM97001", 5 , "ref crc is :".hex($aReverse[8]); if ($CRC == hex($aReverse[8])) { return TRUE; } @@ -1030,8 +1033,8 @@ CUL_TCM97001_Parse($$) - if (($readedModel eq "Unknown" || $readedModel eq "KW9010")) { - #if (checkCRCKW9010($msg) == TRUE && ($readedModel eq "Unknown" || $readedModel eq "KW9010")) { + #if (($readedModel eq "Unknown" || $readedModel eq "KW9010")) { + if (checkCRCKW9010($msg) == TRUE && ($readedModel eq "Unknown" || $readedModel eq "KW9010")) { # Re: Tchibo Wetterstation 433 MHz - KW9010 # See also http://forum.arduino.cc/index.php?PHPSESSID=ffoeoe9qeuv7rf4fh0d637hd74&topic=136836.msg1536416#msg1536416 # /------------------------------------- Random ID part one @@ -1056,9 +1059,10 @@ CUL_TCM97001_Parse($$) my $bitReverse = undef; my $x = undef; foreach $x (@a) { - my $bin3=sprintf("%024b",hex($x)); - $bitReverse = $bitReverse . substr(reverse($bin3),0,4); + $bitReverse = $bitReverse . reverse(sprintf("%04b",hex($x))); } + Log3 $hash, 5 , "KW9010 CRC Matched: ($bitReverse)"; + my $hexReverse = unpack("H*", pack ("B*", $bitReverse)); #Split reversed a again @@ -1073,10 +1077,12 @@ CUL_TCM97001_Parse($$) # positive temp $temp = (hex($aReverse[3]) + hex($aReverse[4]) * 16 + hex($aReverse[5]) * 256)/10; } - $humidity = hex($aReverse[7]).hex($aReverse[6]) - 156; + $humidity = hex($aReverse[7].$aReverse[6]) - 156; if (checkValues($temp, $humidity)) { + Log3 $hash, 5 , "KW9010 values are matching"; + $batbit = (hex($a[2]) & 0x8) >> 3; #$mode = (hex($a[2]) & 0x4) >> 2; $channel = ((hex($a[1])) & 0xC) >> 2; @@ -1111,6 +1117,8 @@ CUL_TCM97001_Parse($$) $readedModel=$model; } else { + Log3 $hash, 5 , "KW9010 t:$temp / h:$humidity mismatch"; + $name = "Unknown"; } }