Moin allerseits,
Ich bin mit meinem Latein am Ende.
Folgender Fall:
Ich habe ein HomeMatic Heizkörper Thermostat und einen externen Sensor.
Der Sensor misst die Raumtemperatur und generiert höchsten alle 280 Sekunden einen Event.
Mit einem DOIF wollte ich auf das Event reagieren und den Temperatur Wert in einen virtuellen HomeMatic schreiben.
Der Wert im virtuellen Temp Sensor soll immer dann aktualisiert werden, wenn er von Wert des Raum Sensors abweicht.
Mittels Filelog habe ich verifiziert, dass der Raumsensor Events erzeugt.
Das Doif löst aber sehr unzuverlässig aus. Wie im List zu sehen ist, wurde das letzte Mal um 0:33 Uhr ausgelöst.
Das letzte Event ist von 7:52.
Internals:
DEF ([MYSENSOR_106:wz.temperature] != [wz.vTmp1_Sensor1:temperature]) (set wz.vTmp1_Sensor1 virtTemp [MYSENSOR_106:wz.temperature])
NAME wz.Tmp_upd
NR 343
NTFY_ORDER 50-wz.Tmp_upd
STATE cmd_1
TYPE DOIF
Readings:
2016-11-17 07:52:42 Device MYSENSOR_106
2016-11-17 00:33:45 cmd 1
2016-11-17 00:33:45 cmd_event MYSENSOR_106
2016-11-17 00:33:45 cmd_nr 1
2016-11-17 07:52:42 e_MYSENSOR_106_wz.temperature 20.5
2016-11-17 00:33:45 state cmd_1
Condition:
0 ReadingValDoIf($hash,'MYSENSOR_106','wz.temperature','','',AttrVal($hash->{NAME},'notexist',undef)) != ReadingValDoIf($hash,'wz.vTmp1_Sensor1','temperature','','',AttrVal($hash->{NAME},'notexist',undef))
Devices:
0 MYSENSOR_106 wz.vTmp1_Sensor1
all MYSENSOR_106 wz.vTmp1_Sensor1
Do:
0:
0 set wz.vTmp1_Sensor1 virtTemp [MYSENSOR_106:wz.temperature]
1:
Helper:
event wz.temperature: 20.5
globalinit 1
last_timer 0
sleeptimer -1
timerdev MYSENSOR_106
timerevent wz.temperature: 20.5
triggerDev MYSENSOR_106
Bm:
Doif_notify:
cnt 8496
dmx 0
max 349
tot 11660
mAr:
HASH(wz.Tmp_upd)
HASH(MYSENSOR_106)
Doif_set:
cnt 10
dmx 0
mAr
max 0
tot 0
timerevents:
wz.temperature: 20.5
timereventsState:
wz.temperature: 20.5
triggerEvents:
wz.temperature: 20.5
triggerEventsState:
wz.temperature: 20.5
Internals:
Itimer:
Readings:
0 MYSENSOR_106:wz.temperature wz.vTmp1_Sensor1:temperature
all MYSENSOR_106:wz.temperature wz.vTmp1_Sensor1:temperature
Regexp:
0:
All:
State:
Trigger:
Attributes:
notexist 20
room Wohnzimmer
verbose 5
Wenn ich das Doif definiere oder die Definition ändere, dann läuft es. Gefühlt immer bis zum Datumswechsel.
Ich habe nun schon mehrere Tage versucht den Fehler zu finden, war aber nicht erfolgreich.
Wird hier z.B. der Wert 21.1 vielleicht als Datum Interpretiert?
Grüße Sidey
Ich würde das Attribut do always ergänzen.
Im Moment klappt es nur, wenn die beiden Temperaturen zwischendurch immer mal wieder identisch sind, da das DOIF nur bei Zustandswechsel ausgeführt wird.
Mit do always wird es jedes Mal ausgeführt (wenn es getriggert wird und die Bedingung erfüllt ist).
Aber dann solltest Du vielleicht besser mit
([MYSENSOR_106:wz.temperature] != [?wz.vTmp1_Sensor1:temperature])
die zweite Temperatur nicht triggern lassen, sonst spielt das DOIF irgendwann Ping Pong mit sich selbst...
Danke... Ich hatte Tomaten auf den Augen.
Das mit do always leuchtet ein... Das mit dem Triggern natürlich auch.
Ich werde es beobachten, nehme aber an dass es jetzt funktionieren wird.
Grüße Sidey