FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Bartimaus am 06 Mai 2017, 15:13:47

Titel: Hilfe zu meinem RolloDOIF benötigt
Beitrag von: Bartimaus am 06 Mai 2017, 15:13:47
Hallöle,

ich möchte meine Rollos in Abhängigkeit von Wochen/Feiertag sowie Woche/Feiertag des Folgetages schalten.
Momentan ist das ganze noch im Test.

Dazu habe ich ein separates DOIF-Modul angelegt, welches diesen Status ermittelt.
Ich verwende die Syntax von Damian, 8=!WE sowie 7=WE.
88 = heute Wochentag+morgen Wochentag
87 = heute Wochentag+morgen Feiertag
78 = heute Feiertag+morgen Wochentag 
77 = heute Feiertag+morgen Wochentag

In meinem FHEM-Kalender sind alle Sam+Sonntage separat eingetragen
Hier mal das List des entsprechenden Moduls:
Internals:
   DEF        ((!$we) and [NRW_Feiertag:tomorrow] eq "none")
(setstate RolloSteuerungHinten 88)
DOELSEIF
((!$we) and [NRW_Feiertag:tomorrow] ne "none")
(setstate RolloSteuerungHinten 87)
DOELSEIF
(($we) and [NRW_Feiertag:tomorrow] eq "none")
(setstate RolloSteuerungHinten 78)
DOELSEIF
(($we) and [NRW_Feiertag:tomorrow] ne "none")
(setstate RolloSteuerungHinten 77)
   NAME       RolloSteuerungHinten
   NR         989
   NTFY_ORDER 50-RolloSteuerungHinten
   STATE      77
   TYPE       DOIF
   Readings:
     2017-05-06 00:00:28   Device          NRW_Feiertag
     2017-05-06 00:00:28   cmd             4
     2017-05-06 00:00:28   cmd_event       NRW_Feiertag
     2017-05-06 00:00:28   cmd_nr          4
     2017-05-06 00:00:28   e_NRW_Feiertag_tomorrow Sonntag
     2017-05-06 00:00:28   state           77
   Condition:
     0          (!$we) and ReadingValDoIf($hash,'NRW_Feiertag','tomorrow') eq "none"
     1          (!$we) and ReadingValDoIf($hash,'NRW_Feiertag','tomorrow') ne "none"
     2          ($we) and ReadingValDoIf($hash,'NRW_Feiertag','tomorrow') eq "none"
     3          ($we) and ReadingValDoIf($hash,'NRW_Feiertag','tomorrow') ne "none"
   Devices:
     0           NRW_Feiertag
     1           NRW_Feiertag
     2           NRW_Feiertag
     3           NRW_Feiertag
     all         NRW_Feiertag
   Do:
     0:
       0          setstate RolloSteuerungHinten 88
     1:
       0          setstate RolloSteuerungHinten 87
     2:
       0          setstate RolloSteuerungHinten 78
     3:
       0          setstate RolloSteuerungHinten 77
     4:
   Helper:
     event      Samstag,yesterday: none,tomorrow: Sonntag
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   NRW_Feiertag
     timerevent Samstag,yesterday: none,tomorrow: Sonntag
     triggerDev NRW_Feiertag
     Bm:
       Doif_notify:
         cnt        9636
         dmx        0
         mTS        06.05. 12:02:44
         max        8
         tot        27
         mAr:
           HASH(0x4241d28)
           HASH(0x4188360)
       Doif_set:
         cnt        19
         dmx        0
         mAr
         mTS
         max        0
         tot        0
     timerevents:
       Samstag
       yesterday: none
       tomorrow: Sonntag
     timereventsState:
       state: Samstag
       yesterday: none
       tomorrow: Sonntag
     triggerEvents:
       Samstag
       yesterday: none
       tomorrow: Sonntag
     triggerEventsState:
       state: Samstag
       yesterday: none
       tomorrow: Sonntag
   Internals:
   Itimer:
   Readings:
     0           NRW_Feiertag:tomorrow
     1           NRW_Feiertag:tomorrow
     2           NRW_Feiertag:tomorrow
     3           NRW_Feiertag:tomorrow
     all         NRW_Feiertag:tomorrow
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
     State:
   Trigger:
Attributes:
   cmdState   88|87|78|77
   do         always
   room       DOIF,Jalousien


Dieser Status soll dann vom Rollo-DOIF abgefragt werden.

Nun das eigentliche RolloDOIF:

