Ich denke nicht, dass REGEX da helfen wird. Auf Anhieb fällt mir kein Weg ein, außer ein Proxy Item zu verwenden. Das Problem ist hier, dass Du ja den ursprünglichen Wert behalten willst. Wenn man z.B. ein Java Script (ginge auch als Transformation) dafür nutzt, hat das Script keine Kenntnis vom ursprünglichen Status.
Die Lösung mit Proxy Item sähe so aus, dass Du ein Item ohne Bindung erstellst (oder nur ausgehend...). dann legst Du eine Rule an, die bei Empfang das Item auswertet und nur bei Bedarf weiter leitet:
Code: Alles auswählen
rule "set state if number"
when
Item mqttIncomingState changed
then
if(mqttIncomingState.state instanceof Number)
mqttProxyItem.postUpdate(mqttIncomingState.state as Number)
end
Da Du den Laden wohl auch steuern möchtest, bietet es sich an, out und in einfach zu trennen und über zwei Items abzuhandeln. Falls Du mehrere solche Items hast, wäre es gut, die Itemnamen so zu gestalten, dass die Rule über ein Gruppenitem funktioniert, z.B. so:
Items:
Code: Alles auswählen
Group gMqttIncomingState
Group gMqttCommand
Rollershutter mqttIncomingState_Wohnzimmer1 "Status[%s]" (gMqttIncomingState) {mqtt="<[broker:stat/EG/RolloWohnzimmer_1:state:default]"}
Rollershutter mqttIncomingState_Wohnzimmer2 "Status[%s]" (gMqttIncomingState) {mqtt="<[broker:stat/EG/RolloWohnzimmer_2:state:default]"}
Rollershutter mqttCommand_Wohnzimmer1 "Rollo Schlafzimmer[%d %%]" (gMqttCommand) {mqtt=">[broker:cmnd/EG/RolloWohnzimmer_1:command:default]"}
Rollershutter mqttCommand_Wohnzimmer2 "Rollo Schlafzimmer[%d %%]" (gMqttCommand) {mqtt=">[broker:cmnd/EG/RolloWohnzimmer_2:command:default]"}
Man beachte, dass die Zahl bem Itemnamen nicht mit _ abgetrennt ist!
rule:
Code: Alles auswählen
rule "set state if number"
when
Member of gMqttIncomingState changed
then
if(triggeringItem.state instanceof Number) {
val itemname = triggeringItem.name.split("_").get(1)
gMqttCommand.members.filter[i | i.name.contains(itemname)].head.postUpdate(triggeringItem.state as Number)
}
end
Die Rule holt sich den Namen des Items, welches die Rule ausgelöst hat und trennt den vorderen Teil ab. Anschließend sucht sie in der anderen Gruppe das zugehörige Item (welches bis auf den ersten Teil einen identischen Namen hat) und setzt dessen Status.
Du brauchst also zwar zwei Items pro Rollladen, aber bis auf die zwei Gruppenitems trotzdem nur die eine (abgeänderte) Rule.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet