FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: romarira am 17 November 2018, 09:42:14

Titel: (gelöst) DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: romarira am 17 November 2018, 09:42:14
Ich komme mit diesem Code nicht weiter


([{sunrise(-9522,"05:15","07:15")}-{sunrise(0,"05:15","07:15")}] and [hellejahreszeit_dum] eq "nein" and !$we) (set Kaminlicht on, set teleBot message Kaminlicht morgens an) DOELSE (set Kaminlicht off, set teleBot message Kaminlicht morgens aus)


Was möchte ich erreichen?

Ich habe einen dummy "hellejahreszeit_dum". Wenn dieser auf nein ist, soll an den Tagen Montag bis Freitag eine gewisse Zeit vor Sonnenaufgang eine Lampe eingeschaltet werden. Frühestens aber um 5:15 Uhr, spätestens um 7:15 Uhr. Bei Sonnenaufgang soll sie dann wieder ausgeschaltet werden, auf jeden Fall aber um 7:15 Uhr.

Bei dem DOIF oben hatte ich den Uhrzeitteil erst mit festen Zeiten, z.B. [17:15-17:17] getestet. Das funktionierte. Wenn ich jetzt die Uhrzeiten durch die sunrise-Befehle ersetze, funktioniert es nicht, wie mir die Telegram-Nachrichten gezeigt haben.

Ich habe heute morgen (Samstag) zwei Telegram-Nachrichten bekommen. Und zwar um 5:15 und 7:15, jeweils mit der Nachricht "Kaminlicht morgens aus". Das heißt, es wurde weder die !$we-Bedingung eingehalten und es wurde nur der DOELSE-Teil abgearbeitet.

Ich bin noch Anfänger und weiß jetzt nicht, wo hier mein Fehler liegt.

Vielleicht kann mir jemand von euch helfen.
Titel: Antw:DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: Gisbert am 17 November 2018, 09:58:27
Hier mal ein funktionierendes Beispiel mit "heller" Jahreszeit im DOIF ohne zusätzlichen Dummy und mit sunset:

