[vmtl gelöst] DOIF reagiert auf Verzögerung nicht

Begonnen von andies, 14 März 2020, 20:34:07

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: andies am 16 März 2020, 08:42:34
Ich habe jetzt diese Version am Laufen und die scheint zu gehen
defmod GarageOffenDOIF2 DOIF (([Garagensensor:Tor]==1) and ([BresserTemeo_1:temperature]<7) ) (set TelegramBot _msg Garagentor seit 10 Minuten *offen* und außen sind [BresserTemeo_1:temperature]°C! Schliessen mit /kurz1)
attr GarageOffenDOIF2 wait 600

Allerdings verstehe ich jetzt die Erläuterung  https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Struktur_und_Verhalten_des_DOIF nicht mehr:

  • Das startende Ereignis ist [Garagensensor:Tor]==1 (unter der Bedingung, dass [BresserTemeo_1:temperature]<7 erfüllt ist)
  • Da die Bedingung wahr ist, wird Befehl ausgeführt und Status aktualisiert
  • Danach Stop.
So weit, so gut. Nun will ich aber 10 Minuten vor Ausführung des Befehls warten. Da erscheint jetzt Statuswechsel als entscheidender Begriff in der Beschreibung. Nur wird der vorher nicht definiert (Ereignis, Auslöser, DOIF-Prozess dagegen schon). Was genau ist ein Status? Und wann genau wechselt der Status? Denn daraus kann ich folgern, inwieweit dieser Statuswechsel durch do always bzw do resetwait beachtet, nicht beachtet, ausgelöst oder was auch immer wurde.

Mit Status ist ganz einfach der Status des DOIF-Moduls gemeint. Wann der Status wechselt: initialized -> cmd_1->cmd_2->cmd_1->... muss jeder aufgrund seine Definition gedanklich durchspielen oder ausprobieren.

In deinem Fall wird der Wait-Timer für cmd_1 gestartet. Solange kein Ereignis zu einer vorzeitigen Zustandsänderung kommt, wird nach 10 Minuten cmd_1 ausgeführt. Kommt innerhalb der Wartezeit von 10 Minuten ein Ereignis, welches  zu der Ausführung von cmd_2 führt, dann wird der Timer unterbrochen. Cmd_1 kommt nicht zu Ausführung, weil sich eben der "beabsichtigte" Status des Moduls, besser gesagt der Zustand des Moduls (Ausführung von cmd_1 in Ausführung von cmd_2) geändert hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andies

Ist Status der Wahrheitsgehalt einer Bedingung? Oder ist Status ein Event? Oder ist Status ein Command?
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

Zitat von: andies am 16 März 2020, 18:47:42
Ist Status der Wahrheitsgehalt einer Bedingung? Oder ist Status ein Event? Oder ist Status ein Command?

Status des DOIF-Moduls: Reading state
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andies

Jetzt fällt langsam der Groschen. Kann man das so beschreiben: Das Kommando, das im Reading state steht, ist das Kommando, welches ausgeführt werden soll. wait bedingt dann beispielsweise, dass die Ausführung verzögert wird. Alle Attribute wie do always/do resetwait haben dann eine bestimmte Wirkung darauf, wie sich das reading state verändert? Durch diese Veränderung macht dann das DOIF mal dies und mal das?
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

Zitat von: andies am 16 März 2020, 18:52:36
Jetzt fällt langsam der Groschen. Kann man das so beschreiben: Das Kommando, das im Reading state steht, ist das Kommando, welches ausgeführt werden soll. wait bedingt dann beispielsweise, dass die Ausführung verzögert wird. Alle Attribute wie do always/do resetwait haben dann eine bestimmte Wirkung darauf, wie sich das reading state verändert? Durch diese Veränderung macht dann das DOIF mal dies und mal das?

Im Reading state steht viel mehr der aktuelle Zustand, also der Zweig der zuletzt ausgeführt wurde und abhängig davon wird entschieden, ob der Zweig noch mal ausgeführt werden darf (do always) oder eben nicht.

Hinzukommt kommt die Geschichte mit wait-Timern, wie schon beschrieben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andies

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

Zitat von: andies am 16 März 2020, 19:13:44
Ist ein "Zweig" das, was eine Zeile in dem Bild in https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Struktur_und_Verhalten_des_DOIF darstellt? Oder ist ein Zweig das zuletzt ausgeführte Kommando?

