Seite 1 von 1

OH3.0 PushButton Rule

Verfasst: 2. Jan 2021 22:19
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.

Re: OH3.0 PushButton Rule

Verfasst: 3. Jan 2021 00:47
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.

Re: OH3.0 PushButton Rule

Verfasst: 3. Jan 2021 09:58
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.