[Solved] DOIF_Readings Mit Zeitstempeln?

Begonnen von Morgennebel, 19 August 2018, 15:12:20

Vorheriges Thema - Nächstes Thema

Morgennebel

Guten Tag,


ich versuche gerade, meine Außenbeleuchtung einfacher zu realisieren. Dazu gibt es jetzt Lichtszenen, zwischen denen hin- und hergeschaltet werden soll. Die Einschaltzeit ist Sonnenunterganz, die Ausschaltzeit soll sich in Abhängigkeit von Kalender und Ferienstatus (ist morgen ein Ferientag, dann länger) mit Hilfe von DOIF_Readings berechnen lassen.

Mein Ansatz ist:


Internals:
   CFGFN     
   DEF        ([{sunset_abs(-900)}-[$SELF:OffNight]])
(set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"05:30","09:00")}-09:00] and [?SH] eq "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"06:30","09:00")}-09:00] and [?SH] ne "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
DOELSE
(set LS_AussenNachtbeleuchtung scene AllOff)

   NAME       DI_TimerAussenlichtOnOff
   NR         199
   NTFY_ORDER 50-DI_TimerAussenlichtOnOff
   STATE      cmd_2
   TYPE       DOIF
   DOIF_Readings:
     OffNight   "22:45:00"
   READINGS:
     2018-08-19 15:00:24   cmd             2
     2018-08-19 15:00:24   cmd_event       DI_TimerAussenlichtOnOff
     2018-08-19 15:00:24   cmd_nr          2
     2018-08-19 14:58:53   mode            enabled
     2018-08-19 15:00:24   state           cmd_2
     2018-08-19 14:58:53   timer_01_c01    19.08.2018 21:12:00
     2018-08-19 14:58:53   timer_02_c01    error: Wrong timespec : either HH:MM:SS or {perlcode}
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms)
   days:
   devices:
   do:
     0:
       0          set LS_AussenNachtbeleuchtung scene StandardDimmed
     1:
       0          set LS_AussenNachtbeleuchtung scene AllOff
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
   internals:
   interval:
     0          -1
     1          0
   itimer:
     all         DI_TimerAussenlichtOnOff
   localtime:
     0          1534705920
   readings:
   realtime:
     0          21:12:00
   time:
     0          {sunset_abs(-900)}
     1          [DI_TimerAussenlichtOnOff:OffNight]
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1534705920:
       localtime  1534705920
       hash:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings OffNight:"22:45:00"
   room       Aussen,SYS_Events


DOIF_Readings OffNight soll die Ausschaltzeit bestimmen. Ist derzeit auf den Wert "22:45:00" (mit Anführungszeichen) gesetzt, da DOIF Readings das : als Trennzeichen interpretiert.

Später soll das Konstrukt eher

([Kalendar:tomorrow] eq "none" ? "21:45:00" : "22:30:00")

sein.

Die erste DOIF-Bedingung verwendet nun OffNight für die Zeitangabe:

[{sunset_abs(-900)}-[$SELF:OffNight]]

Leider meckert DOIF mit mir, daß dies keine korrekte Zeitangabe sei. Was mache ich denn wohl flasch?

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Morgennebel

Danke,


aber das ändert nichts am Fehler:


Internals:
   CFGFN     
   DEF        ([{sunset_abs(-900)}-[$SELF:OffNight]])
(set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"05:30","09:00")}-09:00] and [?SH] eq "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"06:30","09:00")}-09:00] and [?SH] ne "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
DOELSE
(set LS_AussenNachtbeleuchtung scene AllOff)

   NAME       DI_TimerAussenlichtOnOff
   NR         199
   NTFY_ORDER 50-DI_TimerAussenlichtOnOff
   STATE      initialize
   TYPE       DOIF
   DOIF_Readings:
     OffNight   22
   READINGS:
     2018-08-19 16:52:33   mode            enabled
     2018-08-19 16:52:33   state           initialize
     2018-08-19 14:58:53   timer_01_c01    19.08.2018 21:12:00
     2018-08-19 14:58:53   timer_02_c01    error: Wrong timespec : either HH:MM:SS or {perlcode}
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms)
   days:
   devices:
   do:
     0:
       0          set LS_AussenNachtbeleuchtung scene StandardDimmed
     1:
       0          set LS_AussenNachtbeleuchtung scene AllOff
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
   internals:
   interval:
     0          -1
     1          0
   itimer:
     all         DI_TimerAussenlichtOnOff
   localtime:
     0          1534705920
   readings:
   realtime:
     0          21:12:00
   time:
     0          {sunset_abs(-900)}
     1          [DI_TimerAussenlichtOnOff:OffNight]
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1534705920:
       localtime  1534705920
       hash:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings OffNight:22:45:00
   room       Aussen,SYS_Events


Ich verwende DOIF.pm

# $Id: 98_DOIF.pm 16406 2018-03-14 18:02:13Z Damian $

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Damian

DOIF_Readings aktualisiert erst, wenn ein Trigger passend zu der Definition kommt, da deine Definition mit "22:45:00" statisch ist und keinen Trigger beinhaltet, wird auch kein Reading entstehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Morgennebel

Danke für die Hilfe, Damian.

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Morgennebel

Dann habe ich eine Frage:

Wenn ein komplexes DOIF von einem DOIF_Reading abhängt, welches nur selten aktualisiert wird (z.B. Ferientage), wird es nach einem Neustart zu Fehlern in den DOIF-Bedingungen kommen, bis das DOIF_Reading triggert.

Liesse sich evtl. das "initialize"-Attribut auf DOIF_Readings übertragen, damit es einen Defaultwert gibt, bis sich das Reading durch einen Trigger aktualisiert?

Ciao, -MN

PS Oder gibt es eine clevere Lösung für dieses Problem?
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Damian

Zitat von: Morgennebel am 19 August 2018, 18:47:54
Dann habe ich eine Frage:

Wenn ein komplexes DOIF von einem DOIF_Reading abhängt, welches nur selten aktualisiert wird (z.B. Ferientage), wird es nach einem Neustart zu Fehlern in den DOIF-Bedingungen kommen, bis das DOIF_Reading triggert.

Liesse sich evtl. das "initialize"-Attribut auf DOIF_Readings übertragen, damit es einen Defaultwert gibt, bis sich das Reading durch einen Trigger aktualisiert?

Ciao, -MN

PS Oder gibt es eine clevere Lösung für dieses Problem?

Ein einmal gesetztes Reading bleibt doch auch nach dem Neustart erhalten. Ich werde vermutlich in der kommenden DOIF-Version, bei DOIF_Readings ein definiertes Reading bereits bei der Definition setzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF