FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: McShire am 10 August 2020, 01:44:43

Titel: [gelöst] Wann DOIF wann NOTIFY verwenden?
Beitrag von: McShire am 10 August 2020, 01:44:43
Hallo,
Für viele Aufgaben kann man DOIF oder NOTIFY verwenden.
Gibt es eine Empfehlung, wann besser DOIF und wann besser NOTIFY verwendet wird, wenn beides zum Ziel führt.
mfg
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: Wzut am 10 August 2020, 06:45:45
Tipp : das nehmen das man versteht und nachvollziehen kann.
Ich selbst meide DOIF wie der Teufel das Weihwasser, weil ich bis heute da nicht durchblicke und zu allem Überfluss wird es ständig komplexer.
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: rabehd am 10 August 2020, 12:01:14
Ich verwende in der Regel lieber DOIF.
Der Vorteil für mich, dass man Zeiten, Events und Bedingungen gut kombinieren kann und oft nur ein DOIF hat anstatt meherer notify und at.
Aber, ohne vorherige Planung und Konsequenz bei der Umsetzung ist ein DOIF eher wenig hilfreich.
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: Beta-User am 10 August 2020, 13:03:25
MAn. sollte man sich zunächst mit notify auseinandersetzen, bis man FHEM verstanden hat; die Syntax von notify ist eher "prototypisch" für andere Event-Handler, angefangen bei FileLog, und auch die Syntax des commands ist näher an dem, was viele andere Module an command-Syntax erwarten.

Wenn man das dann "drauf hat", kann man immer noch entscheiden, welcher Weg einem letztlich besser gefällt; scheinbar kann man mit DOIF (fast) alle möglichen Anforderungen in einer (halbwegs) einheitlichen Art und Weise umsetzen, und es gibt eine (mMn. zu) umfangreiche Doku für das ganze (wobei der Entwickler gerne darauf hinweist, dass es für komplexe Anforderungen Sinn macht, den Perl-Modus zu verwenden; wer also denkt, er kommt damit um das Erlernen von Perl rum, könnte falsch liegen ;) ).

Ich gehöre allerdings auch zu der Fraktion, die DOIF nie richtig verstanden hat, mir gibt es da zu viele Schalterchen, die das Verhalten eines DOIF auf unauffällige Weise komplett zu ändern scheinen, ich arbeite lieber "von oben nach unten" und nutze dann direkt Perl und FHEM-Funktionen.

Aber bei komplexerer Logik führt um die Planung, was wie wo wann und unter welchen Voraussetzungen so oder so kein Weg drumrum.

Grundsätzlich lohnt immer auch die Frage, ob es für spezielle Aspekte nicht auch ein spezielles Modul gibt, das die jeweilige Anforderung abdeckt.

Vielleicht stellst du die Frage daher besser nicht so abstrakt in den Raum, sondern zeigst etwas konkreter, wo deine Bauchschmerzen sind (also welche Art Probleme du eigentlich lösen willst)?
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: Wernieman am 10 August 2020, 14:03:16
Persönlich:
Da ich ein Gegner von "Alles in einer Zeile" nehme ich lieber mehrere notify als ein doif.

Prinzipiell:
Beide haben Ihre Vor/Nachteile. Es ist vom persönliche Geschmack abhängig, was macn verwendet.

Für Techniker:
Laut Entwickler ist DOIF eine State-Maschine. FHEM selber ist ein Event-Basiertes System (Vom der Grundidee).  notify unterstütz genau den Gedanken des Event-Basierten Systems und damit lernt man über FHEM vieles ...
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: McShire am 10 August 2020, 16:27:40
Hallo,
danke für die vielen Anmerkungen.
Ich habe keine spezielle Aufgabe, bei der es wichtig wäre, die richtige Anweisung DOIF oder NOTIFY zu nehmen.
Die Frage ist bei einer ganz simplen Erweiterung aufgetaucht, auf das "open" eines HM-Schalters ein device verzögert zu schalten.
([HM_6B9B30:"closed"])
    (defmod t2 at +00:00:20 set Alarm_EA on)
