[erledigt] Bedingungen greifen nicht mehr

Begonnen von cbl, 26 August 2019, 15:55:22

Vorheriges Thema - Nächstes Thema

cbl

Hallo,

seit ein paar Tagen (ich habe kein Update gemacht oder etwas an den Definitionen verändert) werden bei mehreren (gleichartigen) DOIF-Definitionen, die ich zur Beschattungssteuerung nutze, die Bedingungen nicht mehr erfüllt.
Beispielsweise sollte in dem folgenden Device bei den dargestellten Werten gerade jetzt das cmd_1 ausgeführt werden - wird es aber nicht.

defmod doif.rolladen.sonnenschutz.terrassenfenster DOIF (([?dummy.Rollo_Master:state] eq "an") and ([dummy.sonnenlichtzeit.terrassenseite] eq "on") and\
  (([dummy.sonnenschein:state] eq "an") and ([temperatur.aussen:measuredTemp] > [?dummy.rolladen.temperatur.runter:state])) or\
  ([temperatur.aussen:measuredTemp] > ([?dummy.rolladen.temperatur.runter:state] + 3.0))\
) \
(set eg.wohnzimmer.Rollo.Terrassenfenster Pos3)\
\
DOELSEIF (([?dummy.Rollo_Master:state] eq "an") and ([?dummy.sonnenschein:state] eq "an") and ([?dummy.sonnenlichtzeit.terrassenseite] eq "on") and \
          ([?temperatur.aussen:measuredTemp] > [?dummy.rolladen.temperatur.runter:state]) and [eg.wohnzimmer.Rollo.Terrassenfenster:setG2] eq "up")\
(set eg.wohnzimmer.Rollo.Terrassenfenster Pos3)\
\
DOELSEIF ( ([?dummy.Rollo_Master:state] eq "an") and ([?eg.wohnzimmer.Rollo.Terrassenfenster] ne "100 %") and ([?dummy.Tageslicht:state] eq "hell") and \
           ([?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state]) and ([?12:00-21:00]) and \
   ( ([?dummy.sonnenschein:state] eq "aus" and [temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state]) or \
   ([dummy.sonnenschein:state] eq "aus" and [?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state]) or \
   (([dummy.sonnenlichtzeit.terrassenseite] eq "off") and ([?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state])) or \
   ([?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state] and [20:00]) ))\
(set eg.wohnzimmer.Rollo.Terrassenfenster Auf)
attr doif.rolladen.sonnenschutz.terrassenfenster always_hidden true
attr doif.rolladen.sonnenschutz.terrassenfenster cmdpause 1200
attr doif.rolladen.sonnenschutz.terrassenfenster do always
attr doif.rolladen.sonnenschutz.terrassenfenster event-on-change-reading cmd
attr doif.rolladen.sonnenschutz.terrassenfenster group Timer
attr doif.rolladen.sonnenschutz.terrassenfenster room Rolladen

setstate doif.rolladen.sonnenschutz.terrassenfenster initialized
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:46:25 Device temperatur.aussen
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:31:39 cmd 0
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:36:39 e_dummy.sonnenlichtzeit.terrassenseite_STATE on
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:35:56 e_dummy.sonnenschein_state an
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:46:25 e_temperatur.aussen_measuredTemp 31.65
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:31:39 mode enabled
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:31:39 state initialized
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:46:04 timer_01_c03 27.08.2019 12:00:00
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:46:04 timer_02_c03 26.08.2019 21:00:00
setstate doif.rolladen.sonnenschutz.terrassenfenster 2019-08-26 15:46:04 timer_03_c03 26.08.2019 20:00:00


Welchen Fehler übersehe ich?


Hier noch ein ungekürztes List des Devices:

Internals:
   DEF        (([?dummy.Rollo_Master:state] eq "an") and ([dummy.sonnenlichtzeit.terrassenseite] eq "on") and
  (([dummy.sonnenschein:state] eq "an") and ([temperatur.aussen:measuredTemp] > [?dummy.rolladen.temperatur.runter:state])) or
  ([temperatur.aussen:measuredTemp] > ([?dummy.rolladen.temperatur.runter:state] + 3.0))
)
(set eg.wohnzimmer.Rollo.Terrassenfenster Pos3)

DOELSEIF (([?dummy.Rollo_Master:state] eq "an") and ([?dummy.sonnenschein:state] eq "an") and ([?dummy.sonnenlichtzeit.terrassenseite] eq "on") and
          ([?temperatur.aussen:measuredTemp] > [?dummy.rolladen.temperatur.runter:state]) and [eg.wohnzimmer.Rollo.Terrassenfenster:setG2] eq "up")
(set eg.wohnzimmer.Rollo.Terrassenfenster Pos3)

