Hauptmenü

Verständnisfrage

Begonnen von doman75, 23 Oktober 2018, 08:50:50

Vorheriges Thema - Nächstes Thema

doman75

Hallo,

ich habe ein DOIF


([23:30-04:45] and ($month < 11 or $month > 3) and [wf_Haustuer:state] eq "closed") (set HM_Haustuerschloss lock)


von diesem erwartete ich das es 23:30 die Haustür zu schließt wenn die Haustur bereits zu ist, und zwischen April und Oktober. Außerdem erwartete ich das wenn die Haustür nach 23:30 geschlossen wird, abgeschlossen wird, aber es funktioniert irgendwie nicht. Was mache falsch?

Danke und Grüße
Swen

der-Lolo

Da sind zuviele Trigger die ZEITGLEICH kommen müssten...
Wenn DU nur eine abfrage haben willst setz ein ? vor die bedingung, dann wird nicht auf das event gewartet sondern der aktuelle Zustand ausgewertet...

[?wf_Haustuer:state] eq "closed"

Christoph Morrison

Zitat von: doman75 am 23 Oktober 2018, 08:50:50
Hallo,

ich habe ein DOIF


([23:30-04:45] and ($month < 11 or $month > 3) and [wf_Haustuer:state] eq "closed") (set HM_Haustuerschloss lock)


von diesem erwartete ich das es 23:30 die Haustür zu schließt wenn die Haustur bereits zu ist, und zwischen April und Oktober. Außerdem erwartete ich das wenn die Haustür nach 23:30 geschlossen wird, abgeschlossen wird, aber es funktioniert irgendwie nicht. Was mache falsch?

($month < 11 or $month > 3) wird nicht das tun, was du erwartest: Die Tür wird, sobald du den Hinweis von der-Lolo berücksichtigt hast, in jedem Monat um 23:30 geschlossen werden (prinzipiell) denn entweder Monat ist kleiner als 11, was auf jeden Monat bis November zutrifft oder aber größer als März, was auf jeden Monat nach März zutrifft - ergo jeden Monat. or sollte and sein.

doman75

Zitat von: Christoph Morrison am 23 Oktober 2018, 09:48:41
($month < 11 or $month > 3) wird nicht das tun, was du erwartest: Die Tür wird, sobald du den Hinweis von der-Lolo berücksichtigt hast, in jedem Monat um 23:30 geschlossen werden (prinzipiell) denn entweder Monat ist kleiner als 11, was auf jeden Monat bis November zutrifft oder aber größer als März, was auf jeden Monat nach März zutrifft - ergo jeden Monat. or sollte and sein.

Also das mit month hatte ich damals von Damian https://forum.fhem.de/index.php/topic,79573.0.html der ja das DOIF Modul geschrieben hat, daher gehe ich davon aus da es stimmt

gloob

Zitat von: doman75 am 23 Oktober 2018, 09:58:56
Also das mit month hatte ich damals von Damian https://forum.fhem.de/index.php/topic,79573.0.html der ja das DOIF Modul geschrieben hat, daher gehe ich davon aus da es stimmt

Dann aber auch bitte richtig übernehmen

DOIF ([21:00] and ($month >= 11 or $month <= 3)) (set ....)
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

doman75

Zitat von: gloob am 23 Oktober 2018, 10:07:02
Dann aber auch bitte richtig übernehmen

DOIF ([21:00] and ($month >= 11 or $month <= 3)) (set ....)

OK ich habe schlecht kopiert, hier mal das komplette DOIF
Ich wollte es einfach halten, und habe deswegen das Beispiel DOIF eingekürzt

([22:00-04:45] and ($month >= 11 or $month <= 3) and [wf_Haustuer:state] eq "closed") (set HM_Haustuerschloss lock)
DOELSEIF
([23:30-04:45] and ($month > 3 and $month < 11) and [wf_Haustuer:state] eq "closed") (set HM_Haustuerschloss lock)

gloob

#6
Zitat von: doman75 am 23 Oktober 2018, 10:19:57
OK ich habe schlecht kopiert, hier mal das komplette DOIF
Ich wollte es einfach halten, und habe deswegen das Beispiel DOIF eingekürzt