Das kann man einfach mit beiden Optionen  DOIF oder NOTIFY erledigen.
Da ich schon mehrere NOTIFY und DOIF habe, war die Frage, was ist eigentlich für den Programmfluss und den Ressourcenverbrauch günstiger.
Den Hinweis DOIF reagiert auf Status und NOTIFY auf Events finde ich gut. Das macht dann doch einen Unterschied.
mfg
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: MadMax-FHEM am 10 August 2020, 16:35:04
Das was du im notify mit einem at löst, kannst du auch mit einem sleep tun.

Da noch ein fhem-Befehl folgt (und wenn man ein fhem-sleep nimmt bzw. nicht exta ein Perl-sleep) dann blockiert es auch nicht...

Ich nutze auch eher notify...

DOIF ist mir (auch) zu undurchsichtig...

Mischung aus "programmieren" und "konfigurieren"...
Irgendein Attribut "falsch" oder "vergessen" und schon ist das Verhalten "eigenartig"...

Und dann DOIF-Perl oder Perl-DOIF!?
Warum dann nicht gleich at/notify und myUtils!!?

Aber auch das: nur meine pers. Meinung...

Jeder muss nehmen was ihm liegt...

Denke aber auch, dass es zu Beginn einfacher ist notify/at zu nehmen...
...auch um eben zu verstehen wie fhem "tickt"...

UND: vorher nachdenken und sich "aufschreiben" wie etwas laufen soll und wodurch etwas ausgelöst werden soll etc. ist IMMER nötig!
(wurde ja auch schon geschrieben)

Gruß, Joachim
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: frank am 10 August 2020, 16:38:37
at's überleben aber einen fhem restart.
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: MadMax-FHEM am 10 August 2020, 16:47:28
Naja wie wahrscheinlich ist es, dass fhem genau in den 20s durchstartet... ;)

Mache es auch per at, allerdings nur, wenn es komplexer ist und dann landet alles in einer myUtils...

Bei "Einzeilern" wie dem (sind aber selten bei mir) würde ich allerdings (trotzdem) ein sleep nehmen...

Gruß, Joachim
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: frank am 10 August 2020, 16:55:48
ZitatNaja wie wahrscheinlich ist es, dass fhem genau in den 20s durchstartet
frag lieber murphy.  ;)
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: Frank_Huber am 10 August 2020, 17:53:44
Meine Meinung:
Ich nehm immer das mit dem ich besser klarkomme.

Einfache Dinge gerne im notify, wenn es komplexer wird mit verschiedenen Triggern / Zustandsabfragen lieber DOIF. Das ist für mich als nicht Programmierer einfacher.

Aber das ist auch nur meine Meinung. Jeder wie es ihm beliebt.
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: McShire am 10 August 2020, 22:36:46
Hallo,
Bei komplexen Dingen nehme ich immer DOIF, insbesondere, wenn unterschiedliche Zustände oder Events (in der Bedingung mehrere verknüpfte Events oder Zustände) mit mehreren DOELSEIF entsprechende Commands anstoßen müssen. Sonst müsste ich mehrere NOTIFY definieren, um alle möglichen Zustände über die auslösenden Events abzubilden. Das wird mir zu unübersichtlich. Bei DOIF ... DOELSEIF ... DOELSEIF ... DOELSE steht alles schön zusammen und man kann die Vollständigkeit möglicher Zustände leicht prüfen.
Bei einfachen Dingen weiß ich nicht was besser ist, mal so mal so. Daher bin ich für jede Empfehlung und Meinung dankbar.
Gruß
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: Damian am 11 August 2020, 08:33:10
Zitat von: McShire am 10 August 2020, 22:36:46
Hallo,
Bei komplexen Dingen nehme ich immer DOIF, insbesondere, wenn unterschiedliche Zustände oder Events (in der Bedingung mehrere verknüpfte Events oder Zustände) mit mehreren DOELSEIF entsprechende Commands anstoßen müssen. Sonst müsste ich mehrere NOTIFY definieren, um alle möglichen Zustände über die auslösenden Events abzubilden. Das wird mir zu unübersichtlich. Bei DOIF ... DOELSEIF ... DOELSEIF ... DOELSE steht alles schön zusammen und man kann die Vollständigkeit möglicher Zustände leicht prüfen.
Bei einfachen Dingen weiß ich nicht was besser ist, mal so mal so. Daher bin ich für jede Empfehlung und Meinung dankbar.
Gruß

