2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

CUL_HM:templatehandling, expert attribut bugfix

git-svn-id: https://svn.fhem.de/fhem/trunk@9667 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2015-10-25 16:44:23 +00:00
parent 2592bba9de
commit de18ee7dba
2 changed files with 52 additions and 47 deletions

View File

@ -164,13 +164,12 @@ sub CUL_HM_Initialize($) {
."levelRange levelMap ";
$hash->{Attr}{glb} = "do_not_notify:1,0 showtime:1,0 "
."rawToReadable unit "#"KFM-Sensor" only
."expert:0_off,1_on,2_raw,3_all,4_none,8_templ+default,12_templOnly,255_anything "
."expert:0_off,1_on,2_raw,3_all,4_none,8_templ+default,12_templOnly,251_anything "
."param "
."actAutoTry:0_off,1_on "
."aesCommReq:1,0 " # IO will request AES if
;
$hash->{AttrList} =
$hash->{Attr}{glb}
$hash->{AttrList} = $hash->{Attr}{glb}
.$hash->{Attr}{dev}
.$hash->{Attr}{devPhy}
.$hash->{Attr}{chn}
@ -378,7 +377,7 @@ sub CUL_HM_updateConfig($){
foreach(keys %{$attr{$name}}){
delete $attr{$name}{$_} if(CUL_HM_AttrCheck($name,$_));
}
CUL_HM_chgExpLvl($hash);# need to update expert visib as of device
# -+-+-+-+-+ add default web-commands
my $webCmd;
$webCmd = AttrVal($name,"webCmd",undef);
@ -583,48 +582,7 @@ sub CUL_HM_Attr(@) {#################################
my $updtReq = 0;
if ($attrName eq "expert"){#[0,1,2]
$attr{$name}{$attrName} = $attrVal;
my $eHash = $defs{$name};
foreach my $tHash ((map{CUL_HM_id2Hash($_)} CUL_HM_getAssChnIds($name))
,$eHash){
my $exLvl = CUL_HM_getAttrInt($tHash->{NAME},"expert");
$tHash->{helper}{expert}{def} = (!($exLvl & 0x04))?1:0;#default register on
$tHash->{helper}{expert}{det} = ( ($exLvl & 0x01))?1:0;#detail register on
$tHash->{helper}{expert}{raw} = ( ($exLvl & 0x02))?1:0;#raw register on
$tHash->{helper}{expert}{tpl} = ( ($exLvl & 0x08))?1:0;#template on
my ($nTag,$grp);
if ($tHash->{helper}{expert}{def}){($nTag,$grp) = ("",".R-")}
else{ ($nTag,$grp) = (".","R-")}
foreach my $rdEntry (grep /^$grp/ ,keys %{$tHash->{READINGS}}){
my $reg = $rdEntry;
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-$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;
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$p-".$reg} = $tHash->{READINGS}{$rdEntry};
delete $tHash->{READINGS}{$rdEntry};
}
if ($tHash->{helper}{expert}{raw}){($nTag,$grp) = ("",".RegL_")}
else{ ($nTag,$grp) = (".","RegL_")}
foreach my $rdEntry (grep /^$grp/ ,keys %{$tHash->{READINGS}}){
my $reg = $rdEntry;
$reg =~ s/\.//;
$tHash->{READINGS}{$nTag.$reg} = $tHash->{READINGS}{$rdEntry};
delete $tHash->{READINGS}{$rdEntry};
}
CUL_HM_setTmplDisp($tHash);
}
CUL_HM_chgExpLvl($_) foreach ((map{CUL_HM_id2Hash($_)} CUL_HM_getAssChnIds($name)),$defs{$name});
}
elsif($attrName eq "actCycle"){#"000:00" or 'off'
if ($cmd eq "set"){
@ -6853,6 +6811,47 @@ sub CUL_HM_getRegFromStore($$$$@) {#read a register from backup data
}
return $convFlg.$data.$unit;
}
sub CUL_HM_chgExpLvl($){# update visibility and set internal values for expert
my $tHash = shift;
my $exLvl = CUL_HM_getAttrInt($tHash->{NAME},"expert");
$tHash->{helper}{expert}{def} = (!($exLvl & 0x04))?1:0;#default register on
$tHash->{helper}{expert}{det} = ( ($exLvl & 0x01))?1:0;#detail register on
$tHash->{helper}{expert}{raw} = ( ($exLvl & 0x02))?1:0;#raw register on
$tHash->{helper}{expert}{tpl} = ( ($exLvl & 0x08))?1:0;#template on
my ($nTag,$grp);
if ($tHash->{helper}{expert}{def}){($nTag,$grp) = ("",".R-")}
else{ ($nTag,$grp) = (".","R-")}
foreach my $rdEntry (grep /^$grp/ ,keys %{$tHash->{READINGS}}){
my $reg = $rdEntry;
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-$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;
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$p-".$reg} = $tHash->{READINGS}{$rdEntry};
delete $tHash->{READINGS}{$rdEntry};
}
if ($tHash->{helper}{expert}{raw}){($nTag,$grp) = ("",".RegL_")}
else{ ($nTag,$grp) = (".","RegL_")}
foreach my $rdEntry (grep /^$grp/ ,keys %{$tHash->{READINGS}}){
my $reg = $rdEntry;
$reg =~ s/\.//;
$tHash->{READINGS}{$nTag.$reg} = $tHash->{READINGS}{$rdEntry};
delete $tHash->{READINGS}{$rdEntry};
}
CUL_HM_setTmplDisp($tHash);
}
sub CUL_HM_setTmplDisp($){ # remove register i outdated
my $tHash = shift;
delete $tHash->{READINGS}{$_} foreach (grep /^tmpl_/ ,keys %{$tHash->{READINGS}});

View File

@ -2543,6 +2543,9 @@ sub HMinfo_noDup(@) {#return list with no duplicates###########################
Example<br>
<ul><code>
set hm templateDef SwOnCond level:cond "my description" CtValLo:p0 CtDlyOn:p1 CtOn:geLo<br>
set hm templateDef SwOnCond del # delete a template<br>
set hm templateDef SwOnCond fromMaster &lt;masterChannel&gt; &lt;peer:[long|short]&gt;# define a template with register as of the example<br>
set hm templateDef SwOnCond fromMaster myChannel peerChannel:long # <br>
</code></ul>
</li>
<li><a name="#HMinfotemplateSet">templateSet</a> &lt;entity&gt; &lt;template&gt; &lt;peer:[long|short]&gt; [&lt;param1&gt; ...]<br>
@ -2970,7 +2973,10 @@ sub HMinfo_noDup(@) {#return list with no duplicates###########################
<br>
Beispiel<br>
<ul><code>
set hm templateDef SwOnCond level:cond "my description" CtValLo:p0 CtDlyOn:p1 CtOn:geLo<br>
set hm templateDef SwOnCond level:cond "my description" CtValLo:p0 CtDlyOn:p1 CtOn:geLo<br>
set hm templateDef SwOnCond del # lösche template SwOnCond<br>
set hm templateDef SwOnCond fromMaster &lt;masterChannel&gt; &lt;peer:[long|short]&gt;# masterKanal mit peer wird als Vorlage genommen<br>
set hm templateDef SwOnCond fromMaster myChannel peerChannel:long <br>
</code></ul>
</li>
<li><a name="#HMinfotemplateSet">templateSet</a> &lt;entity&gt; &lt;template&gt; &lt;peer:[long|short]&gt; [&lt;param1&gt; ...]<br>