define Treppenhaus.Markisensteuerung DOIF ([?Treppenhaus.Markise.hoch.dum] eq "off" and ($md ge "04-15" and $md le "10-15") \
and [?Treppenhaus.Markise:level] != 0 and [?Wetter.Proplanta:wind] <= 25 and [TH.Kuhlmannweg8:temperature] >= 18 \
and ReadingsAge("Wetter.Proplanta","weather","") <= 900 and [?Wetter.Proplanta:weather] =~ /^(sonnig|klar|heiter)$/ \
and [?Buienradar:rainDataNow] == 0 and [?13:00-22:00] and [?myTwilight:azimuth] >=185 and sunset_abs(-3420) gt $hms) \
(set Treppenhaus.Markise off) \
DOELSEIF ([?Treppenhaus.Markise.hoch.dum] eq "off" and ($md ge "04-15" and $md le "10-15") \
and [?Treppenhaus.Markise:level] != 0 and [?Wetter.Proplanta:wind] <= 25 and [TH.Kuhlmannweg8:temperature] >= 20 \
and ReadingsAge("Wetter.Proplanta","weather","") <= 900 \
and ([?Wetter.Proplanta:weather] =~ /^(sonnig|klar|heiter|wolkig)$/ or [?Wetter.Proplanta:weather2] =~ /^(starkbewoelkt)$/) \
and [?Buienradar:rainDataNow] == 0 and [?13:00-22:00] and [?myTwilight:azimuth] >=185 and sunset_abs(-3420) gt $hms) \
(set Treppenhaus.Markise off) \
DOELSEIF ([?Treppenhaus.Markise.runter.dum] eq "on" and [?Treppenhaus.Markise:level] != 100 \
and ([Wetter.Proplanta:wind] > 25 or [Buienradar:rainDataNow] != 0 \
or ([?Wetter.Proplanta:weather] !~ /^(sonnig|klar|heiter|wolkig)$/ and [?Wetter.Proplanta:weather2] !~ /^(starkbewoelkt)$/))) \
(set Treppenhaus.Markise on) \
DOELSEIF ([?Treppenhaus.Markise.runter.dum] eq "off" and [?Treppenhaus.Markise:level] != 100 \
and ([Wetter.Proplanta:wind] > 25 or [TH.Kuhlmannweg8:temperature] < 18 \
or ReadingsAge("Wetter.Proplanta","weather","") > 1260 \
or ([?Wetter.Proplanta:weather] !~ /^(sonnig|klar|heiter|wolkig)$/ and [?Wetter.Proplanta:weather2] !~ /^(starkbewoelkt)$/) \
or [Buienradar:rainDataNow] != 0 or [myTwilight:azimuth] <185 or sunset_abs(-3420) le $hms)) \
(set Treppenhaus.Markise on) \
DOELSEIF ([Treppenhaus.Markise.runter.dum] eq "on") \
DOELSEIF ([Treppenhaus.Markise.hoch.dum] eq "on") \
DOELSEIF ([Treppenhaus.Markise:level] == 100 and [+3600]) (setreading Treppenhaus.Markise level 100) \
DOELSEIF ([Treppenhaus.Markise:level] == 0 and [+600]) (setreading Treppenhaus.Markise level 0)
attr Treppenhaus.Markisensteuerung comment Umlaut in bewölkt durch einen Punkt (.) ersetzt. \
Der Punkt kann alles mögliche sein, ein normales Zeichen, ein Umlaut oder auch ein Leerzeichen. \
Das scheint aber bei "stark bewölkt" nicht gut zu funktionieren. \
Deshalb wurde eine weiteres Reading bei Wetter.Proplanta (weather2) erzeugt, welches "starkbewoelkt" zurückliefert.
attr Treppenhaus.Markisensteuerung devStateIcon (cmd_1|cmd_2|cmd_8):fts_sunblind@red (cmd_3|cmd_4|cmd_7):fts_sunblind_0@gray cmd_5:fts_shutter_down@red cmd_6:fts_shutter_up@red
attr Treppenhaus.Markisensteuerung icon fts_sunblind
attr Treppenhaus.Markisensteuerung repeatsame 3:3:3:3:3:3:3:60
attr Treppenhaus.Markisensteuerung room CUL_HM,Mobile,Rollladen
attr Treppenhaus.Markisensteuerung wait 60:60:60:60:1:1:1:1
Titel: Antw:DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: Gisbert am 17 November 2018, 10:08:07
Und hier noch ein funktionierendes Beispiel einer Haustürleuchte, die morgens und abends angeht, wenn es dunkel ist oder wird, und automatisiert ausgeht:
define Haustuer.Licht.Schaltzeit DOIF ([06:45|8] and [?Schalter.1] eq "off" and [?Feiertag.NRW] == 0 and sunrise_abs(1130) gt $hms) \
(set Haustuer.Licht on-till {sunrise_abs(1190)}) \
DOELSEIF (([07:45|7] or ([07:45] and [?Feiertag.NRW] == 1)) and [?Schalter.1] eq "off" and sunrise_abs(1130) gt $hms) \
(set Haustuer.Licht on-till {sunrise_abs(1190)}) \
DOELSEIF ([{sunset_abs(-660)}] and [?Schalter.1] eq "off") \
(set Haustuer.Licht on-till {sunset_abs(2700,"22:13:26","23:11:43")})
attr Haustuer.Licht.Schaltzeit devStateIcon .*:fts_shutter_1w_0
attr Haustuer.Licht.Schaltzeit do always
attr Haustuer.Licht.Schaltzeit icon FS20.off
attr Haustuer.Licht.Schaltzeit room CUL_HM

Schalter1 ist eine Weihnachtsbeleuchtung an der Haustür; ich könnte mir dafür einen sinnigeren Namen einfallen lassen  :)

Hier noch die Weihnachtsbeleuchtung / Schalter1 in der "dunkelen" Jahreszeit:
defmod Schalter.1.Schaltzeit DOIF ([06:30|8] and ($md ge "11-24" or $md le "01-06") and [?Feiertag.NRW] == 0 and sunrise_abs(1130) gt $hms) \
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}) \
DOELSEIF (([07:15|7] or ([07:15] and [?Feiertag.NRW] == 1)) and ($md ge "11-24" or $md le "01-06") and sunrise_abs(1130) gt $hms) \
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}) \
DOELSEIF ([{sunset_abs(-1200,"15:00","23:00")}] and ($md ge "11-24" or $md le "01-06")) \
(set Schalter.1 on-till {sunset_abs(2700,"22:47:26","23:33:43")})
attr Schalter.1.Schaltzeit devStateIcon .*:fts_shutter_1w_0
attr Schalter.1.Schaltzeit do always
attr Schalter.1.Schaltzeit icon FS20.off
attr Schalter.1.Schaltzeit room CUL_HM
Titel: Antw:DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: Damian am 17 November 2018, 10:19:29
Zitat von: romarira am 17 November 2018, 09:42:14
Ich komme mit diesem Code nicht weiter


([{sunrise(-9522,"05:15","07:15")}-{sunrise(0,"05:15","07:15")}] and [hellejahreszeit_dum] eq "nein" and !$we) (set Kaminlicht on, set teleBot message Kaminlicht morgens an) DOELSE (set Kaminlicht off, set teleBot message Kaminlicht morgens aus)


