Rollladen mit nur einem Taster steuern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Rollladen mit nur einem Taster steuern

Beitrag 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

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

Re: Rollladen mit nur einem Taster steuern

Beitrag von udo1toni »

Na ja, am einfachsten legst Du dazu ein Item an. Alternativ kannst Du auch eine Variable anlegen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Re: Rollladen mit nur einem Taster steuern

Beitrag 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

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

Re: Rollladen mit nur einem Taster steuern

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Re: Rollladen mit nur einem Taster steuern

Beitrag 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

Antworten