[gelöst] String aus Item in Substrings teilen

Hier bitte alles rein was Off-topic ist.

Moderatoren: Cyrelian, seppy

Antworten
wolfi
Beiträge: 2
Registriert: 18. Mär 2022 21:49

[gelöst] String aus Item in Substrings teilen

Beitrag von wolfi »

Hallo,
ich bin neu in OpenHAB.
Ich habe folgendes Problem.
Ich habe ein MQTT Thing erzeugt, und die Verbindung mit dem Broker ebenso. Der Broker läuft extern (Mosquitto).
Ich kann mich zu einem MQTT Topic subscriben und erhalte MQTT Messages (Payload) in der Form:

Code: Alles auswählen

R1:ON
oder

Code: Alles auswählen

R1:OFF
oder

Code: Alles auswählen

R2:ON
oder

Code: Alles auswählen

R2:OFF
und weitere.
Statt dem "R" kann noch ein "M" auftreten und die Zahl ist immer einstellig (1...9).

Nun muss ich aus dem Message String den Substring links vom Doppelpunkt auswerten und ebenso rechts.
Leider kenne ich mich mit REGEX nicht aus und kann leider die Substrings ableiten, damit dann daraus Aktionen abhängig von der Message entstehen.
Ich bitte um Hilfe. Danke vorab.
(Es gab schon ein paar Austausche in dem Forum zu ähnlichen Fragen, aber ich konnte die leider nicht auf mich anpassen.)
Danke und bis bald
Wolfgang

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: String aus Item in Substrings teilen

Beitrag von udo1toni »

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

wolfi
Beiträge: 2
Registriert: 18. Mär 2022 21:49

Re: String aus Item in Substrings teilen

Beitrag von wolfi »

Hallo Udo,

vielen Dank für die Antwort hier und auch in der internationalen OpenHAB community. Ich habe deine Lösung wie dort beschrieben umgesetzt und es funktioniert super.

Genial deine Hilfe und vielen, vielen Dank. :D

Schönen Abend
Wolfgang
P.S.: Ich habe nicht gefunden, wie ich den Thread auf "Gelöst" setzen kann, aber die Frage ist beantwortet und gelöst.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: String aus Item in Substrings teilen

Beitrag von udo1toni »

Es gibt die Funktion "Beste Antwort", ansosnten kanst Du als Threadersteller noch das Ursprungsposting editieren und den Titel ändern. :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten