mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-27 10:37:13 +00:00
repeater bugfix, HM speedchange, verifyConfig
git-svn-id: https://svn.fhem.de/fhem/trunk@6327 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
8e1f336752
commit
588c2ee411
@ -931,7 +931,7 @@ sub CUL_HM_Parse($$) {#########################################################
|
|||||||
if($mTp =~ m /^4[01]/){ #someone is triggered##########
|
if($mTp =~ m /^4[01]/){ #someone is triggered##########
|
||||||
my $chn = hex($mI[0])& 0x3f;
|
my $chn = hex($mI[0])& 0x3f;
|
||||||
my $cName = CUL_HM_id2Name($src.sprintf("%02X",$chn));
|
my $cName = CUL_HM_id2Name($src.sprintf("%02X",$chn));
|
||||||
|
|
||||||
my @peers = grep !/00000000/,split(",",AttrVal($cName,"peerIDs",""));
|
my @peers = grep !/00000000/,split(",",AttrVal($cName,"peerIDs",""));
|
||||||
foreach my $peer (grep /$dst/,@peers){
|
foreach my $peer (grep /$dst/,@peers){
|
||||||
my $pName = CUL_HM_id2Name($peer);
|
my $pName = CUL_HM_id2Name($peer);
|
||||||
@ -2375,6 +2375,7 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
my $mNoInt = hex($mNo);
|
my $mNoInt = hex($mNo);
|
||||||
if ($pendType eq "PeerList" &&
|
if ($pendType eq "PeerList" &&
|
||||||
($rspWait->{mNo} == $mNoInt || $rspWait->{mNo} == $mNoInt-1)){
|
($rspWait->{mNo} == $mNoInt || $rspWait->{mNo} == $mNoInt-1)){
|
||||||
|
$rspWait->{mNo} = $mNoInt;
|
||||||
|
|
||||||
my $chn = $shash->{helper}{prt}{rspWait}{forChn};
|
my $chn = $shash->{helper}{prt}{rspWait}{forChn};
|
||||||
my $chnhash = $modules{CUL_HM}{defptr}{$src.$chn};
|
my $chnhash = $modules{CUL_HM}{defptr}{$src.$chn};
|
||||||
@ -2566,8 +2567,8 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
|
|
||||||
my $peerIDs = AttrVal($cName,"peerIDs","");
|
my $peerIDs = AttrVal($cName,"peerIDs","");
|
||||||
if ($peerIDs =~ m/$dst/){# dst is available in the ID list
|
if ($peerIDs =~ m/$dst/){# dst is available in the ID list
|
||||||
my @peers = grep !/00000000/,split(",",$peerIDs);
|
my @peers = grep /^$dst/,split(",",$peerIDs);
|
||||||
foreach my $peer (grep /^$dst/,@peers){
|
foreach my $peer (@peers){
|
||||||
my $pName = CUL_HM_id2Name($peer);
|
my $pName = CUL_HM_id2Name($peer);
|
||||||
$pName = CUL_HM_id2Name($dst) if (!$defs{$pName}); #$dst - device-id of $peer
|
$pName = CUL_HM_id2Name($dst) if (!$defs{$pName}); #$dst - device-id of $peer
|
||||||
next if (!$defs{$pName});
|
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
|
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);
|
my $pName = CUL_HM_id2Name($dst);
|
||||||
push @evtEt,[$cHash,1,"trigDst_$pName:noConfig"];
|
push @evtEt,[$cHash,1,"trigDst_$pName:noConfig"];
|
||||||
}
|
}
|
||||||
@ -6316,8 +6317,7 @@ sub CUL_HM_repReadings($) { # parse repeater
|
|||||||
push @pB,$b;
|
push @pB,$b;
|
||||||
}
|
}
|
||||||
my @readList;
|
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;
|
my @retL;
|
||||||
foreach my$pId(sort keys %pCnt){
|
foreach my$pId(sort keys %pCnt){
|
||||||
my ($pdID,$bdcst,$no) = unpack('A6A2A2',$pId);
|
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);
|
readingsBeginUpdate($hash);
|
||||||
foreach my $rd (@readings){
|
foreach my $rd (@readings){
|
||||||
next if (!$rd);
|
next if (!$rd);
|
||||||
my ($rdName, $rdVal) = split(":",$rd, 2);
|
my ($rdName, $rdVal) = split(":",$rd, 2);
|
||||||
readingsBulkUpdate($hash,$rdName,
|
readingsBulkUpdate($hash,$rdName,
|
||||||
((defined($rdVal) && $rdVal ne "")?$rdVal:"-"));
|
((defined($rdVal) && $rdVal ne "")?$rdVal:"-"));
|
||||||
}
|
}
|
||||||
@ -9195,7 +9195,8 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>HM-Sys-sRP-Pl<br><br>
|
<br>
|
||||||
|
<li>HM-Sys-sRP-Pl<br>
|
||||||
legt Einträge für den Repeater an. Bis zu 36 Einträge können angelegt werden.
|
legt Einträge für den Repeater an. Bis zu 36 Einträge können angelegt werden.
|
||||||
<ul>
|
<ul>
|
||||||
<li><B>setRepeat <entry> <sender> <receiver> <broadcast></B><br>
|
<li><B>setRepeat <entry> <sender> <receiver> <broadcast></B><br>
|
||||||
@ -9214,7 +9215,7 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
|
|||||||
Number src dst broadcast verify<br>
|
Number src dst broadcast verify<br>
|
||||||
number: Nummer des Eintrags in der Liste<br>
|
number: Nummer des Eintrags in der Liste<br>
|
||||||
src: Ursprungsgerät der Nachricht - aus Repeater ausgelesen<br>
|
src: Ursprungsgerät der Nachricht - aus Repeater ausgelesen<br>
|
||||||
dst: Zielgerät der Nachricht - asu den Attributen abgeleitet<br>
|
dst: Zielgerät der Nachricht - aus den Attributen abgeleitet<br>
|
||||||
broadcast: sollen Broadcasts weitergeleitet werden - aus Repeater ausgelesen<br>
|
broadcast: sollen Broadcasts weitergeleitet werden - aus Repeater ausgelesen<br>
|
||||||
verify: stimmen Attribute und ausgelesen Werte überein?<br>
|
verify: stimmen Attribute und ausgelesen Werte überein?<br>
|
||||||
</li>
|
</li>
|
||||||
|
@ -1336,23 +1336,52 @@ sub HMinfo_verifyConfig($@) {##################################################
|
|||||||
my ($reg,$data) = split(" ",$param,2);
|
my ($reg,$data) = split(" ",$param,2);
|
||||||
my $exp = CUL_HM_getAttrInt($eN,"expert");
|
my $exp = CUL_HM_getAttrInt($eN,"expert");
|
||||||
my $eReg = ReadingsVal($eN,(($exp != 2)?".":"").$reg,"");
|
my $eReg = ReadingsVal($eN,(($exp != 2)?".":"").$reg,"");
|
||||||
if ($eReg ne $data){
|
my ($ensp,$dnsp) = ($eReg,$data);
|
||||||
# my @fRegs = split(" ",$data);#fileRegs
|
$ensp =~ s/ //g;
|
||||||
# my @eRegs = split(" ",$eReg);#entityRegs
|
$dnsp =~ s/ //g;
|
||||||
# my %fr = map {$_=>1} @eRegs;
|
if ($ensp ne $dnsp){
|
||||||
# my @onlyFile = grep { !$fr{$_} } @fRegs;
|
|
||||||
# my %er = map {$_=>1} @fRegs;
|
my %r; # generate struct with changes addresses
|
||||||
# my @onlyEnt = grep { !$er{$_} } @eRegs;
|
foreach my $reg(grep /..:../, split(" ",$eReg)){
|
||||||
#
|
my ($a,$d) = split(":",$reg);
|
||||||
# push @elReg,"$eN Reg deleted: $_" foreach(@onlyFile);
|
$r{$a}{c} = $d;
|
||||||
# push @elReg,"$eN Reg added : $_" foreach(@onlyEnt);
|
}
|
||||||
push @elReg,"$eN Reg $reg changed";
|
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
|
push @elOk," $eN" if ( !scalar @elPeer
|
||||||
&&!scalar @elReg);
|
&&!scalar @elReg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(aSave);
|
close(aSave);
|
||||||
|
@elReg = HMinfo_noDup(@elReg);
|
||||||
@elOk = HMinfo_noDup(@elOk);
|
@elOk = HMinfo_noDup(@elOk);
|
||||||
$ret .= "\nverified:\n " .join("\n ",sort(@elOk)) if (scalar @elOk);
|
$ret .= "\nverified:\n " .join("\n ",sort(@elOk)) if (scalar @elOk);
|
||||||
$ret .= "\npeer mismatch:\n " .join("\n ",sort(@elPeer)) if (scalar @elPeer);
|
$ret .= "\npeer mismatch:\n " .join("\n ",sort(@elPeer)) if (scalar @elPeer);
|
||||||
|
@ -451,7 +451,6 @@ my $K_actDetID = '000000'; # id of actionDetector
|
|||||||
# Blind 9:00 10:00 20:00
|
# Blind 9:00 10:00 20:00
|
||||||
# BL1TPBU 02:01 21:FF
|
# BL1TPBU 02:01 21:FF
|
||||||
# Dim1TPBU 02:01 21:FF 22:00
|
# Dim1TPBU 02:01 21:FF 22:00
|
||||||
# TC-IT 16:00
|
|
||||||
#Keymatic 3.3 unknown, seen 1 here
|
#Keymatic 3.3 unknown, seen 1 here
|
||||||
|
|
||||||
#--- list 1, Channel level------------------
|
#--- list 1, Channel level------------------
|
||||||
@ -766,6 +765,7 @@ my $K_actDetID = '000000'; # id of actionDetector
|
|||||||
},
|
},
|
||||||
threeStateSensor =>{ cyclicInfoMsg =>1, transmDevTryMax =>1
|
threeStateSensor =>{ cyclicInfoMsg =>1, transmDevTryMax =>1
|
||||||
, transmitTryMax =>1
|
, transmitTryMax =>1
|
||||||
|
,sign =>1
|
||||||
,peerNeedsBurst =>1,expectAES =>1
|
,peerNeedsBurst =>1,expectAES =>1
|
||||||
},
|
},
|
||||||
sensRain =>{ transmDevTryMax =>1,localResDis =>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
|
,winOpnTemp =>1,winOpnPeriod =>1,winOpnBoost =>1,winOpnMode =>1
|
||||||
,winOpnDetFall =>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
|
"HM-TC-IT-WM-W-EU02"=>{ dayTemp =>1,nightTemp =>1,tempMin =>1,tempMax =>1,tempOffset =>1
|
||||||
,hyst2point =>1,heatCool =>1,boostPeriod =>1,winOpnBoost =>1
|
,hyst2point =>1,heatCool =>1,boostPeriod =>1,winOpnBoost =>1
|
||||||
,showWeekday =>1,showInfo =>1,showSetTemp =>1,showHumidity =>1
|
,showWeekday =>1,showInfo =>1,showSetTemp =>1,showHumidity =>1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user