improve hmmanualOper, hminfo protostatus

git-svn-id: https://svn.fhem.de/fhem/trunk@4754 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876
2014-01-27 18:31:55 +00:00
parent ae44099fd7
commit 3d588524fc
2 changed files with 41 additions and 35 deletions

View File

@@ -195,38 +195,26 @@ sub CUL_HM_updateConfig($){
next if (!$hash->{DEF}); # likely renamed
my $id = $hash->{DEF};
my $chn = substr($id."00",6,2);
if ($id ne $K_actDetID){# if not action detector
CUL_HM_ID2PeerList($name,"",1); # update peerList out of peerIDs
my $actCycle = AttrVal($name,"actCycle",undef);
CUL_HM_ActAdd($id,$actCycle) if ($actCycle);# add to ActionDetect?
# --- set default attrubutes if missing ---
if ( $hash->{helper}{role}{dev}
&& AttrVal($name,"subType","") ne "virtual"){
$attr{$name}{expert} = AttrVal($name,"expert" ,"2_full");
$attr{$name}{autoReadReg}= AttrVal($name,"autoReadReg","4_reqStatus");
}
CUL_HM_Attr("attr",$name,"expert",$attr{$name}{expert})
if ($attr{$name}{expert});#need update after readings are available
}
else{# Action Detector only
my $nAttr = $modules{CUL_HM}{helper}{hmManualOper};# no update for attr
if ($id eq $K_actDetID){# if action detector
$attr{$name}{"event-on-change-reading"} =
AttrVal($name, "event-on-change-reading", ".*");
AttrVal($name, "event-on-change-reading", ".*")
if(!$nAttr);
delete $hash->{helper}{role};
$hash->{helper}{role}{vrt} = 1;
next;
#delete $attr{$name}{peerIDs}; # remove historical data
}
CUL_HM_ID2PeerList($name,"",1); # update peerList out of peerIDs
my $chn = substr($id."00",6,2);
my $st = CUL_HM_Get($hash,$name,"param","subType");
my $md = CUL_HM_Get($hash,$name,"param","model");
if ($md =~ /(HM-CC-TC|ROTO_ZEL-STG-RM-FWT)/){
if ($md =~ /(HM-CC-TC|ROTO_ZEL-STG-RM-FWT)/){
$hash->{helper}{role}{chn} = 1 if (length($id) == 6); #tc special
$attr{$name}{stateFormat} = "last:trigLast" if ($chn eq "03");
}
elsif ($md =~ m/HM-CC-RT-DN/){
$attr{$name}{stateFormat} = "last:trigLast" if ($chn eq "03");
$hash->{helper}{shRegR}{"07"} = "00" if ($chn eq "04");# shadowReg List 7 read from CH 0
$hash->{helper}{shRegW}{"07"} = "04" if ($chn eq "00");# shadowReg List 7 write to CH 4
}
@@ -273,6 +261,24 @@ sub CUL_HM_updateConfig($){
$hash->{helper}{role}{vrt} = 1;
}
next if ($nAttr);# stop if default setting if attributes is not desired
my $actCycle = AttrVal($name,"actCycle",undef);
CUL_HM_ActAdd($id,$actCycle) if ($actCycle );#add 2 ActionDetect?
# --- set default attrubutes if missing ---
if ( $hash->{helper}{role}{dev}
&& AttrVal($name,"subType","") ne "virtual"){
$attr{$name}{expert} = AttrVal($name,"expert" ,"2_full");
$attr{$name}{autoReadReg}= AttrVal($name,"autoReadReg","4_reqStatus");
}
CUL_HM_Attr("attr",$name,"expert",$attr{$name}{expert})
if ($attr{$name}{expert});#need update after readings are available
if ($chn eq "03" &&
$md =~ /(HM-CC-TC|ROTO_ZEL-STG-RM-FWT|HM-CC-RT-DN)/){
$attr{$name}{stateFormat} = "last:trigLast";
}
if ( $hash->{helper}{role}{dev} && CUL_HM_getRxType($hash)&0x02){#burst dev
#burst devices must restrict retries!
$attr{$name}{msgRepeat} = 1 if (!$attr{$name}{msgRepeat});
@@ -2034,16 +2040,17 @@ sub CUL_HM_queueUpdtCfg($){
my $name = shift;
if ($modules{CUL_HM}{helper}{hmManualOper}){ # no update when manual operation
delete $modules{CUL_HM}{helper}{updtCfgLst};
return;
}
my @arr;
if ($modules{CUL_HM}{helper}{updtCfgLst}){
@arr = CUL_HM_noDup((@{$modules{CUL_HM}{helper}{updtCfgLst}}, $name));
}
else{
push @arr,$name;
my @arr;
if ($modules{CUL_HM}{helper}{updtCfgLst}){
@arr = CUL_HM_noDup((@{$modules{CUL_HM}{helper}{updtCfgLst}}, $name));
}
else{
push @arr,$name;
}
$modules{CUL_HM}{helper}{updtCfgLst} = \@arr;
}
$modules{CUL_HM}{helper}{updtCfgLst} = \@arr;
RemoveInternalTimer("updateConfig");
InternalTimer(gettimeofday()+5,"CUL_HM_updateConfig", "updateConfig", 0);
}
@@ -5613,7 +5620,6 @@ sub CUL_HM_peersValid($) {# is list valid?
}
return 1;
}
sub CUL_HM_reglUsed($) {# provide data for HMinfo
my $name = shift;
my $hash = $defs{$name};
@@ -5654,7 +5660,7 @@ sub CUL_HM_reglUsed($) {# provide data for HMinfo
return @lsNo;
}
sub CUL_HM_complConfigTest($){#
sub CUL_HM_complConfigTest($){# Q - check register consistancy some time later
my $name = shift;
return if ($modules{CUL_HM}{helper}{hmManualOper});#no autoaction when manual
push @{$modules{CUL_HM}{helper}{confCheckArr}},$name;
@@ -5663,12 +5669,12 @@ sub CUL_HM_complConfigTest($){#
InternalTimer(gettimeofday()+ 1800,"CUL_HM_complConfigTO","CUL_HM_complConfigTO", 0);
}
}
sub CUL_HM_complConfigTO($){
sub CUL_HM_complConfigTO($) {# now perform consistancy check of register
my @arr = @{$modules{CUL_HM}{helper}{confCheckArr}};
@{$modules{CUL_HM}{helper}{confCheckArr}} = ();
CUL_HM_complConfig($_) foreach (CUL_HM_noDup(@arr));
}
sub CUL_HM_complConfig($) {# read config if enabled and not complete
sub CUL_HM_complConfig($) {# read config if enabled and not complete
my $name = shift;
return if ($modules{CUL_HM}{helper}{hmManualOper});#no autoaction when manual
return if ((CUL_HM_getAttrInt($name,"autoReadReg") & 0x07) < 5);

View File

@@ -519,7 +519,7 @@ sub HMinfo_SetFn($@) {#########################################################
$opt .= "d" if ($type !~ m/(readings|register)/);# readings apply to all, others device only
my @entities;
$type = "msgEvents" if ($type eq "Protocol");# translate parameter
foreach my $dName (HMinfo_getEntities($opt."v",$filter)){
foreach my $dName (HMinfo_getEntities($opt,$filter)){
push @entities,$dName;
CUL_HM_Set($defs{$dName},$dName,"clear",$type);
}
@@ -543,7 +543,7 @@ sub HMinfo_SetFn($@) {#########################################################
my @paramList;
my @IOlist;
my @plSum; push @plSum,0 for (0..9);#prefill
foreach my $dName (HMinfo_getEntities($opt."dv",$filter)){
foreach my $dName (HMinfo_getEntities($opt."d",$filter)){
my $id = $defs{$dName}{DEF};
my ($found,$para) = HMinfo_getParam($id,
,"protState","protCmdPend"