FHEM DoIf
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 |