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
Ich finde im List nicht die Status der mit ? abgefragten Devices.
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.
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
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") ()