Hallo zusammen,
ich verwende jetzt bei mir auch DOIF und habe zu Beginn noch Verständnis-Probleme mit DOIF.
Ziel:
Wegbeleuchtung bei Erreichen bestimmte Dunkelheit einschalten, aber nur, wenn ein Dummy auf "on" steht UND das Event in einem bestimmte Zeitfenste "Dämmerung - Mitternacht" liegt. Das Erreichen des Dämmerungs-Zeitpunktes soll die Beleuchtung aber nicht einschalten, sondern nur das Erreichen der Helligkeitsschwelle.
Dies ist mein bisheriger Ansatz, der aber nicht auslöst, obwohl die Helligkeit längst kleiner ist und das Zeitfenster erreicht ist:
- HMST03Gartenweg = Aktor
- HMBW05SchuppenGarage = Bewegungsmelder
- TGartenwegAnChkBox = Dummy on/off
define di_Beleuchtung_Einschalten DOIF ([HMBW05SchuppenGarage:brightness] < 100 and [?{sunset(-4000,"16:15:03","22:00:03")}-23:59:00] and [?TGartenwegAnChkBox] eq "on" and [?HMST03Gartenweg] eq "off") (set HMST03Gartenweg on)
Nachdem ich das ? bei sunset entfernt hatte, wurde die Beleuchtung bei Erreichen des Zeitpunkts eingeschaltet, aber das ist nicht das Ziel.
Vielen Dank für eure Hilfe,
Heiko
Zitat von: heikoh81 am 04 September 2015, 21:43:14
Hallo zusammen,
ich verwende jetzt bei mir auch DOIF und habe zu Beginn noch Verständnis-Probleme mit DOIF.
Ziel:
Wegbeleuchtung bei Erreichen bestimmte Dunkelheit einschalten, aber nur, wenn ein Dummy auf "on" steht UND das Event in einem bestimmte Zeitfenste "Dämmerung - Mitternacht" liegt. Das Erreichen des Dämmerungs-Zeitpunktes soll die Beleuchtung aber nicht einschalten, sondern nur das Erreichen der Helligkeitsschwelle.
Dies ist mein bisheriger Ansatz, der aber nicht auslöst, obwohl die Helligkeit längst kleiner ist und das Zeitfenster erreicht ist:
- HMST03Gartenweg = Aktor
- HMBW05SchuppenGarage = Bewegungsmelder
- TGartenwegAnChkBox = Dummy on/off
define di_Beleuchtung_Einschalten DOIF ([HMBW05SchuppenGarage:brightness] < 100 and [?{sunset(-4000,"16:15:03","22:00:03")}-23:59:00] and [?TGartenwegAnChkBox] eq "on" and [?HMST03Gartenweg] eq "off") (set HMST03Gartenweg on)
Nachdem ich das ? bei sunset entfernt hatte, wurde die Beleuchtung bei Erreichen des Zeitpunkts eingeschaltet, aber das ist nicht das Ziel.
Vielen Dank für eure Hilfe,
Heiko
Du hast hier nur einen Zustand, damit (set HMST03Gartenweg on) wieder ausgeführt wird, muss zwischendurch der Zustand gewechselt haben, also hell gewesen sein, dass könntest du mit DOELSEIF ([HMBW05SchuppenGarage:brightness] >= 100) erreichen.
Gruß
Damian
Danke für deine Antwort.
Mittels des Zeitfensters will ich ausschließen, dass das Licht einmal tagsüber angeht (zugegeben, eine totale Sonnenfinsternis dürfte eher selten vorkommen - aber es geht um die Übung).
Deshalb habe ich den sunset auch recht großzügig nach vorne gezogen, so dass das Zeitfenster bei Erreichen der Helligkeitsschwelle auf jeden Fall erreicht ist.
Das Zeitfenster soll also kein Ereignis sein, das die Schaltung auslöst. Deshalb habe ich das ? vorangestellt.
Es soll nur Fehlschaltungen am Tag verhindern.
Das einzige Ereignis, das Schalten darf, soll die Helligkeit des Bewegungsmelders sein.
Woran könnte es noch liegen?
Zitat von: heikoh81 am 05 September 2015, 15:46:10
Danke für deine Antwort.
Mittels des Zeitfensters will ich ausschließen, dass das Licht einmal tagsüber angeht (zugegeben, eine totale Sonnenfinsternis dürfte eher selten vorkommen - aber es geht um die Übung).
Deshalb habe ich den sunset auch recht großzügig nach vorne gezogen, so dass das Zeitfenster bei Erreichen der Helligkeitsschwelle auf jeden Fall erreicht ist.
Das Zeitfenster soll also kein Ereignis sein, das die Schaltung auslöst. Deshalb habe ich das ? vorangestellt.
Es soll nur Fehlschaltungen am Tag verhindern.
Das einzige Ereignis, das Schalten darf, soll die Helligkeit des Bewegungsmelders sein.
Woran könnte es noch liegen?
Wenn dein Sensor regelmäßig sendet, dann sollte deine Lösung auch funktionieren. Poste hier list von deinem Modul in diesem Zustand.
Gruß
Damian
Es sind Homematic Bewegungsmelder - somit kommt ein Wert ca. 4-6 Minuten - passt.
Der Helligkeitswert ist aktuell bei 178, somit sollte es wie gewünscht zum sunset-Zeitpunkt noch zu hell sein.
Der Wert von 100 wird um ca. 20:25 Uhr erreicht, 120 wäre um 20:15 Uhr.
Ich habe jetzt zunächst das ? bei sunset wieder eingefügt.
"list" ergibt:
Internals:
DEF ([HMBW05SchuppenGarage:brightness] < 100 and [?{sunset(-4000,"16:15:03","22:00:03")}-23:59:00] and [?TGartenwegAnChkBox] eq "on" and [?HMST03Gartenweg] eq "off") (set HMST03Gartenweg on)
NAME di_Gartenweg_Beleuchtung_Einschalten
NR 2541
NTFY_ORDER 50-di_Gartenweg_Beleuchtung_Einschalten
STATE initialized
TYPE DOIF
Readings:
2015-09-05 18:51:31 state initialized
2015-09-05 18:51:31 timer_1_c1 05.09.2015 19:24:58
2015-09-05 18:51:31 timer_2_c1 05.09.2015 23:59:00
Condition:
0 ReadingValDoIf('HMBW05SchuppenGarage','brightness','') < 100 and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('TGartenwegAnChkBox','STATE','') eq "on" and InternalDoIf('HMST03Gartenweg','STATE','') eq "off"
Days:
Devices:
0 HMBW05SchuppenGarage
all HMBW05SchuppenGarage
Do:
0:
0 set HMST03Gartenweg on
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Itimer:
Readings:
0 HMBW05SchuppenGarage:brightness
all HMBW05SchuppenGarage:brightness
Realtime:
0 19:24:58
1 23:59:00
State:
Time:
0 {sunset(-4000,"16:15:03","22:00:03")}
1 23:59:00
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timerfunc:
Attributes:
disable 0
room Garten
Ich habe es jetzt hinbekommen.
Fehler war anscheinend, dass ich beim Homematic-Aktor explizit auf :state abfragen muss.
Ohne dies wird der Aktor jedenfalls nicht geschalten.
So funktioniert es jetzt:
define DOIF di_Gartenweg_Beleuchtung_Einschalten
([HMBW05SchuppenGarage:brightness] < 135 and [?{sunset(-4000,"16:15:03","22:00:03")}-23:15:59] and [?TGartenwegAnChkBox] eq "on" and [?HMST03Gartenweg:state] eq "off")
(set HMST03Gartenweg on)
({Log 3, "di_Gartenweg_Beleuchtung_Einschalten hat Gartenweg-Beleuchtung eingeschaltet."})
DOELSEIF ([23:16:00-{sunset(-3999,"16:15:02","22:00:02")}] and [?TGartenwegAusChkBox] eq "on" and [?HMST03Gartenweg:state] eq "on")
(set HMST03Gartenweg off)
({Log 3, "di_Gartenweg_Beleuchtung_Einschalten hat Gartenweg-Beleuchtung ausgeschaltet."})
Nun habe ich noch eine Frage:
Manchmal schalte ich die Gartenweg-Beleuchtung schon früher aus, z.B. wenn ich ins Bett gehe oder alle Rollos unten sind (ggf. auch automatisiert).
Ich habe nun beobachtet, dass das obige DOIF die Wegbeleuchtung im zulässigen Zeitfenster wieder einschaltet, sobald der Homematic-Bewegungsmelder zyklisch erneut die Helligkeit sendet (korrekt, der Aktor hat seinen state ja wieder auf "off" geändert).
Kann ich dies mit cmdpause = 50000 unterdrücken?
Oder wird dann der Aktor erst nach 50000 Sekunden aktiviert?
(Leide konnte ich das aus den Bsp. in der commandref nicht für mich verständlich herauslesen).
Viele Grüße,
Heiko
Zitat von: heikoh81 am 06 September 2015, 21:05:31
Ich habe es jetzt hinbekommen.
Fehler war anscheinend, dass ich beim Homematic-Aktor explizit auf :state abfragen muss.
Ohne dies wird der Aktor jedenfalls nicht geschalten.
So funktioniert es jetzt:
define DOIF di_Gartenweg_Beleuchtung_Einschalten
([HMBW05SchuppenGarage:brightness] < 135 and [?{sunset(-4000,"16:15:03","22:00:03")}-23:15:59] and [?TGartenwegAnChkBox] eq "on" and [?HMST03Gartenweg:state] eq "off")
(set HMST03Gartenweg on)
({Log 3, "di_Gartenweg_Beleuchtung_Einschalten hat Gartenweg-Beleuchtung eingeschaltet."})
DOELSEIF ([23:16:00-{sunset(-3999,"16:15:02","22:00:02")}] and [?TGartenwegAusChkBox] eq "on" and [?HMST03Gartenweg:state] eq "on")
(set HMST03Gartenweg off)
({Log 3, "di_Gartenweg_Beleuchtung_Einschalten hat Gartenweg-Beleuchtung ausgeschaltet."})
Nun habe ich noch eine Frage:
Manchmal schalte ich die Gartenweg-Beleuchtung schon früher aus, z.B. wenn ich ins Bett gehe oder alle Rollos unten sind (ggf. auch automatisiert).
Ich habe nun beobachtet, dass das obige DOIF die Wegbeleuchtung im zulässigen Zeitfenster wieder einschaltet, sobald der Homematic-Bewegungsmelder zyklisch erneut die Helligkeit sendet (korrekt, der Aktor hat seinen state ja wieder auf "off" geändert).
Kann ich dies mit cmdpause = 50000 unterdrücken?
Oder wird dann der Aktor erst nach 50000 Sekunden aktiviert?
(Leide konnte ich das aus den Bsp. in der commandref nicht für mich verständlich herauslesen).
Viele Grüße,
Heiko
cmdpause unterdrückt eine Ausführung in der angegebenen Zeit. Dadurch können Trigger aber auch verloren gehen, gerade wenn sie nicht zyklisch senden.
wait ist gut gegen hin und herschalten an der Helligkeitsschwelle.
Gruß
Damian