DOELSEIF ( ([?dummy.Rollo_Master:state] eq "an") and ([?eg.wohnzimmer.Rollo.Terrassenfenster] ne "100 %") and ([?dummy.Tageslicht:state] eq "hell") and
           ([?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state]) and ([?12:00-21:00]) and
   ( ([?dummy.sonnenschein:state] eq "aus" and [temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state]) or
   ([dummy.sonnenschein:state] eq "aus" and [?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state]) or
   (([dummy.sonnenlichtzeit.terrassenseite] eq "off") and ([?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state])) or
   ([?temperatur.aussen:measuredTemp] < [?dummy.rolladen.temperatur.rauf:state] and [20:00]) ))
(set eg.wohnzimmer.Rollo.Terrassenfenster Auf)
   FUUID      5c446f66-f33f-ae1f-792e-7dc61acca7fa60ce
   MODEL      FHEM
   NAME       doif.rolladen.sonnenschutz.terrassenfenster
   NR         77
   NTFY_ORDER 50-doif.rolladen.sonnenschutz.terrassenfenster
   STATE      initialized
   TYPE       DOIF
   VERSION    19786 2019-07-05 21:47:08
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1566827412.13341
           VALUE      checkall
   READINGS:
     2019-08-26 15:46:25   Device          temperatur.aussen
     2019-08-26 15:31:39   cmd             0
     2019-08-26 15:36:39   e_dummy.sonnenlichtzeit.terrassenseite_STATE on
     2019-08-26 15:35:56   e_dummy.sonnenschein_state an
     2019-08-26 15:46:25   e_temperatur.aussen_measuredTemp 31.65
     2019-08-26 15:31:39   mode            enabled
     2018-12-19 18:41:14   statStateDay    cmd_3: 00:00:02 cmd_3_Count: 1 (since: 2018-12-19_18:41:12)
     2018-12-19 18:41:14   statStateHour   cmd_3: 00:00:02 cmd_3_Count: 1 (since: 2018-12-19_18:41:12)
     2018-12-19 18:41:14   statStateMonth  cmd_3: 00:00:02 cmd_3_Count: 1 (since: 2018-12-19_18:41:12)
     2018-12-19 18:41:14   statStateYear   cmd_3: 00:00:02 cmd_3_Count: 1 (since: 2018-12-19_18:41:12)
     2019-08-26 15:31:39   state           initialized
     2019-08-26 15:46:04   timer_01_c03    27.08.2019 12:00:00
     2019-08-26 15:46:04   timer_02_c03    26.08.2019 21:00:00
     2019-08-26 15:46:04   timer_03_c03    26.08.2019 20:00:00
   Regex:
     accu:
   attr:
     cmdpause:
       1200
     wait:
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'dummy.Rollo_Master','state') eq "an") and (::InternalDoIf($hash,'dummy.sonnenlichtzeit.terrassenseite','STATE') eq "on") and   ((::ReadingValDoIf($hash,'dummy.sonnenschein','state') eq "an") and (::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') > ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.runter','state'))) or   (::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') > (::ReadingValDoIf($hash,'dummy.rolladen.temperatur.runter','state') + 3.0))
     1          (::ReadingValDoIf($hash,'dummy.Rollo_Master','state') eq "an") and (::ReadingValDoIf($hash,'dummy.sonnenschein','state') eq "an") and (::InternalDoIf($hash,'dummy.sonnenlichtzeit.terrassenseite','STATE') eq "on") and            (::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') > ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.runter','state')) and ::ReadingValDoIf($hash,'eg.wohnzimmer.Rollo.Terrassenfenster','setG2') eq "up"
     2           (::ReadingValDoIf($hash,'dummy.Rollo_Master','state') eq "an") and (::InternalDoIf($hash,'eg.wohnzimmer.Rollo.Terrassenfenster','STATE') ne "100 %") and (::ReadingValDoIf($hash,'dummy.Tageslicht','state') eq "hell") and             (::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') < ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.rauf','state')) and (::DOIF_time($hash,0,1,$wday,$hms)) and     ( (::ReadingValDoIf($hash,'dummy.sonnenschein','state') eq "aus" and ::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') < ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.rauf','state')) or     (::ReadingValDoIf($hash,'dummy.sonnenschein','state') eq "aus" and ::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') < ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.rauf','state')) or     ((::InternalDoIf($hash,'dummy.sonnenlichtzeit.terrassenseite','STATE') eq "off") and (::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') < ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.rauf','state'))) or     (::ReadingValDoIf($hash,'temperatur.aussen','measuredTemp') < ::ReadingValDoIf($hash,'dummy.rolladen.temperatur.rauf','state') and ::DOIF_time_once($hash,2,$wday)) )
   days:
   devices:
     0           dummy.sonnenlichtzeit.terrassenseite dummy.sonnenschein temperatur.aussen
     1           eg.wohnzimmer.Rollo.Terrassenfenster
     2           temperatur.aussen dummy.sonnenschein dummy.sonnenlichtzeit.terrassenseite
     all         dummy.sonnenlichtzeit.terrassenseite dummy.sonnenschein temperatur.aussen eg.wohnzimmer.Rollo.Terrassenfenster
   do:
     0:
       0          set eg.wohnzimmer.Rollo.Terrassenfenster Pos3
     1:
       0          set eg.wohnzimmer.Rollo.Terrassenfenster Pos3
     2:
       0          set eg.wohnzimmer.Rollo.Terrassenfenster Auf
     3:
   helper:
     event      measuredTemp: 31.65
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent measuredTemp: 31.65
     triggerDev
     timerevents:
       measuredTemp: 31.65
     timereventsState:
       measuredTemp: 31.65
     triggerEvents:
       measuredTemp: 31.65
     triggerEventsState:
       measuredTemp: 31.65
   internals:
     0           dummy.sonnenlichtzeit.terrassenseite:STATE
     1           dummy.sonnenlichtzeit.terrassenseite:STATE
     2           eg.wohnzimmer.Rollo.Terrassenfenster:STATE dummy.sonnenlichtzeit.terrassenseite:STATE
     all         dummy.sonnenlichtzeit.terrassenseite:STATE eg.wohnzimmer.Rollo.Terrassenfenster:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   itimer:
   localtime:
     0          1566900000
     1          1566846000
     2          1566842400
   perlblock:
   readings:
     0           dummy.sonnenschein:state temperatur.aussen:measuredTemp
     1           eg.wohnzimmer.Rollo.Terrassenfenster:setG2
     2           temperatur.aussen:measuredTemp dummy.sonnenschein:state
     all         dummy.sonnenschein:state temperatur.aussen:measuredTemp eg.wohnzimmer.Rollo.Terrassenfenster:setG2
   realtime:
     0          12:00:00
     1          21:00:00
     2          20:00:00
   time:
     0          12:00:00
     1          21:00:00
     2          20:00:00
   timeCond:
     0          2
     1          2
     2          2
   timer:
     0          0
     1          0
     2          0
   timers:
     2           2
   trigger:
   triggertime:
     1566842400:
       localtime  1566842400
       hash:
     1566846000:
       localtime  1566846000
       hash:
     1566900000:
       localtime  1566900000
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude cmd_nr
   always_hidden true
   cmdpause   1200
   do         always
   event-on-change-reading cmd
   group      Timer
   room       Rolladen


