diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm index 69948fb68..4ba77bef1 100755 --- a/fhem/FHEM/00_HMLAN.pm +++ b/fhem/FHEM/00_HMLAN.pm @@ -122,6 +122,8 @@ sub HMLAN_Define($$) {######################################################### my @al = (); @{$defs{$name}{helper}{log}{ids}} = \@al; + $defs{$name}{helper}{assId}; + HMLAN_condUpdate($hash,253);#set disconnected $hash->{STATE} = "disconnected"; @@ -403,8 +405,6 @@ sub HMLAN_ReadAnswer($$$) {# This is a direct read for commands like get } } -my %lhash; # remember which ID is assigned to this HMLAN - sub HMLAN_Write($$$) {######################################################### my ($hash,$fn,$msg) = @_; if (length($msg)>22){ @@ -427,9 +427,8 @@ sub HMLAN_Write($$$) {######################################################### # my $IDnew = '+'.$dst.',00,01,'; # newChannel- trailing 01 to be sent if talk to neu channel my $IDadd = '+'.$dst.',00,00,'; # guess: add ID? - if (!$lhash{$dst} && $dst ne "000000"){ + if (!$hash->{assIDs}{$dst} && $dst ne "000000"){ HMLAN_SimpleWrite($hash, $IDadd); -# delete $hash->{helper}{$dst}; my $dN = CUL_HM_id2Name($dst); if (!($dN eq $dst) && # name not found !(CUL_HM_Get(CUL_HM_id2Hash($dst),$dN,"param","rxType") & ~0x04)){#config only @@ -439,9 +438,9 @@ sub HMLAN_Write($$$) {######################################################### $hash->{helper}{$dst}{newChn} = '+'.$dst.',00,01,'; } $hash->{helper}{$dst}{name} = CUL_HM_id2Name($dst); - $lhash{$dst} = 1; - $hash->{assignedIDs}=join(',',keys %lhash); - $hash->{assignedIDsCnt}=scalar(keys %lhash); + $hash->{assIDs}{$dst} = 1; + $hash->{assignedIDs}=join(',',keys %{$hash->{assIDs}}); + $hash->{assignedIDsCnt}=scalar(keys %{$hash->{assIDs}}); } } my $tm = int(gettimeofday()*1000) % 0xffffffff; @@ -785,7 +784,7 @@ sub HMLAN_DoInit($) {########################################################## HMLAN_condUpdate($hash,0xff); $hash->{helper}{q}{cap}{$_}=0 foreach (keys %{$hash->{helper}{q}{cap}}); - foreach (keys %lhash){delete ($lhash{$_})};# clear IDs - HMLAN might have a reset + foreach (keys %{$hash->{helper}{assIDs}}){delete ($hash->{helper}{assIDs}{$_})};# clear IDs - HMLAN might have a reset $hash->{helper}{q}{keepAliveRec} = 1; # ok for first time $hash->{helper}{q}{keepAliveRpt} = 0; # ok for first time diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 7dd321691..087ad618c 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -594,17 +594,17 @@ sub CUL_HM_Parse($$) {############################## && ($mTp eq '01' || $mTp eq '11')){ my $ioId = AttrVal($dhash->{IODev}{NAME},"hmId","-"); if($ioId ne $src){ - CUL_HM_eventP($dhash,"ErrIoId_$src"); - my ($evntCnt,undef) = split(' last_at:',$dhash->{"prot"."ErrIoId_$src"},2); - push @entities,CUL_HM_UpdtReadSingle($dhash,"sabotageAttackId","ErrIoId_$src cnt:$evntCnt",1); - } + CUL_HM_eventP($dhash,"ErrIoId_$src"); + my ($evntCnt,undef) = split(' last_at:',$dhash->{"prot"."ErrIoId_$src"},2); + push @entities,CUL_HM_UpdtReadSingle($dhash,"sabotageAttackId","ErrIoId_$src cnt:$evntCnt",1); + } - if( defined $dhash->{helper}{cSnd} && - $dhash->{helper}{cSnd} ne substr($msg,7)){ + if( defined $dhash->{helper}{cSnd} && + $dhash->{helper}{cSnd} ne substr($msg,7)){ CUL_HM_eventP($dhash,"ErrIoAttack"); - my ($evntCnt,undef) = split(' last_at:',$dhash->{"prot"."ErrIoAttack"},2); - push @entities,CUL_HM_UpdtReadSingle($dhash,"sabotageAttack","ErrIoAttack cnt:$evntCnt",1); - } + my ($evntCnt,undef) = split(' last_at:',$dhash->{"prot"."ErrIoAttack"},2); + push @entities,CUL_HM_UpdtReadSingle($dhash,"sabotageAttack","ErrIoAttack cnt:$evntCnt",1); + } } ########### @@ -3489,9 +3489,9 @@ sub CUL_HM_valvePosUpdt(@) {#update valve position periodically to please valve my $vDevId = substr($vId,0,6); my $msgCnt = ($hash->{helper}{vd}{msgCnt} + 1)%255; -# int32_t result = (((_address << 8) | messageCounter) * 1103515245 + 12345) >> 16; +# int32_t result = (((_address << 8) | messageCounter) * 1103515245 + 12345) >> 16; # 4e6d = 20077 12996205 = C64E6D -# return (result & 0xFF) + 480; +# return (result & 0xFF) + 480; my $idl = $hash->{helper}{vd}{idl}+$msgCnt; my $lo = int(($idl*0x4e6d +12345)/0x10000)&0xff; my $hi = ($hash->{helper}{vd}{idh}+$idl*198)&0xff;