From b84ea7dcffc5c2ab751b43d43f7f7614415481be Mon Sep 17 00:00:00 2001 From: martinp876 Date: Sat, 1 Nov 2014 19:18:25 +0000 Subject: [PATCH] CUL_HM: EM8 status report git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@6856 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_CUL_HM.pm | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 674bd5845..e0b744119 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -1755,7 +1755,7 @@ sub CUL_HM_Parse($$) {######################################################### } elsif($st =~ m /^(remote|pushButton|swi)$/ ||$md eq "HM-SEN-EP") { ################################################# - if($mTp =~ m/^4./) { + if($mTp eq "40") { my ($chn, $bno) = map{hex($_)} ($mI[0],$mI[1]);# button/event count my $buttonID = $chn&0x3f;# only 6 bit are valid my $btnName; @@ -1796,6 +1796,36 @@ sub CUL_HM_Parse($$) {######################################################### push @evtEt,[$shash,1,"battery:". (($chn&0x80)?"low":"ok")]; push @evtEt,[$shash,1,"state:$btnName $state$target"]; } + else{# could be an Em8 + my($chn,$cnt,$state,$err); + if($mTp eq "41"){ + ($chn,$cnt,$state)=(hex($mI[0]),$mI[1],$mI[2]); + my $err = $chn & 0x80; + $chn = sprintf("%02X",$chn & 0x3f); + $shash = $modules{CUL_HM}{defptr}{"$src$chn"} + if($modules{CUL_HM}{defptr}{"$src$chn"}); + push @evtEt,[$shash,1,"battery:". ($err?"low" :"ok" )]; + } + elsif(($mTp eq "10" && $mI[0] eq "06") || + ($mTp eq "02" && $mI[0] eq "01")) { + ($chn,$state,$err) = (hex($mI[1]), $mI[2], hex($mI[3])); + $chn = sprintf("%02X",$chn&0x3f); + $shash = $modules{CUL_HM}{defptr}{"$src$chn"} + if($modules{CUL_HM}{defptr}{"$src$chn"}); + push @evtEt,[$shash,1,"alive:yes"]; + push @evtEt,[$shash,1,"battery:". (($err&0x80)?"low" :"ok" )]; + } + if (defined($state)){# if state was detected post events + my $txt; + if ($shash->{helper}{lm} && $shash->{helper}{lm}{hex($state)}){$txt = $shash->{helper}{lm}{hex($state)}} + elsif ($lvlStr{md}{$md}){$txt = $lvlStr{md}{$md}{$state}} + elsif ($lvlStr{st}{$st}){$txt = $lvlStr{st}{$st}{$state}} + else {$txt = "unknown:$state"} + + push @evtEt,[$shash,1,"state:$txt"]; + push @evtEt,[$shash,1,"contact:$txt$target"]; + } + } } elsif($st eq "powerMeter") {################################################# if (($mTp eq "02" && $p =~ m/^01/) || # handle Ack_Status