FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Spartacus am 20 Dezember 2015, 12:25:14

Titel: DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Spartacus am 20 Dezember 2015, 12:25:14
Hallo,
ich möchte den Rolladen bei Sonnenaufgang öffnen. Und zwar frühestens um 06:30, spätestens um 08:00 an Werktagen, sonntags und feiertags zwischen 07:30 und 08:30.  Dazu habe ich diesen Code gebaut:

([?switch.di.02.EG.wz.RO.dum] eq "on" and
([{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}|7] or
[{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}|8]))
  (set EG.wz.RO.* opens)
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE

Der "Switch" soll diese Automatik deaktivieren können. An Werktagen ("8") funktioniert das auch ganz gut. Heute (Sonntag) ist aber nichts passiert.
Was habe ich hier falsch gemacht? Muss ich den zweiten Teil der Bedingung (or ...) in einen eigenen DOELSEIF-Zweig packen?
Christian
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: moonsorrox am 20 Dezember 2015, 12:45:34
es fehlen eckige Klammern...!
([[{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}]|7] or [[{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}]|8]))
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Vize am 20 Dezember 2015, 13:07:00
Wenn ich deine Version lese, sehe ich vier öffnende eckige und zwei schließende...das passt doch auch nicht, oder?

Gruß
Andreas
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: dieda am 20 Dezember 2015, 13:13:55
So wie ich das sehe sind das die unterschiedlichen Verschachtelungsebenen...

([Bedingung1] and [Bedingung2])

Bedingung zwei ist eine Oderfunktion also verschachteln

([Bedingung1] and ([Bedingung2a] or [Bedingung2b]))
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: moonsorrox am 20 Dezember 2015, 13:14:17
Zitat von: Vize am 20 Dezember 2015, 13:07:00
Wenn ich deine Version lese, sehe ich vier öffnende eckige und zwei schließende...das passt doch auch nicht, oder?

Gruß
Andreas

richtig, ich habe vergessen...! die anderen beiden habe ich editiert
mein Code sieht so aus:
define di_RollladenWZ DOIF ([?du_RolloWZmodus] eq "FHEM" and ([[du_RolloZeitWZ_hoch]|8] or [[du_RolloZeitWZ_hoch_WoE]|7])) (set RollladenWZ on)
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and ([{sunset("CIVIL",-100,"16:35","22:20")}|78])) (set RollladenWZ off)\
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Vize am 20 Dezember 2015, 13:23:46
Zitat von: dieda am 20 Dezember 2015, 13:13:55

Bedingung zwei ist eine Oderfunktion also verschachteln

([Bedingung1] and ([Bedingung2a] or [Bedingung2b]))

Soweit ich die Klammern überblicke ist die Verschachtelung von Spartacus aber korrekt, oder?

Gruß
Andreas
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Spartacus am 20 Dezember 2015, 14:06:04
Hallo,
Vize hat recht,
das Ganze soll so ablaufen: ([Bedingung1] and ([Bedingung2a] or [Bedingung2b]))
Bedingung 1 ist der Switch, der die Automatik schaltet, Bedingung 2a und 2b sind die verschiedenen Zeiten bei SA.
Aber Bedingung 2a hat heute nicht gegriffen! Und ich weiß nicht warum!
Ich wüsste jetzt auch nicht, wo eine Klammer fehlt!

Christian
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: moonsorrox am 20 Dezember 2015, 14:16:19
Zitat von: Spartacus am 20 Dezember 2015, 14:06:04
Ich wüsste jetzt auch nicht, wo eine Klammer fehlt!

mach das mal mit der doppelten eckigen Klammer so wie ich es bei mir im Code habe, bei mir funktioniert das tadellos...!
Ich habe da zwar ein dummy drin aber die sunrise Bedingung sollte ebenso gehen

wie sieht das denn mit den Zeiten im DOIF aus wird die WochenEnd Zeit in den Readings angezeigt
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Spartacus am 20 Dezember 2015, 14:27:50
Hi moonsorrox,
ja, die timer wurden beide angezeigt.
Wo genau muss ich die eckigen Klammern hinsetzten? Der Ausdruck
([?switch.di.02.EG.wz.RO.dum] eq "on" and
([[{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}]|7] or [[{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}]|8]))

erezugt jetzt eine Fehlermeldung:
di.02.EG.wz.RO DOIF: unknown expression format: [{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}]
Christian
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: moonsorrox am 20 Dezember 2015, 14:36:45
OK dann funktioniert das mit dem sunrise und den eckigen Klammern doch nicht. Sorry :-\
Sonst sehe ich keinen weiteren Fehler ausser das du hinten "opens" stehen hast, gibt es diesen Befehl bei dir in einem Aktor..?

Noch etwas wenn ich deinen Code mal eingebe von ganz oben bekomme ich gar keine Zeit wenn die Rollläden runter fahren sollen

