• Bis zu 30 Jahre Haft im Urlaub: Infografik zeigt die kuriosesten Drohnen-Gesetze weltweit 18. August 2019
    Drohnen werden immer beliebter. Laut Schätzungen von Experten wurden bereits mehr als eine halbe Million Hobby-Drohnen in Deutschland verkauft. Unzählige Familien wollen ihre fliegende Kamera diesen Sommer mit in den Urlaub nehmen, um unvergessliche Erinnerungen für das Familienalbum festzuhalten. Doch was ist im Ausland überhaupt erlaubt?

FHEM if

 

Das in FHEM verwendete if-Statement kan in einer einfachen if-Bedingung so angewendet werden
define 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-Bedingung
define 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.