Internals:
   CFGFN
   DEF        ((([06:25-13:00] and [RolloSteuerungHinten] eq "88") ##Heute + morgen Arbeit
or
([06:25-13:30] and [RolloSteuerungHinten] eq "87") ## Heute Arbeit + morgen frei
or
([[RolloWEHinten]-13:00] and [RolloSteuerungHinten] eq "78") ## Heute Frei + morgen Arbeit
or
([[RolloWEHinten]-13:30] and [RolloSteuerungHinten] eq "77") ## Heute + morgen Frei
)
and [1wire_Lux:Helligkeit] > [1wireLuxRollo]  ## wenn hell
and [ClaudiaArbeit] eq "off"              ## wenn Anwesend
)
(set RolloVorneTest on)
DOELSE
(set RolloVorneTest off)
   NAME       Ti_RolloHintenTest
   NR         27474
   NTFY_ORDER 50-Ti_RolloHintenTest
   STATE      fts_shutter_100
   TYPE       DOIF
   Readings:
     2017-05-06 15:08:50   Device          1wire_Lux
     2017-05-06 13:30:00   cmd             2
     2017-05-06 13:30:00   cmd_count       1
     2017-05-06 13:30:00   cmd_event       timer_4
     2017-05-06 13:30:00   cmd_nr          2
     2017-05-06 15:08:50   e_1wire_Lux_Helligkeit 237.317
     2017-05-06 13:30:00   state           fts_shutter_100
     2017-05-06 13:00:00   timer_01_c01    07.05.2017 06:25:00
     2017-05-06 13:00:00   timer_02_c01    07.05.2017 13:00:00
     2017-05-06 13:30:00   timer_03_c01    07.05.2017 06:25:00
     2017-05-06 13:30:00   timer_04_c01    07.05.2017 13:30:00
     2017-05-06 13:00:00   timer_05_c01    07.05.2017 08:30:00
     2017-05-06 13:00:00   timer_06_c01    07.05.2017 13:00:00
     2017-05-06 13:30:00   timer_07_c01    07.05.2017 08:30:00
     2017-05-06 13:30:00   timer_08_c01    07.05.2017 13:30:00
     2017-05-06 15:08:50   wait_timer      06.05.2017 15:09:20 cmd_2 1wire_Lux
   Condition:
     0          ((DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "88")  or (DOIF_time($hash,2,3,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "87")  or (DOIF_time($hash,4,5,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "78")  or (DOIF_time($hash,6,7,$wday,$hms) and InternalDoIf($hash,'RolloSteuerungHinten','STATE') eq "77")  )  and ReadingValDoIf($hash,'1wire_Lux','Helligkeit') > InternalDoIf($hash,'1wireLuxRollo','STATE')   and InternalDoIf($hash,'ClaudiaArbeit','STATE') eq "off"
   Days:
   Devices:
     0           RolloSteuerungHinten 1wire_Lux 1wireLuxRollo ClaudiaArbeit
     all         RolloSteuerungHinten 1wire_Lux 1wireLuxRollo ClaudiaArbeit
   Do:
     0:
       0          set RolloVorneTest on
     1:
       0          set RolloVorneTest off
   Helper:
     event      Helligkeit: 237.317
     globalinit 1
     last_timer 8
     sleepdevice 1wire_Lux
     sleepsubtimer 0
     sleeptimer 1
     timerdev   1wire_Lux
     timerevent Helligkeit: 237.317
     triggerDev 1wire_Lux
     Bm:
       Doif_notify:
         cnt        4073
         dmx        0
         mTS        06.05. 13:58:44
         max        210
         tot        6088
         mAr:
           HASH(0x52be888)
           HASH(0x4a51080)
       Doif_set:
         cnt        71
         dmx        0
         mTS        06.05. 12:39:04
         max        959
         tot        1498
         mAr:
           HASH(0x52be888)
           Ti_RolloHintenTest
           cmd_2
     timerevents:
       Helligkeit: 237.317
     timereventsState:
       Helligkeit: 237.317
     triggerEvents:
       Helligkeit: 237.317
     triggerEventsState:
       Helligkeit: 237.317
   Internals:
     0           RolloSteuerungHinten:STATE 1wireLuxRollo:STATE ClaudiaArbeit:STATE
     all         RolloSteuerungHinten:STATE 1wireLuxRollo:STATE ClaudiaArbeit:STATE
   Interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   Itimer:
     all         RolloWEHinten
   Localtime:
     0          1494131100
     1          1494154800
     2          1494131100
     3          1494156600
     4          1494138600
     5          1494154800
     6          1494138600
     7          1494156600
   Readings:
     0           1wire_Lux:Helligkeit
     all         1wire_Lux:Helligkeit
   Realtime:
     0          06:25:00
     1          13:00:00
     2          06:25:00
     3          13:30:00
     4          08:30:00
     5          13:00:00
     6          08:30:00
     7          13:30:00
   Regexp:
     0:
     All:
   State:
     State:
   Time:
     0          06:25:00
     1          13:00:00
     2          06:25:00
     3          13:30:00
     4          [RolloWEHinten]
     5          13:00:00
     6          [RolloWEHinten]
     7          13:30:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timers:
     0           0  1  2  3  4  5  6  7
   Trigger:
   Triggertime:
     1494131100:
       localtime  1494131100
       Hash:
     1494138600:
       localtime  1494138600
       Hash:
     1494154800:
       localtime  1494154800
       Hash:
     1494156600:
       localtime  1494156600
       Hash:
Attributes:
   cmdState   fts_shutter_10|fts_shutter_100
   group      01 Timer
   repeatcmd  1:1
   repeatsame 1:1
   room       Jalousien
   setList    state:on,off
   wait       30:[WaitWz]
   webCmd     on:off


Heute um 13:30 wurde "timer_4" ausgeführt, erwartet habe ich aber "timer_8" weil der "Tagesstatus" = "77" und nicht "87" ist.

Habt Ihr ne Idee wieso ? Ich hab da etwas Tomaten auf den Augen...
Titel: Antw:Hilfe zu meinem RolloDOIF benötigt
Beitrag von: Per am 07 Mai 2017, 07:31:36
Evtl. wegen des gleichen Wertes. Irgendwann wurden gleiche Timer zusammen gelegt. Ändere die doch mal um eine Minute voneinander und schau dann.
Titel: Antw:Hilfe zu meinem RolloDOIF benötigt
Beitrag von: Bartimaus am 07 Mai 2017, 10:50:16
Zitat von: Per am 07 Mai 2017, 07:31:36
Evtl. wegen des gleichen Wertes. Irgendwann wurden gleiche Timer zusammen gelegt.

Ah, ok, probiere ich mal