Schwellenwert definieren - previousState bringt nur aktuellen Wert
Verfasst: 7. Apr 2021 20:32
Hi,
ich möchte gerne das überschreiten eines bestimmten Sonnenwinkels (Azimut) als Auslöser nutzen, allerdings hapert es noch an irgendetwas.
Und zwar möchte ich generell die Rollladen (smart über shelly) beim Überschreiten eines gewissen Sonnenstandes fahren lassen. Sprich es soll nicht bei jeder Winkeländerung auslösen, um eventuell manuelle Eingriffe nicht wieder zu "überschreiben".
Das ganze soll mit DSL Rules gelöst werden, da ich mich damit bisher am sichersten fühle.
Deshalb wollte ich es wie folgt machen:
Das Problem scheint mir nun aber darin zu liegen, dass previousState.state nur den aktuellen Wert liefert. Überprüft hab ich das mit
was mir im Log folgendes liefert:
Auch ein vorgeschaltener Timer von 1 Minute bringt nichts. Sinn des Timers sollte sein, eine etwaige Verzögerung zwischen Änderung des Wertes und der Verfügbarkeit des alten Wertes in der Persistance zu umgehen.
Also mein derzeitiger Code sieht so aus:
Bezüglich der persitence habe ich nichts geändert oder erstellt, ich gehe davon aus, dass diese by default als rrd4j bewerkstelligt werden sollte, zumal eine Sonnendaten_Azimut.rrd vorhanden ist und Graphen für den Wert verfügbar sind.
Kann mir bitte jemand einen entscheidenden Hinweis geben?
Danke vorab.
P.S.: Wenn ich den Teil mit previouseState weglasse, dann klappt es, allerdings fährt das Rollo dann bei jeder Änderung in die Position, was ich ja gerne vermeiden möchte.
ich möchte gerne das überschreiten eines bestimmten Sonnenwinkels (Azimut) als Auslöser nutzen, allerdings hapert es noch an irgendetwas.
Und zwar möchte ich generell die Rollladen (smart über shelly) beim Überschreiten eines gewissen Sonnenstandes fahren lassen. Sprich es soll nicht bei jeder Winkeländerung auslösen, um eventuell manuelle Eingriffe nicht wieder zu "überschreiben".
Das ganze soll mit DSL Rules gelöst werden, da ich mich damit bisher am sichersten fühle.
Deshalb wollte ich es wie folgt machen:
Code: Alles auswählen
if( Sonnendaten_Azimut.previousState.state < 262 |° && Sonnendaten_Azimut.getState() >= 262 |°
) { rollo_Steuerung0offen100geschlossen.sendCommand(100) }
Code: Alles auswählen
logInfo("TEST ", "previous state was " + Sonnendaten_Azimut.previousState.state)
Code: Alles auswählen
[INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Sonnendaten_Azimut' changed from 261.9764096540953 ° to 262.96264910274374 °
[INFO ] [org.openhab.core.model.script.TEST ] - previous state was 262.96264910274374 °
Also mein derzeitiger Code sieht so aus:
Code: Alles auswählen
createTimer(now.plusMinutes(1),[|
logInfo("TEST ", "previous state was " + Sonnendaten_Azimut.previousState.state)
if(
Sonnendaten_Azimut.previousState.state < 262 |° && Sonnendaten_Azimut.getState() >= 262 |° //das überschreiten der schwelle klappt noch nicht
) {
rollo_Steuerung0offen100geschlossen.sendCommand(100)
}
])
Kann mir bitte jemand einen entscheidenden Hinweis geben?
Danke vorab.
P.S.: Wenn ich den Teil mit previouseState weglasse, dann klappt es, allerdings fährt das Rollo dann bei jeder Änderung in die Position, was ich ja gerne vermeiden möchte.