FHEM DoIf
OK: No backlinks exists
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  |