mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 20:24:36 +00:00
unpeered trigger handling
git-svn-id: https://svn.fhem.de/fhem/trunk@6394 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
2bc0670d9e
commit
75b0db586f
@ -3187,7 +3187,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
|||||||
if ($sectIn eq "all") {
|
if ($sectIn eq "all") {
|
||||||
@sectL = ("rssi","msgEvents","readings");#readings is last - it schedules a reread possible
|
@sectL = ("rssi","msgEvents","readings");#readings is last - it schedules a reread possible
|
||||||
}
|
}
|
||||||
elsif($sectIn =~ m/(rssi|msgEvents|readings|register|unknownDev)/){
|
elsif($sectIn =~ m/(rssi|trigger|msgEvents|readings|register|unknownDev)/){
|
||||||
@sectL = ($sectIn);
|
@sectL = ($sectIn);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -3206,6 +3206,10 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
|||||||
delete $hash->{READINGS}{$_}
|
delete $hash->{READINGS}{$_}
|
||||||
foreach (grep /^unknown_/,keys %{$hash->{READINGS}});
|
foreach (grep /^unknown_/,keys %{$hash->{READINGS}});
|
||||||
}
|
}
|
||||||
|
elsif($sect eq "trigger"){
|
||||||
|
delete $hash->{READINGS}{$_}
|
||||||
|
foreach (grep /^trig/,keys %{$hash->{READINGS}});
|
||||||
|
}
|
||||||
elsif($sect eq "register"){
|
elsif($sect eq "register"){
|
||||||
my @cH = ($hash);
|
my @cH = ($hash);
|
||||||
push @cH,$defs{$hash->{$_}} foreach(grep /^channel/,keys %{$hash});
|
push @cH,$defs{$hash->{$_}} foreach(grep /^channel/,keys %{$hash});
|
||||||
@ -6694,8 +6698,11 @@ sub CUL_HM_UpdtCentral($){
|
|||||||
next if (!$btn);
|
next if (!$btn);
|
||||||
CommandDefine(undef,$name."_Btn$btn CUL_HM $ccuBId")
|
CommandDefine(undef,$name."_Btn$btn CUL_HM $ccuBId")
|
||||||
if (!$modules{CUL_HM}{defptr}{$ccuBId});
|
if (!$modules{CUL_HM}{defptr}{$ccuBId});
|
||||||
foreach my $pn (grep !/^$/,map{$_ if (AttrVal($_,"peerIDs","") =~ m/$id$btnS/)}keys %defs){
|
foreach my $pn (grep !/^$/,
|
||||||
CUL_HM_ID2PeerList ($name."_Btn$btn",CUL_HM_name2Id($pn),1);
|
map{$_ if (AttrVal($_,"peerIDs","") =~ m/$id$btnS/)}
|
||||||
|
keys %defs){
|
||||||
|
|
||||||
|
CUL_HM_ID2PeerList ($name."_Btn$btn",unpack('A8',CUL_HM_name2Id($pn)."01"),1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my $io = AttrVal($name,"IODev","empty");
|
my $io = AttrVal($name,"IODev","empty");
|
||||||
@ -7098,6 +7105,7 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
|
|||||||
my %dlf = (1=>{Sat=>0,Sun=>0,Mon=>0,Tue=>0,Wed=>0,Thu=>0,Fri=>0},
|
my %dlf = (1=>{Sat=>0,Sun=>0,Mon=>0,Tue=>0,Wed=>0,Thu=>0,Fri=>0},
|
||||||
2=>{Sat=>0,Sun=>0,Mon=>0,Tue=>0,Wed=>0,Thu=>0,Fri=>0},
|
2=>{Sat=>0,Sun=>0,Mon=>0,Tue=>0,Wed=>0,Thu=>0,Fri=>0},
|
||||||
3=>{Sat=>0,Sun=>0,Mon=>0,Tue=>0,Wed=>0,Thu=>0,Fri=>0});
|
3=>{Sat=>0,Sun=>0,Mon=>0,Tue=>0,Wed=>0,Thu=>0,Fri=>0});
|
||||||
|
return "" if ($template =~ m/(none|0)/);
|
||||||
my $ret = "";
|
my $ret = "";
|
||||||
my @el = split",",$name;
|
my @el = split",",$name;
|
||||||
my ($fName,$tmpl) = split":",$template;
|
my ($fName,$tmpl) = split":",$template;
|
||||||
@ -8262,7 +8270,9 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
|
|||||||
Due to amount of readings and events it is NOT RECOMMENDED to switch it on by default.
|
Due to amount of readings and events it is NOT RECOMMENDED to switch it on by default.
|
||||||
</li>
|
</li>
|
||||||
<li><a name="#CUL_HMtempListTmpl">tempListTmpl</a><br>
|
<li><a name="#CUL_HMtempListTmpl">tempListTmpl</a><br>
|
||||||
Sets the default template for a heating controller.<br>
|
Sets the default template for a heating controller. If not given the detault template is taken from
|
||||||
|
file tempList.cfg using the enitity name as template name (e.g. ./tempLict.cfg:RT1_Clima <br>
|
||||||
|
To avoid template usage set this attribut to '0'.<br>
|
||||||
Format is <file>:<templatename>. lt
|
Format is <file>:<templatename>. lt
|
||||||
</li>
|
</li>
|
||||||
<li><a name="unit">unit</a><br>
|
<li><a name="unit">unit</a><br>
|
||||||
@ -9457,7 +9467,9 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
|
|||||||
</code></ul>
|
</code></ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a name="#CUL_HMtempListTmpl">tempListTmpl</a><br>
|
<li><a name="#CUL_HMtempListTmpl">tempListTmpl</a><br>
|
||||||
Setzt das Default für Heizungskontroller.<br>
|
Setzt das Default für Heizungskontroller. Ist es nicht gesetzt wird der default filename genutzt und der name
|
||||||
|
der entity als templatename. Z.B. ./tempList.cfg:RT_Clima<br>
|
||||||
|
Um das template nicht zu nutzen kann man es auf '0'setzen.<br>
|
||||||
Format ist <file>:<templatename>.
|
Format ist <file>:<templatename>.
|
||||||
</li>
|
</li>
|
||||||
<li><a name="CUL_HMmodel">model</a>,
|
<li><a name="CUL_HMmodel">model</a>,
|
||||||
|
@ -381,14 +381,17 @@ sub HMinfo_peerCheck(@) { #####################################################
|
|||||||
next if ($peersUsed == 0);
|
next if ($peersUsed == 0);
|
||||||
|
|
||||||
my $peerIDs = AttrVal($eName,"peerIDs",undef);
|
my $peerIDs = AttrVal($eName,"peerIDs",undef);
|
||||||
|
$peerIDs =~ s/00000000,//;
|
||||||
my @failTrig = map {CUL_HM_name2Id(substr($_,8))}
|
my @failTrig = map {CUL_HM_name2Id(substr($_,8))}
|
||||||
grep /^trigDst_/,
|
grep /^trigDst_/,
|
||||||
keys %{$defs{$eName}{READINGS}};
|
keys %{$defs{$eName}{READINGS}};
|
||||||
foreach (HMinfo_noDup(@failTrig)){
|
foreach (HMinfo_noDup(@failTrig)){
|
||||||
|
next if (!$_);
|
||||||
push @peerIDsTrigUnp,"triggerUnpeered: ".$eName.":".$_
|
push @peerIDsTrigUnp,"triggerUnpeered: ".$eName.":".$_
|
||||||
if($_ && $peerIDs !~ m/$_/);
|
if( ($peerIDs && $peerIDs !~ m/$_/)
|
||||||
|
||("CCU-FHEM" ne AttrVal(CUL_HM_id2Name(substr($_,0,6)),"model","")));
|
||||||
push @peerIDsTrigUnd,"triggerUndefined: ".$eName.":".$_
|
push @peerIDsTrigUnd,"triggerUndefined: ".$eName.":".$_
|
||||||
if($_ && !$modules{CUL_HM}{defptr}{$_});
|
if(!$modules{CUL_HM}{defptr}{$_});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$peerIDs){ # no peers - is this correct?
|
if (!$peerIDs){ # no peers - is this correct?
|
||||||
@ -863,7 +866,8 @@ sub HMinfo_GetFn($@) {#########################################################
|
|||||||
devspec2array("model=HM.*-TC.*:FILTER=chanNo=02:FILTER=tempListTmpl=.*"));
|
devspec2array("model=HM.*-TC.*:FILTER=chanNo=02:FILTER=tempListTmpl=.*"));
|
||||||
my @tlr;
|
my @tlr;
|
||||||
foreach my $e (@td){
|
foreach my $e (@td){
|
||||||
my $tr = CUL_HM_tempListTmpl($e,"verify",AttrVal($e,"tempListTmpl",AttrVal($hash->{NAME},"configDir",".")."/tempList.cfg:$e"));
|
my $tr = CUL_HM_tempListTmpl($e,"verify",AttrVal($e,"tempListTmpl"
|
||||||
|
,AttrVal($hash->{NAME},"configDir",".")."/tempList.cfg:$e"));
|
||||||
push @tlr,$tr if($tr);
|
push @tlr,$tr if($tr);
|
||||||
}
|
}
|
||||||
$ret .= "\n\n templist mismatch \n ".join("\n ",@tlr) if (@tlr);
|
$ret .= "\n\n templist mismatch \n ".join("\n ",@tlr) if (@tlr);
|
||||||
@ -885,7 +889,9 @@ sub HMinfo_GetFn($@) {#########################################################
|
|||||||
my @fheml = ();
|
my @fheml = ();
|
||||||
foreach my $dName (HMinfo_getEntities($opt,$filter)){
|
foreach my $dName (HMinfo_getEntities($opt,$filter)){
|
||||||
# search for irregular trigger
|
# search for irregular trigger
|
||||||
my @failTrig = map {"$dName: $_"} grep /^trigDst_/,keys %{$defs{$dName}{READINGS}};
|
my @failTrig = map {"$dName: $_"}
|
||||||
|
grep /^trigDst_/,
|
||||||
|
keys %{$defs{$dName}{READINGS}};
|
||||||
push @peerUndef,@failTrig if (@failTrig);
|
push @peerUndef,@failTrig if (@failTrig);
|
||||||
#--- check regular references
|
#--- check regular references
|
||||||
my $peerIDs = AttrVal($dName,"peerIDs",undef);
|
my $peerIDs = AttrVal($dName,"peerIDs",undef);
|
||||||
@ -895,10 +901,11 @@ sub HMinfo_GetFn($@) {#########################################################
|
|||||||
foreach (split",",$peerIDs){
|
foreach (split",",$peerIDs){
|
||||||
next if ($_ eq "00000000");
|
next if ($_ eq "00000000");
|
||||||
my $pn = CUL_HM_peerChName($_,$dId);
|
my $pn = CUL_HM_peerChName($_,$dId);
|
||||||
|
$pn =~ s/_chn:01//;
|
||||||
push @pl,$pn;
|
push @pl,$pn;
|
||||||
push @fheml,"$_$dName" if ($pn =~ m/^fhem..$/);
|
push @fheml,"$_$dName" if ($pn =~ m/^fhem..$/);
|
||||||
}
|
}
|
||||||
push @peerPairs,$dName." => ".join(", ",(sort @pl)) if (@pl);
|
push @peerPairs,$dName." => ".join(" ",(sort @pl)) if (@pl);
|
||||||
}
|
}
|
||||||
#--- calculate peerings to Central ---
|
#--- calculate peerings to Central ---
|
||||||
my %fChn;
|
my %fChn;
|
||||||
@ -929,7 +936,7 @@ sub HMinfo_GetFn($@) {#########################################################
|
|||||||
push @noReg,$dName;
|
push @noReg,$dName;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
my ($peerOld,$ptOld,$ptLine,$peerLine) = ("",""," "," ");
|
my ($peerOld,$ptOld,$ptLine,$peerLine) = ("","",pack('A23',""),pack('A23',""));
|
||||||
foreach my $reg (split("\n",$regs)){
|
foreach my $reg (split("\n",$regs)){
|
||||||
my ($peer,$h1) = split ("\t",$reg);
|
my ($peer,$h1) = split ("\t",$reg);
|
||||||
$peer =~s/ //g;
|
$peer =~s/ //g;
|
||||||
@ -937,21 +944,23 @@ sub HMinfo_GetFn($@) {#########################################################
|
|||||||
$RegReply .= $reg."\n";
|
$RegReply .= $reg."\n";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
$peer =~s/3://;
|
|
||||||
next if (!$h1);
|
next if (!$h1);
|
||||||
|
$peer =~s/3://;
|
||||||
my ($regN,$h2) = split (":",$h1);
|
my ($regN,$h2) = split (":",$h1);
|
||||||
|
my ($pt,$rN) = unpack 'A2A*',$regN;
|
||||||
|
if (!defined($hash->{helper}{r}{$rN})){
|
||||||
|
$hash->{helper}{r}{$rN}{v} = "";
|
||||||
|
$hash->{helper}{r}{$rN}{u} = pack('A5',"");
|
||||||
|
}
|
||||||
my ($val,$unit) = split (" ",$h2);
|
my ($val,$unit) = split (" ",$h2);
|
||||||
$unit = $unit?("[".$unit."]"):" ";
|
$hash->{helper}{r}{$rN}{v} .= pack('A16',$val);
|
||||||
my ($pt,$rN) = ($1,$2) if ($regN =~m/(..)(.*)/);
|
$hash->{helper}{r}{$rN}{u} = pack('A5',"[".$unit."]") if ($unit);
|
||||||
$rN .= $unit;
|
|
||||||
$hash->{helper}{r}{$rN} = "" if (!defined($hash->{helper}{r}{$rN}));
|
|
||||||
$hash->{helper}{r}{$rN} .= sprintf("%16s",$val);
|
|
||||||
if ($pt ne $ptOld){
|
if ($pt ne $ptOld){
|
||||||
$ptLine .= sprintf("%16s",$pt);
|
$ptLine .= pack('A16',$pt);
|
||||||
$ptOld = $pt;
|
$ptOld = $pt;
|
||||||
}
|
}
|
||||||
if ($peer ne $peerOld){
|
if ($peer ne $peerOld){
|
||||||
$peerLine .= sprintf("%32s",$peer);
|
$peerLine .= pack('A32',$peer);
|
||||||
$peerOld = $peer;
|
$peerOld = $peer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -959,7 +968,10 @@ sub HMinfo_GetFn($@) {#########################################################
|
|||||||
foreach my $rN (sort keys %{$hash->{helper}{r}}){
|
foreach my $rN (sort keys %{$hash->{helper}{r}}){
|
||||||
$hash->{helper}{r}{$rN} =~ s/( o..)/$1 /g
|
$hash->{helper}{r}{$rN} =~ s/( o..)/$1 /g
|
||||||
if($rN =~ m/^MultiExec /); #shift thhis reading since it does not appear for short
|
if($rN =~ m/^MultiExec /); #shift thhis reading since it does not appear for short
|
||||||
$RegReply .= $rN.$hash->{helper}{r}{$rN}."\n";
|
$RegReply .= pack ('A18',$rN)
|
||||||
|
.$hash->{helper}{r}{$rN}{u}
|
||||||
|
.$hash->{helper}{r}{$rN}{v}
|
||||||
|
."\n";
|
||||||
}
|
}
|
||||||
delete $hash->{helper}{r};
|
delete $hash->{helper}{r};
|
||||||
}
|
}
|
||||||
@ -1138,7 +1150,6 @@ sub HMinfo_SetFn($@) {#########################################################
|
|||||||
$opt .= "d" if ($type =~ m/(Protocol|rssi)/);# readings apply to all, others device only
|
$opt .= "d" if ($type =~ m/(Protocol|rssi)/);# readings apply to all, others device only
|
||||||
my @entities;
|
my @entities;
|
||||||
$type = "msgEvents" if ($type eq "Protocol");# translate parameter
|
$type = "msgEvents" if ($type eq "Protocol");# translate parameter
|
||||||
Log 1,"General filter:$opt,$filter";
|
|
||||||
foreach my $dName (HMinfo_getEntities($opt,$filter)){
|
foreach my $dName (HMinfo_getEntities($opt,$filter)){
|
||||||
push @entities,$dName;
|
push @entities,$dName;
|
||||||
CUL_HM_Set($defs{$dName},$dName,"clear",$type);
|
CUL_HM_Set($defs{$dName},$dName,"clear",$type);
|
||||||
@ -1187,6 +1198,7 @@ sub HMinfo_SetFn($@) {#########################################################
|
|||||||
elsif($cmd eq "loadConfig") {##action: loadConfig----------------------------
|
elsif($cmd eq "loadConfig") {##action: loadConfig----------------------------
|
||||||
my $fn = $a[0]?$a[0]:AttrVal($name,"configFilename","regSave.cfg");
|
my $fn = $a[0]?$a[0]:AttrVal($name,"configFilename","regSave.cfg");
|
||||||
$fn = AttrVal($name,"configDir",".")."\/".$fn if ($fn !~ m/\//);
|
$fn = AttrVal($name,"configDir",".")."\/".$fn if ($fn !~ m/\//);
|
||||||
|
Log 1,"General loadConfig: $fn";
|
||||||
$ret = HMinfo_loadConfig($filter,$fn);
|
$ret = HMinfo_loadConfig($filter,$fn);
|
||||||
}
|
}
|
||||||
elsif($cmd eq "verifyConfig"){##action: verifyConfig-------------------------
|
elsif($cmd eq "verifyConfig"){##action: verifyConfig-------------------------
|
||||||
@ -1362,12 +1374,12 @@ sub HMinfo_verifyConfig($@) {##################################################
|
|||||||
if ($ensp ne $dnsp){
|
if ($ensp ne $dnsp){
|
||||||
|
|
||||||
my %r; # generate struct with changes addresses
|
my %r; # generate struct with changes addresses
|
||||||
foreach my $reg(grep /..:../, split(" ",$eReg)){
|
foreach my $rg(grep /..:../, split(" ",$eReg)){
|
||||||
my ($a,$d) = split(":",$reg);
|
my ($a,$d) = split(":",$rg);
|
||||||
$r{$a}{c} = $d;
|
$r{$a}{c} = $d;
|
||||||
}
|
}
|
||||||
foreach my $reg(grep !/00:00/,grep /..:../, split(" ",$data)){
|
foreach my $rg(grep !/00:00/,grep /..:../, split(" ",$data)){
|
||||||
my ($a,$d) = split(":",$reg);
|
my ($a,$d) = split(":",$rg);
|
||||||
next if (!$a || $a eq "00");
|
next if (!$a || $a eq "00");
|
||||||
if (!defined $r{$a}){$r{$a}{f} = $d;$r{$a}{c} = "";}
|
if (!defined $r{$a}){$r{$a}{f} = $d;$r{$a}{c} = "";}
|
||||||
elsif($r{$a}{c} ne $d){$r{$a}{f} = $d;}
|
elsif($r{$a}{c} ne $d){$r{$a}{f} = $d;}
|
||||||
@ -1379,7 +1391,7 @@ sub HMinfo_verifyConfig($@) {##################################################
|
|||||||
# search register valid for thie entity
|
# search register valid for thie entity
|
||||||
my $dN = CUL_HM_getDeviceName($eN);
|
my $dN = CUL_HM_getDeviceName($eN);
|
||||||
my $chn = CUL_HM_name2Id($eN);
|
my $chn = CUL_HM_name2Id($eN);
|
||||||
my $listNo = substr($reg,6,1);
|
my (undef,$listNo,undef,$peer) = unpack('A6A1A1A*',$reg);
|
||||||
$chn = (length($chn) == 8)?substr($chn,6,2):"";
|
$chn = (length($chn) == 8)?substr($chn,6,2):"";
|
||||||
my $culHmRegDefine =\%HMConfig::culHmRegDefine;
|
my $culHmRegDefine =\%HMConfig::culHmRegDefine;
|
||||||
my @regArr = grep{$culHmRegDefine->{$_}->{l} eq $listNo}
|
my @regArr = grep{$culHmRegDefine->{$_}->{l} eq $listNo}
|
||||||
@ -1388,11 +1400,13 @@ sub HMinfo_verifyConfig($@) {##################################################
|
|||||||
,$chn);
|
,$chn);
|
||||||
# now identify which register belongs to suspect address.
|
# now identify which register belongs to suspect address.
|
||||||
foreach my $rgN (@regArr){
|
foreach my $rgN (@regArr){
|
||||||
next if ($culHmRegDefine->{$rgN}->{l} ne $listNo);
|
next if ($culHmRegDefine->{$rgN}{l} ne $listNo);
|
||||||
my $a = $culHmRegDefine->{$rgN}->{a};
|
my $a = $culHmRegDefine->{$rgN}{a};
|
||||||
next if (!grep /$a/,@aCh);
|
next if (!grep {$a == int($_)} @aCh);
|
||||||
$a = sprintf("%02X",$a);
|
$a = sprintf("%02X",$a);
|
||||||
push @elReg,"$eN addr:$a changed from $r{$a}{f} to $r{$a}{c} - effected RegName:$rgN";
|
push @elReg,"$eN "
|
||||||
|
.($peer?": peer:$peer ":"")
|
||||||
|
."addr:$a changed from $r{$a}{f} to $r{$a}{c} - effected RegName:$rgN";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1301,7 +1301,7 @@ $culHmRegChan{"ROTO_ZEL-STG-RM-FWT03"}= $culHmRegChan{"HM-CC-TC03"};
|
|||||||
,getRegRaw => "[List0|List1|List2|List3|List4|List5|List6] ... [<PeerChannel>]"
|
,getRegRaw => "[List0|List1|List2|List3|List4|List5|List6] ... [<PeerChannel>]"
|
||||||
,getConfig => ""
|
,getConfig => ""
|
||||||
,regSet => "[prep|exec] <regName> <value> ... [<peerChannel>]"
|
,regSet => "[prep|exec] <regName> <value> ... [<peerChannel>]"
|
||||||
,clear => "[readings|register|rssi|msgEvents|all]"
|
,clear => "[readings|trigger|register|rssi|msgEvents|all]"
|
||||||
,getVersion => ""
|
,getVersion => ""
|
||||||
);
|
);
|
||||||
%culHmGlobalSetsVrtDev = (# virtuals and devices without subtype
|
%culHmGlobalSetsVrtDev = (# virtuals and devices without subtype
|
||||||
|
Loading…
x
Reference in New Issue
Block a user