Ja, Du musst da halt unterscheiden...
Das Dimmer Item hält einen Status. Der Status ist eine Zahl von 0 -100 (oder UNDEV oder NULL, falls es noch keinen definierten Status gibt.)
Das Dimmer Item kann aber auch ein Kommando empfangen, das kann eine Zahl sein, aber auch ON, OFF, INCREASE oder DECREASE. Wenn Du also in einer Rule einen Status eines Dimmers abfragst, kann es nur der Zahlenwert sein. wenn Du receivedCommand auswertest, gehen auch die genannten Begriffe.
Aber.
Und jetzt kommt der zweite Punkt, an dem Du unterscheiden musst.
ON ist etwas anderes als "ON", wie auch 45 etwas anderes als "45" ist.
ON, OFF, INCREASE und DECREASE sind Commands, während "ON", "OFF", "INCREASE" und "DECREASE" Strings sind.
Deine Rule sollte also so funktionieren:
Code: Alles auswählen
rule "MY Zigbee Dimmer"
when
Item BrightnessDimmer received command // Das Item BrightnessDimmer hat ein Kommando empfangen (KNX Taster)
then
switch(receivedCommand) {
case ON : {
testhwr_LIGHTLevelControl.sendCommand(100) // testhwr_LightLevelControl an (ZIGBEE )
}
case OFF : {
testhwr_LIGHTLevelControl.sendCommand(0) // testhwr_LightLevelControl aus(ZIGBEE )
}
case INCREASE :{
testhwr_LIGHTLevelControl.sendCommand(BrightnessDimmer.state + 5) //testhwr_LightLevelControl +5 (ZIGBEE )
}
case DECREASE :{
testhwr_LIGHTLevelControl.sendCommand(BrightnessDimmer.state - 5) //testhwr_LightLevelControl -5 (ZIGBEE )
}
end
Etwas allgemeiner und mit ein paar Tests, um die schlimmsten Fehler abzufangen:
Code: Alles auswählen
rule "MY Zigbee Dimmer"
when
Item BrightnessDimmer received command // Das Item BrightnessDimmer hat ein Kommando empfangen (KNX Taster)
then
var Integer iLevel = 0 // Variable initialisieren
if(BrightnessDimmer.state instanceof Number) // Falls Item gültigen Status enthält
iLevel = (BrightnessDimmer.state as Number).intValue // Nutze diesen als Wert
switch(receivedCommand) { // Unterscheide nach empfangenem Kommando
case ON : iLevel = 100 // Falls ON setze 100
case OFF : iLevel = 0 // Falls OFF setze 0
case INCREASE: iLevel += 5 // Falls INCREASE erhöhe um 5
case DECREASE: iLevel -= 5 // Falls DECREASE verringere um 5
default : iLevel = (receivedCommand as Number).intValue // wenn auch Absolutwerte empfangen werden können
}
if(iLevel > 100) iLevel = 100 // Falls über 100 setze auf 100
if(iLevel < 0) iLevel = 0 // Falls unter 0 setze auf 0
if(BrightnessDimmer.state != iLevel) // Falls Ist von Soll abweicht setze neuen Wert
BrightnessDimmer.postUpdate(iLevel)
if(testhwr_LIGHTLevelControl.state != iLevel) // Falls Ist von Soll abweicht, sende Befehl
testhwr_LIGHTLevelControl.sendCommand(iLevel)
end
Wahlweise kannst Du auch statt
einfach
verwenden. Dann musst Du tatsächlich Anführungszeichen um die Befehle setzen.
der default Zweig bliebe aber unverändert. Diesen bruchst Du auch, wenn Du das Item BrightnessDimmer in die UI einbaust und von dort zum Steuern nutzen willst. Steuerung in der UI löst jeweils ein received command Event aus. Dimmer Items werden in der UI gewöhnlich als Slider gerendert, womit das Item dann nur Befehle 0 - 100 empfängt.