Was möchte ich erreichen?

Ich habe einen dummy "hellejahreszeit_dum". Wenn dieser auf nein ist, soll an den Tagen Montag bis Freitag eine gewisse Zeit vor Sonnenaufgang eine Lampe eingeschaltet werden. Frühestens aber um 5:15 Uhr, spätestens um 7:15 Uhr. Bei Sonnenaufgang soll sie dann wieder ausgeschaltet werden, auf jeden Fall aber um 7:15 Uhr.

Bei dem DOIF oben hatte ich den Uhrzeitteil erst mit festen Zeiten, z.B. [17:15-17:17] getestet. Das funktionierte. Wenn ich jetzt die Uhrzeiten durch die sunrise-Befehle ersetze, funktioniert es nicht, wie mir die Telegram-Nachrichten gezeigt haben.

Ich habe heute morgen (Samstag) zwei Telegram-Nachrichten bekommen. Und zwar um 5:15 und 7:15, jeweils mit der Nachricht "Kaminlicht morgens aus". Das heißt, es wurde weder die !$we-Bedingung eingehalten und es wurde nur der DOELSE-Teil abgearbeitet.

Ich bin noch Anfänger und weiß jetzt nicht, wo hier mein Fehler liegt.

Vielleicht kann mir jemand von euch helfen.

Du musst eins wissen:

Das Gegenteil von a and b and c ist  not a  or  not b  or  not c

D. h. sobald einer der Operanden (a,b,c) nicht wahr ist gilt der sonst-Fall.
Titel: Antw:DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: romarira am 17 November 2018, 11:10:39
Hallo Gisbert, hallo Damian,

vielen Dank für die Tipps und die Codebeispiele. Ich schaue mir das mal an und teste wieder.
Ich gebe eine Rückmeldung, was bei rausgekommen ist.
Titel: Antw:DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: romarira am 19 November 2018, 12:38:19
Die Codebeispiele von Gisbert waren mir zu schwierig um sie für meine Verhältnisse anzupassen. An dem Versuch den Ausschaltbefehl direkt mit in das DOIF aufznehmen bin ich auch gescheitert.
Ich habe jetzt zwei DOIF angelegt, eins für einschalten und eins für ausschalten. Und das klappt.

Hier meine Lösung:
DOIF für Ein
([hellejahreszeit_dum] eq "nein" and !$we and [{sunrise(-9522,"05:15","07:15")}]) (set Kaminlicht on, set teleBot message Kaminlicht morgens an)

DOIF für Aus

([hellejahreszeit_dum] eq "nein" and !$we and [Kaminlicht:state] eq "ON" and [{sunrise(0,"05:15","07:15")}]) (set Kaminlicht off, set teleBot message Kaminlicht morgens aus)


Titel: Antw:DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: Damian am 19 November 2018, 13:06:52
Zitat von: romarira am 19 November 2018, 12:38:19
Die Codebeispiele von Gisbert waren mir zu schwierig um sie für meine Verhältnisse anzupassen. An dem Versuch den Ausschaltbefehl direkt mit in das DOIF aufznehmen bin ich auch gescheitert.
Ich habe jetzt zwei DOIF angelegt, eins für einschalten und eins für ausschalten. Und das klappt.

Hier meine Lösung:
DOIF für Ein
([hellejahreszeit_dum] eq "nein" and !$we and [{sunrise(-9522,"05:15","07:15")}]) (set Kaminlicht on, set teleBot message Kaminlicht morgens an)

DOIF für Aus

([hellejahreszeit_dum] eq "nein" and !$we and [Kaminlicht:state] eq "ON" and [{sunrise(0,"05:15","07:15")}]) (set Kaminlicht off, set teleBot message Kaminlicht morgens aus)


Wenn du zwei kannst, dann kannst du auch eins: ;)

DOIF für Ein
([hellejahreszeit_dum] eq "nein" and !$we and [{sunrise(-9522,"05:15","07:15")}]) (set Kaminlicht on, set teleBot message Kaminlicht morgens an)
DOELSEIF
([hellejahreszeit_dum] eq "nein" and !$we and [Kaminlicht:state] eq "ON" and [{sunrise(0,"05:15","07:15")}]) (set Kaminlicht off, set teleBot message Kaminlicht morgens aus)

Titel: Antw:(gelöst) DOIF für sonnenaufganggestütztes Schalten einer Lampe
Beitrag von: romarira am 21 November 2018, 10:21:33
ZitatWenn du zwei kannst, dann kannst du auch eins: ;)

Stimmt! Hat geklappt   :D