Willkommen im Forum!
Das Problem hier ist, dass Du drei verschiedene Informationen hast, die aber auf jeden Fall gemeinsam ausgewertet werden müssen. Insofern wäre es sinnvoll, das über eine Rule zu erledigen. Das heißt, Du subscribst das Topic auf einen String Channel und verlinkst diesen mit einem String Item, im nachfolgenden Beispiel mqttIn:
Code: Alles auswählen
rule "mqttIn auswerten"
when
Item mqttIn received update
then
val String strIn = mqttIn.state.toString
if(strIn.length < 5) {
logWarn("mqttIn","erwartete Länge verfehlt: {} ({})",strIn,strIn.length)
return;
}
val String strLetter = strIn.charAt(0).toString
val Integer iNumber = Integer::parseInt(strIn.charAt(1).toString)
val Value = if(strIn.charAt(4).toString == "F") OFF else ON
if(strLetter != "M" && strLetter != "R") {
logWarn("mqttIn","1. Buchstabe falsch: {}",strLetter)
return;
}
if(strLetter == "M") {
switch(iNumber) {
case 1: Item1.sendCommand(Value)
case 2: Item2.sendCommand(Value)
case 3: Item3.sendCommand(Value)
case 4: Item4.sendCommand(Value)
case 5: Item5.sendCommand(Value)
case 6: Item6.sendCommand(Value)
case 7: Item7.sendCommand(Value)
case 8: Item8.sendCommand(Value)
case 9: Item9.sendCommand(Value)
}
} else {
switch(iNumber) {
case 1: Item10.sendCommand(Value)
case 2: Item11.sendCommand(Value)
case 3: Item12.sendCommand(Value)
case 4: Item13.sendCommand(Value)
case 5: Item14.sendCommand(Value)
case 6: Item15.sendCommand(Value)
case 7: Item16.sendCommand(Value)
case 8: Item17.sendCommand(Value)
case 9: Item18.sendCommand(Value)
}
}
end
In Abhängigkeit vom ersten Buchstaben und der Ziffer werden an 18 verschiedene Items die Befehle ON oder OFF gesendet.
Man könnte bei geschickter Wahl der Itemnamen auch den Itemnamen anhand Ziffer und Buchstabe bestimmen und die Rule so viel kürzer gestalten. Andererseits könnte man so auch bei einer oder mehreren der 18 Möglichkeiten mehrere Befehle auf einmal absetzen (die müssten dann in {} stehen).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet