Probleme mit Wochentagssteuerung im DOIF

Begonnen von fast-eddy, 28 August 2016, 13:05:05

Vorheriges Thema - Nächstes Thema

fast-eddy

Hallo zusammen,

nachdem ich das Forum durchforsted habe, bin ich wohl der einzige bei dem die Wochentagssteuerung in der Notation 0-8
nicht sauber funktioniert. Daher gehe ich mal davon aus, dass ich einen Fehler in der Syntax habe, den ich offensichlich immer wieder übersehe.

ZIELSTELLUNG:
Ich möchte meinen Gartenbrunnen bzw. die Gartenbeleuchtung abhängig von Wochentag, Tageszeit, Wetter, Prensence Status ein- bzw ausschalten.
Bis auf die Ausschaltezeit bzw. Wochentagssteuerung funktioniert das alles einwandfrei.


  • Montag - Donnerstag soll der Brunnen bis 22:00 Uhr laufen
  • Freitags und am Wochendende bis 23:00 Uhr
  • Nur bei "schönem" Wetter läuft der Brunnen
  • Und nur wenn jemand zu Hause ist

PROBLEM:
Tatsächlich schaltet sich der Brunnen aber IMMER um 22:00 Uhr ab - egal welcher Wochentag.
Das gleiche Problem habe ich bei einem fast identischen DOIF, mit dem ich die Gartenbeleuchtung schalte.
Paradoxerweise schaltet sich der Brunnen am Wochenende um 22.01 wieder an und danach um 23:00 Uhr wieder ab.
Dieses Verhalten tritt nur bei der Brunnensteuerung (code siehe unten) auf. 

Das DOIF hierfür sieht folgendermassen aus:

define timer_BRUNNEN DOIF ([14:00-22:00|1234] and ([Wetter:code] ge "26" and [Wetter:code] le "36") and [GARTEN:temperature] >= 20 and [RESIDENTS] eq "home")
(set garten_BRUNNEN on)
DOELSEIF ([14:00-23:00|5] and ([Wetter:code] ge "26" and [Wetter:code] le "36") and [GARTEN:temperature] >= 20 and [RESIDENTS] eq "home")
(set garten_BRUNNEN on)
DOELSEIF ([10:00-23:00|7] and ([Wetter:code] ge "26" and [Wetter:code] le "36") and [GARTEN:temperature] >= 20 and [RESIDENTS] eq "home")
(set garten_BRUNNEN on)
DOELSE
(set garten_BRUNNEN off)


Hat jemand eine Idee wo ich mein Fehler im Code versteckt ist?
Für Eure Anregungen und Ideen bereits im Voraus besten Dank....

Grüße,
Ralf
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

CoolTux


define timer_BRUNNEN DOIF ([14:00-22:00|1234] and ([?Wetter:code] > 26 and [?Wetter:code] < 36) and [?GARTEN:temperature] >= 20 and [?RESIDENTS] eq "home")
(set garten_BRUNNEN on)
DOELSEIF ([14:00-23:00|5] and ([?Wetter:code] > 26 and [?Wetter:code] < 36) and [?GARTEN:temperature] >= 20 and [?RESIDENTS] eq "home")
(set garten_BRUNNEN on)
DOELSEIF ([10:00-23:00|7] and ([?Wetter:code] > 26 and [?Wetter:code] < 36) and [?GARTEN:temperature] >= 20 and [?RESIDENTS] eq "home")
(set garten_BRUNNEN on)
DOELSE
(set garten_BRUNNEN off)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fast-eddy

@CoolTux:
Danke für die schnelle Antwort. Nur stehe ich irgendwie auf dem Schlauch.

Soweit ich das verstehe mache ich durch die Verwendung der "?" diese Readings doch zu Nebenbedingungen d.h. verhindere, dass diese triggern - oder?
Aber genau das will ich ja  - wenn ich z.B. das Haus verlasse oder sich das Wetter verschlechtert soll der Brunnen auch ausgeschaltet und umgekehrt wieder eingeschaltet werden.
Der Teil der Bedingungen funktioniert ja. Nur die Wochentagssteuerung wird komplett ignoriert. Ausgeschaltet wird immer um 22:00 Uhr , egal ob ...|1234 oder ...|5 oder ...|7
Aber vielleicht habe ich Deinen Hinweis ja auch missverstanden...


 
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

CoolTux

Hallo Eddy,

Eigentlich schaltet das DOIF immer bei den angegebenen Zeiten, daher denke ich das es ausreichen sollte diese zu triggern. Warum sollte er das home triggern wenn die Zeit nicht stimmt? Das belastet nur unnötig. Die Zeit ist entscheidend und die Triggern ja immer da wo sie angegeben ist und dann wird der Rest nur noch überprüft.
Ich bilde mir ein das die Zeiten stimmen, 7 müsste ja Wochenende sein, oder? Dann passt das.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fast-eddy

OK - danke für die Erklärung.
Werde es gleich mal ausprobieren.

Grüße,
Ralf
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Ellert

#5
Zitatoweit ich das verstehe mache ich durch die Verwendung der "?" diese Readings doch zu Nebenbedingungen d.h. verhindere, dass diese triggern - oder?
Aber genau das will ich ja  - wenn ich z.B. das Haus verlasse oder sich das Wetter verschlechtert soll der Brunnen auch ausgeschaltet und umgekehrt wieder eingeschaltet werden.
Der Teil der Bedingungen funktioniert ja. Nur die Wochentagssteuerung wird komplett ignoriert. Ausgeschaltet wird immer um 22:00 Uhr , egal ob ...|1234 oder ...|5 oder ...|7
Aber vielleicht habe ich Deinen Hinweis ja auch missverstanden...

