Das in FHEM verwendete if-Statement kan in einer einfachen if-Bedingung so angewendet werdendefine einschalten at +*00:15 { if ( "1" eq "1" ) { fhem("set Funkschalter on") }}
Erklärung:
Die äusseren geschweiften Klammern sagen FHEM, dass innerhalb Perl-Befehle ausgeführt werden.
Das Wort if leitet die Bedingung ein.
In den runden Klammern steht die Bedingung
(Perl-Vergleichsoperatoren sind für Zeichen(ketten)- und Zahlenvergleiche unterschiedlich!)
In den folgenden geschweifen Klammern steht ebenfalls Perl-Code, der ausgeführt wird, falls die Bedingung zutrifft.
Der Perl-Code besteht nun wiederum aus der Anweisung, einen FHEM-Befehl auszuführen. Dieser wird zwischen die runden Klammern in Anführungsstriche gesetzt.
Die if-Bedingung kann auch in komplexen Strukturen eingesetzt werden, eta so:
mit den zwei senkrechten Strichen wird ein „oder“ formuliert (also nur Mittwoch ODER Donnerstag schalten):
define a2 at *00:01:00 { if (($wday == 3) || ($wday == 4)) { fhem("set LICHT off") } }
mit den zwei „&“ wird ein „und“ formuliert (also nur mittwochs UND auch dann nur zwischen 18:00 und 5:00 Uhr schalten):
define a2 at *00:01:00 { if (($wday == 3) && (($hour >= 18 || $hour < 5))) { fhem("set LICHT off") } }
Änderung der Logik durch andere Klammersetzung:
define a2 at *00:01:00 { if ((($wday == 3) && ($hour >= 18)) || ($hour < 5)) { fhem("set LICHT off") } }
Achtung: dieser Befehl schaltet mittwochs ab 18:00 und außerdem jeden Tag vor 5:00
Die if-else-Bedingungdefine einschalten at +*00:15 {if(Value("Variable") eq "on") { fhem("set Funkschalter on") } else { fhem("set funkschalter off")}}
Wenn mehrere Bedingungen ausgeführt werden sollen:
define einschalten at +*00:15 {if(Value("Variable") eq "on") { fhem("set Funkschalter on;; set FHT80B desired-temp 21") }}
Die beiden Bedingungen müssen nun mit zwei Semikola getrennt werden, da Perl vor der Übergabe an FHEM den Befehl übersetzt und dabei das eine Semikolon entfernt.
Ein weiteres Beispiel:
Einfache if Abfrage / if Bedingung mit FHEM
FHEM stellt den aktuellen Wochentag in der Variable $wday zur Verfügung, es gibt aber noch viel mehr Variablen zur Zeit-Berechnung: Diese haben wir in diesem Artikel aufgeführt. Mit der $wday Variable lässt sich bestimmen, ob heute Montag, Dienstag, Mittwoch oder aber Wochenende ist. Die Zählung beginnt bei „0“, was Sonntag entspricht:
Sonntag: $wday = 0
Montag: $wday = 1
Dienstag: $wday = 2
Mittwoch: $wday = 3
Donnerstag: $wday = 4
Freitag: $wday = 5
Samstag: $wday = 6
» Tipp: Diese vordefinierten Variablen stehen in FHEM zur Verfügung
FHEM Aktor nur an einem bestimmten Tag schalten
Mit der Abfrage der Variable „$wday“ erhält man so den aktuellen Tag, den man in einer if Abfrage nutzen kann, um einen FHEM Aktor ein- oder auszuschalten. Um also eine Lampe nur Montags zu schalten, hilft dieser define-Befehl:
define LampeSZ at *08:15:00 { if($wday == 1) { fhem("set SCHLAFZIMMER on") }}
Damit wird der FHEM-Befehl „set SCHLAFZIMMER on“ zum Schalten einer Schlafzimmer-Lampe ausgeführt, wenn es Montag, 08:15 Uhr ist.