diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm index a3228d6e6..eb7544a27 100755 --- a/fhem/FHEM/00_HMLAN.pm +++ b/fhem/FHEM/00_HMLAN.pm @@ -195,7 +195,7 @@ HMLAN_ReadAnswer($$$) } } -my %lhash = ""; # remember which ID is assigned to this HMLAN +my %lhash; # remember which ID is assigned to this HMLAN ##################################### sub @@ -310,11 +310,14 @@ HMLAN_Parse($$) my $dst = substr($mFld[5],12,6); my $flg = hex(substr($mFld[5],2,2)); - # handle status. 01=ack:seems to announce the new message counter - # 02=our send message returned it was likely not sent - # 08=nack - HMLAN did not receive an ACK, - # 21=?, - # 81=open + # handle status. 0001=ack:seems to announce the new message counter + # 0002=our send message returned it was likely not sent + # 0008=nack - HMLAN did not receive an ACK, + # 0021= 'R' + # 0081=open + # 0100=with 'E', not 'R'. + # 0081=open + # HMLAN_SimpleWrite($hash, '+'.$src) if (($letter eq 'R') && $src ne AttrVal($name, "hmId", $mFld[4])); # if (!($flg & 0x25)){#rule out other messages @@ -442,7 +445,7 @@ HMLAN_DoInit($) HMLAN_SimpleWrite($hash, "Y03,00,"); HMLAN_SimpleWrite($hash, "T$s2000,04,00,00000000"); - %lhash = '';# clear IDs - HMLAN might have a reset + foreach (keys %lhash){delete ($lhash{$_})};# clear IDs - HMLAN might have a reset $hash->{helper}{keepAliveRec} = 1; # ok for first time RemoveInternalTimer( "keepAlive:".$name);# avoid duplicate timer InternalTimer(gettimeofday()+25, "HMLAN_KeepAlive", "keepAlive:".$name, 0); diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 4a4939acc..205e087d7 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -497,7 +497,14 @@ CUL_HM_Parse($$) $chn = substr($p,2,2); my $dTemp = sprintf("%0.1f", hex(substr($p,4,2))/2); my $chnHash = $modules{CUL_HM}{defptr}{$src.$chn}; - readingsSingleUpdate($chnHash,"desired-temp",$dTemp,1) if($chnHash); + if($chnHash){ + my $chnName = $chnHash->{NAME}; + my $mode = ReadingsVal($chnName,"R-MdTempReg",""); + readingsSingleUpdate($chnHash,"desired-temp",$dTemp,1); + readingsSingleUpdate($chnHash,"desired-temp-manu",$dTemp,1) if($mode eq 'manual ' && $msgType eq '10'); + readingsSingleUpdate($chnHash,"desired-temp-cent",$dTemp,1) if($mode eq 'central ' && $msgType eq '02'); + CUL_HM_Set($chnHash,$chnName,"desired-temp",$dTemp) if($mode eq 'central ' && $msgType eq '10'); + } push @event, "desired-temp:" .$dTemp; } elsif($msgType eq "10"){ # Config change report @@ -569,6 +576,20 @@ CUL_HM_Parse($$) push @event,'displayTempUnit:' .(($v1 & 4)?"fahrenheit" :"celsius"); push @event,'controlMode:' .($mode{(($v1 & 0x18)>>3)}); push @event,'decalcDay:' .$days[($v1 & 0xE0)>>5]; + my $chnHash = $modules{CUL_HM}{defptr}{$src.$chn}; + my $dTemp; + if($chnHash){ + my $chnName = $chnHash->{NAME}; + my $mode = ReadingsVal($chnName,"R-MdTempReg",""); + $dTemp = ReadingsVal($chnName,"desired-temp","21.0"); + if ($chnHash->{helper}{oldMode} ne $mode){ + $dTemp = ReadingsVal($chnName,"desired-temp-manu",$dTemp)if ($mode eq 'manual '); + $dTemp = ReadingsVal($chnName,"desired-temp-cent",$dTemp)if ($mode eq 'central '); + $chnHash->{helper}{oldMode} = $mode; + } + readingsSingleUpdate($chnHash,"desired-temp",$dTemp,1); + } + push @event, "desired-temp:" .$dTemp; } elsif($o1 == 2) { my %pos = (0=>"Auto",1=>"Closed",2=>"Open",3=>"unknown"); @@ -630,6 +651,7 @@ CUL_HM_Parse($$) push @event, ""; # just in case - mark message as confirmed } + # CMD:A010 SRC:13F251 DST:5D24C9 0401 00000000 05 09:00 0A:07 00:00 # status change report to paired central unit #read List5 reg 09 (offset) and 0A (err-pos) @@ -3064,6 +3086,11 @@ my %culHmBits = ( LOWBAT => '06,02,$val=(hex($val)&0x80)?1:0', RSSI => '08,02,$val=(-1)*(hex($val))', }}, "02;p01=02" => { txt => "ACK2"}, # smokeDetector pairing only? + "02;p01=04" => { txt => "ACK-proc", params => { + Para1 => "02,4", + Para2 => "06,4", + Para3 => "10,4", + Para4 => "14,2",}}, # remote? "02;p01=80" => { txt => "NACK"}, "02;p01=84" => { txt => "NACK_TARGET_INVALID"}, "02" => { txt => "ACK/NACK_UNKNOWN "},