Bei dieser Bedingung [14:00-22:00|1234] prüft das DOIF jeden Tag um 22.00 Uhr, ob die Bedingung wahr ist. Bei 5 oder 7 ist sie nicht wahr, dann tritt der DOELSE-Fall ein, da alle anderen Bedingungen nicht geprüft werden, weil kein Auslöser vorhanden ist. Wird die Temperatur nach 22.00 Uhr aktualisiert, werden alle Bedingungen geprüft und die erste wahre Bedingung schaltet wieder ein.

Eine Lösung unter Beibehaltung aller Auslöser, wäre die Oder-Verknüpfung der Zeiten
(([14:00-22:00|1234] or [14:00-23:00|5] or [10:00-23:00|7]) and [Wetter:code] > 26 and [Wetter:code] < 36 and [GARTEN:temperature] >= 20 and [RESIDENTS] eq "home") (set ..)
DOELSE (set ..)

fast-eddy

... hey Jungs Ihr seid der Hammer!
Ich dachte bei dem Wetter liegt am Sonntag alles am Baggersee und dann lerne ich mit Euch noch "richtig" programmieren!

@Ellert:
Ich glaube deine Idee erklärt bzw. löst mein Problem. Mal abwarten ob das DOIF heute abend schon richtig triggert.
@CoolTux:
Wie vermutet triggert das DOIF nach deinem Vorschalg nur auf Zeit. Ändert sich ein anders Reading reagiert das DOIF nicht.
trotzdem danke!

Danke Euch und noch ein schönes Restwochenende...
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

CoolTux

Zitat von: Ellert am 28 August 2016, 16:22:48
Bei dieser Bedingung [14:00-22:00|1234] prüft das DOIF jeden Tag um 22.00 Uhr, ob die Bedingung wahr ist. Bei 5 oder 7 ist sie nicht wahr, dann tritt der DOELSE-Fall ein, da alle anderen Bedingungen nicht geprüft werden, weil kein Auslöser vorhanden ist. Wird die Temperatur nach 22.00 Uhr aktualisiert, werden alle Bedingungen geprüft und die erste wahre Bedingung schaltet wieder ein.

Eine Lösung unter Beibehaltung aller Auslöser, wäre die Oder-Verknüpfung der Zeiten
(([14:00-22:00|1234] or [14:00-23:00|5] or [10:00-23:00|7]) and [Wetter:code] > 26 and [Wetter:code] < 36 and [GARTEN:temperature] >= 20 and [RESIDENTS] eq "home") (set ..)
DOELSE (set ..)


Triggert er bei dieser Bedingung nicht zwischen 14 und 22 Uhr und nicht nur um 22 Uhr?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ellert

Die Bedingung wird zum Zeitpunkt der Timer und der Readingsaktualisierungen geprüft.

Bei dem Ausdruck [14:00-22:00] wird täglich um 14 Uhr und 22 Uhr die Bedingung geprüft. Ab der Prüfung um 14 Uhr ist [14:00-22:00] wahr und ab der Prüfung um 22 Uhr ist die Zeitspanne unwahr.

Bartimaus

Zitat von: Ellert am 28 August 2016, 16:22:48
Bei dieser Bedingung [14:00-22:00|1234] prüft das DOIF jeden Tag um 22.00 Uhr, ob die Bedingung wahr ist. Bei 5 oder 7 ist sie nicht wahr, dann tritt der DOELSE-Fall ein, da alle anderen Bedingungen nicht geprüft werden, weil kein Auslöser vorhanden ist. Wird die Temperatur nach 22.00 Uhr aktualisiert, werden alle Bedingungen geprüft und die erste wahre Bedingung schaltet wieder ein.

Eine Lösung unter Beibehaltung aller Auslöser, wäre die Oder-Verknüpfung der Zeiten
(([14:00-22:00|1234] or [14:00-23:00|5] or [10:00-23:00|7]) and [Wetter:code] > 26 and [Wetter:code] < 36 and [GARTEN:temperature] >= 20 and [RESIDENTS] eq "home") (set ..)
DOELSE (set ..)


Hi,

d.h. wenn sich dann Montags|1 um 15:11 z.B. [RESIDENTS] auf <> "home" ändert, ist die Bedingung unwahr, DOELSE tritt ein, Gerät wird ausgeschaltet, und um 16:15 [RESIDENTS] = "home" dann ist die Bedingung wieder wahr und DOIF tritt ein und es wird wieder eingeschaltet ? Oder muss dafür dann [RESIDENTS:"home"] gesetzt werden ? (Event statt Status)
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Ellert

Zitat von: Bartimaus am 08 September 2016, 12:47:56
Hi,

d.h. wenn sich dann Montags|1 um 15:11 z.B. [RESIDENTS] auf <> "home" ändert, ist die Bedingung unwahr, DOELSE tritt ein, Gerät wird ausgeschaltet, und um 16:15 [RESIDENTS] = "home" dann ist die Bedingung wieder wahr und DOIF tritt ein und es wird wieder eingeschaltet ? Oder muss dafür dann [RESIDENTS:"home"] gesetzt werden ? (Event statt Status)

So sollte es sein, funktioniert es denn nicht?