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

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • 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.
    • geschild
      geschild @maximinus last edited by

      @maximinus Vielleicht mit dem split node (https://flowfuse.com/node-red/core-nodes/split/) am Komma zerlegen.

      LG Gerhard

      M 1 Reply Last reply Reply Quote 0
      • 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

                          892
                          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