FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: hanske am 26 September 2017, 10:28:04

Titel: DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: hanske am 26 September 2017, 10:28:04
Folgendes DOIF schaltet nach einem Event von rt_weather immer ins DOELSE
obwohl das Zeitintervall gültig ist.
Erwartet hätte ich, dass bei gültigem Zeitintervall immer CMD_1 getriggert wird.

DOIF ([09:00-14:00] ) ()
DOELSEIF([rt_weather:humidity] > 70 )()
DOELSE ()


Ist wahrscheinlich bekannt aber ich finde es unlogisch.

Grüße
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Ellert am 26 September 2017, 11:01:23
Schau mal hier https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Struktur_und_Verhalten_des_DOIF

Vielleicht hilft das Deine Erwartung zu korrigieren und die Logik des Verhaltens zu verstehen.
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: hanske am 26 September 2017, 11:23:48
Nein, hat mir nicht geholfen.
Dort steht:
ZitatWenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr.
... und damit auch die erste Bedingung und es müsste der in der Strukturgrafik angezeigte erste Zweig ausgeführt und nicht die anderen  Bedingungen überprüft werden.
Gibt es einen Workaround um mein Beispiel nach "meiner" Logik zum Laufen zu kriegen?
Mehrere DOIFs möchte ich vermeiden.

Danke
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Damian am 26 September 2017, 11:28:43
Vielleicht hilft dir dieser Link: http://fhem.de/commandref_DE.html#DOIF_checkall
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Frank_Huber am 26 September 2017, 12:26:16
Zitat von: hanske am 26 September 2017, 11:23:48
Gibt es einen Workaround um mein Beispiel nach "meiner" Logik zum Laufen zu kriegen?
Mehrere DOIFs möchte ich vermeiden.

vielleicht sagst Du uns mal was du mit dem DOIF erreichen willst?
interessant wäre auch noch ob und welche Attribute gesetzt sind.
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Ellert am 26 September 2017, 14:36:40
Zitat von: hanske am 26 September 2017, 11:23:48
Nein, hat mir nicht geholfen.
Dort steht:... und damit auch die erste Bedingung und es müsste der in der Strukturgrafik angezeigte erste Zweig ausgeführt und nicht die anderen  Bedingungen überprüft werden.
Gibt es einen Workaround um mein Beispiel nach "meiner" Logik zum Laufen zu kriegen?
Mehrere DOIFs möchte ich vermeiden.

Danke

Ich weiss nicht, wo Du das:
und damit auch die erste Bedingung und es müsste der in der Strukturgrafik angezeigte erste Zweig ausgeführt und nicht die anderen  Bedingungen überprüft werden.
gelesen hast, jedenfalls nicht in dem von mir angegebenen Abschnitt.
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: hanske am 26 September 2017, 16:17:51
Dein Link Beispiel C): Kombinierte Ereignis- und Zeitsteuerung
ZitatWenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr.
ZitatDOELSE das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.
Wahrscheinlich ist die Uhrzeit einfach keine "geprüfte Bedingung", warum nicht?

Das "checkall" hat mir aber sehr geholfen. Ich dachte das wäre der Standardfall.

Danke an Damian
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Frank_Huber am 26 September 2017, 16:21:48
Zitat von: hanske am 26 September 2017, 16:17:51
Dein Link Beispiel C): Kombinierte Ereignis- und ZeitsteuerungWahrscheinlich ist die Uhrzeit einfach keine "geprüfte Bedingung", warum nicht?

das wäre dann aber eher:
DOIF ([09:00-14:00] and [rt_weather:humidity] > 70 ) ()
DOELSE ()


kombiniert ist in einem Zweig. Du hast die Kombination in zwei Zweige aufgeteilt.
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Ellert am 26 September 2017, 19:59:40
Zitat von: hanske am 26 September 2017, 16:17:51
Dein Link Beispiel C): Kombinierte Ereignis- und ZeitsteuerungWahrscheinlich ist die Uhrzeit einfach keine "geprüfte Bedingung", warum nicht?

Das "checkall" hat mir aber sehr geholfen. Ich dachte das wäre der Standardfall.

Danke an Damian

Zitat...warum nicht?

Hast Du denn die Erläuterung zu "checkall" nicht gleich gelesen?
ZitatBei der Abarbeitung der Bedingungen, werden nur die Bedingungen überprüft, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten.
Titel: Antw:DOIF mit Zeitintervall schaltet nach Event ins DOELSE
Beitrag von: Per am 04 Oktober 2017, 14:16:46
Zitat von: hanske am 26 September 2017, 16:17:51
Dein Link Beispiel C): Kombinierte Ereignis- und ZeitsteuerungWahrscheinlich ist die Uhrzeit einfach keine "geprüfte Bedingung", warum nicht?
Die Zeit wird nicht geprüft, wenn in diesem Zweig kein aktiver (!) Event vorhanden ist. Und aktiv ist die Zeit an sich (in deinem Beispiel) nur genau um 9 und 14 Uhr.
Dazwischen ist die Bedingung zwar wahr, wird aber mangels Event, nicht geprüft.