From aa17e6a70a04854cf24bb1fa7846a7506b7aac8f Mon Sep 17 00:00:00 2001 From: Damian <> Date: Sat, 12 Mar 2022 23:15:22 +0000 Subject: [PATCH] 98_DOIF.pm: collect with output parameter git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@25819 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/98_DOIF.pm | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/FHEM/98_DOIF.pm b/FHEM/98_DOIF.pm index 2334af5e7..77066269f 100644 --- a/FHEM/98_DOIF.pm +++ b/FHEM/98_DOIF.pm @@ -1292,9 +1292,7 @@ sub ReadingValDoIf $hours=$num; } } -# $hash->{collect}{"$name $reading"}{$hours}{value}=$r; -# $hash->{collect}{"$name $reading"}{$hours}{time}=time_str2num(ReadingsTimestamp($name, $reading, "1970-01-01 01:00:00")); - setValue_collect(\%{$hash->{collect}{"$name $reading"}{$hours}}); + setValue_collect($hash,\%{$hash->{collect}{"$name $reading"}{$hours}}); return (\%{$hash->{collect}{"$name $reading"}{$hours}}); } elsif ($regExp =~ /^d(\d)?/) { my $round=$1; @@ -1355,23 +1353,23 @@ sub DOIF_collect_save_values { } -##sub collect_setValue -##{ -## my ($hash,$name,$reading,$hours)=@_; -## my $collect=\%{$hash->{collect}{"$name $reading"}{$hours}}; -## setValue_collect ($collect); -##} - sub setValue_collect { - my ($collect)=@_; + my ($hash,$collect)=@_; my $name=${$collect}{name}; my $reading=${$collect}{reading}; my $hours=${$collect}{hours}; my $r=ReadingsVal($name,$reading,0); + if (defined ${$collect}{output}) { + $_=$r; + $r=eval(${$collect}{output}); + if ($@) { + Log3 ($hash->{NAME},4 , "$hash->{NAME}: $@"); + readingsSingleUpdate ($hash, "error", "${$collect}{output}, ".$@,1); + } + } my ($seconds, $microseconds) = gettimeofday(); - ##my $seconds=time_str2num(ReadingsTimestamp($name, $reading, "1970-01-01 01:00:00")); $r = ($r =~ /(-?\d+(\.\d+)?)/ ? $1 : "N/A"); ${$collect}{value}=$r; ${$collect}{time}=$seconds; @@ -1673,11 +1671,12 @@ sub ReplaceReadingDoIf $hash->{accu}{"$name $reading"}{dim}=$dim; @{$hash->{accu}{"$name $reading"}{value}}=(); } - } elsif ($format =~ /^((\d*)col(\d*)(.?))/) { + } elsif ($format =~ /^((\d*)col(\d*)(\w?))(?::(.*))?/) { $regExp =$1; my $dim= $2 eq "" ? 72:$2; my $num=$3; my $time=$4; + $output=$5; my $hours=24; if ($num ne "") { if($time eq "d") { @@ -1706,9 +1705,9 @@ sub ReplaceReadingDoIf $hash->{collect}{"$name $reading"}{$hours}{dim}=$dim; $hash->{collect}{"$name $reading"}{$hours}{name}=$name; $hash->{collect}{"$name $reading"}{$hours}{reading}=$reading; - setValue_collect(\%{$hash->{collect}{"$name $reading"}{$hours}}); - ##collect_setValue($hash,$name,$reading,$hours); } + $hash->{collect}{"$name $reading"}{$hours}{output}=$output if ($output); + setValue_collect($hash,\%{$hash->{collect}{"$name $reading"}{$hours}}); } elsif ($format =~ /^(d[^:]*)(?::(.*))?/) { $regExp =$1; $output=$2; @@ -2918,8 +2917,7 @@ DOIF_Notify($$) my $readingregex=CheckRegexpDoIf($hash,"collect",$dev->{NAME},"collect",$eventa,$eventas,$reading); if (defined $readingregex) { foreach my $hours (keys %{$hash->{collect}{"$device $readingregex"}}){ - setValue_collect(\%{$hash->{collect}{"$device $readingregex"}{$hours}}); - ## collect_setValue($hash,$device,$readingregex,$hours); + setValue_collect($hash,\%{$hash->{collect}{"$device $readingregex"}{$hours}}); } } } @@ -6388,6 +6386,7 @@ Eine ausführliche Erläuterung der obigen Anwendungsbeispiele kann hier nachgel Darstellungselement mit Eingabemöglichkeit im Frontend und Schaltfunktion
Status des Moduls
uiTable, DOIF Web-Interface
+ uiState, DOIF Web-Interface im Status
Reine Statusanzeige ohne Ausführung von Befehlen
Anpassung des Status mit Hilfe des Attributes state
Erzeugen berechneter Readings
@@ -6431,6 +6430,7 @@ Eine ausführliche Erläuterung der obigen Anwendungsbeispiele kann hier nachgel
timerevent   timerWithWait   uiTable   + uiState   wait   waitdel   waitsame   @@ -6569,8 +6569,8 @@ Beispiele für Regex-Angaben:
["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
-([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen
-(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
+[":^temp"] triggert auf beliebige Devices, die im Event mit "temp" beginnen
+["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
[""] triggert auf alles

In der Bedingung und im Ausführungsteil werden die Schlüsselwörter $SELF durch den eigenen Namen des DOIF-Moduls, $DEVICE durch das aktuelle Device, $EVENT durch die passende Eventzeile, $EVENTS kommagetrennt durch alle Eventzeilen des Triggers ersetzt.
@@ -7657,9 +7657,7 @@ Anwendungsbeispiele für Fortgeschrittene: back

-Die Syntax des uiState-Attributes entspicht der des uiTable-Attributes. Die definierte Tabelle wird jedoch in der Statuszeile des DOIF-Devices dargestellt.
-
-Dieses Attribut ist nur im Perl-Modus verfügbar.
+Die Syntax des uiState-Attributes entspricht der des uiTable-Attributes. Die definierte Tabelle wird jedoch in der Statuszeile des DOIF-Devices dargestellt.

Siehe Dokumentation: uiTable/uiState Dokumentation