From 1331658303d529cdaf99be5b157559b97a3e56cb Mon Sep 17 00:00:00 2001 From: martinp876 <> Date: Fri, 30 Mar 2018 09:59:05 +0000 Subject: [PATCH] 98_HMinfo:templist file handling - support multi file entries again git-svn-id: https://svn.fhem.de/fhem/trunk@16520 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_HMinfo.pm | 94 ++++++++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/fhem/FHEM/98_HMinfo.pm b/fhem/FHEM/98_HMinfo.pm index 1fc486be1..c8bace712 100644 --- a/fhem/FHEM/98_HMinfo.pm +++ b/fhem/FHEM/98_HMinfo.pm @@ -775,6 +775,7 @@ sub HMinfo_tempList(@) { ###################################################### return "file: $fName error write:$err" if ($err); $ret = "incomplete data for ".join("\n ",@incmpl) if (scalar@incmpl); + HMinfo_listOfTempTemplates(); # refresh - maybe there are new entries in the files. } elsif ($action =~ m/(verify|restore)/){ $ret = HMinfo_tempListTmpl($hiN,$filter,"",$action,$fName); @@ -786,6 +787,7 @@ sub HMinfo_tempList(@) { ###################################################### } sub HMinfo_tempListTmpl(@) { ################################################## my ($hiN,$filter,$tmpl,$action,$fName)=@_; + Log 1,"General ----- $action:$fName"; $filter = "." if (!$filter); my %dl =("Sat"=>0,"Sun"=>1,"Mon"=>2,"Tue"=>3,"Wed"=>4,"Thu"=>5,"Fri"=>6); my $ret = ""; @@ -830,13 +832,12 @@ sub HMinfo_tempListTmplView() { ############################################### my %tlEntitys; $tlEntitys{$_}{v} = 1 foreach ((devspec2array("TYPE=CUL_HM:FILTER=model=HM-CC-RT.*:FILTER=chanNo=04") ,devspec2array("TYPE=CUL_HM:FILTER=model=.*-TC.*:FILTER=chanNo=02"))); - my $defFn = HMinfo_tempListDefFn(); - my @tlFiles = $defFn; + my ($n) = devspec2array("TYPE=HMinfo"); + my $defFn = HMinfo_tempListDefFns(); + my @tlFiles = split(";",$defFn); + $defFn = $defs{$n}{helper}{weekplanListDef}; - - my @tlFileMiss; - my @tNfound;# templates found in files - my @dWoTmpl;# Device not using templates + my @dWoTmpl; # Device not using templates foreach my $d (keys %tlEntitys){ my ($tf,$tn) = split(":",AttrVal($d,"tempListTmpl","empty")); ($tf,$tn) = ($defFn,$tf) if (!defined $tn); # no file given, switch parameter @@ -847,61 +848,61 @@ sub HMinfo_tempListTmplView() { ############################################### else{ push @tlFiles,$tf; $tlEntitys{$d}{t} = ("$tf:".($tn eq "empty"?$d:$tn)); + + $tlEntitys{$d}{c} = CUL_HM_tempListTmpl($d,"verify",$tlEntitys{$d}{t}); + if ($tlEntitys{$d}{c}){ + $tlEntitys{$d}{c} =~ s/\n//g; + } + else{ + $tlEntitys{$d}{c} = "ok" if !($tlEntitys{$d}{c}); + } } } @tlFiles = HMinfo_noDup(@tlFiles); + + my @tlFileMiss; foreach my $fName (@tlFiles){################################# my ($err,@RLines) = FileRead($fName); if ($err){ push @tlFileMiss,"$fName - $err"; next; } + } - push @tNfound,"$fName:"; - my $l = length($fName)+3; - my $spc = sprintf("%${l}s"," "); - foreach(@RLines){ - chomp; - my $line = $_; - $line =~ s/\r//g; - next if($line =~ m/#/); - if($line =~ m/^entities:/){ - $line =~s/.*://; - foreach my $eN (split(",",$line)){ - $eN =~ s/ //g; - push @tNfound,$spc."$eN"; - } - } - } - } - foreach my $d (keys %tlEntitys){ - $tlEntitys{$d}{c} = CUL_HM_tempListTmpl($d,"verify",$tlEntitys{$d}{t}); - if ($tlEntitys{$d}{c}){ - $tlEntitys{$d}{c} =~ s/\n//g; - } - else{ - $tlEntitys{$d}{c} = "ok" if !($tlEntitys{$d}{c}); - } + my @tNfound; # templates found in files + if ($defs{$n}{helper}{weekplanList}){ + push @tNfound, (map{(($_ =~ m/:/) ? $_ : " defaultFile: $_" )} @{$defs{hm}{helper}{weekplanList}}); } + #################################################### my $ret = ""; - $ret .= "\nfiles referenced but not found:\n " .join("\n => ",@tlFileMiss) if (@tlFileMiss); - $ret .= "\navailable templates\n " .join("\n " ,@tNfound) if (@tNfound); + $ret .= "\ndefault templatefile: $defFn\n "; + $ret .= "\nfiles referenced but not found:\n " .join("\n => ",sort @tlFileMiss) if (@tlFileMiss); + $ret .= "\navailable templates\n " .join("\n " ,sort @tNfound) if (@tNfound); + $ret .= "\n\n ---------components-----------\n template : device : state\n"; - $ret .= "\n " .join("\n " ,(sort map{"$tlEntitys{$_}{t} : $_ : $tlEntitys{$_}{c}" } keys %tlEntitys)); + $ret .= "\n " .join("\n " ,(sort map{s/$defFn:/ defaultFile: /;$_} + map{"$tlEntitys{$_}{t} : $_ : $tlEntitys{$_}{c}" } + keys %tlEntitys)); $ret .= "\ndevices not using tempList templates:\n => " .join("\n => ",@dWoTmpl) if (@dWoTmpl); return $ret; } -sub HMinfo_tempListDefFn(@) { ################################################# +sub HMinfo_tempListDefFns(@) { ################################################# my ($fn) = shift; $fn = "" if (!defined $fn); my ($n) = devspec2array("TYPE=HMinfo"); return HMinfo_getConfigFile($n,"configTempFile",$fn); } +sub HMinfo_tempListDefFn(@) { ################################################# + my $fn = HMinfo_tempListDefFns(@_); + $fn =~ s/;.*//; # only use first file - this is default + return $fn; +} sub HMinfo_listOfTempTemplates() { ############################################ # search all entries in tempListFile + # provide helper: weekplanList & weekplanListDef my ($n) =devspec2array("TYPE=HMinfo"); my $dir = AttrVal($n,"configDir","$attr{global}{modpath}/")."/"; #no dir? add defDir $dir = "./".$dir if ($dir !~ m/^(\.|\/)/); @@ -925,8 +926,10 @@ sub HMinfo_listOfTempTemplates() { ############################################ } } @tmpl = map{s/$tDefault//;$_} @tmpl; + $defs{$n}{helper}{weekplanListDef} = $tDefault; + $defs{$n}{helper}{weekplanListDef} =~ s/://; $defs{$n}{helper}{weekplanList} = \@tmpl; - my $at=$modules{CUL_HM}; + if ($modules{CUL_HM}{AttrList}){ my $l = "none,defaultWeekplan,".join(",",@tmpl); $modules{CUL_HM}{AttrList} =~ s/ tempListTmpl(.*? )/ tempListTmpl:$l /; @@ -1509,7 +1512,7 @@ sub HMinfo_SetFn($@) {######################################################### } $cmd = "?" if(!$cmd);# by default print options - if ($cmd =~ m/^clear[G]?/ ) {##actionImmediate: clear parameter-------------- + if ($cmd =~ m/^clear[G]?/ ) {##actionImmediate: clear parameter-------- my ($type) = @a; return "please enter what to clear" if (! $type); if ($type eq "msgStat" || $type eq "all" ){ @@ -1573,6 +1576,7 @@ sub HMinfo_SetFn($@) {######################################################### } elsif($cmd =~ m/tempList[G]?/){##handle thermostat templist from file ------- my $action = $a[0]?$a[0]:""; + HMinfo_listOfTempTemplates(); # refresh - maybe there are new entries in the files. if ( $action eq "genPlot"){#generatelog and gplot file $ret = HMinfo_tempListTmplGenLog($name,$a[1]); } @@ -1583,7 +1587,6 @@ sub HMinfo_SetFn($@) {######################################################### my $fn = HMinfo_tempListDefFn($a[1]); $ret = HMinfo_tempList($name,$filter,$action,$fn); } - HMinfo_listOfTempTemplates(); # execute post command - maybe there are new entries in the files. } elsif($cmd eq "templateExe"){##template: see if it applies ------------------ return HMinfo_templateExe($opt,$filter,@a); @@ -2103,17 +2106,20 @@ sub HMinfo_archConfigPost($) {################################################ return ; } -sub HMinfo_getConfigFile($$$) {################################################## +sub HMinfo_getConfigFile($$$) {################################################ my ($name,$configFile,$fnIn) = @_;#HmInfoName, ConfigFiletype my %defaultFN = ( configFilename => "regSave.cfg" ,configTempFile => "tempList.cfg" ); my $fn = $fnIn ? $fnIn : AttrVal($name,$configFile,$defaultFN{$configFile}); - - $fn = AttrVal($name,"configDir",".") ."\/".$fn if ($fn !~ m/\//); - $fn = AttrVal("global","modpath",".")."\/".$fn if ($fn !~ m/^\//); - return $fn; + my @fns;# my file names - coud be more + foreach my $fnt (split(";",$fn)){ + $fnt = AttrVal($name,"configDir",".") ."\/".$fnt if ($fnt !~ m/\//); + $fnt = AttrVal("global","modpath",".")."\/".$fnt if ($fnt !~ m/^\//); + push @fns,$fnt; + } + return join(";",@fns); } sub HMinfo_deviceReplace($$$){ @@ -3730,7 +3736,7 @@ sub HMinfo_noDup(@) {#return list with no duplicates########################### purgeConfig, loadConfig
-
  • configTempFile<,configTempFile2><,configTempFile2> +
  • configTempFile<,configTempFile2><,configTempFile3> Liste der Templfiles (weekplan) welche in HM berücksichtigt werden
    Die Files werden kommasepariert eingegeben. Das erste File ist der Default. Dessen Name muss beim Template nicht eingegeben werden.