2
0
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:
Damian 2017-04-26 16:09:48 +00:00
parent 3e2bf4df25
commit 81881e7d58

View File

@ -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>[&lt;function&gt;:"&lt;regex device&gt;:&lt;regex event&gt;":&lt;reading&gt;:&lt;condition&gt;,&lt;default&gt;]</code><br> <code>[&lt;function&gt;:&lt;format&gt;:"&lt;regex device&gt;:&lt;regex event&gt;":&lt;reading&gt;:&lt;condition&gt;,&lt;default&gt;]</code><br>
<br> <br>
&lt;function&gt;:<br> &lt;function&gt;:<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>
&lt;function&gt;:d&lt;number&gt optional kann das Ergebnis auf Nachkommastellen gerundet werden, dazu wird an die Funktion getrennt durch einen Doppelpunkt der Buchstabe "d" gefolgt von einer Ziffer (&lt;number&gt) angegeben. Die Ziffer gibt die Anzahl der Nachkommastellen an.<br> &lt;format&gt; <code>d&lt;number&gt</code> zum Runden des Wertes mit Nachkommastellen, <code>a</code> für Aliasnamen bei Devicelisten, <code>s(&lt;splittoken&gt)</code> &lt;splittoken&gt sind Trennzeichen in der Device-Liste<br>
<br> <br>
"&lt;regex Device&gt;:&lt;regex Event&gt;" spezifiziert sowohl die betroffenen Devices, als auch den Ereignistrigger, die Syntax entspricht der DOIF-Syntax für Ereignistrigger.<br> "&lt;regex Device&gt;:&lt;regex Event&gt;" spezifiziert sowohl die betroffenen Devices, als auch den Ereignistrigger, die Syntax entspricht der DOIF-Syntax für Ereignistrigger.<br>
Die Angabe &lt;regex Event&gt; ist im Ausführungsteil nicht sinnvoll und sollte weggelassen werden.<br> Die Angabe &lt;regex Event&gt; ist im Ausführungsteil nicht sinnvoll und sollte weggelassen werden.<br>
@ -2839,7 +2849,7 @@ Die Angabe &lt;regex Event&gt; ist im Ausführungsteil nicht sinnvoll und sollte
<br> <br>
&lt;default&gt; Default-Wert, falls kein Device gefunden wird, entspricht der Syntax des Default-Wertes bei Readingangaben<br> &lt;default&gt; Default-Wert, falls kein Device gefunden wird, entspricht der Syntax des Default-Wertes bei Readingangaben<br>
<br> <br>
&lt;reading&gt;, &lt;condition&gt;, &lt;default&gt; sind optional<br> &lt;format&gt;, &lt;reading&gt;, &lt;condition&gt;, &lt;default&gt; 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>