FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Tabularasa am 24 Oktober 2017, 16:18:13

Titel: [GELÖST]DOIF vereinfachen
Beitrag von: Tabularasa am 24 Oktober 2017, 16:18:13
Hallo. Meine Rollo's sollen morgens hochgehen zum einen mit Sonnenaufgang zeitversetzt oder wenn wir aufstehen und nicht mehr "asleep" sind. Jedoch nur zwischen 7:30 und 8:30. Dazu habe ich den Code, der auch teilweise gut funktioniert.

([+{sunrise_rel(5000,"07:30","08:30")}] or ([?7:30-8:30] and [Bewohner] ne "asleep")) (set str_Rollo_EG on)


Zum einen wollte ich die doppelten Zeitangaben gerne zusammenfassen, sodass eventuell nur noch 2 Timer laufen.
Und ein Problem habe ich auch noch. Wenn wir vor 7:30 aufstehen, dann soll es um 7:30 hochgehen und nicht erst mit versetztem Sonnenaufgang(so wie jetzt)
Wenn wir allerdings nicht zu Hause sind, dann wiederum erst mit Sonnenaufgang. Geht das?
Hoffe das war einigermaßen verständlich ::) Danke

edit: Überlege gerade, ob es besser geht mit
[Bewohner] eq "home"?
Titel: Antw:DOIF vereinfachen
Beitrag von: automatisierer am 24 Oktober 2017, 16:27:13
Zitat von: Tabularasa am 24 Oktober 2017, 16:18:13

Zum einen wollte ich die doppelten Zeitangaben gerne zusammenfassen, sodass eventuell nur noch 2 Timer laufen.
Warum?? ist doch kein Problem wenn mehrere Timer laufen, oder gibt es einen besonderen Grund?

Zitat von: Tabularasa am 24 Oktober 2017, 16:18:13

([+{sunrise_rel(5000,"07:30","08:30")}] or ([?7:30-8:30] and [Bewohner] ne "asleep")) (set str_Rollo_EG on)


Und ein Problem habe ich auch noch. Wenn wir vor 7:30 aufstehen, dann soll es um 7:30 hochgehen und nicht erst mit versetztem Sonnenaufgang(so wie jetzt)
Wenn wir allerdings nicht zu Hause sind, dann wiederum erst mit Sonnenaufgang. Geht das?
Wenn du das "?" vor der Uhrzeit weg nimmst, dann triggert diese auch und das löst in Verbindung mit " [Bewohner] ne "asleep" " den Befehl aus...



EDIT:
Zitat
edit: Überlege gerade, ob es besser geht mit

[Bewohner] eq "home"

?

wenn du ne "asleep" nimmst, dann ist alles was nich asleep ist wahr... also auch "absent" usw...
Titel: Antw:DOIF vereinfachen
Beitrag von: Tabularasa am 24 Oktober 2017, 16:38:50
Danke erstmal. Also einen besonderen Grund gibt es nicht, hatte nur gedacht, dass es auch kürzer geht und da es ja die selben Zeiten sind, diese man auch zusammenfassen könnte.
mit dem "?" hatte ich glaube aus dem Grund gemacht wenn wir nicht da sein sollten, dass es dann mit dem Sonnenaufgang hoch geht.
Aber ohne "?" und mit eq "home" klappt es glaube wie ich es wollte...
Titel: Antw:DOIF vereinfachen
Beitrag von: Per am 24 Oktober 2017, 16:45:59
([?7:30-8:30] or ([+{sunrise_rel(5000)}] or ["Bewohner:home"])) (set str_Rollo_EG on)
geht dann aber auch hoch, wenn jemand so früh (aus der Kneipe? ;)) @home kommt.
Zur Not kann mans ja erweitern in
([?7:30-8:30] or ([+{sunrise_rel(5000)}] or (["Bewohner:home"] and [?Bewohner:lastState] eq "asleep")) (set str_Rollo_EG on)

Allerdings geht es, auch wenn ihr länger schlaft, mit der Sonne hoch. Ein (xxx and [?Bewohner:presence] ne "present") kann auch dem abhelfen.
Titel: Antw:DOIF vereinfachen
Beitrag von: Tabularasa am 24 Oktober 2017, 17:03:48
Ok Möglichkeiten gibt es genug wie ich sehe ;D Da es ja die EG Rollo's sind und mein SZ oben, ist es nicht weiter schlimm wenn ich aus der Kneipe komme, da die Rollo's oben noch unten sein sollten :D

Eine Frage noch dazu. Müsste das "or" hinter der Zeitangabe nicht ein "and" sein?
Titel: Antw:DOIF vereinfachen
Beitrag von: automatisierer am 24 Oktober 2017, 19:23:37
also ich hätte deine ursprüngliche Variante mit den vorgeschlagenen Änderungen als ausreichend empfunden...

Dann geht nix hoch wenn du um 5 nach Hause kommt (Außer dem Puls deiner Frau)

Also so:

([+{sunrise_rel(5000,"07:30","08:30")}] or ([7:30-8:30] and [Bewohner] eq "home")) (set str_Rollo_EG on)

das einzige Problem bei ne "asleep" ist halt, dass alles anderen Zustände (absent, gone, keine Ahnung was es da sonst noch gibt) außer "asleep" auch wahr sind... und ich denke das ist nicht gewünscht.
Titel: Antw:DOIF vereinfachen
Beitrag von: Tabularasa am 24 Oktober 2017, 20:11:28
Ja das ist auch richtig, aber so kommt es doch aufs gleiche raus nur dass halt die doppelten timer weg sind, oder?
Bin mir nur noch mit dem ersten "or" unsicher...
([?7:30-8:30] or ([+{sunrise_rel(5000)}] or ["Bewohner:home"])) (set str_Rollo_EG on)
Oder geht da wirklich was um 5 hoch?
Titel: Antw:DOIF vereinfachen
Beitrag von: automatisierer am 24 Oktober 2017, 23:30:24
ne, das ist was völlig anderes!

Dadurch das du alles mit or verknüpfst, führt das wahr werden jeder einzelnen Bedingung zum ausführen des Befehls.

der erste Bedingung:
[?7:30-8:30]
hat eigentlich keine Funktion. Ein Timer der nicht triggert, bringt nur etwas in einer and-Verknüpfung mit einer weiter Bedingung.

die zweite Bedingung wird immer um Sunrise+5000 Sekunden wahr. Immer! unabhängig von den anderen Bedingungen.

auch die dritte Bedingung wird unabhängig von den anderen wahr, auch wenn du um 5 Uhr aus der Kneipe Heim kommst. (je nachdem was Bewohner für ein device ist...)


Also fahren die Rollos immer um 5000 Sekunden nach Sonnenaufgang hoch oder wenn das Event Bewohner:home erzeugt wird.

Bei der von mir vorher genannten Möglichkeit, fährt das Rollo 5000Sekunden nach Sonnenaufgang hoch, aber frühestens um 7:30Uhr und spätestens um 8:30 Uhr. Oder aber, wenn um 7:30 Uhr Bewohner home sind oder in der Zeit zwischen 7:30 und 8:30 Bewohner home kommen...
Titel: Antw:DOIF vereinfachen
Beitrag von: Per am 25 Oktober 2017, 11:53:12
Zitat von: Tabularasa am 24 Oktober 2017, 17:03:48Eine Frage noch dazu. Müsste das "or" hinter der Zeitangabe nicht ein "and" sein?
Ja  :-[