Verständnisfrage zu DOIF: repeatsame und wait

Begonnen von andies, 23 September 2019, 14:15:52

Vorheriges Thema - Nächstes Thema

Damian

#15
Zitat von: andies am 02 Oktober 2019, 08:13:46
Danke, das ist ja nun viel klarer. Ich würde gern in dem anderen Thread, der im Wiki verlinkt ist, ändern. Was hältst Du von dieser Beschreibung:

  • wait X: Ein Kommando wird nur dann ausgelöst, wenn X Sekunden lang die Bedingung durchgehend wahr war.
  • waitsame X: Ein Kommando wird nur dann ausgelöst, wenn sich innerhalb von X Sekunden die Bedingungen mehrfach geändert haben; dabei muss es insgesamt repeatsame+1 mal wahr gewesen sein (und entsprechend oft falsch)
Ist das korrekt? Dann frage ich mal Damian.
Es ist immer die Frage, was die Leute darunter verstehen.

ZitatEin Kommando wird nur dann ausgelöst, wenn X Sekunden lang die Bedingung durchgehend wahr war.


Beispiel:

DOIF ([FS] eq "on") (set bla on)

wait 300
do always


Durch do always und keinen DOELSE-Fall, gibt es cmd_2 nicht.

Dadurch kann das Modul bei FS gleich off, den Zustand nicht wechseln, auch wenn die Bedingung eigentlich nicht wahr ist -> obige Aussage stimmt nicht (Kommando wird trotzdem in 300 Sekunden ausgeführt)


ZitatEin Kommando wird nur dann ausgelöst, wenn sich innerhalb von X Sekunden die Bedingungen mehrfach geändert haben; dabei muss es insgesamt repeatsame+1 mal wahr gewesen sein (und entsprechend oft falsch)

Mehrfach ist zu allgemein. Kommando wird ausgeführt, wenn innerhalb von X Sekunden, zwei mal die Bedingung wahr wurde. repeatsame hat hier eine untergeordnete Rolle. Damit es immer wieder (also auch ohne Zustandswechsel) funktioniert  reicht do always, repeatsame ist also nicht nötig.

In beiden Fällen ist die Commandref zu den beiden Attributen, aus meiner Sicht, eindeutiger formuliert.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andies

Ja, sicherlich ist die Commandref eindeutiger formuliert. Mein Problem ist: Ich verstehe sie teilweise nicht. Nun kann man immer sagen "Liegt an dem, der nicht richtig lesen kann" ( ;D ) aber ich dachte mir, auch den Noobs unter uns müsste man das erklären können. Wenn Du also nichts dagegen hast, bohre ich hier mal weiter. Und damit das klarer wird, was ich nicht verstehe, formuliere ich die Fragen, die ich hatte.

ZitatMit dem Attribut waitsame <Zeitspanne in Sekunden für cmd_1>:<Zeitspanne in Sekunden für das cmd_2>:... wird ein Kommando erst dann ausgeführt, wenn innerhalb einer definierten Zeitspanne die entsprechende Bedingung zweimal hintereinander wahr wird.
Implizit steht da drin, dass sie zwischendurch mal falsch wurde - sehe ich das richtig? Es muss also Statuswechsel gegeben haben, auch dann, wenn es kein DOELSE gibt?

ZitatVerzögerungen für die Ausführung von Kommandos werden pro Befehlsfolge über das Attribut "wait" definiert.
Da steht noch nicht, wie genau die Logik ist. Nur, wozu das Kommando dienen soll (eine analoge Formulierung fehlt bei waitsame). Insbesondere war mir nicht klar, ob es hier Statuswechsel geben kann oder muss oder nicht geben darf.

ZitatAusgewertet wird hier der Zustand des Status von remotecontrol nicht das Event selbst.
Das ist ein sehr, sehr wichtiger Satz, dessen Bedeutung ich nicht erfasst oder verstanden hatte. Das ist ja Dein Text, aber ich würde hier gern etwas ausführliches vorschlagen, damit das eben nicht überlesen wird.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Damian

#17
ja, es ist immer das Problem, auf der einen Seite die Commandref kurz zu halten, auf der einen Seiten einen Sachverhalt präzise und eindeutig zu beschreiben.

Es ist ja nichts dagegen zu sagen, bestimmte Funktionalität ausführlicher im Wiki zu erklären, allerdings sollte die Erklärung nicht missverständlich (bzw. mehrdeutig sein). Das gelingt mir leider auch nicht immer. Es mussten auch schon Wiki-Beiträge wieder herausgenommen werden, weil die Verfasser es nicht besser wussten ;)

Was man sagen könnte ist z. B.:

Wait:

Ein Kommando wird nur dann ausgelöst, wenn X Sekunden lang die Bedingung durchgehend wahr war, also kein anderer Zweig während der Wartezeit zum Zuge kam.

waitsame:

Ein Kommando wird nur dann ausgelöst, wenn innerhalb von X Sekunden die Bedingung zwei mal wahr wird, ohne dass während der Wartezeit ein anderer Zweig ausgeführt wurde.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rabehd

Ich bin auch dafür ausführliche Erklärungen gehören ist Wiki!
Dort steht es auch:
Zitatwait

Das Attribut verzögert die Befehlsausführung, nach wahr werden einer Bedingung.

Laufende Wait-Timer werden bei einem eingeleiteten Statuswechsel des DOIF abgebrochen, daher werden die zu verzögernden Befehle nicht mehr ausgeführt.

Kurz, klar, verständlich!
Auch funktionierende Lösungen kann man hinterfragen.