diff --git a/fhem/FHEM/98_IF.pm b/fhem/FHEM/98_IF.pm index 79dde662d..9b7881f76 100644 --- a/fhem/FHEM/98_IF.pm +++ b/fhem/FHEM/98_IF.pm @@ -180,10 +180,14 @@ EvalAllIf($) ($beginning,$eval,$err,$tailBlock)=GetBlockIf($tailBlock,'[\{\}]'); return ($eval,$err) if ($err); if ($eval) { + if (substr($eval,0,1) eq "(") { my $ret = eval $eval; return($eval." ",$@) if ($@); $eval=$ret; - } + } else { + $eval="{".$eval."}"; + } + } $cmd.=$beginning.$eval; } return ($cmd,""); @@ -397,16 +401,16 @@ CommandIF($$)
Filter by "on" and "off" in the status of the device "move":

- define activity notify move IF ([move:&STATE:[(on|off)] eq "on" and $we) (set lamp off)
+ define activity notify move IF ([move:&STATE:[(on|off)]] eq "on" and $we) (set lamp off)

Example of the use of Readings in the then-case:

define temp at 18:00 IF ([outdoor:temperature] > 10) (set lampe [dummy])

- If an expression is to be evaluated first in a FHEM command, then it must be enclosed in braces.
+ If an expression is to be evaluated first in a FHEM command, then it must be enclosed in brackets.
For example, if at 18:00 clock the outside temperature is higher than 10 degrees, the desired temperature is increased by 1 degree:

- define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {[thermostat:desired-temp:d]+1})
+ define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {([thermostat:desired-temp:d]+1)})

Multiple commands are separated by a comma instead of a semicolon, thus eliminating the doubling, quadrupling, etc. of the semicolon:

@@ -450,6 +454,7 @@ CommandIF($$)
In der Bedingung des IF-Befehls wird die vollständige Syntax des Perl-if unterstützt. Mögliche Operatoren sind u. a.:

+
    ++ -- Inkrementieren, Dekrementieren
    ** Potenzierung
    ! ~ logische und bitweise Negation
    @@ -465,6 +470,7 @@ CommandIF($$) not logische Negation
    and logisches UND
    or xor logisches ODER (inklusiv/exklusiv)
    +

Features:

@@ -485,7 +491,7 @@ CommandIF($$)
  • Ausführung von Perl-Befehlen im dann- und sonst-Fall ist weiterhin möglich

  • -
  • Auswertung von Ausdrücken in geschweiften Klammen innerhalb eines FHEM-Befehls ist möglich
  • +
  • Auswertung von Perl-Ausdrücken in geschweiften Klammen innerhalb eines FHEM-Befehls ist möglich

  • ELSE-Fall ist optional
  • @@ -524,7 +530,9 @@ CommandIF($$)
    define check at +00:10 IF ([outdoor:state] eq "open") (set switch1 on)

    - Geschachtelte Angabe von zwei IF-Befehlen (kann in mehreren Zeilen mit Einrückungen zwecks übersichtlicher Darstellung in der DEF-Eingabe eingegeben werden):
    + Geschachtelte Angabe von mehreren IF-Befehlen kann in mehreren Zeilen mit Einrückungen zwecks übersichtlicher + Darstellung über FHEM-Weboberfläche in der DEF-Eingabe eingegeben werden.
    + Die erste Zeile "define test notify lamp " muss mit einem Leerzeichen enden, bevor die Zeile mit Enter umgebrochen wird - das ist eine Eigenschaft von FHEM und nicht von IF:

    define test notify lamp
    IF ([lamp] eq "on") (
    @@ -543,22 +551,42 @@ CommandIF($$) (set switch on)

    + Mehrzeilige Eingaben in der cfg-Datei müssen dagegen jeweils am Zeilenende mit \ verknüpft werden (das ist eine Eigenschaft von FHEM und nicht von IF):
    +
    + define test notify lamp \
    + IF ([lamp] eq "on") (\
    +
      + IF ([outdoor:humidity] < 70)\
      +
        + (set lamp off)\
        +
      + ELSE\
      +
        + (set lamp on)\
        +
      +
    + ) ELSE\
    +
      + (set switch on)
      +
    +
    + Filtern nach Zahlen im Reading "temperature":

    define settemp at 22:00 IF ([tempsens:temperature:d] >= 10) (set heating on)

    Filtern nach "on" und "off" im Status des Devices "move":

    - define activity notify move IF ([move:&STATE:[(on|off)] eq "on" and $we) (set lamp off)
    + define activity notify move IF ([move:&STATE:[(on|off)]] eq "on" and $we) (set lamp off)

    Beispiel für die Nutzung von Readings im dann-Fall:

    define temp at 18:00 IF ([outdoor:temperature] > 10) (set lampe [dummy])

    - Falls bei einem FHEM-Befehl ein Ausdruck mit Readings zuvor ausgewertet werden soll, so muss er in geschweifte Klammern gesetzt werden.
    + Falls bei einem FHEM-Befehl ein Perl-Ausdruck mit Readings zuvor ausgewertet werden soll, so muss er in geschweifte und runde Klammern gesetzt werden.
    Beispiel: Wenn um 18:00 Uhr die Außentemperatur höher ist als 10 Grad, dann wird die Solltemperatur um 1 Grad erhöht.

    - define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {[thermostat:desired-temp:d]+1})
    + define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {([thermostat:desired-temp:d]+1)})

    Mehrerer Befehle werden durch ein Komma statt durch ein Semikolon getrennt, dadurch entfällt das Doppeln, Vervierfachen usw. des Semikolons: