2
0
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:
martinp876 2015-10-25 13:28:26 +00:00
parent f936668d8a
commit 8b8de63308
2 changed files with 72 additions and 31 deletions

View File

@ -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

View File

@ -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));