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