userReadings mit state als Trigger? Alternativen?

Begonnen von FunkOdyssey, 13 Januar 2020, 10:57:06

Vorheriges Thema - Nächstes Thema

FunkOdyssey

In diesem älteren Thread wurde erwähnt, dass man bei einem userReading das Reading 'state' nicht als Trigger nutzen kann. Bei mir klappt das nämlich auch nicht.

attr contactDevice userReadings myDoorOpen:state.* {if (ReadingsVal("$name","state","") =~ "open.*") {ReadingsTimestamp("$name","state","")} else {ReadingsVal("$name","myDoorOpen","")}}

Wenn ich (wie im Thread oben) den Trigger jedoch weg lasse, dann wird mein userReading bei alle Events neu berechnet. Das soll aber nicht so sein, denn ich muss den Timestamp der Veränderung von 'state' haben.

attr contactDevice userReadings myDoorOpen {if (ReadingsVal("$name","state","") =~ "open.*") {ReadingsTimestamp("$name","state","")} else {ReadingsVal("$name","myDoorOpen","")}}

Weiß jemand wie man das lösen kann? Ein Reading, welches nur bei der Veränderung des 'state' aktualisiert wird? Danke.

Folgende Events erzeugt das Device:

2020-01-13 10:39:18.913 HUEDevice contactDevice reachable: 1
2020-01-13 10:39:18.913 HUEDevice contactDevice temperature: 28
2020-01-13 10:39:18.913 HUEDevice contactDevice battery: 100
2020-01-13 10:39:18.925 HUEDevice contactDevice closed

marvin78

Beispiel:

attr contactDevice userReadings myDoorOpen:(open|closed).* {if (ReadingsVal("$name","state","") =~ "open.*") {ReadingsTimestamp("$name","state","")} else {ReadingsVal("$name","myDoorOpen","")}}

FunkOdyssey

Du bist super. Ich habe aus dem Event-Log ein Notify erstellt und der hatte die gleiche Syntax (bzw. nur auf closed in diesem Augenblick).
Ich hatte mir dabei nichts gedacht, weil ich zu sehr auf das Reading fixiert war. Aber die möglichen Events sind es ja, die ich matchen muss.

Vielen Dank. Ich denke, dass wird die Lösung sein.