Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. NodeRed wie topic aus msg properties? gelöst

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    NodeRed wie topic aus msg properties? gelöst

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      maximinus @geschild last edited by

      @geschild

      Danke, kannte ich noch nicht.
      Ich glaube das Zerlegen ist nicht das Problem sondern wie man aus der gesplitteten Nachricht einen Datenpunkt erzeugt mit dem Namen der Bezeichnung und dem Inhalt des übermittelten Wertes.

      LG Gerhard

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @maximinus last edited by mickym

        @maximinus Das ist kein Problem - da Du das topic frei definieren kannst. Wenn Du weißt, dass Deezimalzahlen immer vorhanden sind, kannst Du ggf. mit RegEx vorher das ganze aufdröseln. Den Bufferparser kannst Du nutzen, wenn die Daten eine fixe Länge haben. Diese Node musst Du einfach nachinstallieren.

        d49d95e9-250a-4c6a-95ec-c2d8737d7cd8-image.png

        [{"id":"0da106c34cc125cf","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Puffer oben,25,1,Puffer unten,26,3","payloadType":"str","x":210,"y":6680,"wires":[["5bd61d6bf907ae9f","f623c13912d2afed"]]},{"id":"5bd61d6bf907ae9f","type":"debug","z":"289f539dcc33814e","name":"Eingabe","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":380,"y":6640,"wires":[]},{"id":"f623c13912d2afed","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"$match(payload,/(.*?),(\\d+,\\d)/).{\"topic\":groups[0],\"value\":$replace(groups[1],\",\",\".\")~>$number()}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":6680,"wires":[["bb3195e5f26bd2fb","5245e98ae72f6c6e"]]},{"id":"bb3195e5f26bd2fb","type":"debug","z":"289f539dcc33814e","name":"Analysiert","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":600,"y":6640,"wires":[]},{"id":"5245e98ae72f6c6e","type":"split","z":"289f539dcc33814e","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":590,"y":6680,"wires":[["8ef7b1db51dec044"]]},{"id":"8ef7b1db51dec044","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.topic","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":6680,"wires":[["f30327f180ac5604"]]},{"id":"f30327f180ac5604","type":"debug","z":"289f539dcc33814e","name":"Nachricht zum Erstellen der Datenpunkte","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1060,"y":6680,"wires":[]}]
        

        M 1 Reply Last reply Reply Quote 0
        • M
          maximinus @mickym last edited by

          @mickym

          Danke für das Beispiel, das hilft mir sehr. Ich versuche es für meinen Zweck anzupassen.

          Ich habe mich missverständlich ausgedrückt. Die payload besteht jeweils nur aus einer Kombiation von Bezeichnung und Wert. Der jeweilige Wert ist immer xx,x die Bezeichnungen sind aber unterschiedlich lang. Die Ausgabe vom Server kann ich umstellen, so dass immer die 4 Stellen vorne sind und anschließend die (unterschiedlich langen) Bezeichnungen (28 verschiedene)
          Trotz Suche finde ich nicht die Bedeutung der nachstehenden Zeichen mit denen das ganze bewerkstelligt wird.

          $match(payload,/(.*?),(\d+,\d)/).{"topic":groups[0],"value":$replace(groups[1],",",".")~>$number()}

          Hast du da einen link auf eine Erkärung?

          Wie müsste das aussehen wenn die Payload zB wie folgt aufgebaut ist: 26,3, Puffer oben

          LG Gerhard

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @maximinus last edited by mickym

            @maximinus Na dann musst Du das nur umdrehen - solange die Zahlen identisch sind - mit dem Text habe ich kein Problem. Ich dreh das ganze in dem Flow um und schick Dir nachher einen Link zum Test des regulären Ausdrucks. Das Einzige ist - ich muss im Moment noch ein Komma zum Schluss machen - ich steh mit dem lookbehind bissi auf Kriegsfuss.

            Wie gesagt - man muss noch ein Komma anhängen - habe ich aber nun automatisch gemacht.

            13137a1e-f307-45e2-ab36-bf9fa2abda28-image.png

            Hier der Flow:

            [{"id":"0da106c34cc125cf","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"25,1,Puffer kurz,26,3,lange Beschreibung","payloadType":"str","x":170,"y":6820,"wires":[["5bd61d6bf907ae9f","f623c13912d2afed"]]},{"id":"5bd61d6bf907ae9f","type":"debug","z":"289f539dcc33814e","name":"Eingabe","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":340,"y":6780,"wires":[]},{"id":"f623c13912d2afed","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload & \",\"","tot":"jsonata"},{"t":"set","p":"payload","pt":"msg","to":"$match(payload,/(\\d+,\\d),(.*?),/).{\"topic\":groups[1],\"value\":$replace(groups[0],\",\",\".\")~>$number()}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":6820,"wires":[["bb3195e5f26bd2fb","5245e98ae72f6c6e"]]},{"id":"bb3195e5f26bd2fb","type":"debug","z":"289f539dcc33814e","name":"Analysiert","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":560,"y":6780,"wires":[]},{"id":"5245e98ae72f6c6e","type":"split","z":"289f539dcc33814e","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":550,"y":6820,"wires":[["8ef7b1db51dec044"]]},{"id":"8ef7b1db51dec044","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.topic","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":6820,"wires":[["f30327f180ac5604"]]},{"id":"f30327f180ac5604","type":"debug","z":"289f539dcc33814e","name":"Nachricht zum Erstellen der Datenpunkte","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1020,"y":6820,"wires":[]}]
            

            Hier der reguläre Ausdruck zum Testen und spielen - Du musst schauen, dass jeder Match in die richtigen Gruppen kommt (die Beschreibung der regulären Ausdrücke und die Erklärung findest Du rechts oben bzw. unten):
            916cdc14-461b-48c2-898a-0ffd2bd7281d-image.png

            Hier der Link zum Testen der regulären Ausdrücke: https://regex101.com/r/2LMTDt/1

            Hier der entsprechende JSONATA Code:

            45466259-1d01-49eb-9fe8-d8dcbf8c4c4e-image.png

            und ebenfalls der Link zum Testen: https://try.jsonata.org/7M9gehmLH

            M 2 Replies Last reply Reply Quote 0
            • M
              maximinus @mickym last edited by

              @mickym

              Vorerst vielen Dank. Ich muss das jetzt alles studieren und melde mich später

              1 Reply Last reply Reply Quote 0
              • M
                maximinus @mickym last edited by

                @mickym

                Das hat jetzt etwas länger gedauert. Nachdem ich den Flow importiert und den inject durch UDP in ersetzt, sowie einen ioBroker out angefügt hatte sah ich im debug dass die Bearbeitung des payloads korrekt war - bis auf das führende blank und das dahinterliegende Komma - aber es kam auch die alte Fehlermeldung über das fehlende topic des ioBroker out. Ich habe dann versucht etwas zu ändern. Das ließ sich nicht mehr deployen. Da kommt immer die Meldung keine Antwort vom Server. In der Annahme dass die als Demo importierten Flows damit etwas zu tun haben, habe ich die alle gelöscht um von vorne zu beginnen. Jetzt sind alle weg. Wenn ich deinen Flow jetzt importiere ohne etwas daran zu ändern lässt er sich auch nicht mehr deployen. Ein kleiner selbst erstellter aus inject und debug aber schon. Den Adapter habe ich neu gestartet und den Import nochmals versucht, aber es geht nicht mehr.
                Ich habe hier noch eine andere iobroker Installation. Auf der klappt das deplay. Soll ich den Adapter auf dem RasPi auf dem das laufen soll neu installieren? Könnte das helfen?

                Ein große Bitte hätte ich noch. Könntest du deinen Flow um den ioBroker Out ergänzen so dass die Objekte mit Bezeichnung und Wert angelegt werden. Ich schaffe das nicht.

                LG Gerhard

                1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active last edited by mickym

                  Na man sollte keine Leerzeichen in Datenpunktnamen haben - ich hab sie mal durch Unterstriche ersetzt.

                  77a246f1-c2ed-41da-847e-76f10c5387eb-image.png

                  a0b61011-b7aa-42b9-b617-632e3b1ef660-image.png

                  [{"id":"0da106c34cc125cf","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"25,1,Puffer kurz,26,3,lange Beschreibung","payloadType":"str","x":170,"y":6820,"wires":[["f623c13912d2afed"]]},{"id":"f623c13912d2afed","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload & \",\"","tot":"jsonata"},{"t":"set","p":"payload","pt":"msg","to":"$match(payload,/(\\d+,\\d),(.*?),/).{\"topic\":groups[1],\"value\":$replace(groups[0],\",\",\".\")~>$number()}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":6820,"wires":[["5245e98ae72f6c6e"]]},{"id":"5245e98ae72f6c6e","type":"split","z":"289f539dcc33814e","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":550,"y":6820,"wires":[["8ef7b1db51dec044"]]},{"id":"8ef7b1db51dec044","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.topic","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":6820,"wires":[["effa0a9ed1b6a8b0"]]},{"id":"effa0a9ed1b6a8b0","type":"change","z":"289f539dcc33814e","name":"topic anpassen","rules":[{"t":"change","p":"topic","pt":"msg","from":" ","fromt":"str","to":"_","tot":"str"},{"t":"set","p":"topic","pt":"msg","to":"\"0_userdata.0.Test.maximinus.\" & topic","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":940,"y":6820,"wires":[["e7c12bf23dcb8d44"]]},{"id":"e7c12bf23dcb8d44","type":"ioBroker out","z":"289f539dcc33814e","name":"","topic":"","ack":"true","autoCreate":"true","stateName":"","role":"","payloadType":"","readonly":"false","stateUnit":"","stateMin":"","stateMax":"","x":1140,"y":6820,"wires":[]}]
                  

                  Es geht aber auch mit Leerzeichen - hast dann halt vielleicht später Probleme aber Du kannst die Regel mit dem Ersetzen der Leerzeichen auch rausschmeissen.

                  5266441b-e9a9-433e-a37d-406a8c6ab1fa-image.png

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    maximinus @mickym last edited by maximinus

                    @mickym

                    Ich bin begeistert, vielen Dank. In der Testinstallation schreibt er die mit inject definierten Werte in die Datenpunkte. Mit den aktuellen über UDP kommenden Daten geht es aber noch nicht, es kommt hier jeweils nur ein Wertepaar an zB "18,5,22 Heizung RL,↵" Sobald ich in inject das 2. Wertepaar entferne zeigt debug sofort undefined an, obwohl in regex101 auch das eine Wertepaar korrekt interpretiert wird.
                    Auf der anderen Installation die gestern das Problem mit dem deploy hatte gibt es noch ein weiteres Problem da steht unterhalb des ioB out "Cannot set state"
                    Ich kann da aber keinen Unterschied zwischen den beiden erkennen.

                    LG Gerhard

                    edit:
                    Problem vorläufig gelöst. Ich sende mit jedem Datenpaar ein zweites Datenpaar "00,0,leer" als Dummy mit

                    Cannot set state war in der Instanzeinstellung nicht angehakt, jetzt geht es

                    Gerhard

                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @maximinus last edited by mickym

                      @maximinus Hier die Lösung - um auch einzelne Datenpunkte zu schreiben.

                      11d581b2-35da-46ab-b193-565e349f1470-image.png

                      Oben setzt Du den String in eine trim Funktion - damit Zeilenvorschübe und führende Leerzeichen zu entfernen.

                      Und ob auch einzelne Werte zu schreiben, einfach in der 2. Regel ein paar eckige Klammern hinten dran machen.

                      Ja das Fremdobjekte erstellt werden dürfen in der Instanzeinstellung habe ich vorausgesetzt.

                      Hier der Import:

                      [{"id":"0da106c34cc125cf","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"25,1,Puffer kurz,25,2,Puffer lang","payloadType":"str","x":130,"y":7140,"wires":[["f623c13912d2afed"]]},{"id":"f623c13912d2afed","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"$trim(payload & \",\")","tot":"jsonata"},{"t":"set","p":"payload","pt":"msg","to":"$match(payload,/(\\d+,\\d),(.*?),/).{\"topic\":groups[1],\"value\":$replace(groups[0],\",\",\".\")~>$number()}[]","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":7140,"wires":[["5245e98ae72f6c6e"]]},{"id":"5245e98ae72f6c6e","type":"split","z":"289f539dcc33814e","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":550,"y":7140,"wires":[["8ef7b1db51dec044"]]},{"id":"8ef7b1db51dec044","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.topic","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":7140,"wires":[["effa0a9ed1b6a8b0"]]},{"id":"effa0a9ed1b6a8b0","type":"change","z":"289f539dcc33814e","name":"topic anpassen","rules":[{"t":"change","p":"topic","pt":"msg","from":" ","fromt":"str","to":"_","tot":"str"},{"t":"set","p":"topic","pt":"msg","to":"\"0_userdata.0.Test.maximinus.\" & topic","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":940,"y":7140,"wires":[["e7c12bf23dcb8d44"]]},{"id":"e7c12bf23dcb8d44","type":"ioBroker out","z":"289f539dcc33814e","name":"","topic":"","ack":"true","autoCreate":"true","stateName":"","role":"","payloadType":"","readonly":"false","stateUnit":"","stateMin":"","stateMax":"","x":1140,"y":7140,"wires":[]}]
                      

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        maximinus @mickym last edited by

                        @mickym

                        Es läuft. Ohne deine Unterstützung hätte ich es nicht hingekriegt. Danke

                        Gerhard

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        657
                        Online

                        31.9k
                        Users

                        80.3k
                        Topics

                        1.3m
                        Posts

                        3
                        12
                        457
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo