diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm
index 10a99edb3..9af44f44f 100755
--- a/fhem/FHEM/10_CUL_HM.pm
+++ b/fhem/FHEM/10_CUL_HM.pm
@@ -931,7 +931,7 @@ sub CUL_HM_Parse($$) {#########################################################
if($mTp =~ m /^4[01]/){ #someone is triggered##########
my $chn = hex($mI[0])& 0x3f;
my $cName = CUL_HM_id2Name($src.sprintf("%02X",$chn));
-
+
my @peers = grep !/00000000/,split(",",AttrVal($cName,"peerIDs",""));
foreach my $peer (grep /$dst/,@peers){
my $pName = CUL_HM_id2Name($peer);
@@ -2375,6 +2375,7 @@ sub CUL_HM_parseCommon(@){#####################################################
my $mNoInt = hex($mNo);
if ($pendType eq "PeerList" &&
($rspWait->{mNo} == $mNoInt || $rspWait->{mNo} == $mNoInt-1)){
+ $rspWait->{mNo} = $mNoInt;
my $chn = $shash->{helper}{prt}{rspWait}{forChn};
my $chnhash = $modules{CUL_HM}{defptr}{$src.$chn};
@@ -2566,8 +2567,8 @@ sub CUL_HM_parseCommon(@){#####################################################
my $peerIDs = AttrVal($cName,"peerIDs","");
if ($peerIDs =~ m/$dst/){# dst is available in the ID list
- my @peers = grep !/00000000/,split(",",$peerIDs);
- foreach my $peer (grep /^$dst/,@peers){
+ my @peers = grep /^$dst/,split(",",$peerIDs);
+ foreach my $peer (@peers){
my $pName = CUL_HM_id2Name($peer);
$pName = CUL_HM_id2Name($dst) if (!$defs{$pName}); #$dst - device-id of $peer
next if (!$defs{$pName});
@@ -2577,7 +2578,7 @@ sub CUL_HM_parseCommon(@){#####################################################
CUL_HM_stateUpdatDly($pName,10) if ($mTp eq "40");#conditional request may not deliver state-req
}
}
- else{# remote triggers a device that is not listed
+ elsif($mFlgH & 2){# dst can be garbage - but not if answer request
my $pName = CUL_HM_id2Name($dst);
push @evtEt,[$cHash,1,"trigDst_$pName:noConfig"];
}
@@ -6316,8 +6317,7 @@ sub CUL_HM_repReadings($) { # parse repeater
push @pB,$b;
}
my @readList;
- push @readList,"repPeer_$_:undefined" for(0..35);#set default empty
-
+ push @readList,"repPeer_".sprintf("%02d",$_+1).":undefined" for(0..35);#set default empty
my @retL;
foreach my$pId(sort keys %pCnt){
my ($pdID,$bdcst,$no) = unpack('A6A2A2',$pId);
@@ -6532,7 +6532,7 @@ sub CUL_HM_UpdtReadBulk(@) { #update a bunch of readings and trigger the events
readingsBeginUpdate($hash);
foreach my $rd (@readings){
next if (!$rd);
- my ($rdName, $rdVal) = split(":",$rd, 2);
+ my ($rdName, $rdVal) = split(":",$rd, 2);
readingsBulkUpdate($hash,$rdName,
((defined($rdVal) && $rdVal ne "")?$rdVal:"-"));
}
@@ -9195,7 +9195,8 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
-
HM-Sys-sRP-Pl
+
+ HM-Sys-sRP-Pl
legt Einträge für den Repeater an. Bis zu 36 Einträge können angelegt werden.
- setRepeat <entry> <sender> <receiver> <broadcast>
@@ -9214,7 +9215,7 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
Number src dst broadcast verify
number: Nummer des Eintrags in der Liste
src: Ursprungsgerät der Nachricht - aus Repeater ausgelesen
- dst: Zielgerät der Nachricht - asu den Attributen abgeleitet
+ dst: Zielgerät der Nachricht - aus den Attributen abgeleitet
broadcast: sollen Broadcasts weitergeleitet werden - aus Repeater ausgelesen
verify: stimmen Attribute und ausgelesen Werte überein?
diff --git a/fhem/FHEM/98_HMinfo.pm b/fhem/FHEM/98_HMinfo.pm
index 7957727b2..cb0b098a6 100644
--- a/fhem/FHEM/98_HMinfo.pm
+++ b/fhem/FHEM/98_HMinfo.pm
@@ -1336,23 +1336,52 @@ sub HMinfo_verifyConfig($@) {##################################################
my ($reg,$data) = split(" ",$param,2);
my $exp = CUL_HM_getAttrInt($eN,"expert");
my $eReg = ReadingsVal($eN,(($exp != 2)?".":"").$reg,"");
- if ($eReg ne $data){
-# my @fRegs = split(" ",$data);#fileRegs
-# my @eRegs = split(" ",$eReg);#entityRegs
-# my %fr = map {$_=>1} @eRegs;
-# my @onlyFile = grep { !$fr{$_} } @fRegs;
-# my %er = map {$_=>1} @fRegs;
-# my @onlyEnt = grep { !$er{$_} } @eRegs;
-#
-# push @elReg,"$eN Reg deleted: $_" foreach(@onlyFile);
-# push @elReg,"$eN Reg added : $_" foreach(@onlyEnt);
- push @elReg,"$eN Reg $reg changed";
+ my ($ensp,$dnsp) = ($eReg,$data);
+ $ensp =~ s/ //g;
+ $dnsp =~ s/ //g;
+ if ($ensp ne $dnsp){
+
+ my %r; # generate struct with changes addresses
+ foreach my $reg(grep /..:../, split(" ",$eReg)){
+ my ($a,$d) = split(":",$reg);
+ $r{$a}{c} = $d;
+ }
+ foreach my $reg(grep !/00:00/,grep /..:../, split(" ",$data)){
+ my ($a,$d) = split(":",$reg);
+ next if (!$a || $a eq "00");
+ if (!defined $r{$a}){$r{$a}{f} = $d;$r{$a}{c} = "";}
+ elsif($r{$a}{c} ne $d){$r{$a}{f} = $d;}
+ else {delete $r{$a};}
+ }
+ $r{$_}{f} = "" foreach (grep {!defined $r{$_}{f}} grep !/00/,keys %r);
+ my @aCh = map {hex($_)} keys %r;#list of changed addresses
+
+ # search register valid for thie entity
+ my $dN = CUL_HM_getDeviceName($eN);
+ my $chn = CUL_HM_name2Id($eN);
+ my $listNo = substr($reg,6,1);
+ $chn = (length($chn) == 8)?substr($chn,6,2):"";
+ my $culHmRegDefine =\%HMConfig::culHmRegDefine;
+ my @regArr = grep{$culHmRegDefine->{$_}->{l} eq $listNo}
+ CUL_HM_getRegN(AttrVal($dN,"subType","")
+ ,AttrVal($dN,"model","")
+ ,$chn);
+ # now identify which register belongs to suspect address.
+ foreach my $rgN (@regArr){
+ next if ($culHmRegDefine->{$rgN}->{l} ne $listNo);
+ my $a = $culHmRegDefine->{$rgN}->{a};
+ next if (!grep /$a/,@aCh);
+ $a = sprintf("%02X",$a);
+ push @elReg,"$eN addr:$a changed from $r{$a}{f} to $r{$a}{c} - effected RegName:$rgN";
+ }
+
}
push @elOk," $eN" if ( !scalar @elPeer
&&!scalar @elReg);
}
}
close(aSave);
+ @elReg = HMinfo_noDup(@elReg);
@elOk = HMinfo_noDup(@elOk);
$ret .= "\nverified:\n " .join("\n ",sort(@elOk)) if (scalar @elOk);
$ret .= "\npeer mismatch:\n " .join("\n ",sort(@elPeer)) if (scalar @elPeer);
diff --git a/fhem/FHEM/HMConfig.pm b/fhem/FHEM/HMConfig.pm
index 2b6d3aee1..131412d04 100644
--- a/fhem/FHEM/HMConfig.pm
+++ b/fhem/FHEM/HMConfig.pm
@@ -451,7 +451,6 @@ my $K_actDetID = '000000'; # id of actionDetector
# Blind 9:00 10:00 20:00
# BL1TPBU 02:01 21:FF
# Dim1TPBU 02:01 21:FF 22:00
-# TC-IT 16:00
#Keymatic 3.3 unknown, seen 1 here
#--- list 1, Channel level------------------
@@ -766,6 +765,7 @@ my $K_actDetID = '000000'; # id of actionDetector
},
threeStateSensor =>{ cyclicInfoMsg =>1, transmDevTryMax =>1
, transmitTryMax =>1
+ ,sign =>1
,peerNeedsBurst =>1,expectAES =>1
},
sensRain =>{ transmDevTryMax =>1,localResDis =>1},
@@ -1000,7 +1000,7 @@ $culHmRegModel{"ROTO_ZEL-STG-RM-FSA"} = $culHmRegModel{"HM-CC-VD"};
,winOpnTemp =>1,winOpnPeriod =>1,winOpnBoost =>1,winOpnMode =>1
,winOpnDetFall =>1
},
- "HM-CC-RT-DN06" =>{ CtrlRc =>1,TempRC =>1},
+ "HM-CC-RT-DN06" =>{ sign =>1,CtrlRc =>1,TempRC =>1},
"HM-TC-IT-WM-W-EU02"=>{ dayTemp =>1,nightTemp =>1,tempMin =>1,tempMax =>1,tempOffset =>1
,hyst2point =>1,heatCool =>1,boostPeriod =>1,winOpnBoost =>1
,showWeekday =>1,showInfo =>1,showSetTemp =>1,showHumidity =>1