Shelly 2.5 und Rolladensteuerung (Rule)
Verfasst: 6. Dez 2019 15:54
Hallo,
ich habe folgendes Problem: (Shelly ist mit Tasmota geflasht)
Grundsätzlich funktioniert die Steuerung der Rollade über diese Regel bzw. die Bedienung in der Oberfläche (Openhab(Basic)).
Derzeit ist es jedoch so, dass wenn ich die Rollade hoch oder runter fahre (Openhab) bleibt der jew. Ausgang geschaltet bis ich ihn
gezielt AUS schalte oder ein OFF Signal sende.
Dieses gezielte OFF Signal möchte ich abhängig von der Leistung senden. D.H. Leistung geht auf 0 beide Ausgänge gehen auf OFF
hier die Regel:
import org.joda.time // derzeit nicht genutzt
import org.openhab.model.script.actions.Timer // derzeit nicht genutzt
var Timer rollo_timer = null // derzeit nicht genutzt
rule "Rollershutter Rollo_Wohnzimmer Stop or Set Position"
when
Item Rollo_Wohnzimmer received command
then
if (receivedCommand == STOP) {
Rollo_WZ_Power1.sendCommand("OFF")
Rollo_WZ_Power2.sendCommand("OFF")
Rollo_Teleperiod.sendCommand(300)
}
else if (receivedCommand == UP) {
if (Rollo_WZ_Power2.state == "OFF") {
Rollo_WZ_Power1.sendCommand("on")
Rollo_Teleperiod.sendCommand(10)
}
}
else if (receivedCommand == DOWN) {
if (Rollo_WZ_Power1.state == "OFF") {
Rollo_WZ_Power2.sendCommand("on")
Rollo_Teleperiod.sendCommand(10)
}
}
end
rule "Bei Leistungsänderung auf 0 beide Kanäle OFF"
when
Item Rollo_Wohnzimmer received command UP or
Item Rollo_Wohnzimmer received command DOWN
then
rollo_timer?.cancel // derzeit nich benötigt
logInfo("Regel2", "Start")
if (Rollo_Wohnzimmer.state == 0) {
logInfo("Regel2", "Start Bedingung1") // Bis hier soweit i.O.
// Rollo_CMD.sendCommand(8)
Thread::sleep(15000) // da vorab die Teleperiod auf 10sec gesetzt wurde und nicht durch den "alten" Watt Wert wieder getriggert wird
if (Rollo_WZ_Watts = 0 ) { //Test ohne state
logInfo("Regel2", "Leistung= " + Rollo_WZ_Watts.state) // sollte hier wieder auf 0 sein
Rollo_WZ_Power1.sendCommand("OFF")
Rollo_WZ_Power2.sendCommand("OFF")
Rollo_Teleperiod.sendCommand(300)
logInfo("Regel2", "Ende Bedingung1")
}
}
else if (Rollo_Wohnzimmer.state == 100) {
logInfo("Regel2", "Start Bedingung2")
// Rollo_CMD.sendCommand(8)
Thread::sleep(15000)
if (Rollo_WZ_Watts.state = 0 ) {
logInfo("Regel2", "Leistung= " + Rollo_WZ_Watts.state)
Rollo_WZ_Power1.sendCommand("OFF")
Rollo_WZ_Power2.sendCommand("OFF")
Rollo_Teleperiod.sendCommand(300)
logInfo("Regel2", "Bedingung2")
}
}
else
logInfo("Regel2", "Else")
end
ich habe folgendes Problem: (Shelly ist mit Tasmota geflasht)
Grundsätzlich funktioniert die Steuerung der Rollade über diese Regel bzw. die Bedienung in der Oberfläche (Openhab(Basic)).
Derzeit ist es jedoch so, dass wenn ich die Rollade hoch oder runter fahre (Openhab) bleibt der jew. Ausgang geschaltet bis ich ihn
gezielt AUS schalte oder ein OFF Signal sende.
Dieses gezielte OFF Signal möchte ich abhängig von der Leistung senden. D.H. Leistung geht auf 0 beide Ausgänge gehen auf OFF
hier die Regel:
import org.joda.time // derzeit nicht genutzt
import org.openhab.model.script.actions.Timer // derzeit nicht genutzt
var Timer rollo_timer = null // derzeit nicht genutzt
rule "Rollershutter Rollo_Wohnzimmer Stop or Set Position"
when
Item Rollo_Wohnzimmer received command
then
if (receivedCommand == STOP) {
Rollo_WZ_Power1.sendCommand("OFF")
Rollo_WZ_Power2.sendCommand("OFF")
Rollo_Teleperiod.sendCommand(300)
}
else if (receivedCommand == UP) {
if (Rollo_WZ_Power2.state == "OFF") {
Rollo_WZ_Power1.sendCommand("on")
Rollo_Teleperiod.sendCommand(10)
}
}
else if (receivedCommand == DOWN) {
if (Rollo_WZ_Power1.state == "OFF") {
Rollo_WZ_Power2.sendCommand("on")
Rollo_Teleperiod.sendCommand(10)
}
}
end
rule "Bei Leistungsänderung auf 0 beide Kanäle OFF"
when
Item Rollo_Wohnzimmer received command UP or
Item Rollo_Wohnzimmer received command DOWN
then
rollo_timer?.cancel // derzeit nich benötigt
logInfo("Regel2", "Start")
if (Rollo_Wohnzimmer.state == 0) {
logInfo("Regel2", "Start Bedingung1") // Bis hier soweit i.O.
// Rollo_CMD.sendCommand(8)
Thread::sleep(15000) // da vorab die Teleperiod auf 10sec gesetzt wurde und nicht durch den "alten" Watt Wert wieder getriggert wird
if (Rollo_WZ_Watts = 0 ) { //Test ohne state
logInfo("Regel2", "Leistung= " + Rollo_WZ_Watts.state) // sollte hier wieder auf 0 sein
Rollo_WZ_Power1.sendCommand("OFF")
Rollo_WZ_Power2.sendCommand("OFF")
Rollo_Teleperiod.sendCommand(300)
logInfo("Regel2", "Ende Bedingung1")
}
}
else if (Rollo_Wohnzimmer.state == 100) {
logInfo("Regel2", "Start Bedingung2")
// Rollo_CMD.sendCommand(8)
Thread::sleep(15000)
if (Rollo_WZ_Watts.state = 0 ) {
logInfo("Regel2", "Leistung= " + Rollo_WZ_Watts.state)
Rollo_WZ_Power1.sendCommand("OFF")
Rollo_WZ_Power2.sendCommand("OFF")
Rollo_Teleperiod.sendCommand(300)
logInfo("Regel2", "Bedingung2")
}
}
else
logInfo("Regel2", "Else")
end