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. Skripten / Logik
  4. Node-Red
  5. [Erledigt] change-node mit variablen Datenpunkten

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

[Erledigt] change-node mit variablen Datenpunkten

Geplant Angeheftet Gesperrt Verschoben Node-Red
5 Beiträge 2 Kommentatoren 601 Aufrufe 2 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.
  • C Offline
    C Offline
    ChristophH
    schrieb am zuletzt editiert von ChristophH
    #1

    Hallo zusammen,

    gleich vorweg - ich habe keine Ahnung, ob das was ich vorhabe überhaupt in Node-Red geht.

    Ist es möglich, Variablen-Namen in einem Array zu speichern und diese dann in einer change-Node zu verwenden.

    Beispiel:

    Variablen:
    msg.test1
    msg.test2
    msg.test3

    Das Array würde dann wie folgt aussehen:

    msg.VarNamen = ["test1","test2","test3"]

    in der change-Node dann wie folgt z.B.:

    setze msg. msg.VarNamen[1]
    statt
    setze msg. msg.test2

    Dann könnte man, wenn man bei vielen Variablen die gleichen Operationen anwenden will, dieses in einer Schleife über das Array msg.VarNamen machen und müßte nicht für jede einzelne Variable den Flow kopieren, was bei vielen Variablen Zeit- und Wartungsaufwendig ist.

    Vielen Dank schonmal im voraus für eure Gedanken und Hilfe dazu.

    Christoph

    mickymM 1 Antwort Letzte Antwort
    0
    • C ChristophH

      Hallo zusammen,

      gleich vorweg - ich habe keine Ahnung, ob das was ich vorhabe überhaupt in Node-Red geht.

      Ist es möglich, Variablen-Namen in einem Array zu speichern und diese dann in einer change-Node zu verwenden.

      Beispiel:

      Variablen:
      msg.test1
      msg.test2
      msg.test3

      Das Array würde dann wie folgt aussehen:

      msg.VarNamen = ["test1","test2","test3"]

      in der change-Node dann wie folgt z.B.:

      setze msg. msg.VarNamen[1]
      statt
      setze msg. msg.test2

      Dann könnte man, wenn man bei vielen Variablen die gleichen Operationen anwenden will, dieses in einer Schleife über das Array msg.VarNamen machen und müßte nicht für jede einzelne Variable den Flow kopieren, was bei vielen Variablen Zeit- und Wartungsaufwendig ist.

      Vielen Dank schonmal im voraus für eure Gedanken und Hilfe dazu.

      Christoph

      mickymM Online
      mickymM Online
      mickym
      Most Active
      schrieb am zuletzt editiert von mickym
      #2

      @christophh sagte in change-node mit variablen Datenpunkten:

      msg.VarNamen = ["test1","test2","test3"]

      Also ich habe keine Ahnung was Du machen willst - mit einer ChangeNode alleine wird das nicht gehen - allerdings wenn Du das ganze in einem Objekt machst - dann ggf. schon. Ansonsten kann man ja über das topic viele Variablen auslesen oder schreiben - dazu brauche ich keine Variablen. Wenn Du also ein Array mit 3 Elementen in einem Objekt haben willst mit den definierten Eigenschaften eines anderen Arrays - dann ist das ebenfalls möglich. Wie gesagt - es ist wichtig vorher alle Werte in einem oder Array zu sammeln.

      Du musst das ja nicht auf Root Ebene machen - sondern die variablen Eigenschaften (variablennamen) als Eigenschaft der payload:

      2fffd1b0-7009-4c2e-90b5-7f42e0a47922-image.png

      [
         {
             "id": "54912e92b3459984",
             "type": "inject",
             "z": "517cd16e4d7e6ae4",
             "name": "",
             "props": [
                 {
                     "p": "payload"
                 }
             ],
             "repeat": "",
             "crontab": "",
             "once": false,
             "onceDelay": 0.1,
             "topic": "",
             "payload": "[\"Wert1\",\"Wert2\",\"Wert3\"]",
             "payloadType": "json",
             "x": 350,
             "y": 1980,
             "wires": [
                 [
                     "08dfc5cb62b79a4e",
                     "9a1406b6a7a894e5"
                 ]
             ]
         },
         {
             "id": "08dfc5cb62b79a4e",
             "type": "debug",
             "z": "517cd16e4d7e6ae4",
             "name": "ein Array. ",
             "active": true,
             "tosidebar": true,
             "console": false,
             "tostatus": false,
             "complete": "payload",
             "targetType": "msg",
             "statusVal": "",
             "statusType": "auto",
             "x": 540,
             "y": 2040,
             "wires": []
         },
         {
             "id": "9a1406b6a7a894e5",
             "type": "change",
             "z": "517cd16e4d7e6ae4",
             "name": "",
             "rules": [
                 {
                     "t": "set",
                     "p": "varNames",
                     "pt": "msg",
                     "to": "[\"test1\",\"test2\",\"test3\"]",
                     "tot": "json"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 580,
             "y": 1980,
             "wires": [
                 [
                     "0c71e19f5f04613f"
                 ]
             ]
         },
         {
             "id": "0c71e19f5f04613f",
             "type": "change",
             "z": "517cd16e4d7e6ae4",
             "name": "erstelle Objekt",
             "rules": [
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "$zip(varNames, payload){$[0]:$[1]}",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 800,
             "y": 1980,
             "wires": [
                 [
                     "62b9d6921380fcf7"
                 ]
             ]
         },
         {
             "id": "62b9d6921380fcf7",
             "type": "debug",
             "z": "517cd16e4d7e6ae4",
             "name": "Objekt mit variablen Eigenschaften",
             "active": true,
             "tosidebar": true,
             "console": false,
             "tostatus": false,
             "complete": "payload",
             "targetType": "msg",
             "statusVal": "",
             "statusType": "auto",
             "x": 1080,
             "y": 1980,
             "wires": []
         }
      ]
      

      Das kannst ja nun mit einer split Node in payloads mit unterschiedlichem topic nutzen und so unterschiedliche Werte in mqtt oder in den iobroker schreiben.

      Sammeln kannst Du Nachrichten entweder im Flow Kontext oder in einer Join oder functionNode

      Wie gesagt Du kannst alles innerhalb der payload machen - aber Du wirst über eine ChangeNode nicht das Wurzelobjekt der Nachricht erreichen, das kannst ggf. mit einer function dann machen.

      Wie gesagt man kann die payload auch ins Root des Nachrichtenobjektes verschieben - bringt in meinen Augen allerdings keine Vorteile - dafür musst Du eine funktion Node nutzen und ein neues Nachrichtenobjekte erstellen, ist aber in super einfach.

      276514ed-b2aa-4f7d-8b8b-4bcd6743161f-image.png

      Die function Node macht nichts weiter als die payload alleine zum Nachrichtenobjekt zu erklären:

      var newMsg = msg.payload;
      return newMsg;
      

      Das Problem ist also nicht das variable Erstellen, sondern das sammeln. Aber wie gesagt solange man nicht die wirkliche Anwendung kennt, erschließt sich mir der Sinn nicht.

      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.

      1 Antwort Letzte Antwort
      0
      • mickymM Online
        mickymM Online
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        Eine andere Möglichkeit einer durch Komma getrennte Werteliste verschiedenen Eigenschaften zuzuordnen ist ggf. eine CSV Node.

        a80acee5-990b-435f-ae66-9e63850ffc3c-image.png

        So was geht auch easy mit einer ChangeNode.

        Wie gesagt der Sinn erschließt sich mir nicht. Eine konkrete Anwendung wäre sicher einfacher.

        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.

        1 Antwort Letzte Antwort
        0
        • mickymM Online
          mickymM Online
          mickym
          Most Active
          schrieb am zuletzt editiert von
          #4

          Um es mal konkret zu machen - schau Dir dieses Modbusbeispiel mal an: https://forum.iobroker.net/post/1007750

          Wenn man die Flows intelligent macht - braucht man keine variablen Variablennamen. Schau Dir mal aus dem Post aus dem Modbus Thread wie Du aus dem gelben Kasten mit etwas Überlegung den grünen Kasten machen kannst:

          6d29d19c-b97d-465a-899a-76454b6fc6de-image.png

          Die grüne Gruppe macht exakt das Gleiche wie der gelbe Kasten.

          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.

          1 Antwort Letzte Antwort
          0
          • C Offline
            C Offline
            ChristophH
            schrieb am zuletzt editiert von
            #5

            Zuerst einmal sorry, dass ich mich nicht mehr gemeldet hatte.
            Ich musste beruflich für ein paar Tage weg und war Abends so erledigt, dass ich nur noch ins Bett gefallen bin.
            Zurück gekommen bin ich erst gestern Abend :angry:

            Vielen Dank für eure ganzen Antworten.

            Ich habe das Ganze jetzt so gelöst, dass ich, anstatt einzelne Variablen zu nutzen, alles in eine Objekt-Struktur gepackt habe.

            Mal sehen, obs damit einfacher geht.

            Hier kann jetzt erstmal geschlossen werden.

            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

            447

            Online

            32.4k

            Benutzer

            81.5k

            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