NEWS
Problem: state.expire
-
Habe einige Tests mit state.expire durchgeführt und festgestellt:
- Bei Ablauf von "expire" (Zustand wird gelöscht) erfolgt kein Trigger, es kann also nicht darauf reagiert werden
- Im Trigger liefert dp.state.expire immer undefined
- getState(id).expire liefert true bei aktiviertem "expire". Zu erwarten wäre eine Zahl (s).
- Mit setState(id, {val: false, ack: true, expire: 10}) kann "expire" gesetzt werden und 10 s später ist der Zustand nicht mehr vorhanden
- Mit setState(id, false, true) wird "expire" gelöscht, der Zustand bleibt erhalten
Ist das alles so gewollt ?
-
@paul53 Das der JavaScript Adapter kein "trigger" bei einem expire Ablauf macht ist nicht korrekt und dazu gibts schon ein Issue wenn ich recht erinnere. Ich hab aber den grund noch nicht gefunden
An sich sollte der Code das nicht nicht tun
Das Expire gehört nicht wirklich zum State und daher ist da auch kein Wert mehr. Am Ende ist es ein Timer zum State-Ablauf der Startet sobald der State gesetzt wird.
Die File DB "merkt" sich im State auch das expire Flag (bzw das es expired) und daher kannst Du es auslesen. Mit einer Redis DB läuft der expre Timer im Redis und du hast zB das "expire" Flag nicht.Ein neu gesetzter Wert ohne Expire beendet den Timer quasi und setzt den Wert ohne expire.
-
@apollon77 Gibt es hier schon ein Update bzgl. kein Trigger bei expire?
Ich habe zwei Probleme:- weiterhin kein Trigger
- Wenn das Expire auf einen Aliasstate mit Write Converter geht, wird ihm scheinbar einfach hintenrum der State entzogen, ohne dass der Converter aufgerufen wird. Demnach ist dann der State
null
und nicht wie beival ? "on" : "off"
zu erwartenoff
.
Meine Überlegung war nämlich diese: Ich habe ein Thermostat aus Temperatursensor und Shelly realisiert. Leider hapert die Verbindung zum Temperatursensor manchmal etwas. Dann bleibt die Heizung ewig an, weil die Zieltemperatur nicht erreicht ist. Daher wollte ich die Heizung mit Expire 15 Minuten setzen, das heißt, wenn bis dahin kein neuer Wert kam, dann geht die Heizung wieder aus. Normalerweise kommt eine neuer Wert nach 5 Minuten und sollte somit das Expire zurücksetzen. Das ist quasi eine Art Totmannschalter. Leider komme ich aber nicht in den Trigger, dass der Wert auf
null
gesetzt wurde. Das wäre mein Workaround für den fehlenden Converterdurchlauf gewesen. -
@theknut das sind 3 Zeilen code ..
-
@arteck Das ist schon klar, es geht nur das Problem nicht mit mehr Workarounds zu überdecken, sondern versuchen es zu fixen. Ich stelle mich gerne zur Verfügung, wenn mir jemand sagt wo der Code ist und wo ich schauen müsste. Schneller würde es sicherlich gehen, wenn es jemand macht der bereits mit dem Thema vertraut ist.
-
@theknut Die interessamnte frage ist für mich: Warum hat der state nen expire überhaupt? Wenn expire trigger bei alias nucht tun dann wäre das ein js-controller issue wert- Müsste man sich ansehen. An sich sollte das "null" annopunced werden .. aber halt das ... und ja das ist kein state value=null sondern "kein state".