mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
CUL_HM:reduce events for cfgState - wait for final jufgement
git-svn-id: https://svn.fhem.de/fhem/trunk@22451 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
9e0e059bb3
commit
c2ee64455f
@ -562,12 +562,12 @@ sub CUL_HM_Define($$) {##############################
|
|||||||
my ($hash, $def) = @_;
|
my ($hash, $def) = @_;
|
||||||
my @a = split("[ \t][ \t]*", $def);
|
my @a = split("[ \t][ \t]*", $def);
|
||||||
my $HMid = uc($a[2]);
|
my $HMid = uc($a[2]);
|
||||||
|
|
||||||
return "wrong syntax: define <name> CUL_HM 6-digit-hex-code [Raw-Message]"
|
return "wrong syntax: define <name> CUL_HM 6-digit-hex-code [Raw-Message]"
|
||||||
if(!(int(@a)==3 || int(@a)==4) || $HMid !~ m/^[A-F0-9]{6}([A-F0-9]{2})?$/i );
|
if(!(int(@a)==3 || int(@a)==4) || $HMid !~ m/^[A-F0-9]{6}([A-F0-9]{2})?$/i );
|
||||||
return "HMid DEF already used by " . CUL_HM_id2Name($HMid)
|
return "HMid DEF already used by " . CUL_HM_id2Name($HMid)
|
||||||
if ($modules{CUL_HM}{defptr}{$HMid});
|
if ($modules{CUL_HM}{defptr}{$HMid});
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
if(length($HMid) == 8) {# define a channel
|
if(length($HMid) == 8) {# define a channel
|
||||||
my $devHmId = substr($HMid, 0, 6);
|
my $devHmId = substr($HMid, 0, 6);
|
||||||
my $chn = substr($HMid, 6, 2);
|
my $chn = substr($HMid, 6, 2);
|
||||||
@ -4225,7 +4225,7 @@ sub CUL_HM_SetList($) {#+++++++++++++++++ get command basic list+++++++++++++++
|
|||||||
.":$roleD"
|
.":$roleD"
|
||||||
.":$roleV"
|
.":$roleV"
|
||||||
.":$fkt"
|
.":$fkt"
|
||||||
.":$defs{$devName}{helper}{mId}"
|
.($defs{$devName}{helper}{mId}?":$defs{$devName}{helper}{mId}":"")
|
||||||
.":$chn"
|
.":$chn"
|
||||||
.InternalVal($name,"peerList","")
|
.InternalVal($name,"peerList","")
|
||||||
;
|
;
|
||||||
@ -6681,6 +6681,23 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
|||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
elsif (eval "defined(&CUL_HM_Set${cmd})"){###################################
|
||||||
|
no strict "refs";
|
||||||
|
my ($re,$stat,@msgs) = &{"CUL_HM_Set${cmd}"}($name,$cmd,@a);
|
||||||
|
use strict "refs";
|
||||||
|
if ($re == 1){
|
||||||
|
return $stat;
|
||||||
|
}
|
||||||
|
elsif($re == 0){
|
||||||
|
$state = $stat;
|
||||||
|
|
||||||
|
CUL_HM_PushCmdStack($hash,"++${flag}$_") foreach (map {(my $foo = $_) =~ s/xADDRESSx/$id$dst/; $foo;}@msgs);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return "unknown reply from CUL_HM_Set${cmd}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else{
|
else{
|
||||||
return "$cmd not implemented - contact sysop";
|
return "$cmd not implemented - contact sysop";
|
||||||
}
|
}
|
||||||
@ -6870,7 +6887,6 @@ sub CUL_HM_updtDeviceModel($$) {#change the model for a device - obey overwrite
|
|||||||
# autocreate undefined channels
|
# autocreate undefined channels
|
||||||
my %chanExist;
|
my %chanExist;
|
||||||
%chanExist = map { $_ => 0 } CUL_HM_getAssChnIds($name);
|
%chanExist = map { $_ => 0 } CUL_HM_getAssChnIds($name);
|
||||||
|
|
||||||
if ($attr{$name}{subType} eq "virtual"){# do not apply all possible channels for virtual
|
if ($attr{$name}{subType} eq "virtual"){# do not apply all possible channels for virtual
|
||||||
$attr{CUL_HM_id2Name($_)}{model} = $model foreach(keys %chanExist);
|
$attr{CUL_HM_id2Name($_)}{model} = $model foreach(keys %chanExist);
|
||||||
}
|
}
|
||||||
@ -6922,11 +6938,13 @@ sub CUL_HM_getConfig($){
|
|||||||
my @chnIdList = CUL_HM_getAssChnIds($name);
|
my @chnIdList = CUL_HM_getAssChnIds($name);
|
||||||
delete $hash->{READINGS}{$_}
|
delete $hash->{READINGS}{$_}
|
||||||
foreach (grep /^[\.]?(RegL_)/,keys %{$hash->{READINGS}});
|
foreach (grep /^[\.]?(RegL_)/,keys %{$hash->{READINGS}});
|
||||||
|
CUL_HM_UpdtReadSingle($hash,"cfgState","updating",1);
|
||||||
foreach my $channel (@chnIdList){
|
foreach my $channel (@chnIdList){
|
||||||
my $cHash = CUL_HM_id2Hash($channel);
|
my $cHash = CUL_HM_id2Hash($channel);
|
||||||
my $chn = substr($channel,6,2);
|
my $chn = substr($channel,6,2);
|
||||||
delete $cHash->{READINGS}{$_}
|
delete $cHash->{READINGS}{$_}
|
||||||
foreach (grep /^[\.]?(RegL_)/,keys %{$cHash->{READINGS}});
|
foreach (grep /^[\.]?(RegL_)/,keys %{$cHash->{READINGS}});
|
||||||
|
CUL_HM_UpdtReadSingle($cHash,"cfgState","updating",1);
|
||||||
my $lstAr = $culHmModel->{CUL_HM_getMId($cHash)}{lst};
|
my $lstAr = $culHmModel->{CUL_HM_getMId($cHash)}{lst};
|
||||||
if($lstAr){
|
if($lstAr){
|
||||||
my $pReq = 0; # Peer request not issued, do only once for channel
|
my $pReq = 0; # Peer request not issued, do only once for channel
|
||||||
@ -8633,9 +8651,26 @@ sub CUL_HM_updtRegDisp($$$) {
|
|||||||
}
|
}
|
||||||
# CUL_HM_dimLog($hash) if(CUL_HM_Get($hash,$name,"param","subType") eq "dimmer");
|
# CUL_HM_dimLog($hash) if(CUL_HM_Get($hash,$name,"param","subType") eq "dimmer");
|
||||||
|
|
||||||
my ($hm) = devspec2array("TYPE=HMinfo");
|
CUL_HM_cfgStateDelay($name);
|
||||||
HMinfo_GetFn($defs{$hm},$hm,"configCheck","-f",$name) if(defined $hm);
|
|
||||||
}
|
}
|
||||||
|
sub CUL_HM_cfgStateDelay($) {#update cfgState timer
|
||||||
|
my $name = shift;
|
||||||
|
my $name = CUL_HM_getDeviceName($name);
|
||||||
|
RemoveInternalTimer("cfgStateUpdate:$name");
|
||||||
|
if (InternalVal($name,"protCmdPend","none" ) eq "none"){
|
||||||
|
CUL_HM_cfgStateUpdate("cfgStateUpdate:$name");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
InternalTimer(gettimeofday()+ 30,"CUL_HM_cfgStateUpdate","cfgStateUpdate:$name", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sub CUL_HM_cfgStateUpdate($) {#update cfgState
|
||||||
|
my $tmrId = shift;
|
||||||
|
my (undef,$name) = split(':',$tmrId,2);
|
||||||
|
my ($hm) = devspec2array("TYPE=HMinfo");
|
||||||
|
HMinfo_GetFn($defs{$hm},$hm,"configCheck","-f","^(".join("|",(CUL_HM_getAssChnNames($name),$name)).")\$") if(defined $hm);
|
||||||
|
}
|
||||||
|
|
||||||
sub CUL_HM_rmOldRegs($$){ # remove register i outdated
|
sub CUL_HM_rmOldRegs($$){ # remove register i outdated
|
||||||
#will remove register for deleted peers
|
#will remove register for deleted peers
|
||||||
my ($name,$readCont) = @_;
|
my ($name,$readCont) = @_;
|
||||||
@ -8654,9 +8689,8 @@ sub CUL_HM_rmOldRegs($$){ # remove register i outdated
|
|||||||
delete $hash->{READINGS}{$_} foreach (grep /^R-${peer}_chn-..-/,keys %{$hash->{READINGS}});
|
delete $hash->{READINGS}{$_} foreach (grep /^R-${peer}_chn-..-/,keys %{$hash->{READINGS}});
|
||||||
}
|
}
|
||||||
if($readCont){
|
if($readCont){
|
||||||
my ($hm) = devspec2array("TYPE=HMinfo");
|
CUL_HM_cfgStateDelay($name);
|
||||||
HMinfo_GetFn($defs{$hm},$hm,"configCheck","-f",$name) if(defined $hm);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sub CUL_HM_refreshRegs($){ # renew all register readings from Regl_
|
sub CUL_HM_refreshRegs($){ # renew all register readings from Regl_
|
||||||
my $name = shift;
|
my $name = shift;
|
||||||
@ -10013,11 +10047,7 @@ sub CUL_HM_qEntity($$){ # add to queue
|
|||||||
"1":
|
"1":
|
||||||
$modules{CUL_HM}{hmAutoReadScan};
|
$modules{CUL_HM}{hmAutoReadScan};
|
||||||
|
|
||||||
my ($hm) = devspec2array("TYPE=HMinfo");
|
CUL_HM_cfgStateDelay($devN) if($q eq "qReqConf");
|
||||||
if(defined $hm && $q eq "qReqConf"){
|
|
||||||
my $chkCfg = "(".join("|",(map{$defs{$devN}{$_}}grep/channel_/,keys %{$defs{$devN}}),$devN).")";
|
|
||||||
HMinfo_GetFn($defs{$hm},$hm,"configCheck","-f",$chkCfg) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
RemoveInternalTimer("CUL_HM_procQs");
|
RemoveInternalTimer("CUL_HM_procQs");
|
||||||
InternalTimer(gettimeofday()+ $wT,"CUL_HM_procQs","CUL_HM_procQs", 0);
|
InternalTimer(gettimeofday()+ $wT,"CUL_HM_procQs","CUL_HM_procQs", 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user