DOIF Rolladen bei Sonnenaufgang öffnen

Begonnen von Spartacus, 20 Dezember 2015, 12:25:14

Vorheriges Thema - Nächstes Thema

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

moonsorrox

#1
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]))
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Vize

Wenn ich deine Version lese, sehe ich vier öffnende eckige und zwei schließende...das passt doch auch nicht, oder?

Gruß
Andreas

dieda

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]))
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

moonsorrox

#4
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)\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Vize

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

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

moonsorrox

#7
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
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

moonsorrox

#9
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:
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Spartacus

#10
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.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R