OH3.0 PushButton Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

OH3.0 PushButton Rule

Beitrag von EMaster »

Bisher hatte ich in OH2.x folgende Regel für meine PushButtons benutzt.

Code: Alles auswählen

rule "PushButton EIN/AUS"

when 
    Item PushButton received command ON
then
    if(Swi_Gerät.state == OFF) 
    {
        createTimer(now.plusMillis(500), [ | PushButton.sendCommand(OFF) ] )
        Swi_Gerät.sendCommand(ON)
    }
    if(Swi_Gerät.state == ON) 
    {
        createTimer(now.plusMillis(500), [ | PushButton.sendCommand(OFF) ] )
        Swi_Gerät.sendCommand(OFF)
    }
end


Da nun now.plusMillis in OH3.x nicht mehr funktioniert, bräuchte ich Mal Eure Hilfe, wie ich die Regel nun umbauen müsste, dass wieder alles funktioniert?!

Vielen Dank schon mal.
openHAB 4.3.4 im Docker@Synology

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: OH3.0 PushButton Rule

Beitrag von udo1toni »

Die Rule ist so oder so nicht wirklich gut. ;)
Das Eine ist die unnötige doppelte Definition des Timers. Auch die Umschaltfunktion ist nicht gut, denn sie setzt voraus, dass Swi_Gerät entweder den Zustand ON oder den Zustand OFF hat, es gibt aber auch noch die Zustände NULL und UNDEV.
Und wo wir schon beim Item sind: Swi_Gerät enthält ein Sonderzeichen, das ist höchst riskant. Es wäre besser, das Item ohne Umlaute zu benennen.

Die Rule sollte also besser so aussehen:

Code: Alles auswählen

rule "PushButton EIN/AUS"
when 
    Item PushButton received command ON
then
    Swi_Geraet.sendCommand(if(Swi_Geraet.state != ON) ON else OFF) 
    createTimer(now.plusMillis(500), [ |
        PushButton.postUpdate(OFF)
    ])
end
Nun zum Timer. Da kann ich leider nur einen halben Tipp geben (bzw. in diesem Fall einen doppelten), nämlich statt plusMillis(500) ein plusSeconds(1) zu nehmen. Java Time unterstützt keine Addition von Sekundenbruchteilen. Natürlich gäbe es die Möglichkeit, sich den Zeitpunkt in Millisekunden ausgeben zu lassen und diese Zahl als Grundlage für ein neues Java Time Objekt nutzen. Wie das genau abläuft, müsste man dann eruieren.
Auch die Expire-Funktion (die ein vollständiger Ersatz für das Expire Binding ist) erlaubt nur ganze Sekunden als Zeitspanne.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

EMaster
Beiträge: 107
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: OH3.0 PushButton Rule

Beitrag von EMaster »

Vielen Dank Udo.
Mit now.plusSeconds(1) hatte ich mir tatsächlich schon beholfen. Ich dachte aber, dass es vielleicht eine Alternative zu now.plusMillis gibt. Aber man muss es auch nicht unbedingt komplizierter lösen, als es ist.

Keine Angst meine Items haben natürlich keine Sonderzeichen. Das war nur als Beispiel gedacht. Aber trotzdem Danke für den Hinweis.
openHAB 4.3.4 im Docker@Synology

Antworten