From 767de2e1bada2c9960d4f9b2128a41ecbf6d8c69 Mon Sep 17 00:00:00 2001
From: Damian <>
Date: Wed, 19 Sep 2018 19:15:59 +0000
Subject: [PATCH] 98_DOIF.pm: fixed set checkall: Can't use an undefined value
as an ARRAY reference at, fixed set_Exec with parameter, commandref perl mode
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@17373 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
FHEM/98_DOIF.pm | 53 +++++++++++++++++++++++++------------------------
1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/FHEM/98_DOIF.pm b/FHEM/98_DOIF.pm
index 5b3aa0ecc..d3b93302d 100644
--- a/FHEM/98_DOIF.pm
+++ b/FHEM/98_DOIF.pm
@@ -2078,7 +2078,7 @@ sub CheckRegexpDoIf
}
return $i;
}
- my $max = int(@{$eventa});
+ my $max=defined $eventa ? int(@{$eventa}):0;
my $s;
my $found;
for (my $j = 0; $j < $max; $j++) {
@@ -2872,7 +2872,7 @@ sub DOIF_ExecTimer
if (!defined ($param)) {
eval ($subname);
} else {
- eval ('$subname("$param")');
+ eval ("$subname(\"$param\")");
}
if ($@) {
Log3 ($defs{$name}{NAME},1 , "$name error in $subname: $@");
@@ -5548,10 +5548,10 @@ Die Abläufe lassen sich, wie in höheren Programmiersprachen üblich, strukturi
Syntax Perl-Modus:
-
define <name> DOIF <Blockname> {<Perlcode mit Ereignis-/Zeittriggern in eckigen Klammern>}
define <name> DOIF <Blockname> {<Ereignisblock: Perlcode mit Ereignis-/Zeittriggern in eckigen Klammern>}
set_Reading
verändert werden, siehe spezifische Perl-Funktionen im Perl-Modus.
FHEM-Befehle werden durch den Aufruf der Perlfunktion fhem"..."
ausgeführt.set_Timer/set_Exec
beliebig viel
DOIF (<Bedingung mit Trigger>) (<FHEM-Befehle>) DOELSE (<FHEM-Befehle>)
DOIF (<Bedingung mit Trigger>) (<FHEM-Befehle>) DOELSE (<FHEM-Befehle>)
DOIF {if (<Bedingung mit Trigger>) {fhem"<FHEM-Befehle>"} else {fhem"<FHEM-Befehle>"}}
DOIF {if (<Bedingung mit Trigger>) {fhem"<FHEM-Befehle>"} else {fhem"<FHEM-Befehle>"}}
define di_rc_tv DOIF {if ([remotecontol:"on"]) {fhem"set tv on"} else {fhem"set tv off"}}
define di_clock_radio DOIF {if ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) {fhem"set radio on"}} {if ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) {fhem"set radio off"}}
define di_lamp DOIF {if ([06:00-09:00] and [sensor:brightness] < 40) {fhem"set lamp:FILTER=STATE!=on on"} else {fhem"set lamp:FILTER=STATE!=off off"}}
DOIF
{ if (<Bedingung mit Trigger>) ... }
{ if (<Bedingung mit Trigger>) ... }
...
DOIF
{ if (<Bedingung>) {
@@ -5587,11 +5599,11 @@ Im Perlmodus sind beliebige Hierarchietiefen möglich:
}
}
define di_rc_tv DOIF {if ([remotecontol:"on"]) {fhem"set tv on"} else {fhem"set tv off"}}
define di_clock_radio DOIF {if ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) {fhem"set radio on"}} {if ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) {fhem"set radio off"}}
define di_lamp DOIF {if ([06:00-09:00] and [sensor:brightness] < 40) {fhem"set lamp:FILTER=STATE!=on on"} else {fhem"set lamp:FILTER=STATE!=off off"}}
del_Timer(<TimerEvent>)
set_Time("event",30,"hello");
set_Time("hell",30);
set_Reading(<readingName>,<content>,<
init-Block
-Wird ein Perlblock mit dem Namen "init" benannt, so wird er ausgeführt, nachdem das FHEM-System hochgefahren wurde. Er bietet sich insb. an, um Instanzvariablen des Moduls vorzubelegen.
+Wird ein Perlblock mit dem Namen "init" benannt, so wird dieser Block beim Systemstart ausgeführt. Er bietet sich insb. an, um Instanzvariablen des Moduls vorzubelegen.
Instanzvariablen