[erledigt] DOIF -mit Zeitspanne als Trigger- nach enable prüfen

Begonnen von Salvi5, 01 April 2023, 11:16:56

Vorheriges Thema - Nächstes Thema

Salvi5

Hallo,
ich habe ein Doif A welches devices von Sonnenaufgang bis Sonnenuntergang schaltet.
Unter bestimmten Bedingungen wird Doif A von einem Doif B disabled bzw. initialized.

Der Trigger für Doif A erfolgt ja nur genau bei Sonnenaufgang bzw. Sonnenuntergang.

Wie bekomme ich nun das Doif A wenn es wieder initialisiert wird, dazu, sofort zu checken, ob es gerade vor oder nach Sonnenuntergang ist?

Gruß Mike

Damian

Zitat von: Salvi5 am 01 April 2023, 11:16:56Hallo,
ich habe ein Doif A welches devices von Sonnenaufgang bis Sonnenuntergang schaltet.
Unter bestimmten Bedingungen wird Doif A von einem Doif B disabled bzw. initialized.

Der Trigger für Doif A erfolgt ja nur genau bei Sonnenaufgang bzw. Sonnenuntergang.

Wie bekomme ich nun das Doif A wenn es wieder initialisiert wird, dazu, sofort zu checken, ob es gerade vor oder nach Sonnenuntergang ist?

Gruß Mike

Du musst ein Zeitintervall definieren https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Salvi5

Zitat von: Damian am 01 April 2023, 12:37:35Du musst ein Zeitintervall definieren https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen

Das habe ich doch...

define Tag_Nacht_DOIF DOIF ([{sunset(-3600)}-{sunrise(+3600)}])\
(set Herz on) \
(set Bild on)\
(set Kuechenrollo pct 100)\
(set Balkonrollo pct 100) \
(set Arndrollo pct 100) \
(set Flasche on) \
(set Aussensteckdose on)\
(set Treppenlicht on)\
(set Potterswitch on)\
(set Remote_Teich_17 on)\
DOELSEIF\
([{sunset(+3600)}])\
(set Buerorollo pct 100) \
DOELSE\
(set Buerorollo pct 0) \
(set Kuechenrollo pct 30) \
(set Balkonrollo pct 0)\
(set Arndrollo pct 0) \
(set Herz off)\
(set Bild off)\
(set Aussensteckdose off)\
(set Treppenlicht off)\
(set Potterswitch off)\
(set Remote_Teich_17 off)
attr Tag_Nacht_DOIF room Programme
attr Tag_Nacht_DOIF wait 0,2,2,2,2,2,2,2,2,2,2:0:0,2,2,2,2,2,2,2,2,2,2
#   DEF        ([{sunset(-3600)}-{sunrise(+3600)}])
#(set Herz on)
#(set Bild on)
#(set Kuechenrollo pct 100)
#(set Balkonrollo pct 100)
#(set Arndrollo pct 100)
#(set Flasche on)
#(set Aussensteckdose on)
#(set Treppenlicht on)
#(set Potterswitch on)
#(set Remote_Teich_17 on)
#DOELSEIF
#([{sunset(+3600)}])
#(set Buerorollo pct 100)
#DOELSE
#(set Buerorollo pct 0)
#(set Kuechenrollo pct 30)
#(set Balkonrollo pct 0)
#(set Arndrollo pct 0)
#(set Herz off)
#(set Bild off)
#(set Aussensteckdose off)
#(set Treppenlicht off)
#(set Potterswitch off)
#(set Remote_Teich_17 off)
#   FUUID      5ed6bf2c-f33f-8836-b478-e185159da1be9989
#   MODEL      FHEM
#   NAME       Tag_Nacht_DOIF
#   NOTIFYDEV  global
#   NR         175
#   NTFY_ORDER 50-Tag_Nacht_DOIF
#   STATE      cmd_3
#   TYPE       DOIF
#   VERSION    27262 2023-02-21 19:36:39
#   eventCount 359
#   Helper:
#     DBLOG:
#       cmd:
#         logdb:
#           TIME       1680326617.81128
#           VALUE      3.10
#       cmd_event:
#         logdb:
#           TIME       1680326617.81128
#           VALUE      timer_2
#       cmd_nr:
#         logdb:
#           TIME       1680326617.81128
#           VALUE      3
#       cmd_seqnr:
#         logdb:
#           TIME       1680326617.81128
#           VALUE      10
#       last_cmd:
#         logdb:
#           TIME       1680233137.17527
#           VALUE      cmd_2
#       mode:
#         logdb:
#           TIME       1680266778.99788
#           VALUE      enabled
#       state:
#         logdb:
#           TIME       1680337689.7715
#           VALUE      checkall
#       wait_timer:
#         logdb:
#           TIME       1680326617.7237
#           VALUE      no timer
#   READINGS:
#     2023-04-01 07:23:37   cmd             3.10
#     2023-04-01 07:23:37   cmd_event       timer_2
#     2023-04-01 07:23:37   cmd_nr          3
#     2023-04-01 07:23:37   cmd_seqnr       10
#     2023-03-31 05:25:37   last_cmd        cmd_2
#     2023-03-31 14:46:18   mode            enabled
#     2023-04-01 07:23:37   state           cmd_3
#     2023-04-01 07:23:19   timer_01_c01    01.04.2023 19:23:17
#     2023-04-01 07:23:19   timer_02_c01    02.04.2023 07:21:02
#     2023-03-31 21:21:35   timer_03_c02    01.04.2023 21:23:17
#     2023-04-01 07:23:37   wait_timer      no timer
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#   attr:
#     cmdState:
#     wait:
#       0:
#         0
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#       1:
#         0
#       2:
#         0
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#         2
#     waitdel:
#   condition:
#     0          ::DOIF_time($hash,0,1,$wday,$hms)
#     1          ::DOIF_time_once($hash,2,$wday)
#   days:
#   do:
#     0:
#       0          set Herz on
#       1          set Bild on
#       2          set Kuechenrollo pct 100
#       3          set Balkonrollo pct 100
#       4          set Arndrollo pct 100
#       5          set Flasche on
#       6          set Aussensteckdose on
#       7          set Treppenlicht on
#       8          set Potterswitch on
#       9          set Remote_Teich_17 on
#     1:
#       0          set Buerorollo pct 100
#     2:
#       0          set Buerorollo pct 0
#       1          set Kuechenrollo pct 30
#       2          set Balkonrollo pct 0
#       3          set Arndrollo pct 0
#       4          set Herz off
#       5          set Bild off
#       6          set Aussensteckdose off
#       7          set Treppenlicht off
#       8          set Potterswitch off
#       9          set Remote_Teich_17 off
#   helper:
#     NOTIFYDEV  global
#     event      timer_2
#     globalinit 1
#     last_timer 3
#     sleepdevice timer_2
#     sleepsubtimer -1
#     sleeptimer -1
#     timerdev   
#     timerevent timer_2
#     timerevents
#     timereventsState
#     triggerDev
#   interval:
#     0          -1
#     1          0
#   intervalfunc:
#   intervaltimer:
#   localtime:
#     0          1680369797
#     1          1680412862
#     2          1680376997
#   realtime:
#     0          19:23:17
#     1          07:21:02
#     2          21:23:17
#   time:
#     0          {sunset(-3600)}
#     1          {sunrise(+3600)}
#     2          {sunset(+3600)}
#   timeCond:
#     0          0
#     1          0
#     2          1
#   timer:
#     0          0
#     1          0
#     2          0
#   timers:
#     0           0  1
#     1           2
#   triggertime:
#     1680369797:
#       localtime  1680369797
#       hash:
#     1680376997:
#       localtime  1680376997
#       hash:
#     1680412862:
#       localtime  1680412862
#       hash:
#   uiState:
#   uiTable:
#
setstate Tag_Nacht_DOIF cmd_3
setstate Tag_Nacht_DOIF 2023-04-01 07:23:37 cmd 3.10
setstate Tag_Nacht_DOIF 2023-04-01 07:23:37 cmd_event timer_2
setstate Tag_Nacht_DOIF 2023-04-01 07:23:37 cmd_nr 3
setstate Tag_Nacht_DOIF 2023-04-01 07:23:37 cmd_seqnr 10
setstate Tag_Nacht_DOIF 2023-03-31 05:25:37 last_cmd cmd_2
setstate Tag_Nacht_DOIF 2023-03-31 14:46:18 mode enabled
setstate Tag_Nacht_DOIF 2023-04-01 07:23:37 state cmd_3
setstate Tag_Nacht_DOIF 2023-04-01 07:23:19 timer_01_c01 01.04.2023 19:23:17
setstate Tag_Nacht_DOIF 2023-04-01 07:23:19 timer_02_c01 02.04.2023 07:21:02
setstate Tag_Nacht_DOIF 2023-03-31 21:21:35 timer_03_c02 01.04.2023 21:23:17
setstate Tag_Nacht_DOIF 2023-04-01 07:23:37 wait_timer no timer


