mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 01:46:08 +00:00
HM_Template:improve Editor
git-svn-id: https://svn.fhem.de/fhem/trunk@14462 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
371a7ca263
commit
b3c2fc8277
@ -17,36 +17,36 @@ sub HMtemplate_noDup(@);
|
|||||||
use Blocking;
|
use Blocking;
|
||||||
use HMConfig;
|
use HMConfig;
|
||||||
my %HtState =(
|
my %HtState =(
|
||||||
s0=>{name=>"init" ,cmd=>["defTmpl","edit","delete","select"] ,info=>[ "delete to remove a template definition"
|
s0=>{name=>"init" ,cmd=>["select" ,"defTmpl","delete","edit"] ,info=>[ "delete to remove a template definition"
|
||||||
,"defTmpl to greate a template"
|
,"defTmpl to greate a template"
|
||||||
,"- use an entity as default"
|
,"- use an entity as default"
|
||||||
,"edit to modify a template definition"
|
,"edit to modify a template definition"
|
||||||
,"select to apply a template to a entity"
|
,"select to apply a template to a entity"
|
||||||
]}
|
]}
|
||||||
,s1=>{name=>"edit" ,cmd=>["dismiss","save","saveAs"] ,info=>[ "change attr Reg_ as desired"
|
,s1=>{name=>"edit" ,cmd=>["dismiss","save" ,"saveAs","importReg"] ,info=>[ "change attr Reg_ as desired"
|
||||||
,"change attr tpl_params as desired"
|
,"change attr tpl_params ':' separated"
|
||||||
,"save if finished"
|
,"save if finished"
|
||||||
,"saveAs to create a copy"
|
,"saveAs to create a copy"
|
||||||
,"dismiss will reset HMtemplate"
|
,"dismiss will reset HMtemplate"
|
||||||
]}
|
]}
|
||||||
,s2=>{name=>"defTmpl",cmd=>["dismiss","save","saveAs"] ,info=>[ "1)set attr tpl_type"
|
,s2=>{name=>"defTmpl",cmd=>["dismiss","save","saveAs"] ,info=>[ "1)set attr tpl_type"
|
||||||
,"2)set attr tpl_source"
|
,"2)set attr tpl_source"
|
||||||
,"3)set attr tpl_peer if peer required"
|
,"3)set attr tpl_peer if peer required"
|
||||||
,"4)set attr tpl_params if params are desired"
|
,"4)set attr tpl_params ':' separated"
|
||||||
,"5)set attr tpl_description for the template"
|
,"5)set attr tpl_description for the template"
|
||||||
]}
|
]}
|
||||||
,s3=>{name=>"defTmpl",cmd=>["defTmpl","edit","delete"] ,info=>[ "delete"
|
,s3=>{name=>"defTmpl",cmd=>["defTmpl","edit" ,"delete"] ,info=>[ "delete"
|
||||||
]}
|
]}
|
||||||
,s4=>{name=>"select" ,cmd=>["dismiss","apply"] ,info=>[ "apply the selected template to an entity"
|
,s4=>{name=>"select" ,cmd=>["dismiss","apply" ,"select"] ,info=>[ "apply the selected template to an entity"
|
||||||
,"1) choose target entity"
|
,"1) choose target entity"
|
||||||
,"2) select a peer if required"
|
,"2) select a peer if required"
|
||||||
,"3) select type if required"
|
,"3) select type if required"
|
||||||
,"4) fill all attr tpl_param_"
|
,"4) fill all attr tpl_param_"
|
||||||
,"5) set apply to execute and write the register"
|
,"5) set apply to execute and write the register"
|
||||||
]}
|
]}
|
||||||
,s5=>{name=>"defTmpl",cmd=>["defTmpl","edit","delete"] ,info=>[ "s5 info1"
|
,s5=>{name=>"defTmpl",cmd=>["defTmpl","edit" ,"delete"] ,info=>[ "s5 info1"
|
||||||
,"s5 info2"
|
,"s5 info2"
|
||||||
]}
|
]}
|
||||||
);
|
);
|
||||||
|
|
||||||
sub HMtemplate_Initialize($$) {################################################
|
sub HMtemplate_Initialize($$) {################################################
|
||||||
@ -229,13 +229,24 @@ 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-------------------------
|
||||||
|
my @regArr = map { $_ =~ s/Reg_//g; $_ }
|
||||||
|
grep /^Reg_/,keys %{$attr{$name}};
|
||||||
|
if (InternalVal($name,"tpl_type","" =~ m/peer-(short|long)/)){
|
||||||
|
$_ = "lg".$_ foreach (@regArr);
|
||||||
|
}
|
||||||
|
return CUL_HM_getRegInfo(\@regArr,1,1); #
|
||||||
|
}
|
||||||
else{
|
else{
|
||||||
my @cmdLst = ( "defineCmd"
|
my @cmdLst = ( "defineCmd"
|
||||||
|
,"regInfo"
|
||||||
);
|
);
|
||||||
|
|
||||||
my $tList = ":".join(",",sort keys%{$culHmTpl});
|
my $tList = ":".join(",",sort keys%{$culHmTpl});
|
||||||
$_ .=$tList foreach(grep/^(defineCmd)$/,@cmdLst);
|
$_ .=$tList foreach(grep/^(defineCmd)$/,@cmdLst);
|
||||||
|
|
||||||
|
$_ .=":noArg" foreach(grep/^(regInfo)$/,@cmdLst);# no arguments
|
||||||
|
|
||||||
$ret = "Unknown argument $cmd, choose one of ".join (" ",sort @cmdLst);
|
$ret = "Unknown argument $cmd, choose one of ".join (" ",sort @cmdLst);
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
@ -267,7 +278,7 @@ sub HMtemplate_SetFn($@) {#####################################################
|
|||||||
}
|
}
|
||||||
elsif ($cmd eq "defTmpl" ) {#
|
elsif ($cmd eq "defTmpl" ) {#
|
||||||
my ($tName) = @a;
|
my ($tName) = @a;
|
||||||
return "spezify template name" if (!defined $tName);
|
return "specify template name" if (!defined $tName);
|
||||||
return "$tName is already defined" if (defined $culHmTpl->{$tName});
|
return "$tName is already defined" if (defined $culHmTpl->{$tName});
|
||||||
readingsSingleUpdate($hash,"state","define",0);
|
readingsSingleUpdate($hash,"state","define",0);
|
||||||
${$eSt}="s2";
|
${$eSt}="s2";
|
||||||
@ -353,6 +364,38 @@ sub HMtemplate_SetFn($@) {#####################################################
|
|||||||
,@p
|
,@p
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
elsif ($cmd eq "importReg" ){#
|
||||||
|
my ($eName) = @a;
|
||||||
|
|
||||||
|
return "please enter a device to be used "if(!$eName);
|
||||||
|
my @fnd = grep /^$eName /,
|
||||||
|
map {$hash->{READINGS}{$_}{VAL}}
|
||||||
|
grep /^usage_/,keys %{$hash->{READINGS}};
|
||||||
|
return "template not assigned to $eName" if (scalar(@fnd) != 1);
|
||||||
|
|
||||||
|
HMtemplate_import($name,$eName,InternalVal($name,"tpl_type",""),InternalVal($name,"tpl_peer",""));
|
||||||
|
|
||||||
|
# my @fnd = map { $_ =~ s/ .*//g; $_ }
|
||||||
|
# map {$hash->{READINGS}{$_}{VAL}}
|
||||||
|
# grep /^usage_/,keys %{$hash->{READINGS}};
|
||||||
|
# my @reg;
|
||||||
|
# my $first = 1;
|
||||||
|
# foreach my $d(@fnd){
|
||||||
|
# my $dHash = CUL_HM_getDeviceHash($defs{$d});
|
||||||
|
# my $st = AttrVal($dHash->{NAME},"subType","");
|
||||||
|
# my $md = AttrVal($dHash->{NAME},"model","");
|
||||||
|
# my @dr = (CUL_HM_getRegN($st,$md,"01"));
|
||||||
|
#
|
||||||
|
# if ($first){
|
||||||
|
# @reg = @dr;
|
||||||
|
# $first = 0;
|
||||||
|
# }
|
||||||
|
# else{
|
||||||
|
# @reg = HMtemplate_intersection(\@reg,\@dr);
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# return join("\n",sort @reg);
|
||||||
|
}
|
||||||
elsif ($cmd eq "edit" ) {#
|
elsif ($cmd eq "edit" ) {#
|
||||||
my ($templ) = @a;
|
my ($templ) = @a;
|
||||||
return "$templ is not defined" if (! defined $culHmTpl->{$templ});
|
return "$templ is not defined" if (! defined $culHmTpl->{$templ});
|
||||||
@ -414,9 +457,18 @@ sub HMtemplate_SetFn($@) {#####################################################
|
|||||||
return HMtemplate_save($name,$tName);
|
return HMtemplate_save($name,$tName);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
#"select","edit","delete", "defTmpl","dismiss","save","saveAs","importReg","apply"]
|
||||||
my @cmdLst = @{$HtState{${$eSt}}{cmd}};
|
my @cmdLst = @{$HtState{${$eSt}}{cmd}};
|
||||||
my $tList = ":".join(",",sort keys%{$culHmTpl});
|
my $tList = ":".join(",",sort keys%{$culHmTpl});
|
||||||
$_ .=$tList foreach(grep/^(edit|delete|select)$/,@cmdLst);
|
$_ .=$tList foreach(grep/^(edit|delete|select)$/,@cmdLst);
|
||||||
|
if (grep/^importReg$/,@cmdLst){
|
||||||
|
my @fnd = map { $_ =~ s/ .*//g; $_ }
|
||||||
|
map {$hash->{READINGS}{$_}{VAL}}
|
||||||
|
grep /^usage_/,keys %{$hash->{READINGS}};
|
||||||
|
my $eList = ":".join(",",sort @fnd);
|
||||||
|
$_ .=$eList foreach(grep/^(importReg)$/,@cmdLst);
|
||||||
|
}
|
||||||
|
$_ .=":noArg" foreach(grep/^(save|dismiss|apply)$/,@cmdLst);# no arguments
|
||||||
|
|
||||||
$ret = "Unknown argument $cmd, choose one of ".join (" ",sort @cmdLst);
|
$ret = "Unknown argument $cmd, choose one of ".join (" ",sort @cmdLst);
|
||||||
}
|
}
|
||||||
@ -425,13 +477,19 @@ 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($$) {#
|
||||||
|
my ($x, $y) = @_;
|
||||||
|
my %seen;
|
||||||
|
@seen{ @$x } = (1) x @$x;
|
||||||
|
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) = ("","");
|
||||||
if ($tType eq "basic"){
|
if ($tType eq "basic"){
|
||||||
@regReads = grep !/\-.*\-/ ,grep /\.?R-/,keys %{$defs{$eName}{READINGS}};
|
@regReads = grep !/\-.*\-/ ,grep /\.?R-/ ,keys %{$defs{$eName}{READINGS}};
|
||||||
}
|
}
|
||||||
elsif ($tType =~ m/peer-(Long|Short)/){
|
elsif ($tType =~ m/peer-(Long|Short)/){
|
||||||
$ty = $1 eq "Long" ? "lg" : "sh";
|
$ty = $1 eq "Long" ? "lg" : "sh";
|
||||||
@ -440,16 +498,18 @@ sub HMtemplate_import(@){####################################################
|
|||||||
}
|
}
|
||||||
elsif ($tType eq "peer-both"){
|
elsif ($tType eq "peer-both"){
|
||||||
$match = ".*-";
|
$match = ".*-";
|
||||||
@regReads = grep /\-.*\-/ ,grep /\.?R-$tPeer/,keys %{$defs{$eName}{READINGS}};
|
@regReads = grep /\-.*\-/ ,grep /\.?R-$tPeer/,keys %{$defs{$eName}{READINGS}};
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $rR (@regReads){
|
foreach my $rR (@regReads){
|
||||||
my $rN = $rR;
|
my $rN = $rR;
|
||||||
$rN =~ s/\.?R-$match$ty//;
|
$rN =~ s/\.?R-$match$ty//;
|
||||||
$attr{$name}{"Reg_".$rN} = $defs{$eName}{READINGS}{$rR}{VAL};
|
if (!$attr{$name}{"Reg_".$rN}){ #dont overwrite existing
|
||||||
$attr{$name}{"Reg_".$rN} =~ s/ .*//;# remove units which are in the readings
|
$attr{$name}{"Reg_".$rN} = $defs{$eName}{READINGS}{$rR}{VAL};
|
||||||
my $lits = ":".join(",",(sort (keys %{$culHmRegDef->{$ty.$rN}{lit}}))) if ($culHmRegDef->{$ty.$rN}{c} eq "lit");
|
$attr{$name}{"Reg_".$rN} =~ s/ .*//;# remove units which are in the readings
|
||||||
$modules{HMtemplate}{AttrList} .= " Reg_".$rN.$lits;
|
my $lits = ":".join(",",(sort (keys %{$culHmRegDef->{$ty.$rN}{lit}}))) if ($culHmRegDef->{$ty.$rN}{c} eq "lit");
|
||||||
|
$modules{HMtemplate}{AttrList} .= " Reg_".$rN.$lits;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user