Seite 1 von 1

Rollladen mit nur einem Taster steuern

Verfasst: 21. Okt 2019 17:38
von curius
Hallo Leute,

wieder mal benötige ich Unterstützung bei einer Rule ;-)
Ich möchte meine Rollladen mit nur einem Taster steuern.

Ist der Rollladen oben, soll er bei Tastendruck nach unten fahren => in Endposition
Ist der Rollladen unten, soll er bei Tastendruck wieder nach oben fahren => in Endposition

Soweit alles klar. Meine Rule dazu funktioniert auch schon:
else if (ws_click_kij.state.toString == "right") {
if (Rollershutter7State.state.toString == "BOTTOM") {
Rollershutter7.sendCommand(UP)
}
else {
Rollershutter7.sendCommand(DOWN)
}
}
Jetzt aber zu meinem Problem...
Ich möchte während der Fahrt den Rollladen durch den Tastendruck stoppen und durch einen weiteren Tastendruck die Fahrt wieder fortsetzen.
Wie kann ich das lösen? Wenn der Rollladen nach oben fährt und ich ihn mittels Tastendruck stoppe, dann sollte er bei einem weitern Tastendruck weiter nach oben fahren.
Umgekehrt sollte der Rollladen weiter nach unten fahren, nachdem ich die Taste nach dem Stoppen während dem Runterfahren drücke.
Der Rolladen sollte sich also merken welchen Status er vor dem Stoppen gehabt hat.

Vielen Dank!

Grüße
Christian

Re: Rollladen mit nur einem Taster steuern

Verfasst: 21. Okt 2019 20:36
von udo1toni
Na ja, am einfachsten legst Du dazu ein Item an. Alternativ kannst Du auch eine Variable anlegen.

Re: Rollladen mit nur einem Taster steuern

Verfasst: 21. Okt 2019 21:51
von curius
Hallo!

Hey super, vielen Dank für den Hinweis...
Ich hab's geschafft ;-)
var boolean shutter = false

rule "WallSwitch"

when
Item ws_click_kij received update
then

if (ws_click_kij.state.toString == "right") {
if (Rollershutter7State.state.toString == "BOTTOM") {
Rollershutter7.sendCommand(UP)
shutter = true
logInfo("Variable Shutter", "true")
}
if (Rollershutter7State.state.toString == "MOVING_UP" || Rollershutter7State.state.toString == "MOVING_DOWN") {
Rollershutter7.sendCommand(STOP)
}
if (Rollershutter7State.state.toString == "STOPPED" && shutter == true) {
Rollershutter7.sendCommand(UP)
}
if (Rollershutter7State.state.toString == "STOPPED" && shutter == false) {
Rollershutter7.sendCommand(DOWN)
}
if (Rollershutter7State.state.toString == "TOP") {
Rollershutter7.sendCommand(DOWN)
shutter = false
logInfo("Variable Shutter", "false")
}
}
Grüße
Christian

Re: Rollladen mit nur einem Taster steuern

Verfasst: 21. Okt 2019 23:50
von udo1toni
Zwei alternative Versionen:

Code: Alles auswählen

var Boolean bShutter = false

rule "WallSwitch"
when
    Item ws_click_kij received update
then
    if (ws_click_kij.state.toString != "right") return;

    val String strState = Rollershutter7State.state.toString
    if(strState == "BOTTOM") bShutter = true
    if(strState == "TOP")    bShutter = false
    if(strState == "TOP" || strState == "BOTTOM") logInfo("Variable Shutter", "{}",bShutter)
    if(strState == "BOTTOM"    || (strState == "STOPPED" &&  bShutter)) Rollershutter7.sendCommand(UP)
    if(strState == "TOP"       || (strState == "STOPPED" && !bShutter)) Rollershutter7.sendCommand(DOWN)
    if(strState == "MOVING_UP" || (strState == "MOVING_DOWN")           Rollershutter7.sendCommand(STOP)
end
oder:

Code: Alles auswählen

var Boolean bShutter = false

rule "WallSwitch"
when
    Item ws_click_kij received update
then
    if (ws_click_kij.state.toString != "right") return;

    switch (Rollershutter7State.state.toString.left(3)) {
        case "BOT" : {
            bShutter = true
            logInfo("Variable Shutter", "{}",bShutter)
            Rollershutter7.sendCommand(UP)
        }
        case "TOP" : {
            bShutter = false
            logInfo("Variable Shutter", "{}",bShutter)
            Rollershutter7.sendCommand(DOWN)
        }
        case "STO" : { Rollershutter7.sendCommand(if(bShutter) UP else DOWN) }
        case "MOV" : { Rollershutter7.sendCommand(STOP) }
    }
end
Beide Varianten haben spezifische Vor- und Nachteile, die allerdings jeweils kosmetischer Natur sind. Die erste Variante kommt ohne Befehlsblöcke aus und jeder Befehl wird nur einmal verwendet. Dafür müssen die Abfragen mehrfach ausgeführt werden.

Die zweite Variante nutzt switch-case zur Unterscheidung aller Fälle, was viel Text spart (durch den Kunstgriff, den Status auf die ersten drei Zeichen zu kürzen, wird trotzdem nur ein case für beide MOVING_X Varianten benötigt).
Zumindest das logInfo ist doppelt, ansonsten erscheint die Variante aber sauberer als die erste Variante.

Re: Rollladen mit nur einem Taster steuern

Verfasst: 22. Okt 2019 13:02
von curius
Perfekt, vielen Dank für die tolle Unterstützung...
Durch deine beiden Varianten habe ich schon wieder einiges dazugelernt.

Danke!

Grüße
Christian