2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

HMtemplate:add command overview

git-svn-id: https://svn.fhem.de/fhem/trunk@17839 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2018-11-25 10:51:55 +00:00
parent 195ebc50f3
commit 0f0a14bba5

View File

@ -49,6 +49,19 @@ my %HtState =(
]} ]}
); );
my %cmdDesc =(
select =>{param=>["name" ] ,desc=>"choose a template for assign "}
,dismiss =>{param=>["-" ] ,desc=>"remove template selection (opposit of select)"}
,defTmpl =>{param=>["name" ] ,desc=>"define a new template"}
,delete =>{param=>["name" ] ,desc=>"delete a template"}
,edit =>{param=>["name" ] ,desc=>"edit a template"}
,importReg =>{param=>["entity" ] ,desc=>"import register from a CUL_HM entity to start generatng a template"}
,save =>{param=>["-" ] ,desc=>"save the template"}
,saveAs =>{param=>["filename" ] ,desc=>"save the template under a new name"}
,assign =>{param=>["-" ] ,desc=>"assign the template to a CUL_HM entity defined in attributes"}
,unassign =>{param=>["entity","peer"] ,desc=>"remove the template assignment from a CUL_HM entity"}
);
sub HMtemplate_Initialize($$) {################################################ sub HMtemplate_Initialize($$) {################################################
my ($hash) = @_; my ($hash) = @_;
@ -263,7 +276,7 @@ sub HMtemplate_GetFn($@) {#####################################################
$cmd = "?" if(!$cmd);# by default print options $cmd = "?" if(!$cmd);# by default print options
#------------ statistics --------------- #------------ statistics ---------------
if($cmd eq "defineCmd"){##print protocol-events------------------------- if ($cmd eq "defineCmd"){##print protocol-events-------------------------
my ($tN) = @a; my ($tN) = @a;
return "template not given" if(!defined $tN); return "template not given" if(!defined $tN);
return "template unknown $tN" if(!defined $culHmTpl->{$tN}); return "template unknown $tN" if(!defined $culHmTpl->{$tN});
@ -274,7 +287,7 @@ sub HMtemplate_GetFn($@) {#####################################################
." ".join(" ",map{$_.=":".$culHmTpl->{$tN}{reg}{$_}} keys %{$culHmTpl->{$tN}{reg}}) ." ".join(" ",map{$_.=":".$culHmTpl->{$tN}{reg}{$_}} keys %{$culHmTpl->{$tN}{reg}})
; ;
} }
elsif($cmd eq "regInfo"){##print protocol-events------------------------- elsif($cmd eq "regInfo") {##print protocol-events-------------------------
my @regArr = map { $_ =~ s/Reg_//g; $_ } my @regArr = map { $_ =~ s/Reg_//g; $_ }
grep /^Reg_/,keys %{$attr{$name}}; grep /^Reg_/,keys %{$attr{$name}};
if (InternalVal($name,"tpl_type","") =~ m/peer-(short|long)/){ if (InternalVal($name,"tpl_type","") =~ m/peer-(short|long)/){
@ -282,9 +295,26 @@ sub HMtemplate_GetFn($@) {#####################################################
} }
return CUL_HM_getRegInfo($name); # return CUL_HM_getRegInfo($name); #
} }
elsif($cmd eq "cmdList") {##print protocol-events-------------------------
#select : choose a template to assign it to an entity
my %cmdInfo;
foreach my $s(keys %HtState){
foreach(@{$HtState{$s}{cmd}}){
$cmdInfo{$_}{state}{$HtState{$s}{name}} = 1;
}
}
my $ret = "under construction\n";
foreach(sort keys %cmdInfo){
$ret .= "\n $_: $cmdDesc{$_}{desc}\n";
$ret .= " param: ".join(", ",@{$cmdDesc{$_}{param}})."\n";
$ret .= " available in state: ".join(",",sort keys %{$cmdInfo{$_}{state}});#join(",",sort keys %{$cmdInfo{$_}{state}});
}
return $ret;
}
else{ else{
my @cmdLst = ( "defineCmd" my @cmdLst = ( "defineCmd"
,"regInfo" ,"regInfo"
,"cmdList"
); );
my $tList = ":".join(",",sort keys%{$culHmTpl}); my $tList = ":".join(",",sort keys%{$culHmTpl});
@ -309,7 +339,7 @@ sub HMtemplate_SetFn($@) {#####################################################
return "$tName is not defined" if (! defined $culHmTpl->{$tName}); return "$tName is not defined" if (! defined $culHmTpl->{$tName});
${$eSt} = "s0"; ${$eSt} = "s0";
if (eval "defined(&HMinfo_templateMark)"){ if (eval "defined(&HMinfo_templateMark)"){
HMinfo_templateDef($tName,"del"); return HMinfo_templateDef($tName,"del");
} }
else{ else{
return "HMInfo is not defined"; return "HMInfo is not defined";
@ -359,16 +389,10 @@ sub HMtemplate_SetFn($@) {#####################################################
my @r = keys %{$culHmTpl->{$templ}{reg}}; my @r = keys %{$culHmTpl->{$templ}{reg}};
################### maybe store type in template hash########## ################### maybe store type in template hash##########
my $tType; # first reg is same as all. check if peer is required or it is used in
foreach my $rN (@r){ my $tType = ($culHmRegDef->{$r[0]}{p} eq "n" ? "basic"
if ($culHmRegDefLS->{$rN}){# template for short/long :($culHmRegDefLS->{$r[0]} ? "peer-Long"
$tType = "peer-Long"; : "peer-both"));
}
elsif ($culHmRegDef->{$rN}){
if($culHmRegDef->{$rN}{l} eq 3){$tType = "peer-both"}
else{ $tType = "basic"; }
}
}
################### ###################
#### find matching entities ########## #### find matching entities ##########
my @e = HMtemplate_sourceList($tType); my @e = HMtemplate_sourceList($tType);
@ -399,7 +423,7 @@ sub HMtemplate_SetFn($@) {#####################################################
} }
} }
} }
elsif ($cmd eq "assign" ) {# elsif ($cmd eq "assign" ) {#
my @p = split(" ",$culHmTpl->{$hash->{tpl_Name}}{p});## get params in correct order my @p = split(" ",$culHmTpl->{$hash->{tpl_Name}}{p});## get params in correct order
$_ = $attr{$name}{"tpl_param_$_"} foreach (@p); $_ = $attr{$name}{"tpl_param_$_"} foreach (@p);
return HMinfo_templateSet( $attr{$name}{tpl_entity} return HMinfo_templateSet( $attr{$name}{tpl_entity}
@ -409,7 +433,7 @@ sub HMtemplate_SetFn($@) {#####################################################
,@p ,@p
); );
} }
elsif ($cmd eq "unassign" ) {# General - still open elsif ($cmd eq "unassign" ) {#
my ($entityName,$entityPeer) = split(";",$a[0]); my ($entityName,$entityPeer) = split(";",$a[0]);
return HMinfo_templateDel( $entityName return HMinfo_templateDel( $entityName
@ -476,7 +500,7 @@ sub HMtemplate_SetFn($@) {#####################################################
elsif ($cmd eq "save" ) {# elsif ($cmd eq "save" ) {#
my $tName = $hash->{tpl_Name}; my $tName = $hash->{tpl_Name};
if (eval "defined(&HMinfo_templateMark)"){ if (eval "defined(&HMinfo_templateMark)"){
HMinfo_templateDef($tName,"del");# overwrite means: delete and write! HMinfo_templateDef($tName,"delForce");# overwrite means: delete and write!
return HMtemplate_save($name,$tName); return HMtemplate_save($name,$tName);
} }
else{ else{
@ -515,14 +539,14 @@ sub HMtemplate_SetFn($@) {#####################################################
$hash->{"tpl_Info".$i++}= $_ foreach (@{$HtState{${$eSt}}{info}}); $hash->{"tpl_Info".$i++}= $_ foreach (@{$HtState{${$eSt}}{info}});
return $ret; return $ret;
} }
sub HMtemplate_intersection($$) {# sub HMtemplate_intersection($$) {##############################################
my ($x, $y) = @_; my ($x, $y) = @_;
my %seen; my %seen;
@seen{ @$x } = (1) x @$x; @seen{ @$x } = (1) x @$x;
return grep { $seen{ $_} } @$y; return grep { $seen{ $_} } @$y;
} }
sub HMtemplate_import(@){#################################################### sub HMtemplate_import(@){######################################################
my ($name,$eName,$tType,$tPeer) = @_; my ($name,$eName,$tType,$tPeer) = @_;
my @regReads; my @regReads;
my ($ty,$match) = ("",""); my ($ty,$match) = ("","");
@ -584,7 +608,7 @@ sub HMtemplate_init(@) {#
delete $attr{$name}{$_} foreach(grep /^tpl_/,keys %{$attr{$name}});#clean the settings delete $attr{$name}{$_} foreach(grep /^tpl_/,keys %{$attr{$name}});#clean the settings
$modules{HMtemplate}{AttrList} = $hash->{helper}{attrList}; $modules{HMtemplate}{AttrList} = $hash->{helper}{attrList};
} }
sub HMtemplate_noDup(@) {#return list with no duplicates########################### sub HMtemplate_noDup(@) {#return list with no duplicates#######################
my %all; my %all;
return "" if (scalar(@_) == 0); return "" if (scalar(@_) == 0);
$all{$_}=0 foreach (grep {defined($_)} @_); $all{$_}=0 foreach (grep {defined($_)} @_);
@ -595,12 +619,13 @@ sub HMtemplate_noDup(@) {#return list with no duplicates########################
sub HMtemplate_sourceList($){ sub HMtemplate_sourceList($){
my $type = shift; my $type = shift;
my $match; my $match;
if ($type =~ m/peer-(Long|Short|both)/){$match = "RegL_03"} if ($type =~ m/peer-(Long|Short)/){$match = "RegL_03.*"}
elsif($type eq "basic" ){$match = "RegL_(01|00)"} elsif($type =~ m/peer/ ){$match = "RegL_..\..*"}
elsif($type eq "basic" ){$match = "RegL_..\."}
my @list; my @list;
foreach my $e (devspec2array("TYPE=CUL_HM:FILTER=subType!=virtual")){ foreach my $e (devspec2array("TYPE=CUL_HM:FILTER=subType!=virtual")){
my @l1 = grep/$match/,CUL_HM_reglUsed($e); my @l1 = grep/$match$/,CUL_HM_reglUsed($e);
$_ = $e foreach(@l1); $_ = $e foreach(@l1);
push @list,@l1; push @list,@l1;
} }