Mit Zweig ist jeweils Zeile im Diagramm gemeint.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andies

Ich habe mal versucht, meine Erkenntnisse in der Wikiseite zu verewigen. Vielleicht schaust du mal, ob ich da was falsch gemacht habe: https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Struktur_und_Verhalten_des_DOIF
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

Zitat von: andies am 17 März 2020, 09:32:44
Ich habe mal versucht, meine Erkenntnisse in der Wikiseite zu verewigen. Vielleicht schaust du mal, ob ich da was falsch gemacht habe: https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Struktur_und_Verhalten_des_DOIF

Ich habe keine Einwände.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#24
Zitat(sich also der Status oder der Inhalt des Readings ändert)

Halte ich für falsch, da der Status für Sequenzen keinen Statuswechsel im beschriebenen Sinne (ohne Attribute, z.B. do resetwait) darstellt.

Neu:
ZitatEin '''Statuswechsel''' liegt vor, wenn das device in einen anderen Zweig wechselt
Diese Aussage gibt's jetzt 2x im Text
Alt:
ZitatEin '''Statuswechsel''' findet statt nachdem ein anderer Bedingungszweig '''wahr''' wurde und die zugehörigen '''Befehle''' ausgeführt worden sind.
hier würde ich
ZitatZweig entspricht einer Zeile in dem obigen Diagramm.
platzieren dann ist es näher am zu erläutenden Text, oder man lässt es weg, denn
Zitatund die zugehörigen '''Befehle''' ausgeführt worden sind
erläutert ja schon, wann ein Statuswechsel erfolgt ist.

Damian

Zitat von: Ellert am 17 März 2020, 19:02:36
Halte ich für falsch, da der Status für Sequenzen keinen Statuswechsel im beschriebenen Sinne (ohne Attribute, z.B. do resetwait) darstellt.
ja, an die Zwischenzustände habe ich nicht gedacht. Es gilt nur für Endzustände wie cmd_1, cmd_2 usw.

Vielleicht finden wir noch eine Formulierung, die den Statuswechsel präziser definiert. Offenbar war andies nicht klar, was mit Statuswechsel ursprünglich gemeint war.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Vielleicht:

ZitatEin Zweig oder Bedingungszweig wird im DOIF von einem DOIF-Schlüsselwort (DOIF, DOELSEIF, DOELSE) eingeleitet.

Das ist dann unabhängig von einer grafischen Darstellung oder Zeilenumbrüchen in der Gerätedefinition.




andies

#27
Das habe ich jetzt mal eingetragen. Ich hätte gern noch eine bessere Formulierung für "Status", da scheine ich nicht den Nagel auf den Kopf getroffen zu haben. Wo ist denn das zweite Mal "Ein '''Statuswechsel''' liegt vor, wenn das device in einen anderen Zweig wechselt", dann können wir das ja löschen oder umformulieren.

Noch eine Frage zu Zweig: Klar ist, wie er eingeleitet wird. Wie endet er? Zeilenende im Diagramm?

<edit> eingearbeitet
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

Zitat von: andies am 17 März 2020, 19:39:09
Noch eine Frage zu Zweig: Klar ist, wie er eingeleitet wird. Wie endet er? Zeilenende im Diagramm?

Genau, wie der Zweig am Baum :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#29
Ellerts Beitrag:
ZitatDas ist eine schwierig zu beantwortende Frage.  Der Zweig endet spätestens vor dem Beginn des nächsten Zweiges oder im Falle des Fehlens eines solchen, am Ende der Definiton. Wobei noch zu klären wäre, ob vor oder nach dem zweigtrennenden Leerzeichen. Hierbei ist natürlich zu erwägen ob das Leerzeichen als Präprozessorsteuerzeichen zu werten ist oder zum Schlüsselwort gehörend gerechnet wird.

Damians Beitrag:

Und ich dachte er bezieht sich auf deine Abbildung im Einsteigerleitfaden - dort kann ich keine Leerzeichen erkennen ;)

Edit: Ich habe leider wieder den Zitat- mit dem Änderungsknopf verwechselt und kann den ursprünglichen Beitrag nicht wiederherstellen.