Danke für jeden Hinweis.
Christian

Per

Ich finde im List nicht die Status der mit ? abgefragten Devices.

cbl

Ab wann steht der darin? Wenn ich im DOIF-Device etwas an der Definition verändere, verschwinden diese Readings im Device und tauchen (beim nächsten Event eines dieser Devices?) wieder auf?
Das List habe ich erzeugt, nachdem ich die Definition zumindest im Bearbeitungsmodus hatte.

Das Problem ist nach einem weiteren Neustart von FHEM verschwunden und die DOIFs funktionieren nun wieder wie vorher.

FHEMAN

Hallo Christian, konntest du das Problem identifizieren? Ich habe gerade ein ähnliches Problem. Auch bei der Beschattungssteuerung. Ich habe das doif mehrfach deaktiviert und aktiviert. Einen Neustart wollte ich vermeiden. Erst ein checkall führte eben zum Ziel. Allerdings werden die relevanten e_Readings nicht aktualisiert. Teilweise werden die ?Readings auch gar nicht angelegt.

Was ich mich dabei frage:
Wozu brauche ich set myDoif checkall? Ist es nicht äquivalent zu disable+enable? Erfolgt beim Enable nicht ohnehin ein "Komplettcheck"?
Commendref und Wiki sind hier für mich nicht aussagekräftig genug. Vielleicht kann Damian hier einmal etwas sagen? Auch, ob man irgendwie erkennen / überwachen kann, ob ein doif aus dem Tritt kommt?
Und am Rande gefragt, kann ich innerhalb eines Bedingungsblocks ([bla1] eq "on" and [bla2] eq "on") wait auch weiter spezifizieren (also bla1 soll 1h on sein und bla2 nur 5 min)?

viele Grüße
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Per

Zitat von: FHEMAN am 30 August 2019, 10:28:03Und am Rande gefragt, kann ich innerhalb eines Bedingungsblocks ([bla1] eq "on" and [bla2] eq "on") wait auch weiter spezifizieren (also bla1 soll 1h on sein und bla2 nur 5 min)?
Entweder mit berechnetem wait oder doppelter Abfrage:
([bla1] eq "on" and [?bla2] eq "on") ()
DOELSEIF ([?bla1] eq "on" and [bla2] eq "on") ()