...aber ich denke set doif_a checkall ist das was ich suche. Es hat nur beim Probieren nicht funktioniert, weil kein do always gesetzt war. Bin auch manchmal bissl blöd.

Gruß Mike

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Salvi5

Zitat von: Damian am 01 April 2023, 13:03:28OK, dann kannst du startup-Attribut nutzen: https://fhem.de/commandref_DE.html#DOIF_startup

Ich denke, wir haben aneinander vorbeigeredet, aber da es augenscheinlich jetzt funktioniert und vielleicht irgendwem noch hilft, hier eine kurze Erklärung:

Doif_A fährt meine Rollos von Sonnenaufgang bis Sonnenuntergang hoch, ansonsten runter. Paar Lichter werden dabei auch noch geschaltet.
Doif_B schaltet mein Haus ab, wenn ich es weit genug verlasse (geofence) und fährt die Rollos runter und disabled Doif_A. Wenn ich heim komme fährt es die Rollos wieder hoch und initialisiert Doif_A.

So war es bisher und hat gut funktioniert. Allerdings hat mich geärgert, dass, wenn ich Nachts heimkomme, die Rollos trotzdem hochgefahren werden, also habe ich einen Weg gesucht, Doif_A zu sagen, es möge sich doch bitte informieren, ob gerade Tag oder Nacht ist, wenn es initialisiert wird.

Den Befehl set Doif_A checkall hatte ich zu diesem Zweck ausprobiert, der hat aber nicht funktioniert (auf Grund meiner Blödheit)...
Wenn man es richtig macht, scheint checkall genau das zu bewirken, was ich will.
Dass checkall das Doif nicht enabled, ist blöd, lässt sich aber durch ein vorgesetztes set Doif_A initialize lösen.

Der Langzeittest steht noch aus, aber ich betrachte das Thema als gelöst. Wenn jemandem ein Denkfehler auffällt, immer her damit!
Vielen Dank an alle Beteiligten.

Gruß Mike