From de18ee7dba9af8937836d36dec66da59a11ecee9 Mon Sep 17 00:00:00 2001
From: martinp876 <>
Date: Sun, 25 Oct 2015 16:44:23 +0000
Subject: [PATCH] CUL_HM:templatehandling, expert attribut bugfix
git-svn-id: https://svn.fhem.de/fhem/trunk@9667 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/10_CUL_HM.pm | 91 +++++++++++++++++++++---------------------
fhem/FHEM/98_HMinfo.pm | 8 +++-
2 files changed, 52 insertions(+), 47 deletions(-)
diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm
index bc07b4696..53a60c29f 100755
--- a/fhem/FHEM/10_CUL_HM.pm
+++ b/fhem/FHEM/10_CUL_HM.pm
@@ -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}});
diff --git a/fhem/FHEM/98_HMinfo.pm b/fhem/FHEM/98_HMinfo.pm
index 8151e53e6..939afbee0 100644
--- a/fhem/FHEM/98_HMinfo.pm
+++ b/fhem/FHEM/98_HMinfo.pm
@@ -2543,6 +2543,9 @@ sub HMinfo_noDup(@) {#return list with no duplicates###########################
Example
set hm templateDef SwOnCond level:cond "my description" CtValLo:p0 CtDlyOn:p1 CtOn:geLo
+ set hm templateDef SwOnCond del # delete a template
+ set hm templateDef SwOnCond fromMaster <masterChannel> <peer:[long|short]># define a template with register as of the example
+ set hm templateDef SwOnCond fromMaster myChannel peerChannel:long #
- set hm templateDef SwOnCond level:cond "my description" CtValLo:p0 CtDlyOn:p1 CtOn:geLo
+ set hm templateDef SwOnCond level:cond "my description" CtValLo:p0 CtDlyOn:p1 CtOn:geLo
+ set hm templateDef SwOnCond del # lösche template SwOnCond
+ set hm templateDef SwOnCond fromMaster <masterChannel> <peer:[long|short]># masterKanal mit peer wird als Vorlage genommen
+ set hm templateDef SwOnCond fromMaster myChannel peerChannel:long