Unschön, aber ja.
Du könntest den zuletzt gewählten Einschaltwert über die Persistence ermitteln, allerdings wäre die Herangehensweise dann eine andere.
Der Taster muss auf ein separates Item geführt werden, statt den Taster Channel direkt mit dem Zigbee Item zu verbinden. Das bedeutet im Umkehrschluss, dass Du zwei Rules benötigst, eine für den Befehl, eine für die Rückmeldung. Ungefähr so:
Code: Alles auswählen
rule "knx 2 zigbee"
when
Item DimTaster received command
then
switch(receivedCommand.toString) {
case "OFF" : MyDimmer.sendCommand(OFF)
case "ON" : {
if((MyDimmer.state as Number) > 0)
MyDimmer.sendCommand(100)
else
MyDimmer.sendCommand(MyDimmer.previousState(true).state.toString)
}
case "INCREASE" : MyDimmer.sendCommand(INCREASE)
case "DECREASE" : MyDimmer.sendCommand(DECREASE)
}
end
rule "zigbee 2 knx"
when
Item MyDimmer changed
then
DimTaster.postUpdate(MyDimmer.state)
end
Das Item
MyDimmer ist der "echte" Dimmer. Das Item muss mit einem historiebehafteten Persistence Service (...nicht mapDB) mindestens mit
everyChange Strategy persistiert werden. Sollte es sich nicht um die default Persistence handeln, muss der Name als zweiter Parameter angegeben weden.
.previousState(true) liefert dann (weil der Status zu dem Zeitpunkt 0 ist) den letzten von 0 verschiedenen Status.
Das Item
DimTaster ist das Dimmer Item, welches mit dem knx-control Channel verlinkt ist. Der Rest sollte einigermaßen selbsterklärend sein

openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox 9.1.2 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte