mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 08:11:44 +00:00
HMLAN 3keys only, regList shadowhandling cleanup, hminfo check open changes
git-svn-id: https://svn.fhem.de/fhem/trunk@4718 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
3b36898cd6
commit
73f23a0e2d
@ -778,7 +778,7 @@ sub HMLAN_writeAesKey($) {#####################################################
|
|||||||
my ($name) = @_;
|
my ($name) = @_;
|
||||||
|
|
||||||
my ($k,$kNo);
|
my ($k,$kNo);
|
||||||
foreach my $i (1..5){
|
foreach my $i (1..3){
|
||||||
($kNo,$k) = ("0".$i,AttrVal($name,"hmKey".($i== 1?"":$i),""));
|
($kNo,$k) = ("0".$i,AttrVal($name,"hmKey".($i== 1?"":$i),""));
|
||||||
($kNo,$k) = split(":",$k);
|
($kNo,$k) = split(":",$k);
|
||||||
HMLAN_SimpleWrite($defs{$name}, "Y0$i,".($k?"$kNo,$k":"00,"));
|
HMLAN_SimpleWrite($defs{$name}, "Y0$i,".($k?"$kNo,$k":"00,"));
|
||||||
|
@ -227,6 +227,8 @@ sub CUL_HM_updateConfig($){
|
|||||||
}
|
}
|
||||||
elsif ($md =~ m/HM-CC-RT-DN/){
|
elsif ($md =~ m/HM-CC-RT-DN/){
|
||||||
$attr{$name}{stateFormat} = "last:trigLast" if ($chn eq "03");
|
$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
|
||||||
}
|
}
|
||||||
elsif ($md =~ m/(HM-CC-VD|ROTO_ZEL-STG-RM-FSA)/){
|
elsif ($md =~ m/(HM-CC-VD|ROTO_ZEL-STG-RM-FSA)/){
|
||||||
$hash->{helper}{oldDes} = "0";
|
$hash->{helper}{oldDes} = "0";
|
||||||
@ -1932,7 +1934,8 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
$data =~ s/(..)(..)/ $1:$2/g;
|
$data =~ s/(..)(..)/ $1:$2/g;
|
||||||
|
|
||||||
my $lN = ReadingsVal($chnHash->{NAME},$regLN,"");
|
my $lN = ReadingsVal($chnHash->{NAME},$regLN,"");
|
||||||
my $shdwReg = $chnHash->{helper}{shadowReg}{$regLNp};
|
my $sdH = CUL_HM_shH($chnHash,$list,$dst);
|
||||||
|
my $shdwReg = $sdH->{helper}{shadowReg}{$regLNp};
|
||||||
foreach my $entry(split(' ',$data)){
|
foreach my $entry(split(' ',$data)){
|
||||||
my ($a,$d) = split(":",$entry);
|
my ($a,$d) = split(":",$entry);
|
||||||
last if ($a eq "00");
|
last if ($a eq "00");
|
||||||
@ -1940,7 +1943,7 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
}else{ $lN .= " ".$entry;}
|
}else{ $lN .= " ".$entry;}
|
||||||
$shdwReg =~ s/ $a:..// if ($shdwReg);# confirmed: remove from shadow
|
$shdwReg =~ s/ $a:..// if ($shdwReg);# confirmed: remove from shadow
|
||||||
}
|
}
|
||||||
$chnHash->{helper}{shadowReg}{$regLNp} = $shdwReg;
|
$sdH->{helper}{shadowReg}{$regLNp} = $shdwReg; # todo possibley needs change
|
||||||
$lN = join(' ',sort(split(' ',$lN)));# re-order
|
$lN = join(' ',sort(split(' ',$lN)));# re-order
|
||||||
if ($lN =~ s/00:00//){$lN .= " 00:00"};
|
if ($lN =~ s/00:00//){$lN .= " 00:00"};
|
||||||
CUL_HM_UpdtReadSingle($chnHash,$regLN,$lN,0);
|
CUL_HM_UpdtReadSingle($chnHash,$regLN,$lN,0);
|
||||||
@ -2730,7 +2733,7 @@ sub CUL_HM_Set($@) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$lChn = "00" if($list == 7 && $peerChnIn eq "");#face to send
|
# $lChn = "00" if($list == 7 && (!$peerChnIn ||$peerChnIn eq ""));#face to send
|
||||||
|
|
||||||
my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn));
|
my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn));
|
||||||
$cHash = $hash if (!$cHash);
|
$cHash = $hash if (!$cHash);
|
||||||
@ -2824,7 +2827,7 @@ sub CUL_HM_Set($@) {
|
|||||||
}
|
}
|
||||||
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s02%s%02X%s%s",
|
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s02%s%02X%s%s",
|
||||||
$flag,$id,$dst,$chn,$lvl*2,$rval,$tval));
|
$flag,$id,$dst,$chn,$lvl*2,$rval,$tval));
|
||||||
readingsSingleUpdate($hash,"level","set_".$lvl,1);
|
CUL_HM_UpdtReadSingle($hash,"level","set_".$lvl,1);
|
||||||
$state = "set_".$lvl;
|
$state = "set_".$lvl;
|
||||||
}
|
}
|
||||||
elsif($cmd eq "stop") { #####################################################
|
elsif($cmd eq "stop") { #####################################################
|
||||||
@ -3052,7 +3055,7 @@ sub CUL_HM_Set($@) {
|
|||||||
$sh,$sd,$sy,$eh,$ed,$ey,($sm*16+$em));
|
$sh,$sd,$sy,$eh,$ed,$ey,($sm*16+$em));
|
||||||
}
|
}
|
||||||
my %mCmd = (auto=>0,manu=>1,party=>2,boost=>3,day=>4,night=>5);
|
my %mCmd = (auto=>0,manu=>1,party=>2,boost=>3,day=>4,night=>5);
|
||||||
readingsSingleUpdate($hash,"mode","set_".$mode,1);
|
CUL_HM_UpdtReadSingle($hash,"mode","set_".$mode,1);
|
||||||
my $msg = '8'.($mCmd{$mode}).$chn;
|
my $msg = '8'.($mCmd{$mode}).$chn;
|
||||||
$msg .= sprintf("%02X",$temp) if ($temp);
|
$msg .= sprintf("%02X",$temp) if ($temp);
|
||||||
$msg .= $party if ($party);
|
$msg .= $party if ($party);
|
||||||
@ -3072,7 +3075,7 @@ sub CUL_HM_Set($@) {
|
|||||||
my $chnHash = CUL_HM_id2Hash($dst."02");
|
my $chnHash = CUL_HM_id2Hash($dst."02");
|
||||||
my $mode = ReadingsVal($chnHash->{NAME},"R-controlMode","");
|
my $mode = ReadingsVal($chnHash->{NAME},"R-controlMode","");
|
||||||
$mode =~ s/set_//;#consider set as given
|
$mode =~ s/set_//;#consider set as given
|
||||||
readingsSingleUpdate($chnHash,"desired-temp-cent",$a[2],1)
|
CUL_HM_UpdtReadSingle($chnHash,"desired-temp-cent",$a[2],1)
|
||||||
if($mode =~ m/central/);
|
if($mode =~ m/central/);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3159,7 +3162,7 @@ sub CUL_HM_Set($@) {
|
|||||||
"state:set_$vp %",
|
"state:set_$vp %",
|
||||||
"ValveDesired:$vp %");
|
"ValveDesired:$vp %");
|
||||||
|
|
||||||
readingsSingleUpdate($hash,"valvePosTC","$vp %",0);
|
CUL_HM_UpdtReadSingle($hash,"valvePosTC","$vp %",1);
|
||||||
$hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077;
|
$hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077;
|
||||||
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
|
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
|
||||||
$hash->{helper}{vd}{msgCnt} = 1 if (!defined $hash->{helper}{vd}{msgCnt});
|
$hash->{helper}{vd}{msgCnt} = 1 if (!defined $hash->{helper}{vd}{msgCnt});
|
||||||
@ -3471,7 +3474,7 @@ sub CUL_HM_Set($@) {
|
|||||||
return "$cmd not impelmented - contact sysop";
|
return "$cmd not impelmented - contact sysop";
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsSingleUpdate($hash,"state",$state,1) if($state);
|
CUL_HM_UpdtReadSingle($hash,"state",$state,1) if($state);
|
||||||
|
|
||||||
my $rxType = CUL_HM_getRxType($devHash);
|
my $rxType = CUL_HM_getRxType($devHash);
|
||||||
Log3 $name,2,"CUL_HM set $name $act";
|
Log3 $name,2,"CUL_HM set $name $act";
|
||||||
@ -3647,8 +3650,9 @@ sub CUL_HM_getConfig($){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
CUL_HM_PushCmdStack($cHash,sprintf("++%s01%s%s%s0400000000%02X"
|
my $ln = sprintf("%02X",$listNo);
|
||||||
,$flag,$id,$dst,$chn,$listNo));
|
my $mch = CUL_HM_lstCh($cHash,$ln,$chn);
|
||||||
|
CUL_HM_PushCmdStack($cHash,"++$flag"."01$id$dst$mch"."0400000000$ln");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3676,13 +3680,14 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
|
|||||||
#--- copy data from readings to shadow
|
#--- copy data from readings to shadow
|
||||||
my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn};
|
my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn};
|
||||||
$chnhash = $hash if (!$chnhash);
|
$chnhash = $hash if (!$chnhash);
|
||||||
|
my $sdH = CUL_HM_shH($chnhash,$list,$dst);
|
||||||
my $rRd = ReadingsVal($chnhash->{NAME},$regLN,"");
|
my $rRd = ReadingsVal($chnhash->{NAME},$regLN,"");
|
||||||
if (!$chnhash->{helper}{shadowReg} ||
|
if (!$sdH->{helper}{shadowReg} ||
|
||||||
!$chnhash->{helper}{shadowReg}{$regLNp}){
|
!$sdH->{helper}{shadowReg}{$regLNp}){
|
||||||
$chnhash->{helper}{shadowReg}{$regLNp} = $rRd;
|
$sdH->{helper}{shadowReg}{$regLNp} = $rRd;
|
||||||
}
|
}
|
||||||
#--- update with ne value
|
#--- update with ne value
|
||||||
my $regs = $chnhash->{helper}{shadowReg}{$regLNp};
|
my $regs = $sdH->{helper}{shadowReg}{$regLNp};
|
||||||
for(my $l = 0; $l < $tl; $l+=4) { #substitute changed bytes in shadow
|
for(my $l = 0; $l < $tl; $l+=4) { #substitute changed bytes in shadow
|
||||||
my $addr = substr($content,$l,2);
|
my $addr = substr($content,$l,2);
|
||||||
my $data = substr($content,$l+2,2);
|
my $data = substr($content,$l+2,2);
|
||||||
@ -3690,10 +3695,10 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
|
|||||||
$regs .= " ".$addr.":".$data;
|
$regs .= " ".$addr.":".$data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$chnhash->{helper}{shadowReg}{$regLNp} = $regs; # update shadow
|
$sdH->{helper}{shadowReg}{$regLNp} = $regs; # update shadow
|
||||||
my @changeList;
|
my @changeList;
|
||||||
if ($prep eq "exec"){#update complete registerset
|
if ($prep eq "exec"){#update complete registerset
|
||||||
@changeList = keys%{$chnhash->{helper}{shadowReg}};
|
@changeList = keys%{$sdH->{helper}{shadowReg}};
|
||||||
}
|
}
|
||||||
elsif ($prep eq "prep"){
|
elsif ($prep eq "prep"){
|
||||||
return; #prepare shadowReg only. More data expected.
|
return; #prepare shadowReg only. More data expected.
|
||||||
@ -3705,7 +3710,7 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
|
|||||||
foreach my $nrn(@changeList){
|
foreach my $nrn(@changeList){
|
||||||
my $change;
|
my $change;
|
||||||
my $nrRd = ReadingsVal($chnhash->{NAME},$regPre.$nrn,"");
|
my $nrRd = ReadingsVal($chnhash->{NAME},$regPre.$nrn,"");
|
||||||
foreach (sort split " ",$chnhash->{helper}{shadowReg}{$nrn}){
|
foreach (sort split " ",$sdH->{helper}{shadowReg}{$nrn}){
|
||||||
$change .= $_." " if ($nrRd !~ m /$_/);# filter only changes
|
$change .= $_." " if ($nrRd !~ m /$_/);# filter only changes
|
||||||
}
|
}
|
||||||
next if (!$change);#no changes
|
next if (!$change);#no changes
|
||||||
@ -3827,15 +3832,16 @@ sub CUL_HM_responseSetup($$) {#store all we need to handle the response
|
|||||||
my ($peer, $list) = ($1,$2) if ($p =~ m/..04(........)(..)/);
|
my ($peer, $list) = ($1,$2) if ($p =~ m/..04(........)(..)/);
|
||||||
$peer = ($peer ne "00000000")?CUL_HM_peerChName($peer,$dst,""):"";
|
$peer = ($peer ne "00000000")?CUL_HM_peerChName($peer,$dst,""):"";
|
||||||
#--- set messaging items
|
#--- set messaging items
|
||||||
|
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
|
||||||
|
$chnhash = $hash if(!$chnhash);
|
||||||
|
my $fch = CUL_HM_shC($chnhash,$list,$chn);
|
||||||
CUL_HM_respWaitSu ($hash,"Pending:=RegisterRead"
|
CUL_HM_respWaitSu ($hash,"Pending:=RegisterRead"
|
||||||
,"cmd:=$cmd" ,"forChn:=$chn"
|
,"cmd:=$cmd" ,"forChn:=$fch"
|
||||||
,"forList:=$list","forPeer:=$peer"
|
,"forList:=$list","forPeer:=$peer"
|
||||||
,"mNo:=".hex($mNo)
|
,"mNo:=".hex($mNo)
|
||||||
,"nAddr:=0"
|
,"nAddr:=0"
|
||||||
,"reSent:=$rss");
|
,"reSent:=$rss");
|
||||||
#--- remove channel entries that will be replaced
|
#--- remove channel entries that will be replaced
|
||||||
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
|
|
||||||
$chnhash = $hash if(!$chnhash);
|
|
||||||
|
|
||||||
$peer ="" if($list !~ m/^0[347]$/);
|
$peer ="" if($list !~ m/^0[347]$/);
|
||||||
#empty val since reading will be cumulative
|
#empty val since reading will be cumulative
|
||||||
@ -4130,7 +4136,7 @@ sub CUL_HM_respPendTout($) {
|
|||||||
CUL_HM_complConfig($name);
|
CUL_HM_complConfig($name);
|
||||||
}
|
}
|
||||||
CUL_HM_eventP($hash,"ResndFail");
|
CUL_HM_eventP($hash,"ResndFail");
|
||||||
readingsSingleUpdate($hash,"state",$pendCmd,1);
|
CUL_HM_UpdtReadSingle($hash,"state",$pendCmd,1);
|
||||||
CUL_HM_ProcessCmdStack($hash); # continue processing commands if any
|
CUL_HM_ProcessCmdStack($hash); # continue processing commands if any
|
||||||
}
|
}
|
||||||
else{# manage retries
|
else{# manage retries
|
||||||
@ -4182,7 +4188,7 @@ sub CUL_HM_eventP($$) {#handle protocol events
|
|||||||
my $nAttr = $hash;
|
my $nAttr = $hash;
|
||||||
if ($evntType eq "Rcv"){
|
if ($evntType eq "Rcv"){
|
||||||
$nAttr->{"protLastRcv"} = TimeNow();
|
$nAttr->{"protLastRcv"} = TimeNow();
|
||||||
readingsSingleUpdate($hash,".protLastRcv",$nAttr->{"protLastRcv"},0);
|
CUL_HM_UpdtReadSingle($hash,".protLastRcv",$nAttr->{"protLastRcv"},0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4191,7 +4197,7 @@ sub CUL_HM_eventP($$) {#handle protocol events
|
|||||||
$nAttr->{"prot".$evntType} = ++$evntCnt." last_at:".TimeNow();
|
$nAttr->{"prot".$evntType} = ++$evntCnt." last_at:".TimeNow();
|
||||||
|
|
||||||
if ($evntType =~ m/(Nack|ResndFail|IOerr)/){# unrecoverable Error
|
if ($evntType =~ m/(Nack|ResndFail|IOerr)/){# unrecoverable Error
|
||||||
readingsSingleUpdate($hash,"state",$evntType,1);
|
CUL_HM_UpdtReadSingle($hash,"state",$evntType,1);
|
||||||
$hash->{helper}{prt}{bErr}++;
|
$hash->{helper}{prt}{bErr}++;
|
||||||
$nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel});
|
$nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel});
|
||||||
$nAttr->{protCmdDel} += scalar @{$hash->{cmdStack}} + 1
|
$nAttr->{protCmdDel} += scalar @{$hash->{cmdStack}} + 1
|
||||||
@ -4238,7 +4244,7 @@ sub CUL_HM_protState($$){
|
|||||||
}
|
}
|
||||||
$hash->{protState} = $state;
|
$hash->{protState} = $state;
|
||||||
if (!$hash->{helper}{role}{chn}){
|
if (!$hash->{helper}{role}{chn}){
|
||||||
readingsSingleUpdate($hash,"state",$state,0);
|
CUL_HM_UpdtReadSingle($hash,"state",$state,0);
|
||||||
DoTrigger($name, undef);
|
DoTrigger($name, undef);
|
||||||
}
|
}
|
||||||
Log3 $name,6,"CUL_HM $name protEvent:$state".
|
Log3 $name,6,"CUL_HM $name protEvent:$state".
|
||||||
@ -4268,7 +4274,7 @@ sub CUL_HM_ID2PeerList ($$$) {
|
|||||||
$attr{$name}{peerIDs} = $peerIDs; # make it public
|
$attr{$name}{peerIDs} = $peerIDs; # make it public
|
||||||
if ($peerNames){
|
if ($peerNames){
|
||||||
$peerNames =~ s/_chn:01//g; # channel 01 is part of device
|
$peerNames =~ s/_chn:01//g; # channel 01 is part of device
|
||||||
readingsSingleUpdate($hash,"peerList",$peerNames,0);
|
CUL_HM_UpdtReadSingle($hash,"peerList",$peerNames,0);
|
||||||
$hash->{peerList} = $peerNames;
|
$hash->{peerList} = $peerNames;
|
||||||
my $dHash = CUL_HM_getDeviceHash($hash);
|
my $dHash = CUL_HM_getDeviceHash($hash);
|
||||||
my $st = AttrVal($dHash->{NAME},"subType","");
|
my $st = AttrVal($dHash->{NAME},"subType","");
|
||||||
@ -4475,6 +4481,31 @@ sub CUL_HM_getDeviceName($) {#in: name out: name of device
|
|||||||
my $devHash = $modules{CUL_HM}{defptr}{substr($defs{$name}{DEF},0,6)};
|
my $devHash = $modules{CUL_HM}{defptr}{substr($defs{$name}{DEF},0,6)};
|
||||||
return ($devHash)?$devHash->{NAME}:$name;
|
return ($devHash)?$devHash->{NAME}:$name;
|
||||||
}
|
}
|
||||||
|
sub CUL_HM_shH($$$){
|
||||||
|
my ($h,$l,$d) = @_;
|
||||||
|
if ( $h->{helper}{shRegW}
|
||||||
|
&& $h->{helper}{shRegW}{$l}
|
||||||
|
&& $modules{CUL_HM}{defptr}{$d.$h->{helper}{shRegW}{$l}}){
|
||||||
|
return $modules{CUL_HM}{defptr}{$d.$h->{helper}{shRegW}{$l}};
|
||||||
|
}
|
||||||
|
return $h;
|
||||||
|
}
|
||||||
|
sub CUL_HM_shC($$$){
|
||||||
|
my ($h,$l,$c) = @_;
|
||||||
|
if ( $h->{helper}{shRegW}
|
||||||
|
&& $h->{helper}{shRegW}{$l}){
|
||||||
|
return $h->{helper}{shRegW}{$l};
|
||||||
|
}
|
||||||
|
return $c;
|
||||||
|
}
|
||||||
|
sub CUL_HM_lstCh($$$){
|
||||||
|
my ($h,$l,$c) = @_;
|
||||||
|
if ( $h->{helper}{shRegR}
|
||||||
|
&& $h->{helper}{shRegR}{$l}){
|
||||||
|
return $h->{helper}{shRegR}{$l};
|
||||||
|
}
|
||||||
|
return $c;
|
||||||
|
}
|
||||||
|
|
||||||
#+++++++++++++++++ debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
#+++++++++++++++++ debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
sub CUL_HM_DumpProtocol($$@) {
|
sub CUL_HM_DumpProtocol($$@) {
|
||||||
@ -4541,27 +4572,33 @@ sub CUL_HM_getRegFromStore($$$$@) {#read a register from backup data
|
|||||||
$factor = $reg->{f};
|
$factor = $reg->{f};
|
||||||
$unit = " ".$reg->{u};
|
$unit = " ".$reg->{u};
|
||||||
}
|
}
|
||||||
|
my $dst = substr(CUL_HM_name2Id($name),0,6);
|
||||||
if(!$regLN){
|
if(!$regLN){
|
||||||
$regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".")
|
$regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".")
|
||||||
.sprintf("RegL_%02X:",$list)
|
.sprintf("RegL_%02X:",$list)
|
||||||
.($peerId?CUL_HM_peerChName($peerId,
|
.($peerId?CUL_HM_peerChName($peerId,
|
||||||
substr(CUL_HM_name2Id($name),0,6),
|
$dst,
|
||||||
CUL_HM_IOid($hash)):"");
|
CUL_HM_IOid($hash)):"");
|
||||||
}
|
}
|
||||||
$regLN =~ s/broadcast//;
|
$regLN =~ s/broadcast//;
|
||||||
my $regLNp = $regLN;
|
my $regLNp = $regLN;
|
||||||
$regLNp =~s/^\.//; #remove leading '.' in case ..
|
$regLNp =~s/^\.//; #remove leading '.' in case ..
|
||||||
|
my $sdH = CUL_HM_shH($hash,sprintf("%02X",$list),$dst);
|
||||||
|
my $sRL = ( $sdH->{helper}{shadowReg} # shadowregList
|
||||||
|
&& $sdH->{helper}{shadowReg}{$regLNp})
|
||||||
|
?$sdH->{helper}{shadowReg}{$regLNp}
|
||||||
|
:"";
|
||||||
|
my $rRL = ($hash->{READINGS}{$regLN}) #realRegList
|
||||||
|
?$hash->{READINGS}{$regLN}{VAL}
|
||||||
|
:"";
|
||||||
|
|
||||||
my $data=0;
|
my $data=0;
|
||||||
my $convFlg = "";# confirmation flag - indicates data not confirmed by device
|
my $convFlg = "";# confirmation flag - indicates data not confirmed by device
|
||||||
for (my $size2go = $size;$size2go>0;$size2go -=8){
|
for (my $size2go = $size;$size2go>0;$size2go -=8){
|
||||||
my $addrS = sprintf("%02X",$addr);
|
my $addrS = sprintf("%02X",$addr);
|
||||||
my ($dReadS,$dReadR) = (undef,"");
|
my ($dReadS,$dReadR) = (undef,"");
|
||||||
$dReadS = $1 if( $hash->{helper}{shadowReg}
|
$dReadS = $1 if( $sRL =~ m/$addrS:(..)/);
|
||||||
&& $hash->{helper}{shadowReg}{$regLNp}
|
$dReadR = $1 if( $rRL =~ m/$addrS:(..)/);
|
||||||
&& $hash->{helper}{shadowReg}{$regLNp} =~ m/$addrS:(..)/);
|
|
||||||
$dReadR = $1 if( $hash->{READINGS}{$regLN}
|
|
||||||
&&$hash->{READINGS}{$regLN}{VAL} =~ m/$addrS:(..)/);
|
|
||||||
my $dRead = $dReadR;
|
my $dRead = $dReadR;
|
||||||
if (defined $dReadS){
|
if (defined $dReadS){
|
||||||
$convFlg = "set_" if ($dReadR ne $dReadS);
|
$convFlg = "set_" if ($dReadR ne $dReadS);
|
||||||
@ -5124,8 +5161,8 @@ sub CUL_HM_dimLog($) {# dimmer readings - support virtual chan - unused so far
|
|||||||
invMinus=>{calc=>'$val=(100-$val+$in)<100?(100-$val-$in) : 100' ,txt=>'100 - state + chan'},
|
invMinus=>{calc=>'$val=(100-$val+$in)<100?(100-$val-$in) : 100' ,txt=>'100 - state + chan'},
|
||||||
invMul =>{calc=>'$val=(100-$val*$in)>0?(100-$val*$in) : 0' ,txt=>'100 - state * chan'},
|
invMul =>{calc=>'$val=(100-$val*$in)>0?(100-$val*$in) : 0' ,txt=>'100 - state * chan'},
|
||||||
);
|
);
|
||||||
readingsSingleUpdate($hash,"R-logicCombTxt" ,$logicComb{$lComb}{txt},0);
|
CUL_HM_UpdtReadBulk($hash,0,"R-logicCombTxt:".$logicComb{$lComb}{txt}
|
||||||
readingsSingleUpdate($hash,"R-logicCombCalc",$logicComb{$lComb}{calc},0);
|
,"R-logicCombCalc:".$logicComb{$lComb}{calc});
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5254,7 +5291,7 @@ sub CUL_HM_ActCheck($) {# perform supervision
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($oldState ne $state){
|
if ($oldState ne $state){
|
||||||
readingsSingleUpdate($defs{$devName},"Activity",$state,1);
|
CUL_HM_UpdtReadSingle($defs{$devName},"Activity",$state,1);
|
||||||
$attr{$devName}{actStatus} = $state;
|
$attr{$devName}{actStatus} = $state;
|
||||||
Log3 $actHash,4,"Device ".$devName." is ".$state;
|
Log3 $actHash,4,"Device ".$devName." is ".$state;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ sub HMinfo_regCheck(@) { ######################################################
|
|||||||
my @entities = @_;
|
my @entities = @_;
|
||||||
my @regIncompl;
|
my @regIncompl;
|
||||||
my @regMissing;
|
my @regMissing;
|
||||||
my @peerRegsFail;
|
my @regChPend;
|
||||||
|
|
||||||
foreach my $eName (@entities){
|
foreach my $eName (@entities){
|
||||||
my $ehash = $defs{$eName};
|
my $ehash = $defs{$eName};
|
||||||
@ -151,13 +151,17 @@ sub HMinfo_regCheck(@) { ######################################################
|
|||||||
if ( !$ehash->{READINGS}{$rNm}
|
if ( !$ehash->{READINGS}{$rNm}
|
||||||
|| !$ehash->{READINGS}{$rNm}{VAL}) {push @mReg, $rNm;}
|
|| !$ehash->{READINGS}{$rNm}{VAL}) {push @mReg, $rNm;}
|
||||||
elsif ( $ehash->{READINGS}{$rNm}{VAL} !~ m/00:00/){push @iReg, $rNm;}
|
elsif ( $ehash->{READINGS}{$rNm}{VAL} !~ m/00:00/){push @iReg, $rNm;}
|
||||||
|
if ($ehash->{helper}{shadowReg} && keys %{$ehash->{helper}{shadowReg}}){push @iReg, $rNm;}
|
||||||
}
|
}
|
||||||
|
push @regChPend,$eName if ($ehash->{helper}{shadowReg} &&
|
||||||
|
keys %{$ehash->{helper}{shadowReg}});
|
||||||
push @regMissing,$eName.":\t".join(",",@mReg) if (scalar @mReg);
|
push @regMissing,$eName.":\t".join(",",@mReg) if (scalar @mReg);
|
||||||
push @regIncompl,$eName.":\t".join(",",@iReg) if (scalar @iReg);
|
push @regIncompl,$eName.":\t".join(",",@iReg) if (scalar @iReg);
|
||||||
}
|
}
|
||||||
my $ret = "";
|
my $ret = "";
|
||||||
$ret .="\n\n missing register list\n " .(join "\n ",sort @regMissing) if(@regMissing);
|
$ret .="\n\n missing register list\n " .(join "\n ",sort @regMissing) if(@regMissing);
|
||||||
$ret .="\n\n incomplete register list\n ".(join "\n ",sort @regIncompl) if(@regIncompl);
|
$ret .="\n\n incomplete register list\n ".(join "\n ",sort @regIncompl) if(@regIncompl);
|
||||||
|
$ret .="\n\n Register changes pending\n ".(join "\n ",sort @regChPend) if(@regChPend);
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
sub HMinfo_peerCheck(@) { #####################################################
|
sub HMinfo_peerCheck(@) { #####################################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user