Eine solche Diskussion hatten wir schon man, danach war der Fragesteller mehr verwirrt als schlau.

Oft erhälst du Antworten von Leuten die hauptsächlich eines der beiden Module nutzen und das andere nicht genug kennen um eine konkrete Aussagen zu treffen.

Du wirst nicht herum kommen, beide Module selbst genauer zu studieren um Vor- und Nachteile für dich zu erkennen.

Bei notify ist es einfacher, da bist du in paar Minuten durch - es kann nur Ereignissteuerung. Beim DOIF wirst du schon wesentlich länger brauchen - es hat den zehnfachen Umfang.

Ich benutze DOIF  vor allem um Automatisierung zu visualisieren:

siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg

oder Aufgaben generisch zu lösen:

https://wiki.fhem.de/wiki/DOIF/Automatisierung
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: McShire am 13 August 2020, 14:37:54
Hallo alle,
viele Dank für Kommentare.
Nachdem ich jetzt viel gelesen und probiert habe, gilt für mich jetzt:
- für Aufgaben, die ohne weitere komplizierte Bedingungen von einem Event getriggert werden, verwende ich NOTIFY
- für Aufgaben. bei denen im Suchmuster komplexere Bedingungen, logische Entscheidungen oder StatusAuswertungen (geht m.E. in NOTIFY nicht) notwendig sind, nehme ich DOIF.

Das scheint mir generell die beste Vorgehensweise.

mfg
Titel: Antw:Wann DOIF wann NOTIFY verwenden?
Beitrag von: Beta-User am 14 August 2020, 10:49:03
MAn. unterliegst du an mind. zwei Punkten einem Irrtum, was notify angeht. (Es geht mir nur um die vermeintliche "Feststellung", das ginge nicht):

Zum einen kann auch notify mit mehreren unterschiedlichen Triggern umgehen, und zum anderen kannst du auch im Ausführungsteil von notify beliebige Bedingungen berücksichtigen.

Was anders ist, ist die Art und Weise, wie das sinnvollerweise zu notieren ist bzw. wie dann auch die Auswertung erfolgt. DOIF erlaubt (nach meinem in Unkenntnis des Moduls evtl. unvollständigen/falschen Verständnis) eine verkürzte Notation und die Wahl zwischen einer Art "state machine" und einer eher Event-orientierten Funktionsweise, bei notify ist man "gezwungen", ggf. auf Perl "auszuweichen".

Im Ergebnis kann man aber auch mit notify funktional ähnliche Ergebnisse erzielen, was Event- und Zustandsauswertungen angeht. Es ist nur ggf. anders gearteter Aufwand.
Titel: Antw:[gelöst] Wann DOIF wann NOTIFY verwenden?
Beitrag von: Damian am 14 August 2020, 11:46:30
Hier mal eine Gegenüberstellung der kleinen Gemeinsamkeit, der Ereignissteuerung beider Module.

Für FHEM-Befehle:

notify <Regex für Ereignistrigger> <fhem-Befehl mit Semikolon getrennt>

entspricht DOIF im FHEM-Modus:

DOIF (["Regex für Ereignistrigger"]) (<fhem-Befehle mit Komma oder Semikolon getrennt>)
attr do always


Für Perl-Befehle:

notify <Regex für Ereignistrigger> {<Perl-Syntax>}

entspricht DOIF im FHEM-Modus:

DOIF (["Regex für Ereignistrigger"]) {<Perl-Syntax>}
attr do always


entspricht DOIF im Perl-Modus:

DOIF {["Regex für Ereignistrigger"];<Perl-Syntax>}