mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
98_DOIF.pm: ^INITIALIZED$, a s() format for aggregate
git-svn-id: https://svn.fhem.de/fhem/trunk@14112 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
3e2bf4df25
commit
81881e7d58
@ -253,6 +253,7 @@ AggrIntDoIf
|
|||||||
my $average;
|
my $average;
|
||||||
my $extrem;
|
my $extrem;
|
||||||
my $name;
|
my $name;
|
||||||
|
my $devname;
|
||||||
my $err;
|
my $err;
|
||||||
my $ret;
|
my $ret;
|
||||||
my $result;
|
my $result;
|
||||||
@ -264,13 +265,13 @@ AggrIntDoIf
|
|||||||
my $warning=0;
|
my $warning=0;
|
||||||
my $mode=substr($modeType,0,1);
|
my $mode=substr($modeType,0,1);
|
||||||
my $type;
|
my $type;
|
||||||
my $dec;
|
my $format;
|
||||||
my $place;
|
my $place;
|
||||||
my $number;
|
my $number;
|
||||||
|
|
||||||
if ($modeType =~ /.(sum|average|max|min)?[:]?(d(\d)?)?/) {
|
if ($modeType =~ /.(sum|average|max|min)?[:]?(?:(a|d)?(\d)?)?/) {
|
||||||
$type = (defined $1)? $1 : "";
|
$type = (defined $1)? $1 : "";
|
||||||
$dec= $2;
|
$format= (defined $2)? $2 : "";
|
||||||
$place= $3;
|
$place= $3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,31 +325,36 @@ AggrIntDoIf
|
|||||||
} else {
|
} else {
|
||||||
$ret=1;
|
$ret=1;
|
||||||
}
|
}
|
||||||
|
if ($format eq "a") {
|
||||||
|
$devname=AttrVal($name,"alias",$name);
|
||||||
|
} else {
|
||||||
|
$devname=$name;
|
||||||
|
}
|
||||||
if ($ret) {
|
if ($ret) {
|
||||||
if ($type eq ""){
|
if ($type eq ""){
|
||||||
$num++;
|
$num++;
|
||||||
push (@devices,$name);
|
push (@devices,$devname);
|
||||||
} elsif (defined $value) {
|
} elsif (defined $value) {
|
||||||
if ($type eq "sum" or $type eq "average") {
|
if ($type eq "sum" or $type eq "average") {
|
||||||
$num++;
|
$num++;
|
||||||
push (@devices,$name);
|
push (@devices,$devname);
|
||||||
$sum+=$number;
|
$sum+=$number;
|
||||||
} elsif ($type eq "max") {
|
} elsif ($type eq "max") {
|
||||||
if (!defined $extrem or $number>$extrem) {
|
if (!defined $extrem or $number>$extrem) {
|
||||||
$extrem=$number;
|
$extrem=$number;
|
||||||
@devices=($name);
|
@devices=($devname);
|
||||||
}
|
}
|
||||||
} elsif ($type eq "min") {
|
} elsif ($type eq "min") {
|
||||||
if (!defined $extrem or $number<$extrem) {
|
if (!defined $extrem or $number<$extrem) {
|
||||||
$extrem=$number;
|
$extrem=$number;
|
||||||
@devices=($name);
|
@devices=($devname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete ($defs{$hash->{NAME}}{READINGS}{warning_aggr}) if ($warning==0);
|
delete ($defs{$hash->{NAME}}{READINGS}{warning_aggr}) if (defined $hash and $warning==0);
|
||||||
|
|
||||||
if ($type eq "max" or $type eq "min") {
|
if ($type eq "max" or $type eq "min") {
|
||||||
$extrem=0 if (!defined $extrem);
|
$extrem=0 if (!defined $extrem);
|
||||||
@ -363,7 +369,7 @@ AggrIntDoIf
|
|||||||
$result=$num;
|
$result=$num;
|
||||||
}
|
}
|
||||||
if ($mode eq "#") {
|
if ($mode eq "#") {
|
||||||
if (defined $dec) {
|
if ($format eq "d") {
|
||||||
$result = ($result =~ /(-?\d+(\.\d+)?)/ ? $1 : 0);
|
$result = ($result =~ /(-?\d+(\.\d+)?)/ ? $1 : 0);
|
||||||
$result = round ($result,$place) if (defined $place);
|
$result = round ($result,$place) if (defined $place);
|
||||||
}
|
}
|
||||||
@ -394,10 +400,14 @@ AggregateDoIf
|
|||||||
my ($hash,$modeType,$device,$reading,$cond,$default)=@_;
|
my ($hash,$modeType,$device,$reading,$cond,$default)=@_;
|
||||||
my $mode=substr($modeType,0,1);
|
my $mode=substr($modeType,0,1);
|
||||||
my $type=substr($modeType,1);
|
my $type=substr($modeType,1);
|
||||||
|
my $splittoken=",";
|
||||||
|
if ($modeType =~ /.(?:sum|average|max|min)?[:]?[^s]*(?:s\((.*)\))?/) {
|
||||||
|
$splittoken=$1 if (defined $1);
|
||||||
|
}
|
||||||
if ($mode eq "#") {
|
if ($mode eq "#") {
|
||||||
return (AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default));
|
return (AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default));
|
||||||
} elsif ($mode eq "@") {
|
} elsif ($mode eq "@") {
|
||||||
return (join (",",AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default)));
|
return (join ($splittoken,AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default)));
|
||||||
}
|
}
|
||||||
return ("");
|
return ("");
|
||||||
}
|
}
|
||||||
@ -2815,7 +2825,7 @@ Die Angabe des Readings kann weggelassen werden, dann wird lediglich nach entspr
|
|||||||
<br>
|
<br>
|
||||||
Syntax:<br>
|
Syntax:<br>
|
||||||
<br>
|
<br>
|
||||||
<code>[<function>:"<regex device>:<regex event>":<reading>:<condition>,<default>]</code><br>
|
<code>[<function>:<format>:"<regex device>:<regex event>":<reading>:<condition>,<default>]</code><br>
|
||||||
<br>
|
<br>
|
||||||
<function>:<br>
|
<function>:<br>
|
||||||
<br>
|
<br>
|
||||||
@ -2828,7 +2838,7 @@ Syntax:<br>
|
|||||||
<b>@max</b> Device des höchsten Wertes<br>
|
<b>@max</b> Device des höchsten Wertes<br>
|
||||||
<b>@min</b> Device de niedrigsten Wertes<br>
|
<b>@min</b> Device de niedrigsten Wertes<br>
|
||||||
<br>
|
<br>
|
||||||
<function>:d<number> optional kann das Ergebnis auf Nachkommastellen gerundet werden, dazu wird an die Funktion getrennt durch einen Doppelpunkt der Buchstabe "d" gefolgt von einer Ziffer (<number>) angegeben. Die Ziffer gibt die Anzahl der Nachkommastellen an.<br>
|
<format> <code>d<number></code> zum Runden des Wertes mit Nachkommastellen, <code>a</code> für Aliasnamen bei Devicelisten, <code>s(<splittoken>)</code> <splittoken> sind Trennzeichen in der Device-Liste<br>
|
||||||
<br>
|
<br>
|
||||||
"<regex Device>:<regex Event>" spezifiziert sowohl die betroffenen Devices, als auch den Ereignistrigger, die Syntax entspricht der DOIF-Syntax für Ereignistrigger.<br>
|
"<regex Device>:<regex Event>" spezifiziert sowohl die betroffenen Devices, als auch den Ereignistrigger, die Syntax entspricht der DOIF-Syntax für Ereignistrigger.<br>
|
||||||
Die Angabe <regex Event> ist im Ausführungsteil nicht sinnvoll und sollte weggelassen werden.<br>
|
Die Angabe <regex Event> ist im Ausführungsteil nicht sinnvoll und sollte weggelassen werden.<br>
|
||||||
@ -2839,7 +2849,7 @@ Die Angabe <regex Event> ist im Ausführungsteil nicht sinnvoll und sollte
|
|||||||
<br>
|
<br>
|
||||||
<default> Default-Wert, falls kein Device gefunden wird, entspricht der Syntax des Default-Wertes bei Readingangaben<br>
|
<default> Default-Wert, falls kein Device gefunden wird, entspricht der Syntax des Default-Wertes bei Readingangaben<br>
|
||||||
<br>
|
<br>
|
||||||
<reading>, <condition>, <default> sind optional<br>
|
<format>, <reading>, <condition>, <default> sind optional<br>
|
||||||
<br>
|
<br>
|
||||||
<u>Syntax-Beispiele im Ausführungteil</u><br>
|
<u>Syntax-Beispiele im Ausführungteil</u><br>
|
||||||
<br>
|
<br>
|
||||||
@ -2851,6 +2861,10 @@ Liste der Devices, die mit "window" beginnen:<br>
|
|||||||
<br>
|
<br>
|
||||||
<code>[@"^window"]</code><br>
|
<code>[@"^window"]</code><br>
|
||||||
<br>
|
<br>
|
||||||
|
Liste der Devices, die mit "window" beginnen, es werden Aliasnamen ausgegeben, falls definiert:<br>
|
||||||
|
<br>
|
||||||
|
<code>[@:a"^window"]</code><br>
|
||||||
|
<br>
|
||||||
Liste der Devices, die mit "windows" beginnen und ein Reading "myreading" beinhalten:<br>
|
Liste der Devices, die mit "windows" beginnen und ein Reading "myreading" beinhalten:<br>
|
||||||
<br>
|
<br>
|
||||||
<code>[@"^window":myreading]</code><br>
|
<code>[@"^window":myreading]</code><br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user