2
0
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:
martinp876 2014-07-28 18:22:16 +00:00
parent 8e1f336752
commit 588c2ee411
3 changed files with 52 additions and 22 deletions

View File

@ -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(@) { ##################################################
</li>
</ul>
</li>
<li>HM-Sys-sRP-Pl<br><br>
<br>
<li>HM-Sys-sRP-Pl<br>
legt Eintr&auml;ge f&uuml;r den Repeater an. Bis zu 36 Eintr&auml;ge k&ouml;nnen angelegt werden.
<ul>
<li><B>setRepeat &lt;entry&gt; &lt;sender&gt; &lt;receiver&gt; &lt;broadcast&gt;</B><br>
@ -9214,7 +9215,7 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
Number src dst broadcast verify<br>
number: Nummer des Eintrags in der Liste<br>
src: Ursprungsger&auml;t der Nachricht - aus Repeater ausgelesen<br>
dst: Zielger&auml;t der Nachricht - asu den Attributen abgeleitet<br>
dst: Zielger&auml;t der Nachricht - aus den Attributen abgeleitet<br>
broadcast: sollen Broadcasts weitergeleitet werden - aus Repeater ausgelesen<br>
verify: stimmen Attribute und ausgelesen Werte &uuml;berein?<br>
</li>

View File

@ -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);

View File

@ -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