mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-02 19:15:31 +00:00
CUL_HM:update RGB sensor
git-svn-id: https://svn.fhem.de/fhem/trunk@9664 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
f936668d8a
commit
8b8de63308
@ -597,18 +597,22 @@ sub CUL_HM_Attr(@) {#################################
|
||||
else{ ($nTag,$grp) = (".","R-")}
|
||||
foreach my $rdEntry (grep /^$grp/ ,keys %{$tHash->{READINGS}}){
|
||||
my $reg = $rdEntry;
|
||||
$reg =~ s/.*-//;
|
||||
my $p = "";
|
||||
$p = "-".$1 if($rdEntry =~m /R-(.*)-(lg|sh)/);
|
||||
$reg =~ s/\.?R-.*?-//;
|
||||
next if(!$culHmRegDefine->{$reg} || $culHmRegDefine->{$reg}{d} eq '0');
|
||||
$tHash->{READINGS}{$nTag."R-".$reg} = $tHash->{READINGS}{$rdEntry};
|
||||
$tHash->{READINGS}{$nTag."R-$p".$reg} = $tHash->{READINGS}{$rdEntry};
|
||||
delete $tHash->{READINGS}{$rdEntry};
|
||||
}
|
||||
if ($tHash->{helper}{expert}{det}){($nTag,$grp) = ("",".R-")}
|
||||
else{ ($nTag,$grp) = (".","R-")}
|
||||
foreach my $rdEntry (grep /^$grp/ ,keys %{$tHash->{READINGS}}){
|
||||
my $reg = $rdEntry;
|
||||
$reg =~ s/.*-//;
|
||||
my $p = "";
|
||||
$p = "-".$1 if($rdEntry =~m /R-(.*)-(lg|sh)/);
|
||||
$reg =~ s/\.?R-.*?-//;
|
||||
next if(!$culHmRegDefine->{$reg} || $culHmRegDefine->{$reg}{d} eq '1');
|
||||
$tHash->{READINGS}{$nTag."R-".$reg} = $tHash->{READINGS}{$rdEntry};
|
||||
$tHash->{READINGS}{$nTag."R$p-".$reg} = $tHash->{READINGS}{$rdEntry};
|
||||
delete $tHash->{READINGS}{$rdEntry};
|
||||
}
|
||||
if ($tHash->{helper}{expert}{raw}){($nTag,$grp) = ("",".RegL_")}
|
||||
@ -3485,13 +3489,16 @@ sub CUL_HM_Get($@) {#+++++++++++++++++ get command+++++++++++++++++++++++++++++
|
||||
$timestamps .= "\n# "
|
||||
.InternalVal($eName,"peerList","")
|
||||
." :peerList";
|
||||
print aSave "\nset ".$eName." peerBulk ".$pIds;
|
||||
}
|
||||
print aSave "\nset $eName peerBulk $pIds#"
|
||||
.ReadingsTimestamp($eName,"peerList","1900-01-01 00:00:01");
|
||||
}
|
||||
my $ehash = $defs{$eName};
|
||||
foreach my $read (sort grep(/^[\.]?RegL_/,keys %{$ehash->{READINGS}})){
|
||||
print aSave "\nset ".$eName." regBulk ".$read." "
|
||||
.ReadingsVal($eName,$read,"");
|
||||
$timestamps .= "\n# ".ReadingsTimestamp($eName,$read,"")." :".$read;
|
||||
my $ts = ReadingsTimestamp($eName,$read,"1900-01-01 00:00:01");
|
||||
print aSave "\nset $eName regBulk $read"
|
||||
." ".ReadingsVal($eName,$read,"")
|
||||
." #$ts";
|
||||
$timestamps .= "\n# $ts :$read";
|
||||
}
|
||||
print aSave $timestamps;
|
||||
}
|
||||
@ -3891,6 +3898,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
if ($a[3] && $a[3] !~ m/^(set|unset)/);
|
||||
my $set = ($a[3] && $a[3] eq "unset")?"02":"01";
|
||||
foreach my $peer (grep(!/^self/,split(',',$pL))){
|
||||
last if($peer =~ m/^#/);
|
||||
my $pID = CUL_HM_peerChId($peer,$dst);
|
||||
return "unknown peer".$peer if (length($pID) != 8);# peer only to channel
|
||||
my $pCh1 = substr($pID,6,2);
|
||||
@ -3951,6 +3959,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
shift @adIn;shift @adIn;shift @adIn;
|
||||
my $adList;
|
||||
foreach my $ad (sort @adIn){
|
||||
last if($ad =~ m/^#/);
|
||||
($addr,$data) = split(":",$ad);
|
||||
$adList .= sprintf("%02X%02X",hex($addr),hex($data)) if ($addr ne "00");
|
||||
return "wrong addr or data:".$ad if (hex($addr)>255 || hex($data)>255);
|
||||
@ -6861,8 +6870,9 @@ sub CUL_HM_updtRegDisp($$$) {
|
||||
my $name = $hash->{NAME};
|
||||
my $devId = substr(CUL_HM_name2Id($name),0,6);
|
||||
my $ioId = CUL_HM_IoId(CUL_HM_id2Hash($devId));
|
||||
my $pReg = ($peerId && $peerId ne '00000000' )?
|
||||
CUL_HM_peerChName($peerId,$devId)."-":"";
|
||||
my $pReg = ($peerId && $peerId ne '00000000' )
|
||||
? CUL_HM_peerChName($peerId,$devId)."-"
|
||||
: "";
|
||||
$pReg=~s/:/-/;
|
||||
$pReg="R-".$pReg;
|
||||
my $devName =CUL_HM_getDeviceHash($hash)->{NAME};# devName as protocol entity
|
||||
@ -8097,7 +8107,7 @@ sub CUL_HM_reglUsed($) {# provide data for HMinfo
|
||||
if ($hash->{helper}{role}{dev}){
|
||||
push @lsNo,"0:";
|
||||
}
|
||||
elsif ($hash->{helper}{role}{chn}){
|
||||
if ($hash->{helper}{role}{chn}){
|
||||
foreach my $ls (split ",",$culHmModel->{$mId}{lst}){
|
||||
my ($l,$c) = split":",$ls;
|
||||
if ($l ne "p"){# ignore peer-only entries
|
||||
|
@ -1586,8 +1586,7 @@ sub HMinfo_verifyConfig($@) {##################################################
|
||||
next if($param !~ m/RegL_0[0-9]:/);
|
||||
$param =~ s/\.RegL/RegL/;
|
||||
my ($reg,$data) = split(" ",$param,2);
|
||||
my $exp = CUL_HM_getAttrInt($eN,"expert");
|
||||
my $eReg = ReadingsVal($eN,(($exp != 2)?".":"").$reg,"");
|
||||
my $eReg = ReadingsVal($eN,($defs{$eN}{helper}{expert}{raw}?"":".").$reg,"");
|
||||
my ($ensp,$dnsp) = ($eReg,$data);
|
||||
$ensp =~ s/ //g;
|
||||
$dnsp =~ s/ //g;
|
||||
@ -1662,14 +1661,18 @@ sub HMinfo_loadConfig($@) {####################################################
|
||||
$line =~ s/\r//g;
|
||||
next if ( $line !~ m/set .* (peerBulk|regBulk) .*/
|
||||
&& $line !~ m/(setreading|template.e.) .*/);
|
||||
my ($cmd1,$eN,$cmd,$param) = split(" ",$line,4);
|
||||
my ($command,$timeStamp) = split("#",$line,2);
|
||||
my ($cmd1,$eN,$cmd,$param) = split(" ",$command,4);
|
||||
next if ($eN !~ m/$filter/);
|
||||
if ($cmd1 !~ m /^template(Def|Set)$/ && (!$eN || !$defs{$eN})){
|
||||
push @entryNF,$eN;
|
||||
next;
|
||||
}
|
||||
if ($cmd1 eq "setreading"){
|
||||
$changes{$eN}{$cmd}=$param if (!$defs{$eN}{READINGS}{$cmd});
|
||||
if (!$defs{$eN}{READINGS}{$cmd}){
|
||||
$changes{$eN}{$cmd}{d}=$param ;
|
||||
$changes{$eN}{$cmd}{t}=$timeStamp ;
|
||||
}
|
||||
$defs{$eN}{READINGS}{$cmd}{VAL} = $param;
|
||||
$defs{$eN}{READINGS}{$cmd}{TIME} = "from archive";
|
||||
}
|
||||
@ -1704,31 +1707,35 @@ sub HMinfo_loadConfig($@) {####################################################
|
||||
}
|
||||
elsif($cmd eq "regBulk"){
|
||||
next if($param !~ m/RegL_0[0-9]:/);
|
||||
my $exp = CUL_HM_getAttrInt($eN,"expert");
|
||||
$param =~ s/\.RegL/RegL/;
|
||||
$param =~ s/RegL/\.RegL/ if ($exp != 2);
|
||||
$param = ".".$param if (!$defs{$eN}{helper}{expert}{raw});
|
||||
my ($reg,$data) = split(" ",$param,2);
|
||||
my @rla = CUL_HM_reglUsed($eN);
|
||||
next if (!$rla[0]);
|
||||
my $rl = join",",@rla;
|
||||
my $r2 = $reg;
|
||||
$r2 =~ s/^\.//;
|
||||
|
||||
next if ($rl !~ m/$r2/);
|
||||
|
||||
if ($data !~ m/00:00/){
|
||||
push @elincmpl,"$eN reg list:$reg";
|
||||
next;
|
||||
}
|
||||
$changes{$eN}{$reg}=$data if (!$defs{$eN}{READINGS}{$reg} ||
|
||||
$defs{$eN}{READINGS}{$reg}{VAL} !~ m/00:00/);
|
||||
|
||||
if ( !$defs{$eN}{READINGS}{$reg}
|
||||
|| $defs{$eN}{READINGS}{$reg}{VAL} !~ m/00:00/
|
||||
|| ( $timeStamp
|
||||
&& $timeStamp gt ReadingsTimestamp($eN,$reg,"1900-01-01 00:00:01")
|
||||
)){
|
||||
$changes{$eN}{$reg}{d}=$data;
|
||||
$changes{$eN}{$reg}{t}=$timeStamp;
|
||||
}
|
||||
}
|
||||
}
|
||||
close(rFile);
|
||||
foreach my $eN (keys %changes){
|
||||
foreach my $reg (keys %{$changes{$eN}}){
|
||||
$defs{$eN}{READINGS}{$reg}{VAL} = $changes{$eN}{$reg};
|
||||
$defs{$eN}{READINGS}{$reg}{TIME} = "from archive";
|
||||
$defs{$eN}{READINGS}{$reg}{VAL} = $changes{$eN}{$reg}{d};
|
||||
$defs{$eN}{READINGS}{$reg}{TIME} = $changes{$eN}{$reg}{t};
|
||||
my ($list,$pN) = ($1,$2) if ($reg =~ m/RegL_(..):(.*)/);
|
||||
next if (!$list);
|
||||
my $pId = CUL_HM_peerChId($pN,substr($defs{$eN}{DEF},0,6));
|
||||
@ -1765,8 +1772,9 @@ sub HMinfo_purgeConfig($) {####################################################
|
||||
my $line = $_;
|
||||
$line =~ s/\r//g;
|
||||
next if ( $line !~ m/set (.*) (peerBulk|regBulk) (.*)/
|
||||
&& $line !~ m/(setreading) .*/);#&& $line !~ m/(setreading|templateDef) .*/);
|
||||
my ($cmd,$eN,$typ,$p1,$p2) = split(" ",$line,5);
|
||||
&& $line !~ m/(setreading) .*/);
|
||||
my ($command,$timeStamp) = split("#",$line,2);
|
||||
my ($cmd,$eN,$typ,$p1,$p2) = split(" ",$command,5);
|
||||
if ($cmd eq "set" && $typ eq "regBulk"){
|
||||
$p1 =~ s/\.RegL_/RegL_/;
|
||||
$typ .= " $p1";
|
||||
@ -1775,7 +1783,7 @@ sub HMinfo_purgeConfig($) {####################################################
|
||||
elsif ($cmd eq "set" && $typ eq "peerBulk"){
|
||||
delete $purgeH{$eN}{$cmd}{regBulk};# regBulk needs to be rewritten
|
||||
}
|
||||
$purgeH{$eN}{$cmd}{$typ} = $p1;
|
||||
$purgeH{$eN}{$cmd}{$typ} = $p1.($timeStamp?"#$timeStamp":"");
|
||||
}
|
||||
close(aSave);
|
||||
open(aSave, ">$fName") || return("Can't open $fName: $!");
|
||||
@ -1906,6 +1914,30 @@ sub HMinfo_templateDef(@){#####################################################
|
||||
delete $HMConfig::culHmTpl{$name};
|
||||
return;
|
||||
}
|
||||
return "$name already defined, delete it first" if($HMConfig::culHmTpl{$name});
|
||||
if ($param eq "fromMaster"){#set hm templateDef <tmplName> fromMaster <master> <(peer:long|0)> <descr>
|
||||
my ($master,$pl) = ($desc,@regs);
|
||||
return "master $master not defined" if(!$defs{$master});
|
||||
@regs = ();
|
||||
if ($pl eq "0"){
|
||||
foreach my $rdN (grep !/^\.?R-.*-(sh|lg)/,grep /^\.?R-/,keys %{$defs{$master}{READINGS}}){
|
||||
my $rdP = $rdN;
|
||||
$rdP =~ s/^\.?R-//;
|
||||
push @regs,"$rdP:$defs{$master}{READINGS}{$rdN}{VAL}";
|
||||
}
|
||||
}
|
||||
else{
|
||||
my ($peer,$shlg) = split(":",$pl,2);
|
||||
$shlg = ($shlg eq "short"?"sh":($shlg eq "long"?"lg":""));
|
||||
foreach my $rdN (grep /^\.?R-$peer-$shlg/,keys %{$defs{$master}{READINGS}}){
|
||||
my $rdP = $rdN;
|
||||
$rdP =~ s/^\.?R-$peer-$shlg//;
|
||||
push @regs,"$rdP:$defs{$master}{READINGS}{$rdN}{VAL}";
|
||||
}
|
||||
}
|
||||
$param = "0";
|
||||
$desc = "from Master $name > $pl";
|
||||
}
|
||||
# get description if marked wir ""
|
||||
if ($desc =~ m/^"/){
|
||||
my $cnt = 0;
|
||||
@ -1918,7 +1950,6 @@ sub HMinfo_templateDef(@){#####################################################
|
||||
splice @regs,0,$cnt;
|
||||
}
|
||||
|
||||
return "$name already defined, delete it first" if($HMConfig::culHmTpl{$name});
|
||||
return "insufficient parameter" if(@regs < 1);
|
||||
|
||||
my $paramNo;
|
||||
@ -2018,16 +2049,16 @@ sub HMinfo_templateUsg(@){#####################################################
|
||||
my ($p,$t) = split(">",$tid);
|
||||
if($tFilter){
|
||||
if($tFilter eq "sortTemplate"){
|
||||
push @ul,sprintf("%20s|%-15s|%s|%s",$t,$dName,$p,$defs{$dName}{helper}{tmpl}{$tid});
|
||||
push @ul,sprintf("%-20s|%-15s|%s|%s",$t,$dName,$p,$defs{$dName}{helper}{tmpl}{$tid});
|
||||
}
|
||||
if($tFilter eq "sortPeer"){
|
||||
my ($pn,$ls) = split(":",$p);
|
||||
push @ul,sprintf("%20s|%-15s|%5s:%-20s|%s",$pn,$t,$ls,$dName,$defs{$dName}{helper}{tmpl}{$tid});
|
||||
push @ul,sprintf("%-20s|%-15s|%5s:%-20s|%s",$pn,$t,$ls,$dName,$defs{$dName}{helper}{tmpl}{$tid});
|
||||
}
|
||||
elsif($tFilter ne $t){
|
||||
next;}
|
||||
}
|
||||
else{ push @ul,sprintf("%20s|%-15s|%s|%s",$dName,$p,$t,$defs{$dName}{helper}{tmpl}{$tid});}
|
||||
else{ push @ul,sprintf("%-20s|%-15s|%s|%s",$dName,$p,$t,$defs{$dName}{helper}{tmpl}{$tid});}
|
||||
}
|
||||
}
|
||||
return join("\n",sort(@ul));
|
||||
|
Loading…
x
Reference in New Issue
Block a user