mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-13 17:26:34 +00:00
devspec: attr=value
git-svn-id: https://svn.fhem.de/fhem/trunk@335 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
d0c3f77b9e
commit
90f6cb6505
@ -478,9 +478,11 @@
|
|||||||
- feature: Removed msghist for multiple FHZ handling, IODev attribute added
|
- feature: Removed msghist for multiple FHZ handling, IODev attribute added
|
||||||
- bugfix: cut off string "(counter)" from fallback value in 13_KS300.pm
|
- bugfix: cut off string "(counter)" from fallback value in 13_KS300.pm
|
||||||
- feature: daily/monthly cumulated values for EMWZ/EMGZ/EMWM with 15_CUL_EM
|
- feature: daily/monthly cumulated values for EMWZ/EMGZ/EMWM with 15_CUL_EM
|
||||||
by Klaus
|
|
||||||
- feature: 01_FHEMWEB.pm: multiple room assignments
|
- feature: 01_FHEMWEB.pm: multiple room assignments
|
||||||
fixedrange with optional [day|week|month|year]
|
fixedrange with optional [day|week|month|year]
|
||||||
attr title and label for flexible .gplot files
|
attr title and label for flexible .gplot files
|
||||||
- feature: fhem.pl: attr global logdir used by wildcard %ld
|
- feature: fhem.pl: attr global logdir used by wildcard %ld
|
||||||
|
- feature: do not block on disconnected devices (FHZ/CM11/CUL)
|
||||||
|
- bugfix: deleting at definition in the at command
|
||||||
|
- bugfix: deleting a notify/at/watchdog definition in a notify/at/watchdog
|
||||||
|
- feature: devspec <attr>=<value>. E.g. set room=kitchen off; list disabled=
|
||||||
|
@ -225,8 +225,10 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
<li>a range of devices, separated by dash (-)</li>
|
<li>a range of devices, separated by dash (-)</li>
|
||||||
<li>a regular expression, if the the spec contains on e of the following
|
<li>a regular expression, if the the spec contains on e of the following
|
||||||
characters: ^*[]$</li>
|
characters: ^*[]$</li>
|
||||||
<li>an internal attribute of the device, followed by a colon and then a
|
<li>an attribute of the device, followed by an equal sign (=) and then a
|
||||||
regexp for this attribute. Known attributes are DEF, STATE and TYPE.</li>
|
regexp for this attribute. As attribute you can specify either attributes
|
||||||
|
set with the attr command or one of the "internal" attributes DEF, STATE
|
||||||
|
and TYPE.</li>
|
||||||
</ul>
|
</ul>
|
||||||
Example:
|
Example:
|
||||||
<ul>
|
<ul>
|
||||||
@ -236,8 +238,9 @@ A line ending with \ will be concatenated with the next one, so long lines
|
|||||||
<code>set lamp.* on</code><br>
|
<code>set lamp.* on</code><br>
|
||||||
<code>set lamp1-lamp3 on</code><br>
|
<code>set lamp1-lamp3 on</code><br>
|
||||||
<code>set lamp1-lamp3,lamp3 on</code><br>
|
<code>set lamp1-lamp3,lamp3 on</code><br>
|
||||||
<code>list DEF:1234.*</code><br>
|
<code>set room=kitchen off</code><br>
|
||||||
<code>list TYPE:FS20</code><br>
|
<code>list disabled=</code><br>
|
||||||
|
<code>list TYPE=FS20</code><br>
|
||||||
</ul>
|
</ul>
|
||||||
Notes:
|
Notes:
|
||||||
<ul>
|
<ul>
|
||||||
|
56
fhem/fhem.pl
56
fhem/fhem.pl
@ -45,6 +45,7 @@ sub AnalyzeInput($);
|
|||||||
sub AssignIoPort($);
|
sub AssignIoPort($);
|
||||||
sub CallFn(@);
|
sub CallFn(@);
|
||||||
sub CommandChain($$);
|
sub CommandChain($$);
|
||||||
|
sub CollectAttrNames();
|
||||||
sub DoClose($);
|
sub DoClose($);
|
||||||
sub Dispatch($$);
|
sub Dispatch($$);
|
||||||
sub FmtDateTime($);
|
sub FmtDateTime($);
|
||||||
@ -135,6 +136,7 @@ use vars qw(%cmds); # Global command name hash. To be expanded
|
|||||||
|
|
||||||
use vars qw($reread_active);
|
use vars qw($reread_active);
|
||||||
|
|
||||||
|
my %attrnames; # hash of attrnames needed by devspec2array
|
||||||
my $server; # Server socket
|
my $server; # Server socket
|
||||||
my $currlogfile; # logfile, without wildcards
|
my $currlogfile; # logfile, without wildcards
|
||||||
my $logopened = 0; # logfile opened or using stdout
|
my $logopened = 0; # logfile opened or using stdout
|
||||||
@ -149,7 +151,7 @@ my %intAt; # Internal at timer hash.
|
|||||||
my $nextat; # Time when next timer will be triggered.
|
my $nextat; # Time when next timer will be triggered.
|
||||||
my $intAtCnt=0;
|
my $intAtCnt=0;
|
||||||
my $AttrList = "room comment";
|
my $AttrList = "room comment";
|
||||||
my $cvsid = '$Id: fhem.pl,v 1.66 2009-01-15 09:13:42 rudolfkoenig Exp $';
|
my $cvsid = '$Id: fhem.pl,v 1.67 2009-01-17 10:01:56 rudolfkoenig Exp $';
|
||||||
my $namedef =
|
my $namedef =
|
||||||
"where <name> is either:\n" .
|
"where <name> is either:\n" .
|
||||||
"- a single device name\n" .
|
"- a single device name\n" .
|
||||||
@ -274,6 +276,7 @@ if($pfn) {
|
|||||||
print PID $$ . "\n";
|
print PID $$ . "\n";
|
||||||
close(PID);
|
close(PID);
|
||||||
}
|
}
|
||||||
|
CollectAttrNames();
|
||||||
$init_done = 1;
|
$init_done = 1;
|
||||||
|
|
||||||
Log 0, "Server started (version $attr{global}{version}, pid $$)";
|
Log 0, "Server started (version $attr{global}{version}, pid $$)";
|
||||||
@ -596,27 +599,36 @@ devspec2array($)
|
|||||||
my %knownattr = ( "DEF"=>1, "STATE"=>1, "TYPE"=>1 );
|
my %knownattr = ( "DEF"=>1, "STATE"=>1, "TYPE"=>1 );
|
||||||
|
|
||||||
my ($name) = @_;
|
my ($name) = @_;
|
||||||
|
|
||||||
return "" if(!defined($name));
|
return "" if(!defined($name));
|
||||||
return $name if(defined($defs{$name}));
|
return $name if(defined($defs{$name}));
|
||||||
my @ret;
|
|
||||||
|
|
||||||
if($name =~ m/(.*):(.*)/ && $knownattr{$1}) {
|
|
||||||
my $lattr = $1;
|
|
||||||
my $re = $2;
|
|
||||||
foreach my $l (sort keys %defs) {
|
|
||||||
push @ret, $l
|
|
||||||
if(!$re || ($defs{$l}{$lattr} && $defs{$l}{$lattr} =~ m/$re/));
|
|
||||||
}
|
|
||||||
return $name if(!@ret); # No match, return the input
|
|
||||||
return @ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
my ($isattr, @ret);
|
||||||
|
|
||||||
foreach my $l (split(",", $name)) { # List
|
foreach my $l (split(",", $name)) { # List
|
||||||
|
|
||||||
|
if($l =~ m/(.*)=(.*)/) {
|
||||||
|
my ($lattr,$re) = ($1, $2);
|
||||||
|
if($knownattr{$lattr}) {
|
||||||
|
foreach my $l (sort keys %defs) {
|
||||||
|
push @ret, $l
|
||||||
|
if($defs{$l}{$lattr} && (!$re || $defs{$l}{$lattr} =~ m/$re/));
|
||||||
|
}
|
||||||
|
} elsif($attrnames{$lattr}) {
|
||||||
|
foreach my $l (sort keys %attr) {
|
||||||
|
push @ret, $l
|
||||||
|
if($attr{$l}{$lattr} && (!$re || $attr{$l}{$lattr} =~ m/$re/));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$isattr = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
if($l =~ m/[*\[\]^\$]/) { # Regexp
|
if($l =~ m/[*\[\]^\$]/) { # Regexp
|
||||||
push @ret, grep($_ =~ m/$l/, sort keys %defs);
|
push @ret, grep($_ =~ m/$l/, sort keys %defs);
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($l =~ m/-/) { # Range
|
if($l =~ m/-/) { # Range
|
||||||
my ($lower, $upper) = split("-", $l, 2);
|
my ($lower, $upper) = split("-", $l, 2);
|
||||||
push @ret, grep($_ ge $lower && $_ le $upper, sort keys %defs);
|
push @ret, grep($_ ge $lower && $_ le $upper, sort keys %defs);
|
||||||
@ -625,7 +637,7 @@ devspec2array($)
|
|||||||
push @ret, $l;
|
push @ret, $l;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $name if(!@ret); # No match, return the input
|
return $name if(!@ret && !$isattr); # No match, return the input
|
||||||
return @ret;
|
return @ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1128,6 +1140,7 @@ CommandDeleteAttr($$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
CollectAttrNames();
|
||||||
|
|
||||||
return join("\n", @rets);
|
return join("\n", @rets);
|
||||||
}
|
}
|
||||||
@ -1436,6 +1449,7 @@ CommandAttr($$)
|
|||||||
$defs{$sdev}{IODev} = $defs{$a[2]} if($a[1] eq "IODev");
|
$defs{$sdev}{IODev} = $defs{$a[2]} if($a[1] eq "IODev");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
CollectAttrNames() if($init_done);
|
||||||
return join("\n", @rets);
|
return join("\n", @rets);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1455,6 +1469,7 @@ CommandDefaultAttr($$)
|
|||||||
} else {
|
} else {
|
||||||
$defaultattr{$a[0]} = $a[1];
|
$defaultattr{$a[0]} = $a[1];
|
||||||
}
|
}
|
||||||
|
CollectAttrNames() if($init_done);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2024,3 +2039,16 @@ Dispatch($$)
|
|||||||
|
|
||||||
return @found;
|
return @found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# Build the hash used by devspec2array
|
||||||
|
sub
|
||||||
|
CollectAttrNames()
|
||||||
|
{
|
||||||
|
%attrnames = ();
|
||||||
|
foreach my $d (keys %attr) {
|
||||||
|
foreach my $a (keys %{ $attr{$d} }) {
|
||||||
|
$attrnames{$a} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user