Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Einsteigerfragen
  4. NodeRed wie topic aus msg properties? gelöst

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

NodeRed wie topic aus msg properties? gelöst

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
12 Beiträge 3 Kommentatoren 921 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M maximinus

    Ich habe einen Fox² Server der mir 28 Temperaturwerte per UDP, TCIP oder HTTP übermitteln kann. Derzeit kann ich mittels UDP Datenpaare übermitteln die ich erfolgreich mit NodeRed node UDP in einlesen und mit node ioBroker out als Datenpunkt ausgeben kann. Das Format ist z.B. "Puffer oben,25,0". Es kommen also in einem Datenpunkt "UDP Message" der Reihe nach diese Datenpaare an. Ich hätte jetzt gerne dass Nodered die Datenpaare zerlegt und für jeden Fühler einen eigenen Datenpunkt anlegt In einem Beitrag wird so etwas mit einem Buffer Parser beschrieben den ich in meinem Nodered aber nicht finde. Ich habe das mit einem CSV parser versucht. Im debug kann ich erkennen dass das Parsen funktioniert. Dort steht im ioBroker out { Bezeichnung: "22 Heizung RL", Wert: 19 } (hier fehlt Dezimalstelle), aber auch "no key or topic set" weil ich den "Tip: Leave topic blank if you want to set them via msg properties" befolgt habe.
    Es stellen sich 2 Fragen:

    1. Wie bekomme ich die msg properties in den Topic
    2. Wie kann ich die Dezimalstelle hinter der Temperatur auslesen? Die Trennzeichen "," und das Dezimaltrennzeichen "," sind gleich und sind vom exportierenden Programm vorgegeben.

    LG Gerhard

    geschildG Offline
    geschildG Offline
    geschild
    schrieb am zuletzt editiert von
    #2

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

    LG Gerhard

    M 1 Antwort Letzte Antwort
    0
    • geschildG geschild

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

      LG Gerhard

      M Offline
      M Offline
      maximinus
      schrieb am zuletzt editiert von
      #3

      @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

      RasPi 4 4GB bookworm
      nodejs v20.19.4
      npm 10.8.2
      Objects type: jsonl
      States type: redis
      js-controller: 7.0.6
      admin: 7.6.17
      javascript: 8.9.2

      mickymM 1 Antwort Letzte Antwort
      0
      • M maximinus

        @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

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #4

        @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":[]}]
        

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        M 1 Antwort Letzte Antwort
        0
        • mickymM 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 Offline
          M Offline
          maximinus
          schrieb am zuletzt editiert von
          #5

          @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

          RasPi 4 4GB bookworm
          nodejs v20.19.4
          npm 10.8.2
          Objects type: jsonl
          States type: redis
          js-controller: 7.0.6
          admin: 7.6.17
          javascript: 8.9.2

          mickymM 1 Antwort Letzte Antwort
          0
          • M maximinus

            @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

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von mickym
            #6

            @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

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            M 2 Antworten Letzte Antwort
            0
            • mickymM 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 Offline
              M Offline
              maximinus
              schrieb am zuletzt editiert von
              #7

              @mickym

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

              RasPi 4 4GB bookworm
              nodejs v20.19.4
              npm 10.8.2
              Objects type: jsonl
              States type: redis
              js-controller: 7.0.6
              admin: 7.6.17
              javascript: 8.9.2

              1 Antwort Letzte Antwort
              0
              • mickymM 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 Offline
                M Offline
                maximinus
                schrieb am zuletzt editiert von
                #8

                @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

                RasPi 4 4GB bookworm
                nodejs v20.19.4
                npm 10.8.2
                Objects type: jsonl
                States type: redis
                js-controller: 7.0.6
                admin: 7.6.17
                javascript: 8.9.2

                1 Antwort Letzte Antwort
                0
                • mickymM Offline
                  mickymM Offline
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von mickym
                  #9

                  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

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  M 1 Antwort Letzte Antwort
                  0
                  • mickymM 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 Offline
                    M Offline
                    maximinus
                    schrieb am zuletzt editiert von maximinus
                    #10

                    @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

                    RasPi 4 4GB bookworm
                    nodejs v20.19.4
                    npm 10.8.2
                    Objects type: jsonl
                    States type: redis
                    js-controller: 7.0.6
                    admin: 7.6.17
                    javascript: 8.9.2

                    mickymM 1 Antwort Letzte Antwort
                    0
                    • M 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

                      mickymM Offline
                      mickymM Offline
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von mickym
                      #11

                      @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":[]}]
                      

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      M 1 Antwort Letzte Antwort
                      0
                      • mickymM 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 Offline
                        M Offline
                        maximinus
                        schrieb am zuletzt editiert von
                        #12

                        @mickym

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

                        Gerhard

                        RasPi 4 4GB bookworm
                        nodejs v20.19.4
                        npm 10.8.2
                        Objects type: jsonl
                        States type: redis
                        js-controller: 7.0.6
                        admin: 7.6.17
                        javascript: 8.9.2

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        719

                        Online

                        32.7k

                        Benutzer

                        82.4k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe