In FHEM ist DOIF (aus dem Modul DOIF) ein sehr leistungsfähiges Tool zur Erstellung bedingter Steuerungen. Es ist quasi eine Art „Wenn-Dann-Logik“ für komplexere Automatisierungen. Anders als notify kannst du mit DOIF direkt Bedingungen auswerten, Aktionen verknüpfen und sogar Timer oder Zeitsteuerung einbauen.


🧠 Funktionsweise von DOIF in FHEM

Ein DOIF prüft regelmäßig oder ereignisbasiert Bedingungen (z. B. wenn Gerät X on ist) und führt Aktionen aus (z. B. schalte Gerät Y ein).

Grundsyntax:

perl

define <Name> DOIF (<Bedingung>) (<Aktion>)


⚙️ Beispiel: Shelly schaltet → Lampe einschalten

Angenommen, dein Shelly-Modul heißt Shelly_Wohnzimmer_Licht, und du willst, dass bei Einschalten des Shellys eine Lampe Stehlampe eingeschaltet wird:

perl

define di_ShellyLampe DOIF ([Shelly_Wohnzimmer_Licht:state] eq "on") (set Stehlampe on)

Erklärung:

[Shelly_Wohnzimmer_Licht:state] fragt den aktuellen Status ab.

eq "on" prüft, ob der Status on ist.

set Stehlampe on ist die Aktion.

📌 Hinweis: DOIF wird eventbasiert ausgelöst, d. h., es reagiert automatisch, wenn sich der Status des Geräts ändert.


⏱️ Mehrere Bedingungen und Aktionen

perl

define di_ShellyLogik DOIF ([Shelly_Wohnzimmer_Licht:state] eq "on") \

  (set Stehlampe on) \

ELSEIF ([Shelly_Wohnzimmer_Licht:state] eq "off") \

  (set Stehlampe off)

Damit wird die Lampe synchron zur Shelly geschaltet: an bei an, aus bei aus.


🔁 DOIF vs. Notify – was ist der Unterschied?

Kriterium

notify

DOIF

Einfachheit

Sehr einfach

Etwas komplexer, aber mächtiger

Bedingungen prüfen

Nur auf Events

Auch komplexe Zustände und Zeitlogik möglich

Aktionen

Einzeilig, begrenzt

Mehrere Aktionen, mit ELSE/Timer usw.

Flexibilität

Gering

Hoch


🔄 Beispiel: Notify ruft DOIF auf

Du kannst auch ein Notify definieren, das ein DOIF triggert:

Schritt 1: DOIF vorbereiten (aber nicht automatisch aktivieren)

perl

define di_ShellyManuell DOIF ([SteuerDummy] eq "go") (set Stehlampe on)

attr di_ShellyManuell do always

Schritt 2: Notify, das DOIF startet

perl

define n_ShellyTrigger notify Shelly_Wohnzimmer_Licht:on set SteuerDummy go

Hier ist SteuerDummy ein Dummy-Gerät, das das DOIF triggert. Der Vorteil ist, dass du so Logik voneinander trennen kannst.


Zusammenfassung

Ziel

Lösung

Reagiere auf Shelly-Schaltzustand mit simpler Aktion

notify

Reagiere mit Bedingungen, Zeitlogik oder mehreren Aktionen

DOIF

Trennung von Logik und Trigger

Kombination aus notify + DOIF