Internals:
   CFGFN      ./FHEM/Test.cfg
   DEF        ([?switch.di.02.EG.wz.RO.dum] eq "on" and ([{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}|7] or  [{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}|8]))   (set EG.wz.RO.* opens) DOELSEIF ([switch.di.02.EG.wz.RO.dum] eq "off") DOELSE

   NAME       di_test_rollo
   NR         3734
   NTFY_ORDER 50-di_test_rollo
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-12-20 14:38:12   state           initialized
     2015-12-20 14:38:12   timer_1_c1      21.12.2015 08:19:46|7
     2015-12-20 14:38:12   timer_2_c1      21.12.2015 08:00:00|8
   Condition:
     0          InternalDoIf('switch.di.02.EG.wz.RO.dum','STATE','') eq "on" and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"7") or  DOIF_time_once($hash,$hash->{timer}{1},$wday,"8"))
     1          InternalDoIf('switch.di.02.EG.wz.RO.dum','STATE','') eq "off"
   Days:
     0          7
     1          8
   Devices:
     1           switch.di.02.EG.wz.RO.dum
     all         switch.di.02.EG.wz.RO.dum
   Do:
     0:
       0          set EG.wz.RO.* opens
     1:
       0
     2:
       0
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
     1           switch.di.02.EG.wz.RO.dum:STATE
     all         switch.di.02.EG.wz.RO.dum:STATE
   Itimer:
   Realtime:
     0          08:19:46
     1          08:00:00
   State:
   Time:
     0          {sunrise_abs("HORIZON=-2",0,"07:30","08:30")}
     1          {sunrise_abs("HORIZON=-2",0,"06:30","08:00")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Spartacus am 20 Dezember 2015, 14:44:15
Hallo,
ich habe jetzt die Sache noch etwas verkompliziert und die Ferien mit eingebaut. Jetzt soll er samstags, sonntags und feiertags anders hochfahren als werktags. M.E. müsste das so korrekt sein. Die Timer werden m.E. auch korrekt gesetzt. Schaut doch bitte noch mal drüber, ob ihr etwas fehlerhaftes erkennen könnt. sonst muss ich wohl bis zum 25.12. warten und schauen was passiert...

Hier mal das Listing:
Internals:
   CFGFN      Config/01-Wohnzimmer.cfg
   DEF        ([?switch.di.02.EG.wz.RO.dum] eq "on" and
(([{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}|67] and [?state.NRW.FerienClone.dum] eq "1") or
([{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}|12345] and [?state.NRW.FerienClone.dum] ne "1" )))
  (set EG.wz.RO.* opens)
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE
   NAME       di.02.EG.wz.RO
   NR         854
   NTFY_ORDER 50-di.02.EG.wz.RO
   STATE      on
   TYPE       DOIF
   Readings:
     2015-12-20 14:39:36   Device          switch.di.02.EG.wz.RO.dum
     2015-12-20 14:39:36   cmd_event       switch.di.02.EG.wz.RO.dum
     2015-12-20 14:39:36   cmd_nr          3
     2015-12-20 14:39:36   e_switch.di.02.EG.wz.RO.dum_STATE on
     2015-12-20 14:39:36   state           on
     2015-12-20 14:39:27   timer_1_c1      21.12.2015 08:12:15|67
     2015-12-20 14:39:28   timer_2_c1      21.12.2015 08:00:00|12345
   Condition:
     0          InternalDoIf('switch.di.02.EG.wz.RO.dum','STATE','') eq "on" and ((DOIF_time_once($hash,$hash->{timer}{0},$wday,"67") and InternalDoIf('state.NRW.FerienClone.dum','STATE','') eq "1") or(DOIF_time_once($hash,$hash->{timer}{1},$wday,"12345") and InternalDoIf('state.NRW.FerienClone.dum','STATE','') ne "1" ))
     1          InternalDoIf('switch.di.02.EG.wz.RO.dum','STATE','') eq "off"
   Days:
     0          67
     1          12345
   Devices:
     1           switch.di.02.EG.wz.RO.dum
     all         switch.di.02.EG.wz.RO.dum
   Do:
     0:
       0          set EG.wz.RO.* opens
     1:
       0
     2:
       0
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
     1           switch.di.02.EG.wz.RO.dum:STATE
     all         switch.di.02.EG.wz.RO.dum:STATE
   Itimer:
   Readings:
   Realtime:
     0          08:12:15
     1          08:00:00
   State:
   Time:
     0          {sunrise_abs("HORIZON=-2",0,"07:30","08:30")}
     1          {sunrise_abs("HORIZON=-2",0,"06:30","08:00")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
   Trigger:
Attributes:
   alias      autom. Rolladen öffnen
   cmdState   on|off|on
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   group      Scripte
   icon       fts_shutter_up
   room       01-Wohnzimmer
   sortby     01


Christian

P.S.
Ich habe mal im Log geguckt. Die Befehle für den Rolladen wurden definitiv nicht gesendet. D.h. an meinem ersten DOIF stimmt irgendwas nicht.
Titel: Antw:DOIF Rolladen bei Sonnenaufgang öffnen
Beitrag von: Spartacus am 04 Januar 2016, 14:06:31
Hallo zusammen,
Zunächst einmal ein Frohes Neues an die fhem Gemeinde!

Mit meiner Rolladensteuerung habe ich offenbar noch ein Problem. Irgendwie wird der ersteTeil meiner Anweisung
....[{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}|12345] and
  ![?state.NRW.Ferien.dum] and [?hl.01.Feiertag:today] eq "none")

ignoriert. Ich hatte erwartet, dass heute dieser Teil des DOIFs den Rolladen öffnen, da sowohl "state.NRW.Ferien.dum" gleich "0", und auch "hl.01.Feiertag:today eq "none" sind.

Stattdessen passierte gar nichts. Die Rolladen blieben geschlossen, obwohl es bis gestern noch funktionierte und die 2. Bedingung (..or...) richtigerweise zum Tragen kam . Kann mir jemand erklären, warum das so ist? Was ist falsch an meiner Anweisung?

Hier das DOIF:
([?switch.di.02.EG.wz.RO.dum] eq "on" and
(([{sunrise_abs("HORIZON=-2",0,"06:30","08:00")}|12345] and
  ![?state.NRW.Ferien.dum] and [?hl.01.Feiertag:today] eq "none") or
([{sunrise_abs("HORIZON=-2",0,"07:30","08:30")}])))
  (set EG.wz.RO.* opens)
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE


Christian