Mahlzeit zusammen,
für die Adventszeit habe ich versucht, mir mein DOIF für die Sonnenauf- und -untergangsgesteuerte Schaltung der Jalousien im Erdgeschoss so anzuspassen, dass bestimmte Rollos zeitversetzt später zufahren, damit man noch die Weihnachtsbeleuchtung draußen genießen kann.
Dazu steckt im DOIF außerdem noch eine Art "Frostschutz".
Leider klappt mein Vorhaben immer noch nicht zufriedenstellend...
Hier mal das DOIF in "einfachen" Worten:
Wenn (DOIF)
STATE des dummy = "Tag", fahre alle Rollos auf
(Tag wird durch ein weiteres DOIF mit sunrise-sunset ermittelt)
Sonst wenn (DOELSEIF)
STATE des dummy = "Adventszeit" und Wettervorhersage für Morgen < 0, fahre Rollos entsprechend auf Frostschutz, dabei zwei Rollos etwas später
(Adventszeit wird durch sub in der 99_myUtils ermittelt und diser Status wird im dummy nur nach Sonnenuntergang gesetzt)
Sonst wenn (DOELSEIF)
STATE des dummy = "Adventszeit" und Wettervorhersage für Morgen >= 0, fahre Rollos zu, dabei zwei Rollos etwas später
Sonst (DOELSE)
Wenn (IF) Wettervorhersage für Morgen < 0, fahre Rollos entsprechend auf Frostschutz, sonst (ELSE) fahre Rollos zu
Mein Problem, bzw. das was ich nicht verstehe, ist, dass damit, sobald die Wettervorhersage triggert, die Rollos auch tagsüber zu fahren (also der DOELSE-Fall eintritt), obwohl der dummy den STATE "Tag" hat...
Muss ich wohl in den DOELSE Teil noch die Bedingung einbauen, dass der dummy dafür den STATE "Tag" nicht hat?
Ich hoffe ihr versteht, was ich meine, bzw. könnt meinen Ausführungen folgen...
Ich komme hier leider nicht weiter...
Danke schonmal für jegliche Hilfe und Erklärung!
Hier noch ein list vom DOIF und dem entsprechenden dummy
Gruß
Andreas
DOIF
Internals:
DEF ([du_eg_rollos_zeitautomatik_parameter] eq "Tag") (set (ez|wz|ku|gb).*rollo.* auf) DOELSEIF ([du_eg_rollos_zeitautomatik_parameter] eq "Adventszeit" and [Wetter:fc2_low_c] < 0) (set gb_103_rollo:FILTER=level>40 40) (set wz_105_rollo_1:FILTER=level>35 35) (set (ez_105_rollo_2|ez_105_rollo_3):FILTER=level>20 20) (set ku_104_rollo:FILTER=level>30 30) (set ez_105_rollo_1:FILTER=level>20 20) (set wz_105_rollo_2:FILTER=level>20 20) DOELSEIF ([du_eg_rollos_zeitautomatik_parameter] eq "Adventszeit" and [Wetter:fc2_low_c] >= 0) (set (gb_103_rollo|wz_105_rollo_1|ez_105_rollo_2|ez_105_rollo_3|ku_104_rollo):FILTER=level>0 zu) (set ez_105_rollo_1:FILTER=level>0 zu) (set wz_105_rollo_2:FILTER=level>0 zu) DOELSE (IF ([Wetter:fc2_low_c] < 0) (set gb_103_rollo:FILTER=level>40 40,set wz_105_rollo_1:FILTER=level>35 35,set ku_104_rollo:FILTER=level>30 30,set (wz_105_rollo_2|ez.*rollo.*):FILTER=level>20 20) ELSE (set (ez|wz|ku|gb).*rollo.*:FILTER=level>0 zu))
NAME di_eg_rollos_zeitautomatik
NR 312
NTFY_ORDER 50-di_eg_rollos_zeitautomatik
STATE cmd_4
TYPE DOIF
Readings:
2015-12-20 10:43:47 Device Wetter
2015-12-20 10:13:45 cmd_event Wetter
2015-12-20 10:13:45 cmd_nr 4
2015-12-20 10:43:47 e_Wetter_fc2_low_c 8
2015-12-20 08:15:00 e_du_eg_rollos_zeitautomatik_parameter_STATE Tag
2015-12-20 10:13:45 state cmd_4
2015-12-19 23:43:15 wait_timer no timer
Condition:
0 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Tag"
1 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Adventszeit" and ReadingValDoIf('Wetter','fc2_low_c','') < 0
2 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Adventszeit" and ReadingValDoIf('Wetter','fc2_low_c','') >= 0
Devices:
0 du_eg_rollos_zeitautomatik_parameter
1 du_eg_rollos_zeitautomatik_parameter Wetter
2 du_eg_rollos_zeitautomatik_parameter Wetter
all du_eg_rollos_zeitautomatik_parameter Wetter
Do:
0:
0 set (ez|wz|ku|gb).*rollo.* auf
1:
0 set gb_103_rollo:FILTER=level>40 40
1 set wz_105_rollo_1:FILTER=level>35 35
2 set (ez_105_rollo_2|ez_105_rollo_3):FILTER=level>20 20
3 set ku_104_rollo:FILTER=level>30 30
4 set ez_105_rollo_1:FILTER=level>20 20
5 set wz_105_rollo_2:FILTER=level>20 20
2:
0 set (gb_103_rollo|wz_105_rollo_1|ez_105_rollo_2|ez_105_rollo_3|ku_104_rollo):FILTER=level>0 zu
1 set ez_105_rollo_1:FILTER=level>0 zu
2 set wz_105_rollo_2:FILTER=level>0 zu
3:
0 IF ([Wetter:fc2_low_c] < 0) (set gb_103_rollo:FILTER=level>40 40,set wz_105_rollo_1:FILTER=level>35 35,set ku_104_rollo:FILTER=level>30 30,set (wz_105_rollo_2|ez.*rollo.*):FILTER=level>20 20) ELSE (set (ez|wz|ku|gb).*rollo.*:FILTER=level>0 zu)
Helper:
globalinit 1
last_timer 0
sleepdevice Wetter
sleepsubtimer -1
sleeptimer -1
Internals:
0 du_eg_rollos_zeitautomatik_parameter:STATE
1 du_eg_rollos_zeitautomatik_parameter:STATE
2 du_eg_rollos_zeitautomatik_parameter:STATE
all du_eg_rollos_zeitautomatik_parameter:STATE
Itimer:
Readings:
1 Wetter:fc2_low_c
2 Wetter:fc2_low_c
all Wetter:fc2_low_c
State:
Trigger:
Attributes:
room 999_Automatiken
wait 0:0,0,0,0,12600,8100:0,12600,8100:0
dummy
Internals:
NAME du_eg_rollos_zeitautomatik_parameter
NR 303
STATE Tag
TYPE dummy
Readings:
2015-12-20 00:02:00 Advent 1
2015-12-20 08:15:00 Tag 1
Attributes:
readingList Advent Tag
room 999_Automatiken
stateFormat {if (ReadingsVal($name,"Advent","")==1 && ReadingsVal($name,"Tag","")==0) {"Adventszeit"} elsif (ReadingsVal($name,"Advent","")==0 && ReadingsVal($name,"Tag","")==0) {"Normalzeit"} else {"Tag"}}
du hast ganz hinten ein "ELSE" drin..! Ist das richtig
Ich glaube Damian hat mal geschrieben das es in bestimmten Fällen mit einem DOELSE zum Schluss Probleme geben kann, bei mir war das in einem DOIF mal so das habe ich dann mit DOELSEIF ersetzt
Hi,
ja, mit dem IF...ELSE im DOELSE-Fall wollte ich nochmals eine Unterscheiden für Frost/kein Frost einbauen.
Wusste nicht, dass das problematisch sein kann...
Ich werd es mal mit der DOESLEIF-Variante probieren und dann berichten.
Dankeschön schonmal für diese Info!
Gruß
Andreas
Guten Abend,
mit der von moonsorrox vorgeschlagenen Änderung mittels DOELSEIF-Variante funktioniert die Steuerung nun (erstmal)...
Danke nochmal für den Hinweis.
Gruß
Andreas
Ahoi,
da bin ich nochmal...
hat leider trotz DOELSEIF-Variante heute wieder nicht geklappt.
Jalousien haben eben den Befehl zum Schließen bekommen und danach sofort zum Öffnen.
Logfile:
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_2 off
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_3 off
2015.12.22 17:02:20 3: CUL_HM set ku_104_rollo off
2015.12.22 17:02:20 3: CUL_HM set wz_105_rollo_1 off
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_2 on
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_3 on
2015.12.22 17:02:20 3: CUL_HM set ku_104_rollo on
2015.12.22 17:02:20 3: CUL_HM set wz_105_rollo_1 on
nochmal ein list vom DOIF
Internals:
DEF ([du_eg_rollos_zeitautomatik_parameter] eq "Tag") (set (ez|wz|ku|gb).*rollo.* auf)
DOELSEIF ([du_eg_rollos_zeitautomatik_parameter] eq "Adventszeit" and [Wetter:fc2_low_c] < 0)
(set gb_103_rollo:FILTER=level>40 40)
(set wz_105_rollo_1:FILTER=level>35 35)
(set (ez_105_rollo_2|ez_105_rollo_3):FILTER=level>20 20)
(set ku_104_rollo:FILTER=level>30 30)
(set ez_105_rollo_1:FILTER=level>20 20)
(set wz_105_rollo_2:FILTER=level>20 20)
DOELSEIF ([du_eg_rollos_zeitautomatik_parameter] eq "Adventszeit" and [Wetter:fc2_low_c] >= 0)
(set (gb_103_rollo|wz_105_rollo_1|ez_105_rollo_2|ez_105_rollo_3|ku_104_rollo):FILTER=level>0 zu)
(set ez_105_rollo_1:FILTER=level>0 zu)
(set wz_105_rollo_2:FILTER=level>0 zu)
DOELSEIF ([du_eg_rollos_zeitautomatik_parameter] eq "Normalzeit" and [Wetter:fc2_low_c] < 0)
(set gb_103_rollo:FILTER=level>40 40,set wz_105_rollo_1:FILTER=level>35 35,set ku_104_rollo:FILTER=level>30 30,set (wz_105_rollo_2|ez.*rollo.*):FILTER=level>20 20)
DOELSEIF ([du_eg_rollos_zeitautomatik_parameter] eq "Normalzeit" and [Wetter:fc2_low_c] >= 0)
(set (ez|wz|ku|gb).*rollo.*:FILTER=level>0 zu)
NAME di_eg_rollos_zeitautomatik
NR 312
NTFY_ORDER 50-di_eg_rollos_zeitautomatik
STATE cmd_1
TYPE DOIF
Readings:
2015-12-22 17:02:20 Device du_eg_rollos_zeitautomatik_parameter
2015-12-22 17:02:20 cmd_event du_eg_rollos_zeitautomatik_parameter
2015-12-22 17:02:20 cmd_nr 1
2015-12-22 15:18:57 e_Wetter_fc2_low_c 5
2015-12-22 17:02:20 e_du_eg_rollos_zeitautomatik_parameter_STATE Tag
2015-12-22 17:02:20 state cmd_1
2015-12-22 17:02:20 wait_timer no timer
Condition:
0 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Tag"
1 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Adventszeit" and ReadingValDoIf('Wetter','fc2_low_c','') < 0
2 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Adventszeit" and ReadingValDoIf('Wetter','fc2_low_c','') >= 0
3 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Normalzeit" and ReadingValDoIf('Wetter','fc2_low_c','') < 0
4 InternalDoIf('du_eg_rollos_zeitautomatik_parameter','STATE','') eq "Normalzeit" and ReadingValDoIf('Wetter','fc2_low_c','') >= 0
Devices:
0 du_eg_rollos_zeitautomatik_parameter
1 du_eg_rollos_zeitautomatik_parameter Wetter
2 du_eg_rollos_zeitautomatik_parameter Wetter
3 du_eg_rollos_zeitautomatik_parameter Wetter
4 du_eg_rollos_zeitautomatik_parameter Wetter
all du_eg_rollos_zeitautomatik_parameter Wetter
Do:
0:
0 set (ez|wz|ku|gb).*rollo.* auf
1:
0 set gb_103_rollo:FILTER=level>40 40
1 set wz_105_rollo_1:FILTER=level>35 35
2 set (ez_105_rollo_2|ez_105_rollo_3):FILTER=level>20 20
3 set ku_104_rollo:FILTER=level>30 30
4 set ez_105_rollo_1:FILTER=level>20 20
5 set wz_105_rollo_2:FILTER=level>20 20
2:
0 set (gb_103_rollo|wz_105_rollo_1|ez_105_rollo_2|ez_105_rollo_3|ku_104_rollo):FILTER=level>0 zu
1 set ez_105_rollo_1:FILTER=level>0 zu
2 set wz_105_rollo_2:FILTER=level>0 zu
3:
0 set gb_103_rollo:FILTER=level>40 40,set wz_105_rollo_1:FILTER=level>35 35,set ku_104_rollo:FILTER=level>30 30,set (wz_105_rollo_2|ez.*rollo.*):FILTER=level>20 20
4:
0 set (ez|wz|ku|gb).*rollo.*:FILTER=level>0 zu
Helper:
globalinit 1
last_timer 0
sleepdevice du_eg_rollos_zeitautomatik_parameter
sleepsubtimer 1
sleeptimer -1
Internals:
0 du_eg_rollos_zeitautomatik_parameter:STATE
1 du_eg_rollos_zeitautomatik_parameter:STATE
2 du_eg_rollos_zeitautomatik_parameter:STATE
3 du_eg_rollos_zeitautomatik_parameter:STATE
4 du_eg_rollos_zeitautomatik_parameter:STATE
all du_eg_rollos_zeitautomatik_parameter:STATE
Itimer:
Readings:
1 Wetter:fc2_low_c
2 Wetter:fc2_low_c
3 Wetter:fc2_low_c
4 Wetter:fc2_low_c
all Wetter:fc2_low_c
State:
Trigger:
Attributes:
room 999_Automatiken
wait 0:0,0,0,0,12600,8100:0,12600,8100:0
Gruß
Andreas
Zitat von: Vize am 22 Dezember 2015, 17:14:29
Ahoi,
da bin ich nochmal...
hat leider trotz DOELSEIF-Variante heute wieder nicht geklappt.
Jalousien haben eben den Befehl zum Schließen bekommen und danach sofort zum Öffnen.
Logfile:
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_2 off
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_3 off
2015.12.22 17:02:20 3: CUL_HM set ku_104_rollo off
2015.12.22 17:02:20 3: CUL_HM set wz_105_rollo_1 off
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_2 on
2015.12.22 17:02:20 3: CUL_HM set ez_105_rollo_3 on
2015.12.22 17:02:20 3: CUL_HM set ku_104_rollo on
2015.12.22 17:02:20 3: CUL_HM set wz_105_rollo_1 on
lt. list-Ausgabe
Zitat2015-12-22 17:02:20 cmd_event du_eg_rollos_zeitautomatik_parameter
wurde um 17:02:20 dein DOIF-Modul getriggert und damit wurde der erste Fall cmd_1 zum Öffnen ausgelöst.
Offenbar muss in der gleichen Sekunde kurz zuvor du_eg_rollos_zeitautomatik_parameter mit "Normalzeit" getriggert haben, denn es wurde offenbar der letzte Fall zum Schließen getriggert.
Das müsstest du z. B. im Eventmonitor bzw. durch Loggen von du_eg_rollos_zeitautomatik_parameter herausfinden.
Ein DOIF-Modul führt bei einem Trigger immer nur einen DO-Zweig aus und niemals mehr.
Gruß
Damian
Hallo Damian,
danke für deine Antwort.
Die Readings von du_eg_rollos_zeitautomatik_parameter werden bzw. wurden durch mehrere weitere DOIFS gefüllt.
Leider bin ich schon wieder am basteln, so dass ich davon zur Zeit kein list mehr liefern kann.
Vor 17:02:20 war der STATE von du_eg_rollos_zeitautomatik_parameter "Tag" und das DOIF di_eg_rollos_zeitautomatik im state cmd_1. Um 17:02:20 mehrfaches "Klackern" in den Aktoren und der STATE von du_eg_rollos_zeitautomatik_parameter blieb (bzw. sprang eventuell umgehend wieder um) "Tag". DOIF di_eg_rollos_zeitautomatik wieder im state cmd_1.
Dazu die bereits erwähnten Logeinträge.
Das DOIF zum Reading "Tag" hatte ich so formuliert:
([{sunrise(600,"06:15","08:00")}-{sunset(300,"17:00","22:45")}|8] or [{sunrise(0,"08:15","09:30")}-{sunset(300,"17:00","23:00")}|7])
(set du_eg_rollos_zeitautomatik_parameter Tag 1)
DOELSE (set du_eg_rollos_zeitautomatik_parameter Tag 0)
Ich hab irgendwie auch das Gefühl, dass das sunrise-Modul irgendwie damit nicht klarkommt...siehe post von moonsorrox.
Ich bin erstmal mit meinem Latein am Ende...
Gruß
Andreas
Zitat von: Vize am 22 Dezember 2015, 19:46:52
Hallo Damian,
danke für deine Antwort.
Die Readings von du_eg_rollos_zeitautomatik_parameter werden bzw. wurden durch mehrere weitere DOIFS gefüllt.
Leider bin ich schon wieder am basteln, so dass ich davon zur Zeit kein list mehr liefern kann.
Vor 17:02:20 war der STATE von du_eg_rollos_zeitautomatik_parameter "Tag" und das DOIF di_eg_rollos_zeitautomatik im state cmd_1. Um 17:02:20 mehrfaches "Klackern" in den Aktoren und der STATE von du_eg_rollos_zeitautomatik_parameter blieb (bzw. sprang eventuell umgehend wieder um) "Tag". DOIF di_eg_rollos_zeitautomatik wieder im state cmd_1.
Dazu die bereits erwähnten Logeinträge.
Das DOIF zum Reading "Tag" hatte ich so formuliert:
([{sunrise(600,"06:15","08:00")}-{sunset(300,"17:00","22:45")}|8] or [{sunrise(0,"08:15","09:30")}-{sunset(300,"17:00","23:00")}|7])
(set du_eg_rollos_zeitautomatik_parameter Tag 1)
DOELSE (set du_eg_rollos_zeitautomatik_parameter Tag 0)
Ich hab irgendwie auch das Gefühl, dass das sunrise-Modul irgendwie damit nicht klarkommt...siehe post von moonsorrox.
Ich bin erstmal mit meinem Latein am Ende...
Gruß
Andreas
ja, hier setzt du den dummy auf "Tag 0" oder "Tag 1", abgefragt wird aber "Tag" das passt schon mal nicht. Dann hoffe ich, dass du do always hier nicht gesetzt hast, sonst wird das Modul bei gleicher Zeit hier gesetzt von sunset (kommt bei dir zwei mal vor) auch zwei mal getriggert.
Gruß
Damian
Zitat von: Damian am 23 Dezember 2015, 10:54:26
ja, hier setzt du den dummy auf "Tag 0" oder "Tag 1", abgefragt wird aber "Tag" das passt schon mal nicht. Dann hoffe ich, dass du do always hier nicht gesetzt hast
Hi Damian,
im dummy setze ich ein reading auf Tag 1 bzw. Tag 0. Im DOIF di_eg_rollos_zeitautomatik zum Auf- bzw. Zufahren rufe ich aber den STATE des dummy ab (z.B. [du_eg_rollos_zeitautomatik_parameter] eq "Tag"). Diesen biege ich mir per stateFormat zurecht, und der hat je nach Readings-Kombination den entsprechenden STATE (siehe meinen ersten post, list vom dummy).
do always ist nicht gesetzt.
Mich wundert halt nur, dass das reading "Tag" im dummy nach 17:02:20 nicht auf 0 gesetzt wurde, bzw. vermute ich aufgrund des Klackerns in den Aktoren, dass es ganz kurz auf 0 und sofort wieder auf 1 gesetzt wurde.
Gruß
Andreas