2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-19 00:26:03 +00:00

CUL_HM:improve autoread config

git-svn-id: https://svn.fhem.de/fhem/trunk@22159 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2020-06-11 08:34:43 +00:00
parent c7ac4e71d6
commit f3989ba5f5

View File

@ -9931,49 +9931,53 @@ sub CUL_HM_procQs($){#process non-wakeup queues
my $mq = $modules{CUL_HM}{helper};
foreach my $q ("qReqStat","qReqConf"){
if (@{$mq->{$q}}){
my $devN = ${$mq->{$q}}[0];
my $devH = $defs{$devN};
CUL_HM_assignIO($devH);
next if(!defined $devH->{IODev}{NAME});
my $ioName = $devH->{IODev}{NAME};
if ( ( ReadingsVal($ioName,"cond","") =~ m/^(ok|Overload-released|Warning-HighLoad|init)$/
&& $q eq "qReqStat")
||( CUL_HM_autoReadReady($ioName)
&& !$devH->{cmdStack}
&& $q eq "qReqConf")){
my $dq = $devH->{helper}{q};
my @chns = split(",",$dq->{$q});
my $nOpen = scalar @chns;
if (@chns > 1){$dq->{$q} = join ",",@chns[1..$nOpen-1];}
else{ $dq->{$q} = "";
@{$mq->{$q}} = grep !/^$devN$/,@{$mq->{$q}};
}
my $dId = CUL_HM_name2Id($devN);
my $eN=($chns[0] && $chns[0]ne "00")?CUL_HM_id2Name($dId.$chns[0]):$devN;
next if(!defined $defs{$eN});
if ($q eq "qReqConf"){
$mq->{autoRdActive} = $devN;
CUL_HM_Set($defs{$eN},$eN,"getConfig");
}
else{
CUL_HM_Set($defs{$eN},$eN,"statusRequest");
CUL_HM_unQEntity($eN,"qReqStat") if (!$dq->{$q});
InternalTimer(gettimeofday()+20,"CUL_HM_readStateTo","sUpdt:$eN",0);
my ($devN,$devH);
foreach my $devNtmp (@{$mq->{$q}}){ # search for next possible device
$devH = $defs{$devNtmp};
CUL_HM_assignIO($devH);
if( defined $devH->{IODev}{NAME}
&& ( ( ReadingsVal($devH->{IODev}{NAME},"cond","") =~ m/^(ok|Overload-released|Warning-HighLoad|init)$/
&& $q eq "qReqStat")
||( CUL_HM_autoReadReady($devH->{IODev}{NAME})
&& !$devH->{cmdStack}
&& $q eq "qReqConf")
)
){# got next device
$devN = $devNtmp;
last;
}
}
next if(!defined $devN);# no device found
my $dq = $devH->{helper}{q};
my @chns = split(",",$dq->{$q});
my $nOpen = scalar @chns;
if (@chns > 1){$dq->{$q} = join ",",@chns[1..$nOpen-1];}
else{ $dq->{$q} = "";
@{$mq->{$q}} = grep !/^$devN$/,@{$mq->{$q}};
}
my $dId = CUL_HM_name2Id($devN);
my $eN=($chns[0] && $chns[0]ne "00") ? CUL_HM_id2Name($dId.$chns[0]) : $devN;
next if(!defined $defs{$eN});
if ($q eq "qReqConf"){
$mq->{autoRdActive} = $devN;
CUL_HM_Set($defs{$eN},$eN,"getConfig");
}
else{
CUL_HM_Set($defs{$eN},$eN,"statusRequest");
CUL_HM_unQEntity($eN,"qReqStat") if (!$dq->{$q});
InternalTimer(gettimeofday()+20,"CUL_HM_readStateTo","sUpdt:$eN",0);
}
last; # execute only one!
}
}
delete $mq->{autoRdActive}
if ($mq->{autoRdActive} &&
$defs{$mq->{autoRdActive}}{helper}{prt}{sProc} != 1);
delete $mq->{autoRdActive} if ($mq->{autoRdActive} &&
$defs{$mq->{autoRdActive}}{helper}{prt}{sProc} != 1);
my $next;# how long to wait for next timer
if (@{$mq->{qReqStat}}){$next = 1}
elsif (@{$mq->{qReqConf}}){$next = $modules{CUL_HM}{hmAutoReadScan}}
InternalTimer(gettimeofday()+$next,"CUL_HM_procQs","CUL_HM_procQs",0)
if ($next);
InternalTimer(gettimeofday()+$next,"CUL_HM_procQs","CUL_HM_procQs",0) if ($next);
}
sub CUL_HM_appFromQ($$){#stack commands if pend in WuQ
my ($name,$reason) = @_;