mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 10:46:53 +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 $extrem;
|
||||
my $name;
|
||||
my $devname;
|
||||
my $err;
|
||||
my $ret;
|
||||
my $result;
|
||||
@ -264,13 +265,13 @@ AggrIntDoIf
|
||||
my $warning=0;
|
||||
my $mode=substr($modeType,0,1);
|
||||
my $type;
|
||||
my $dec;
|
||||
my $format;
|
||||
my $place;
|
||||
my $number;
|
||||
|
||||
if ($modeType =~ /.(sum|average|max|min)?[:]?(d(\d)?)?/) {
|
||||
if ($modeType =~ /.(sum|average|max|min)?[:]?(?:(a|d)?(\d)?)?/) {
|
||||
$type = (defined $1)? $1 : "";
|
||||
$dec= $2;
|
||||
$format= (defined $2)? $2 : "";
|
||||
$place= $3;
|
||||
}
|
||||
|
||||
@ -324,31 +325,36 @@ AggrIntDoIf
|
||||
} else {
|
||||
$ret=1;
|
||||
}
|
||||
if ($format eq "a") {
|
||||
$devname=AttrVal($name,"alias",$name);
|
||||
} else {
|
||||
$devname=$name;
|
||||
}
|
||||
if ($ret) {
|
||||
if ($type eq ""){
|
||||
$num++;
|
||||
push (@devices,$name);
|
||||
push (@devices,$devname);
|
||||
} elsif (defined $value) {
|
||||
if ($type eq "sum" or $type eq "average") {
|
||||
$num++;
|
||||
push (@devices,$name);
|
||||
$num++;
|
||||
push (@devices,$devname);
|
||||
$sum+=$number;
|
||||
} elsif ($type eq "max") {
|
||||
if (!defined $extrem or $number>$extrem) {
|
||||
$extrem=$number;
|
||||
@devices=($name);
|
||||
@devices=($devname);
|
||||
}
|
||||
} elsif ($type eq "min") {
|
||||
if (!defined $extrem or $number<$extrem) {
|
||||
$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") {
|
||||
$extrem=0 if (!defined $extrem);
|
||||
@ -363,7 +369,7 @@ AggrIntDoIf
|
||||
$result=$num;
|
||||
}
|
||||
if ($mode eq "#") {
|
||||
if (defined $dec) {
|
||||
if ($format eq "d") {
|
||||
$result = ($result =~ /(-?\d+(\.\d+)?)/ ? $1 : 0);
|
||||
$result = round ($result,$place) if (defined $place);
|
||||
}
|
||||
@ -394,10 +400,14 @@ AggregateDoIf
|
||||
my ($hash,$modeType,$device,$reading,$cond,$default)=@_;
|
||||
my $mode=substr($modeType,0,1);
|
||||
my $type=substr($modeType,1);
|
||||
my $splittoken=",";
|
||||
if ($modeType =~ /.(?:sum|average|max|min)?[:]?[^s]*(?:s\((.*)\))?/) {
|
||||
$splittoken=$1 if (defined $1);
|
||||
}
|
||||
if ($mode eq "#") {
|
||||
return (AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default));
|
||||
} elsif ($mode eq "@") {
|
||||
return (join (",",AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default)));
|
||||
return (join ($splittoken,AggrIntDoIf($hash,$modeType,$device,$reading,$cond,$default)));
|
||||
}
|
||||
return ("");
|
||||
}
|
||||
@ -2815,7 +2825,7 @@ Die Angabe des Readings kann weggelassen werden, dann wird lediglich nach entspr
|
||||
<br>
|
||||
Syntax:<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>
|
||||
<function>:<br>
|
||||
<br>
|
||||
@ -2828,7 +2838,7 @@ Syntax:<br>
|
||||
<b>@max</b> Device des höchsten Wertes<br>
|
||||
<b>@min</b> Device de niedrigsten Wertes<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>
|
||||
"<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>
|
||||
@ -2839,7 +2849,7 @@ Die Angabe <regex Event> ist im Ausführungsteil nicht sinnvoll und sollte
|
||||
<br>
|
||||
<default> Default-Wert, falls kein Device gefunden wird, entspricht der Syntax des Default-Wertes bei Readingangaben<br>
|
||||
<br>
|
||||
<reading>, <condition>, <default> sind optional<br>
|
||||
<format>, <reading>, <condition>, <default> sind optional<br>
|
||||
<br>
|
||||
<u>Syntax-Beispiele im Ausführungteil</u><br>
|
||||
<br>
|
||||
@ -2851,6 +2861,10 @@ Liste der Devices, die mit "window" beginnen:<br>
|
||||
<br>
|
||||
<code>[@"^window"]</code><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>
|
||||
<br>
|
||||
<code>[@"^window":myreading]</code><br>
|
||||
|
Loading…
x
Reference in New Issue
Block a user