([22:00-04:45] and ($month >= 11 or $month <= 3) and [wf_Haustuer:state] eq "closed") (set HM_Haustuerschloss lock)
DOELSEIF
([23:30-04:45] and ($month > 3 and $month < 11) and [wf_Haustuer:state] eq "closed") (set HM_Haustuerschloss lock)


Dann macht es immer noch keinen Sinn.

$month > 3 and $month < 11[/s]

Ist für jeden Monat wahr und kann man sich sparen.




Hat es einen Grund, warum du es unbedingt mit einem DOIF lösen möchtest? Manchmal ist es einfacher mehrere zu nutzen. Vorallem die Lesbarkeit und Verständlichkeit wird deutlich verbessert.

1. Tür Abschließen wenn sie geschlossen (Trigger = Tür wird geschlossen)

2. Tür Abschließen wenn es 23:30 ist (Trigger = Uhrzeit)
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

doman75

Zitat von: gloob am 23 Oktober 2018, 10:22:43
Dann macht es immer noch keinen Sinn.

$month > 3 and $month < 11

Ist für jeden Monat wahr und kann man sich sparen.

Wieso Monat größer 3 und kleiner 11, kommt bei mir 4-10 raus oder?

gloob

Zitat von: doman75 am 23 Oktober 2018, 10:29:36
Wieso Monat größer 3 und kleiner 11, kommt bei mir 4-10 raus oder?

Okay da habe ich mich verlesen.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Christoph Morrison

perl -e 'use v5.10; for($i = 1; $i < 13; $i++) { say "TRUE für $i" if ($i > 3 and $i<11);}'
TRUE für 4
TRUE für 5
TRUE für 6
TRUE für 7
TRUE für 8
TRUE für 9
TRUE für 10


vs.

perl -e 'use v5.10; for($i = 1; $i < 13; $i++) { say "TRUE für $i" if ($i > 3 or $i<11);}'
TRUE für 1
TRUE für 2
TRUE für 3
TRUE für 4
TRUE für 5
TRUE für 6
TRUE für 7
TRUE für 8
TRUE für 9
TRUE für 10
TRUE für 11
TRUE für 12

Christoph Morrison

#10
Zitat von: gloob am 23 Oktober 2018, 10:07:02
Dann aber auch bitte richtig übernehmen

DOIF ([21:00] and ($month >= 11 or $month <= 3)) (set ....)

Auch nicht was er wollte, oder?

perl -e 'use v5.10; for($i = 1; $i < 13; $i++) { say "TRUE für $i" if ($i >= 11 or $i <= 3);}'
TRUE für 1
TRUE für 2
TRUE für 3
TRUE für 11
TRUE für 12


Ah, man sollte öfter mal die Seite refreshen.

Per

Zitat von: der-Lolo am 23 Oktober 2018, 09:15:57
Da sind zuviele Trigger die ZEITGLEICH kommen müssten...
Nö, Trigger ODER Zustand. Und das kann problemlos wahr sein.
Nur Trigger wäre eine andere Schreibweise.

Zitat von: doman75 am 23 Oktober 2018, 08:50:50aber es funktioniert irgendwie nicht.
Das ist keine Fehlerbeschreibung, mit der irgendwer was anfangen kann. Was geht denn nicht? Stimmen die Zeiten nicht, löst er überhaupt aus, löst er nur einmal aus (-> do always)? Wo ist das List?

Bzgl. der and-oder-or-Diskussion: da im ersten Case ohnehin die Monate 11-3 abgefragt werden, sind sie im zweiten Case sch...egal, man kann den Term ganz weglassen. Leider hat der Fragesteller uns ja anfangs nur einen Teil des DOIFs gepostet, ob er jetzt vollständig ist?

doman75

Ja das DOIF ist jetzt vollständig, es hat gar nix gemacht das DOIF es blieb auf Initailize stehen.

Ich habe jetzt das attr checkall auf all gesetzt, damit sind erste Test erfolgreich gewesen.

Grüße
Swen