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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen

NEWS

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

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

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

JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen

Geplant Angeheftet Gesperrt Verschoben Node-Red
node-red
114 Beiträge 13 Kommentatoren 26.4k Aufrufe 12 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.
  • mickymM Online
    mickymM Online
    mickym
    Most Active
    schrieb am zuletzt editiert von mickym
    #1

    Wichtig:

    In der aktuellen NodeRed Version funktioniert alles wieder ohne Fehlermeldungen

    ===================================================================

    Nachdem hier wohl einige der Meinung sind, dass NodeRed auch noch ioBroker Strukturen von sich aus anlegen können sollte, obwohl es den ioBroker zu dem Zeitpunkt noch gar nicht gab, habe ich mal eine kleinen Subflow erstellt.

    Ähnliche Anforderungen wurden ja auch im Blockly oder Javascript Umfeld gestellt. Ich habe das ganze aber nicht lange durchgetestet, sodass ihr bitte diesen Subflow rein mal als Basis nehmen könnt und ggf. noch anpassen müsst.
    Inzwischen denke ich, kann man den Subflow bedenklos nutzen, da er bereits mehrfach seit über einem Jahr im Einsatz ist. ;)

    Der Objektbaum wird aus einem JSON-String oder einem JS Objekt gebildet. Es kann als topic für den Objektbaum ein Name in der Eigenschaft msg.top mit gegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt oder er wird direkt in der Subflow Node unter top definiert. Wenn man nichts eingibt, dann werden alle Datenpunkte unter 0_userdata.0.objRoot angelegt:
    1b645fde-f1e8-4d68-8c3b-49b516ccd4ad-image.png

    Das Keep-Topic kann man dann auf true setzen, wenn man ganze Bäume also mit Wildcards über mqtt- einliest:
    Siehe dieses Posting anhand eines Zigbee2mqtt baums: https://forum.iobroker.net/post/820702
    ef66f891-ee41-4534-9910-4377629fd11c-image.png

    Voraussetzung hierfür ist natürlich, dass man Node-Red die Erlaubnis erteilt selbstständig Objekte anlegen zu dürfen.

    In der Adapterkonfiguration des Node-Red Adapters also die Option:
    a3d0a5c9-2fdc-424e-b410-fc30dae075b8-image.png

    aktivieren.

    Hier der Import:

    Hier den Subflow zum Importieren:

    [
        {
            "id": "6e802f1553b18149",
            "type": "subflow",
            "name": "JSON or Obj to IOBroker",
            "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the `top` property of the subflow-node is used. \n\nIn the properties of the subflow node a new property `keepTopic` has been added. Default is _false_ to keep the current behaviour. If set to _true_ then the originial topic will be placed between the `top` property of the subflow node and the property of the analyzed JSON object.\n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n**Update 13.09.2022:**\nSpaces in topics of objects are no longer replaced with underscores in objects. No differences between all data types.\n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der `top`-Wert der Subflow-Node verwendet.\n\nIn den Eigenschaften der Subflow-Node wurde ein neuer Parameter `keepTopic` hinzugefügt. Standardwert ist _false_, um das bisherige Verhalten beizubehalten. Setzt man die Eigenschaft auf _true_, dann wird das originale Topic zwischen der `top` Eigenschaft der Subflow-Node und Eigenschaft des analysierten JSON Objektes eingefügt.\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. \n\n**Update 13.09.2022:**\nLeerzeichen werden in Topics von Objekten nicht mehr durch Unterstriche ersetzt. Es gibt keine Unterschiede mehr zwischen den Datentypen.",
            "category": "",
            "in": [
                {
                    "x": 60,
                    "y": 160,
                    "wires": [
                        {
                            "id": "554b8c663bcb46c2"
                        }
                    ]
                }
            ],
            "out": [
                {
                    "x": 2620,
                    "y": 280,
                    "wires": [
                        {
                            "id": "0962842ebd23e0d7",
                            "port": 0
                        }
                    ]
                }
            ],
            "env": [
                {
                    "name": "top",
                    "type": "str",
                    "value": "objRoot"
                },
                {
                    "name": "keepTopic",
                    "type": "bool",
                    "value": "false"
                }
            ],
            "meta": {},
            "color": "#E2D96E",
            "icon": "node-red/batch.svg"
        },
        {
            "id": "3e11e8338f694832",
            "type": "split",
            "z": "6e802f1553b18149",
            "name": "split object",
            "splt": "\\n",
            "spltType": "str",
            "arraySplt": 1,
            "arraySpltType": "len",
            "stream": false,
            "addname": "key",
            "x": 1370,
            "y": 160,
            "wires": [
                [
                    "0562a4249c8b856b"
                ]
            ]
        },
        {
            "id": "0562a4249c8b856b",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "add key to topic",
            "rules": [
                {
                    "t": "set",
                    "p": "stateName",
                    "pt": "msg",
                    "to": "key",
                    "tot": "msg"
                },
                {
                    "t": "change",
                    "p": "key",
                    "pt": "msg",
                    "from": ".",
                    "fromt": "str",
                    "to": "_",
                    "tot": "str"
                },
                {
                    "t": "set",
                    "p": "topic",
                    "pt": "msg",
                    "to": "topic  & '.' & key",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1560,
            "y": 160,
            "wires": [
                [
                    "ddc90985bef0fafa"
                ]
            ]
        },
        {
            "id": "ddc90985bef0fafa",
            "type": "switch",
            "z": "6e802f1553b18149",
            "name": "is type?",
            "property": "payload",
            "propertyType": "msg",
            "rules": [
                {
                    "t": "istype",
                    "v": "array",
                    "vt": "array"
                },
                {
                    "t": "istype",
                    "v": "object",
                    "vt": "object"
                },
                {
                    "t": "else"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 3,
            "x": 1740,
            "y": 160,
            "wires": [
                [
                    "bfce19b206660fbe"
                ],
                [
                    "3e11e8338f694832"
                ],
                [
                    "1a8c03d866b85b12"
                ]
            ]
        },
        {
            "id": "bfce19b206660fbe",
            "type": "split",
            "z": "6e802f1553b18149",
            "name": "split array",
            "splt": "\\n",
            "spltType": "str",
            "arraySplt": 1,
            "arraySpltType": "len",
            "stream": false,
            "addname": "",
            "x": 780,
            "y": 280,
            "wires": [
                [
                    "e89927810c6d75ec"
                ]
            ]
        },
        {
            "id": "e89927810c6d75ec",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "add index to topic",
            "rules": [
                {
                    "t": "set",
                    "p": "topic",
                    "pt": "msg",
                    "to": "topic  & '.' & parts.index",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 970,
            "y": 280,
            "wires": [
                [
                    "a4d1a5d04564dc77"
                ]
            ]
        },
        {
            "id": "f5d52c6a57d08904",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "finalize msg.topic",
            "rules": [
                {
                    "t": "set",
                    "p": "top",
                    "pt": "msg",
                    "to": "'0_userdata.0.' & top",
                    "tot": "jsonata"
                },
                {
                    "t": "set",
                    "p": "topic",
                    "pt": "msg",
                    "to": "top & '.' & topic",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 2170,
            "y": 240,
            "wires": [
                [
                    "0962842ebd23e0d7"
                ]
            ]
        },
        {
            "id": "1a8c03d866b85b12",
            "type": "switch",
            "z": "6e802f1553b18149",
            "name": "is msg.top != null",
            "property": "top",
            "propertyType": "msg",
            "rules": [
                {
                    "t": "nnull"
                },
                {
                    "t": "null"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 1950,
            "y": 280,
            "wires": [
                [
                    "f5d52c6a57d08904"
                ],
                [
                    "74c895ce724750de"
                ]
            ]
        },
        {
            "id": "e023fe88445ce43e",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "",
            "rules": [
                {
                    "t": "delete",
                    "p": "topic",
                    "pt": "msg"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 350,
            "y": 200,
            "wires": [
                [
                    "3649300b4c233b10"
                ]
            ]
        },
        {
            "id": "3649300b4c233b10",
            "type": "switch",
            "z": "6e802f1553b18149",
            "name": "is type?",
            "property": "payload",
            "propertyType": "msg",
            "rules": [
                {
                    "t": "istype",
                    "v": "json",
                    "vt": "json"
                },
                {
                    "t": "istype",
                    "v": "array",
                    "vt": "array"
                },
                {
                    "t": "istype",
                    "v": "object",
                    "vt": "object"
                },
                {
                    "t": "else"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 4,
            "x": 600,
            "y": 160,
            "wires": [
                [
                    "fc7913a8524badb7"
                ],
                [
                    "bfce19b206660fbe"
                ],
                [
                    "3e11e8338f694832"
                ],
                [
                    "9ac3cc3681e8b6c6"
                ]
            ]
        },
        {
            "id": "1b8480cd2df7ba3f",
            "type": "comment",
            "z": "6e802f1553b18149",
            "name": "Array",
            "info": "",
            "x": 600,
            "y": 280,
            "wires": []
        },
        {
            "id": "b3541807672be040",
            "type": "comment",
            "z": "6e802f1553b18149",
            "name": "object",
            "info": "",
            "x": 1340,
            "y": 100,
            "wires": []
        },
        {
            "id": "a4d1a5d04564dc77",
            "type": "switch",
            "z": "6e802f1553b18149",
            "name": "is type?",
            "property": "payload",
            "propertyType": "msg",
            "rules": [
                {
                    "t": "istype",
                    "v": "object",
                    "vt": "object"
                },
                {
                    "t": "istype",
                    "v": "array",
                    "vt": "array"
                },
                {
                    "t": "else"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 3,
            "x": 1160,
            "y": 280,
            "wires": [
                [
                    "3e11e8338f694832"
                ],
                [
                    "bfce19b206660fbe"
                ],
                [
                    "a096a93bb82b7a93"
                ]
            ]
        },
        {
            "id": "74c895ce724750de",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "finalize msg.topic",
            "rules": [
                {
                    "t": "set",
                    "p": "top",
                    "pt": "msg",
                    "to": "top",
                    "tot": "env"
                },
                {
                    "t": "set",
                    "p": "top",
                    "pt": "msg",
                    "to": "'0_userdata.0.' & top",
                    "tot": "jsonata"
                },
                {
                    "t": "set",
                    "p": "topic",
                    "pt": "msg",
                    "to": "top & '.' & topic",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 2170,
            "y": 320,
            "wires": [
                [
                    "0962842ebd23e0d7"
                ]
            ]
        },
        {
            "id": "554b8c663bcb46c2",
            "type": "switch",
            "z": "6e802f1553b18149",
            "name": "",
            "property": "keepTopic",
            "propertyType": "env",
            "rules": [
                {
                    "t": "true"
                },
                {
                    "t": "false"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 170,
            "y": 160,
            "wires": [
                [
                    "e30ba9f0483285e4"
                ],
                [
                    "e023fe88445ce43e"
                ]
            ]
        },
        {
            "id": "e30ba9f0483285e4",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "",
            "rules": [
                {
                    "t": "change",
                    "p": "topic",
                    "pt": "msg",
                    "from": "/",
                    "fromt": "str",
                    "to": ".",
                    "tot": "str"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 350,
            "y": 120,
            "wires": [
                [
                    "3649300b4c233b10"
                ]
            ]
        },
        {
            "id": "0962842ebd23e0d7",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "translate invalid chars in topic",
            "rules": [
                {
                    "t": "change",
                    "p": "topic",
                    "pt": "msg",
                    "from": "..",
                    "fromt": "str",
                    "to": ".",
                    "tot": "str"
                },
                {
                    "t": "change",
                    "p": "topic",
                    "pt": "msg",
                    "from": "€",
                    "fromt": "str",
                    "to": "EUR",
                    "tot": "str"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 2430,
            "y": 280,
            "wires": [
                []
            ]
        },
        {
            "id": "9ac3cc3681e8b6c6",
            "type": "change",
            "z": "6e802f1553b18149",
            "name": "set topic, if empty",
            "rules": [
                {
                    "t": "set",
                    "p": "topic",
                    "pt": "msg",
                    "to": "topic ? topic : $type(payload)\t",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 950,
            "y": 200,
            "wires": [
                [
                    "a096a93bb82b7a93"
                ]
            ]
        },
        {
            "id": "fc7913a8524badb7",
            "type": "json",
            "z": "6e802f1553b18149",
            "name": "",
            "property": "payload",
            "action": "obj",
            "pretty": false,
            "x": 750,
            "y": 100,
            "wires": [
                [
                    "d9e7bdd4c48a8aa1"
                ]
            ]
        },
        {
            "id": "d9e7bdd4c48a8aa1",
            "type": "switch",
            "z": "6e802f1553b18149",
            "name": "is type?",
            "property": "payload",
            "propertyType": "msg",
            "rules": [
                {
                    "t": "istype",
                    "v": "array",
                    "vt": "array"
                },
                {
                    "t": "istype",
                    "v": "object",
                    "vt": "object"
                },
                {
                    "t": "else"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 3,
            "x": 900,
            "y": 100,
            "wires": [
                [
                    "1520be42bcc2145e"
                ],
                [
                    "1520be42bcc2145e"
                ],
                [
                    "9ac3cc3681e8b6c6"
                ]
            ]
        },
        {
            "id": "a096a93bb82b7a93",
            "type": "junction",
            "z": "6e802f1553b18149",
            "x": 1380,
            "y": 280,
            "wires": [
                [
                    "1a8c03d866b85b12"
                ]
            ]
        },
        {
            "id": "1520be42bcc2145e",
            "type": "junction",
            "z": "6e802f1553b18149",
            "x": 480,
            "y": 20,
            "wires": [
                [
                    "3649300b4c233b10"
                ]
            ]
        },
        {
            "id": "8d36fab85a67b5f5",
            "type": "subflow:6e802f1553b18149",
            "z": "7e6af0015415146d",
            "name": "",
            "x": 550,
            "y": 3860,
            "wires": [
                []
            ]
        }
    ]
    

    Hier wieder der Hilfetext zur Node:

    cb9a4eb3-185e-49fd-87d0-adf31fb8f291-image.png

    EDIT: Den Testflow habe ich rausgenommen, da er die alte Node enthielt. Kann man aber auch anhand des Screenshots erkennen.

    EDIT 7.4.2021: So hab den Subflow nochmal geändert, da bei Übergabe eines reinen Arrays - der Flow nicht richtig funktioniert hat. Ausserdem habe ich mal den Subflow durch Beschreibung der Nodes besser dokumentiert.

    EDIT 8.4.2021: Für einfache Arrays (die keine Objekte enthielten), hat der Flow noch nicht funktioniert. Nun wurde dies behoben und auch skalare - also auch Input, der kein Objekt enthält wird auf 0_userdata.0.{{msg.top}} durchgereicht. Die Beispiele werden in einem eigenen Post dargestellt.

    EDIT 7.12.2021: Anstelle von msg.top kann man den Startpunkt für den Objektbaum nun auch direkt in der Node angeben:
    b0ca565a-7cc3-43d1-a87e-21c4198d5f8d-image.png

    Ist msg.top leer werden alle states direkt unter 0_userdata.0 angelegt.

    EDIT 14.6.2022: Ein neue Eigenschaft wurde der Subflow-Node hinzugefügt: keepTopic

    Damit kann man die bisherigen Topic behalten und mit Wildcards arbeiten und somit ganze Objektbäume im iobroker erstellen:

    e3c0bf54-096e-4d01-a4f1-5c366352bc50-image.png

    Ein Beispiel gibts im Posting vom heutigen Datum also dem 14.6.2022.

    EDIT 13.9.2022:

    Leerzeichen in den topics werden nicht mehr bei Objekten ersetzt und somit erfolgt keine Ungleichbehandlung zwischen Objekten und anderen Datentypen. Das hat ansonsten zur Mehrfachanlage der Topics geführt.

    EDIT 01.11.2022:
    Weitere Fehlerbehebungen. Wenn skalare Objekte zu Beginn gesendet wurden und das Topic nicht übernommen werden sollte, oder gar nicht vorhanden war, dann entstanden topics mit einem Punkt am Ende. Das wurde nun behoben. Das bedeutet jedoch andererseits, dass skalare Werte nicht mehr direkt in den top Datenpunkt geschrieben werden, sondern als Wert mit der Bezeichnung ihres Datentyps. "Hello World" als String, wird deshalb als Wert mit Namen "string" ausgegeben - Ausnahme ist, natürlich wenn die topics erhalten bleiben (keepTopic = true)

    EDIT 22.05.2023:
    Objekteigenschaften mit Punkten können im iobroker nicht als topic bzw. state erstellt werden. Deshalb werden alle Punkte in Objekteigenschaften durch Unterstriche ersetzt. Also "Wohnzi." wird zu "Wohnzi_".

    =============================================================================================================================

    Für alle die, die Node bereits benutzen - wie folgt vorgehen.

    1. Den Code normal in die Zwischenablage kopieren und dann importieren.
    2. Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.

    07910a9e-986e-4d20-aa8a-694cf1a0a62e-image.png

    1. Anschließend braucht man nur den Subflow ersetzen.

    0861d7e5-b997-4960-b83c-309033d5015b-image.png

    1. Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.

    =============================================================================================================================

    Anwendungsbeispiele und Flows:

    befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

    Nun zu den einzelnen Inputs in den Inject-Nodes:

    1. Example.SimpleArray

    [1,5,6.2,2,3]
    

    fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
    Ergebnis

    309b4092-119c-4d58-b807-f868f9c7b637-image.png

    2. Example.ComplexArray

    [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
    

    020f93df-4c30-4fab-8596-380ca60051cd-image.png
    Ergebnis

    1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

    3. Skalar (Input ist kein Objekt)

    d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

    Ergebnis

    cad2b586-de06-4303-a705-6a79709f779d-image.png

    4. Objekt:

    {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
    

    89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
    Ergebnis:

    704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

    5. ObjectArray:

    [
        {
            "start": 45,
            "end": 100,
            "date": "24.3.2021 18:44",
            "diff": 1,
            "quantity": 0,
            "price": "0.00",
            "basicPrice": 0,
            "startDate": "24.3.2021 18:44",
            "duration": 1,
            "perHour": 0
        },
        {
            "start": 51,
            "end": 52,
            "date": "24.3.2021 15:59",
            "diff": 3,
            "quantity": 0,
            "price": "0.00",
            "basicPrice": 0,
            "startDate": "24.3.2021 15:57",
            "duration": 3,
            "perHour": 0
        },
        {
            "start": 59,
            "end": 100,
            "date": "24.2.2021 14:27",
            "diff": 29,
            "quantity": 0,
            "price": "0.00",
            "basicPrice": 0,
            "startDate": "24.2.2021 13:59",
            "duration": 29,
            "perHour": 0
        }
    ]
    

    d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

    Ergebnis:

    586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

    6. JSON-String

    {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
    

    4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
    Ergebnis:

    6e21154f-c8ce-4477-9633-926d2af2ebf1-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.

    mickymM F 5 Antworten Letzte Antwort
    4
    • mickymM mickym

      Wichtig:

      In der aktuellen NodeRed Version funktioniert alles wieder ohne Fehlermeldungen

      ===================================================================

      Nachdem hier wohl einige der Meinung sind, dass NodeRed auch noch ioBroker Strukturen von sich aus anlegen können sollte, obwohl es den ioBroker zu dem Zeitpunkt noch gar nicht gab, habe ich mal eine kleinen Subflow erstellt.

      Ähnliche Anforderungen wurden ja auch im Blockly oder Javascript Umfeld gestellt. Ich habe das ganze aber nicht lange durchgetestet, sodass ihr bitte diesen Subflow rein mal als Basis nehmen könnt und ggf. noch anpassen müsst.
      Inzwischen denke ich, kann man den Subflow bedenklos nutzen, da er bereits mehrfach seit über einem Jahr im Einsatz ist. ;)

      Der Objektbaum wird aus einem JSON-String oder einem JS Objekt gebildet. Es kann als topic für den Objektbaum ein Name in der Eigenschaft msg.top mit gegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt oder er wird direkt in der Subflow Node unter top definiert. Wenn man nichts eingibt, dann werden alle Datenpunkte unter 0_userdata.0.objRoot angelegt:
      1b645fde-f1e8-4d68-8c3b-49b516ccd4ad-image.png

      Das Keep-Topic kann man dann auf true setzen, wenn man ganze Bäume also mit Wildcards über mqtt- einliest:
      Siehe dieses Posting anhand eines Zigbee2mqtt baums: https://forum.iobroker.net/post/820702
      ef66f891-ee41-4534-9910-4377629fd11c-image.png

      Voraussetzung hierfür ist natürlich, dass man Node-Red die Erlaubnis erteilt selbstständig Objekte anlegen zu dürfen.

      In der Adapterkonfiguration des Node-Red Adapters also die Option:
      a3d0a5c9-2fdc-424e-b410-fc30dae075b8-image.png

      aktivieren.

      Hier der Import:

      Hier den Subflow zum Importieren:

      [
          {
              "id": "6e802f1553b18149",
              "type": "subflow",
              "name": "JSON or Obj to IOBroker",
              "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the `top` property of the subflow-node is used. \n\nIn the properties of the subflow node a new property `keepTopic` has been added. Default is _false_ to keep the current behaviour. If set to _true_ then the originial topic will be placed between the `top` property of the subflow node and the property of the analyzed JSON object.\n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n**Update 13.09.2022:**\nSpaces in topics of objects are no longer replaced with underscores in objects. No differences between all data types.\n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der `top`-Wert der Subflow-Node verwendet.\n\nIn den Eigenschaften der Subflow-Node wurde ein neuer Parameter `keepTopic` hinzugefügt. Standardwert ist _false_, um das bisherige Verhalten beizubehalten. Setzt man die Eigenschaft auf _true_, dann wird das originale Topic zwischen der `top` Eigenschaft der Subflow-Node und Eigenschaft des analysierten JSON Objektes eingefügt.\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. \n\n**Update 13.09.2022:**\nLeerzeichen werden in Topics von Objekten nicht mehr durch Unterstriche ersetzt. Es gibt keine Unterschiede mehr zwischen den Datentypen.",
              "category": "",
              "in": [
                  {
                      "x": 60,
                      "y": 160,
                      "wires": [
                          {
                              "id": "554b8c663bcb46c2"
                          }
                      ]
                  }
              ],
              "out": [
                  {
                      "x": 2620,
                      "y": 280,
                      "wires": [
                          {
                              "id": "0962842ebd23e0d7",
                              "port": 0
                          }
                      ]
                  }
              ],
              "env": [
                  {
                      "name": "top",
                      "type": "str",
                      "value": "objRoot"
                  },
                  {
                      "name": "keepTopic",
                      "type": "bool",
                      "value": "false"
                  }
              ],
              "meta": {},
              "color": "#E2D96E",
              "icon": "node-red/batch.svg"
          },
          {
              "id": "3e11e8338f694832",
              "type": "split",
              "z": "6e802f1553b18149",
              "name": "split object",
              "splt": "\\n",
              "spltType": "str",
              "arraySplt": 1,
              "arraySpltType": "len",
              "stream": false,
              "addname": "key",
              "x": 1370,
              "y": 160,
              "wires": [
                  [
                      "0562a4249c8b856b"
                  ]
              ]
          },
          {
              "id": "0562a4249c8b856b",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "add key to topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "stateName",
                      "pt": "msg",
                      "to": "key",
                      "tot": "msg"
                  },
                  {
                      "t": "change",
                      "p": "key",
                      "pt": "msg",
                      "from": ".",
                      "fromt": "str",
                      "to": "_",
                      "tot": "str"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic  & '.' & key",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 1560,
              "y": 160,
              "wires": [
                  [
                      "ddc90985bef0fafa"
                  ]
              ]
          },
          {
              "id": "ddc90985bef0fafa",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 1740,
              "y": 160,
              "wires": [
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "3e11e8338f694832"
                  ],
                  [
                      "1a8c03d866b85b12"
                  ]
              ]
          },
          {
              "id": "bfce19b206660fbe",
              "type": "split",
              "z": "6e802f1553b18149",
              "name": "split array",
              "splt": "\\n",
              "spltType": "str",
              "arraySplt": 1,
              "arraySpltType": "len",
              "stream": false,
              "addname": "",
              "x": 780,
              "y": 280,
              "wires": [
                  [
                      "e89927810c6d75ec"
                  ]
              ]
          },
          {
              "id": "e89927810c6d75ec",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "add index to topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic  & '.' & parts.index",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 970,
              "y": 280,
              "wires": [
                  [
                      "a4d1a5d04564dc77"
                  ]
              ]
          },
          {
              "id": "f5d52c6a57d08904",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "finalize msg.topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "'0_userdata.0.' & top",
                      "tot": "jsonata"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "top & '.' & topic",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 2170,
              "y": 240,
              "wires": [
                  [
                      "0962842ebd23e0d7"
                  ]
              ]
          },
          {
              "id": "1a8c03d866b85b12",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is msg.top != null",
              "property": "top",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "nnull"
                  },
                  {
                      "t": "null"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 2,
              "x": 1950,
              "y": 280,
              "wires": [
                  [
                      "f5d52c6a57d08904"
                  ],
                  [
                      "74c895ce724750de"
                  ]
              ]
          },
          {
              "id": "e023fe88445ce43e",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "",
              "rules": [
                  {
                      "t": "delete",
                      "p": "topic",
                      "pt": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 350,
              "y": 200,
              "wires": [
                  [
                      "3649300b4c233b10"
                  ]
              ]
          },
          {
              "id": "3649300b4c233b10",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "json",
                      "vt": "json"
                  },
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 4,
              "x": 600,
              "y": 160,
              "wires": [
                  [
                      "fc7913a8524badb7"
                  ],
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "3e11e8338f694832"
                  ],
                  [
                      "9ac3cc3681e8b6c6"
                  ]
              ]
          },
          {
              "id": "1b8480cd2df7ba3f",
              "type": "comment",
              "z": "6e802f1553b18149",
              "name": "Array",
              "info": "",
              "x": 600,
              "y": 280,
              "wires": []
          },
          {
              "id": "b3541807672be040",
              "type": "comment",
              "z": "6e802f1553b18149",
              "name": "object",
              "info": "",
              "x": 1340,
              "y": 100,
              "wires": []
          },
          {
              "id": "a4d1a5d04564dc77",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 1160,
              "y": 280,
              "wires": [
                  [
                      "3e11e8338f694832"
                  ],
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "a096a93bb82b7a93"
                  ]
              ]
          },
          {
              "id": "74c895ce724750de",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "finalize msg.topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "top",
                      "tot": "env"
                  },
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "'0_userdata.0.' & top",
                      "tot": "jsonata"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "top & '.' & topic",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 2170,
              "y": 320,
              "wires": [
                  [
                      "0962842ebd23e0d7"
                  ]
              ]
          },
          {
              "id": "554b8c663bcb46c2",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "",
              "property": "keepTopic",
              "propertyType": "env",
              "rules": [
                  {
                      "t": "true"
                  },
                  {
                      "t": "false"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 2,
              "x": 170,
              "y": 160,
              "wires": [
                  [
                      "e30ba9f0483285e4"
                  ],
                  [
                      "e023fe88445ce43e"
                  ]
              ]
          },
          {
              "id": "e30ba9f0483285e4",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "",
              "rules": [
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": "/",
                      "fromt": "str",
                      "to": ".",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 350,
              "y": 120,
              "wires": [
                  [
                      "3649300b4c233b10"
                  ]
              ]
          },
          {
              "id": "0962842ebd23e0d7",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "translate invalid chars in topic",
              "rules": [
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": "..",
                      "fromt": "str",
                      "to": ".",
                      "tot": "str"
                  },
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": "€",
                      "fromt": "str",
                      "to": "EUR",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 2430,
              "y": 280,
              "wires": [
                  []
              ]
          },
          {
              "id": "9ac3cc3681e8b6c6",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "set topic, if empty",
              "rules": [
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic ? topic : $type(payload)\t",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 950,
              "y": 200,
              "wires": [
                  [
                      "a096a93bb82b7a93"
                  ]
              ]
          },
          {
              "id": "fc7913a8524badb7",
              "type": "json",
              "z": "6e802f1553b18149",
              "name": "",
              "property": "payload",
              "action": "obj",
              "pretty": false,
              "x": 750,
              "y": 100,
              "wires": [
                  [
                      "d9e7bdd4c48a8aa1"
                  ]
              ]
          },
          {
              "id": "d9e7bdd4c48a8aa1",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 900,
              "y": 100,
              "wires": [
                  [
                      "1520be42bcc2145e"
                  ],
                  [
                      "1520be42bcc2145e"
                  ],
                  [
                      "9ac3cc3681e8b6c6"
                  ]
              ]
          },
          {
              "id": "a096a93bb82b7a93",
              "type": "junction",
              "z": "6e802f1553b18149",
              "x": 1380,
              "y": 280,
              "wires": [
                  [
                      "1a8c03d866b85b12"
                  ]
              ]
          },
          {
              "id": "1520be42bcc2145e",
              "type": "junction",
              "z": "6e802f1553b18149",
              "x": 480,
              "y": 20,
              "wires": [
                  [
                      "3649300b4c233b10"
                  ]
              ]
          },
          {
              "id": "8d36fab85a67b5f5",
              "type": "subflow:6e802f1553b18149",
              "z": "7e6af0015415146d",
              "name": "",
              "x": 550,
              "y": 3860,
              "wires": [
                  []
              ]
          }
      ]
      

      Hier wieder der Hilfetext zur Node:

      cb9a4eb3-185e-49fd-87d0-adf31fb8f291-image.png

      EDIT: Den Testflow habe ich rausgenommen, da er die alte Node enthielt. Kann man aber auch anhand des Screenshots erkennen.

      EDIT 7.4.2021: So hab den Subflow nochmal geändert, da bei Übergabe eines reinen Arrays - der Flow nicht richtig funktioniert hat. Ausserdem habe ich mal den Subflow durch Beschreibung der Nodes besser dokumentiert.

      EDIT 8.4.2021: Für einfache Arrays (die keine Objekte enthielten), hat der Flow noch nicht funktioniert. Nun wurde dies behoben und auch skalare - also auch Input, der kein Objekt enthält wird auf 0_userdata.0.{{msg.top}} durchgereicht. Die Beispiele werden in einem eigenen Post dargestellt.

      EDIT 7.12.2021: Anstelle von msg.top kann man den Startpunkt für den Objektbaum nun auch direkt in der Node angeben:
      b0ca565a-7cc3-43d1-a87e-21c4198d5f8d-image.png

      Ist msg.top leer werden alle states direkt unter 0_userdata.0 angelegt.

      EDIT 14.6.2022: Ein neue Eigenschaft wurde der Subflow-Node hinzugefügt: keepTopic

      Damit kann man die bisherigen Topic behalten und mit Wildcards arbeiten und somit ganze Objektbäume im iobroker erstellen:

      e3c0bf54-096e-4d01-a4f1-5c366352bc50-image.png

      Ein Beispiel gibts im Posting vom heutigen Datum also dem 14.6.2022.

      EDIT 13.9.2022:

      Leerzeichen in den topics werden nicht mehr bei Objekten ersetzt und somit erfolgt keine Ungleichbehandlung zwischen Objekten und anderen Datentypen. Das hat ansonsten zur Mehrfachanlage der Topics geführt.

      EDIT 01.11.2022:
      Weitere Fehlerbehebungen. Wenn skalare Objekte zu Beginn gesendet wurden und das Topic nicht übernommen werden sollte, oder gar nicht vorhanden war, dann entstanden topics mit einem Punkt am Ende. Das wurde nun behoben. Das bedeutet jedoch andererseits, dass skalare Werte nicht mehr direkt in den top Datenpunkt geschrieben werden, sondern als Wert mit der Bezeichnung ihres Datentyps. "Hello World" als String, wird deshalb als Wert mit Namen "string" ausgegeben - Ausnahme ist, natürlich wenn die topics erhalten bleiben (keepTopic = true)

      EDIT 22.05.2023:
      Objekteigenschaften mit Punkten können im iobroker nicht als topic bzw. state erstellt werden. Deshalb werden alle Punkte in Objekteigenschaften durch Unterstriche ersetzt. Also "Wohnzi." wird zu "Wohnzi_".

      =============================================================================================================================

      Für alle die, die Node bereits benutzen - wie folgt vorgehen.

      1. Den Code normal in die Zwischenablage kopieren und dann importieren.
      2. Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.

      07910a9e-986e-4d20-aa8a-694cf1a0a62e-image.png

      1. Anschließend braucht man nur den Subflow ersetzen.

      0861d7e5-b997-4960-b83c-309033d5015b-image.png

      1. Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.

      =============================================================================================================================

      Anwendungsbeispiele und Flows:

      befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

      Nun zu den einzelnen Inputs in den Inject-Nodes:

      1. Example.SimpleArray

      [1,5,6.2,2,3]
      

      fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
      Ergebnis

      309b4092-119c-4d58-b807-f868f9c7b637-image.png

      2. Example.ComplexArray

      [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
      

      020f93df-4c30-4fab-8596-380ca60051cd-image.png
      Ergebnis

      1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

      3. Skalar (Input ist kein Objekt)

      d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

      Ergebnis

      cad2b586-de06-4303-a705-6a79709f779d-image.png

      4. Objekt:

      {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
      

      89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
      Ergebnis:

      704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

      5. ObjectArray:

      [
          {
              "start": 45,
              "end": 100,
              "date": "24.3.2021 18:44",
              "diff": 1,
              "quantity": 0,
              "price": "0.00",
              "basicPrice": 0,
              "startDate": "24.3.2021 18:44",
              "duration": 1,
              "perHour": 0
          },
          {
              "start": 51,
              "end": 52,
              "date": "24.3.2021 15:59",
              "diff": 3,
              "quantity": 0,
              "price": "0.00",
              "basicPrice": 0,
              "startDate": "24.3.2021 15:57",
              "duration": 3,
              "perHour": 0
          },
          {
              "start": 59,
              "end": 100,
              "date": "24.2.2021 14:27",
              "diff": 29,
              "quantity": 0,
              "price": "0.00",
              "basicPrice": 0,
              "startDate": "24.2.2021 13:59",
              "duration": 29,
              "perHour": 0
          }
      ]
      

      d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

      Ergebnis:

      586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

      6. JSON-String

      {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
      

      4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
      Ergebnis:

      6e21154f-c8ce-4477-9633-926d2af2ebf1-image.png

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

      Hier noch eine kleine Fehlerkorrektur der Node:

      [
          {
              "id": "c3403a60.92fbb8",
              "type": "subflow",
              "name": "JSON or Obj to IOBroker",
              "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
              "category": "",
              "in": [
                  {
                      "x": 100,
                      "y": 160,
                      "wires": [
                          {
                              "id": "94876630.f71748"
                          }
                      ]
                  }
              ],
              "out": [
                  {
                      "x": 1590,
                      "y": 220,
                      "wires": [
                          {
                              "id": "74b0b536.02371c",
                              "port": 0
                          },
                          {
                              "id": "ab9b1e85.eea2a",
                              "port": 0
                          }
                      ]
                  }
              ],
              "env": [],
              "color": "#E2D96E",
              "icon": "node-red/batch.svg"
          },
          {
              "id": "eea737e7.7e8fb8",
              "type": "split",
              "z": "c3403a60.92fbb8",
              "name": "",
              "splt": "\\n",
              "spltType": "str",
              "arraySplt": 1,
              "arraySpltType": "len",
              "stream": false,
              "addname": "key",
              "x": 720,
              "y": 180,
              "wires": [
                  [
                      "dc473616.c2b508"
                  ]
              ]
          },
          {
              "id": "dc473616.c2b508",
              "type": "change",
              "z": "c3403a60.92fbb8",
              "name": "",
              "rules": [
                  {
                      "t": "set",
                      "p": "stateName",
                      "pt": "msg",
                      "to": "key",
                      "tot": "msg"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic  & '.' & key",
                      "tot": "jsonata"
                  },
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": " ",
                      "fromt": "str",
                      "to": "_",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 910,
              "y": 180,
              "wires": [
                  [
                      "78697695.9a72c8"
                  ]
              ]
          },
          {
              "id": "78697695.9a72c8",
              "type": "switch",
              "z": "c3403a60.92fbb8",
              "name": "",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 1080,
              "y": 180,
              "wires": [
                  [
                      "d839cef8.577f1"
                  ],
                  [
                      "eea737e7.7e8fb8"
                  ],
                  [
                      "bdfdae99.f4d9d"
                  ]
              ]
          },
          {
              "id": "d839cef8.577f1",
              "type": "split",
              "z": "c3403a60.92fbb8",
              "name": "",
              "splt": "\\n",
              "spltType": "str",
              "arraySplt": 1,
              "arraySpltType": "len",
              "stream": false,
              "addname": "",
              "x": 1230,
              "y": 100,
              "wires": [
                  [
                      "36327f2d.8efc3"
                  ]
              ]
          },
          {
              "id": "36327f2d.8efc3",
              "type": "change",
              "z": "c3403a60.92fbb8",
              "name": "",
              "rules": [
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic  & '.' & parts.index",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 950,
              "y": 100,
              "wires": [
                  [
                      "eea737e7.7e8fb8"
                  ]
              ]
          },
          {
              "id": "74b0b536.02371c",
              "type": "change",
              "z": "c3403a60.92fbb8",
              "name": "",
              "rules": [
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "'0_userdata.0.' & top",
                      "tot": "jsonata"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "top & topic",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 1430,
              "y": 220,
              "wires": [
                  []
              ]
          },
          {
              "id": "4cdee7cb.910c38",
              "type": "switch",
              "z": "c3403a60.92fbb8",
              "name": "",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "json",
                      "vt": "json"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 2,
              "x": 440,
              "y": 160,
              "wires": [
                  [
                      "c1c41535.17d3b8"
                  ],
                  [
                      "eea737e7.7e8fb8"
                  ]
              ]
          },
          {
              "id": "c1c41535.17d3b8",
              "type": "json",
              "z": "c3403a60.92fbb8",
              "name": "",
              "property": "payload",
              "action": "",
              "pretty": false,
              "x": 580,
              "y": 140,
              "wires": [
                  [
                      "eea737e7.7e8fb8"
                  ]
              ]
          },
          {
              "id": "bdfdae99.f4d9d",
              "type": "switch",
              "z": "c3403a60.92fbb8",
              "name": "",
              "property": "top",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "nnull"
                  },
                  {
                      "t": "null"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 2,
              "x": 1240,
              "y": 260,
              "wires": [
                  [
                      "74b0b536.02371c"
                  ],
                  [
                      "7ba7dc21.fdb214"
                  ]
              ]
          },
          {
              "id": "7ba7dc21.fdb214",
              "type": "change",
              "z": "c3403a60.92fbb8",
              "name": "",
              "rules": [
                  {
                      "t": "set",
                      "p": "payload",
                      "pt": "msg",
                      "to": "Please define msg.top as root for the object structure",
                      "tot": "str"
                  },
                  {
                      "t": "delete",
                      "p": "topic",
                      "pt": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 1390,
              "y": 320,
              "wires": [
                  [
                      "ab9b1e85.eea2a"
                  ]
              ]
          },
          {
              "id": "ab9b1e85.eea2a",
              "type": "rbe",
              "z": "c3403a60.92fbb8",
              "name": "",
              "func": "rbe",
              "gap": "",
              "start": "",
              "inout": "out",
              "septopics": true,
              "property": "payload",
              "x": 1560,
              "y": 320,
              "wires": [
                  []
              ]
          },
          {
              "id": "94876630.f71748",
              "type": "change",
              "z": "c3403a60.92fbb8",
              "name": "",
              "rules": [
                  {
                      "t": "delete",
                      "p": "topic",
                      "pt": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 270,
              "y": 160,
              "wires": [
                  [
                      "4cdee7cb.910c38"
                  ]
              ]
          },
          {
              "id": "ff5e1c47.969ce",
              "type": "subflow:c3403a60.92fbb8",
              "z": "6e170384.60c96c",
              "name": "",
              "env": [],
              "x": 2030,
              "y": 3940,
              "wires": [
                  [
                      "55508830.4f7648",
                      "d33d7111.87185"
                  ]
              ]
          }
      ]
      

      Damit man auch JSON Strings aus einem Datenpunkt als Quelle verwenden kann muss der ursprünglich msg.topic gelöscht werden, was ich hiermit am Anfang des Flows mache.

      Dann werden aus den Pfaden die Leerzeichen durch Unterstriche ersetzt und der Name korrekt gesetzt.

      Für alle die nicht wissen, wie man zu einem vorhanden Punkt noch die msg.top setzt hier nochmal grafisch die Abbildung und die Konfig des Change Nodes:

      033302f1-e6cd-41aa-b34f-c0aab9f07deb-image.png

      die Quelle unter Objects:

      26d365de-7dcd-42b8-9ec4-3504c11ab831-image.png

      7f2762d5-c88f-4261-90ff-e7af0e39ccd6-image.png

      Wie man sieht kann man über die msg.top Eigenschaft auch bereits eine Anfangshierachie festlegen, indem man in den Pfad bereits einen '.' einfügt.

      Bei den Inject-Nodes kann ich natürlich msg.topic gleich mitgeben:
      4fd5edcc-ac80-4d00-9499-bbd37aacdff5-image.png

      Das Ergebnis sieht dann so aus:

      4e669d0f-4b92-4f54-812d-4c30a14299cf-image.png

      Beim Update werden dann halt die entsprechenden Objekte aktualisiert.

      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.

      mickymM 1 Antwort Letzte Antwort
      0
      • mickymM mickym

        Hier noch eine kleine Fehlerkorrektur der Node:

        [
            {
                "id": "c3403a60.92fbb8",
                "type": "subflow",
                "name": "JSON or Obj to IOBroker",
                "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                "category": "",
                "in": [
                    {
                        "x": 100,
                        "y": 160,
                        "wires": [
                            {
                                "id": "94876630.f71748"
                            }
                        ]
                    }
                ],
                "out": [
                    {
                        "x": 1590,
                        "y": 220,
                        "wires": [
                            {
                                "id": "74b0b536.02371c",
                                "port": 0
                            },
                            {
                                "id": "ab9b1e85.eea2a",
                                "port": 0
                            }
                        ]
                    }
                ],
                "env": [],
                "color": "#E2D96E",
                "icon": "node-red/batch.svg"
            },
            {
                "id": "eea737e7.7e8fb8",
                "type": "split",
                "z": "c3403a60.92fbb8",
                "name": "",
                "splt": "\\n",
                "spltType": "str",
                "arraySplt": 1,
                "arraySpltType": "len",
                "stream": false,
                "addname": "key",
                "x": 720,
                "y": 180,
                "wires": [
                    [
                        "dc473616.c2b508"
                    ]
                ]
            },
            {
                "id": "dc473616.c2b508",
                "type": "change",
                "z": "c3403a60.92fbb8",
                "name": "",
                "rules": [
                    {
                        "t": "set",
                        "p": "stateName",
                        "pt": "msg",
                        "to": "key",
                        "tot": "msg"
                    },
                    {
                        "t": "set",
                        "p": "topic",
                        "pt": "msg",
                        "to": "topic  & '.' & key",
                        "tot": "jsonata"
                    },
                    {
                        "t": "change",
                        "p": "topic",
                        "pt": "msg",
                        "from": " ",
                        "fromt": "str",
                        "to": "_",
                        "tot": "str"
                    }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 910,
                "y": 180,
                "wires": [
                    [
                        "78697695.9a72c8"
                    ]
                ]
            },
            {
                "id": "78697695.9a72c8",
                "type": "switch",
                "z": "c3403a60.92fbb8",
                "name": "",
                "property": "payload",
                "propertyType": "msg",
                "rules": [
                    {
                        "t": "istype",
                        "v": "array",
                        "vt": "array"
                    },
                    {
                        "t": "istype",
                        "v": "object",
                        "vt": "object"
                    },
                    {
                        "t": "else"
                    }
                ],
                "checkall": "true",
                "repair": false,
                "outputs": 3,
                "x": 1080,
                "y": 180,
                "wires": [
                    [
                        "d839cef8.577f1"
                    ],
                    [
                        "eea737e7.7e8fb8"
                    ],
                    [
                        "bdfdae99.f4d9d"
                    ]
                ]
            },
            {
                "id": "d839cef8.577f1",
                "type": "split",
                "z": "c3403a60.92fbb8",
                "name": "",
                "splt": "\\n",
                "spltType": "str",
                "arraySplt": 1,
                "arraySpltType": "len",
                "stream": false,
                "addname": "",
                "x": 1230,
                "y": 100,
                "wires": [
                    [
                        "36327f2d.8efc3"
                    ]
                ]
            },
            {
                "id": "36327f2d.8efc3",
                "type": "change",
                "z": "c3403a60.92fbb8",
                "name": "",
                "rules": [
                    {
                        "t": "set",
                        "p": "topic",
                        "pt": "msg",
                        "to": "topic  & '.' & parts.index",
                        "tot": "jsonata"
                    }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 950,
                "y": 100,
                "wires": [
                    [
                        "eea737e7.7e8fb8"
                    ]
                ]
            },
            {
                "id": "74b0b536.02371c",
                "type": "change",
                "z": "c3403a60.92fbb8",
                "name": "",
                "rules": [
                    {
                        "t": "set",
                        "p": "top",
                        "pt": "msg",
                        "to": "'0_userdata.0.' & top",
                        "tot": "jsonata"
                    },
                    {
                        "t": "set",
                        "p": "topic",
                        "pt": "msg",
                        "to": "top & topic",
                        "tot": "jsonata"
                    }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 1430,
                "y": 220,
                "wires": [
                    []
                ]
            },
            {
                "id": "4cdee7cb.910c38",
                "type": "switch",
                "z": "c3403a60.92fbb8",
                "name": "",
                "property": "payload",
                "propertyType": "msg",
                "rules": [
                    {
                        "t": "istype",
                        "v": "json",
                        "vt": "json"
                    },
                    {
                        "t": "istype",
                        "v": "object",
                        "vt": "object"
                    }
                ],
                "checkall": "true",
                "repair": false,
                "outputs": 2,
                "x": 440,
                "y": 160,
                "wires": [
                    [
                        "c1c41535.17d3b8"
                    ],
                    [
                        "eea737e7.7e8fb8"
                    ]
                ]
            },
            {
                "id": "c1c41535.17d3b8",
                "type": "json",
                "z": "c3403a60.92fbb8",
                "name": "",
                "property": "payload",
                "action": "",
                "pretty": false,
                "x": 580,
                "y": 140,
                "wires": [
                    [
                        "eea737e7.7e8fb8"
                    ]
                ]
            },
            {
                "id": "bdfdae99.f4d9d",
                "type": "switch",
                "z": "c3403a60.92fbb8",
                "name": "",
                "property": "top",
                "propertyType": "msg",
                "rules": [
                    {
                        "t": "nnull"
                    },
                    {
                        "t": "null"
                    }
                ],
                "checkall": "true",
                "repair": false,
                "outputs": 2,
                "x": 1240,
                "y": 260,
                "wires": [
                    [
                        "74b0b536.02371c"
                    ],
                    [
                        "7ba7dc21.fdb214"
                    ]
                ]
            },
            {
                "id": "7ba7dc21.fdb214",
                "type": "change",
                "z": "c3403a60.92fbb8",
                "name": "",
                "rules": [
                    {
                        "t": "set",
                        "p": "payload",
                        "pt": "msg",
                        "to": "Please define msg.top as root for the object structure",
                        "tot": "str"
                    },
                    {
                        "t": "delete",
                        "p": "topic",
                        "pt": "msg"
                    }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 1390,
                "y": 320,
                "wires": [
                    [
                        "ab9b1e85.eea2a"
                    ]
                ]
            },
            {
                "id": "ab9b1e85.eea2a",
                "type": "rbe",
                "z": "c3403a60.92fbb8",
                "name": "",
                "func": "rbe",
                "gap": "",
                "start": "",
                "inout": "out",
                "septopics": true,
                "property": "payload",
                "x": 1560,
                "y": 320,
                "wires": [
                    []
                ]
            },
            {
                "id": "94876630.f71748",
                "type": "change",
                "z": "c3403a60.92fbb8",
                "name": "",
                "rules": [
                    {
                        "t": "delete",
                        "p": "topic",
                        "pt": "msg"
                    }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 270,
                "y": 160,
                "wires": [
                    [
                        "4cdee7cb.910c38"
                    ]
                ]
            },
            {
                "id": "ff5e1c47.969ce",
                "type": "subflow:c3403a60.92fbb8",
                "z": "6e170384.60c96c",
                "name": "",
                "env": [],
                "x": 2030,
                "y": 3940,
                "wires": [
                    [
                        "55508830.4f7648",
                        "d33d7111.87185"
                    ]
                ]
            }
        ]
        

        Damit man auch JSON Strings aus einem Datenpunkt als Quelle verwenden kann muss der ursprünglich msg.topic gelöscht werden, was ich hiermit am Anfang des Flows mache.

        Dann werden aus den Pfaden die Leerzeichen durch Unterstriche ersetzt und der Name korrekt gesetzt.

        Für alle die nicht wissen, wie man zu einem vorhanden Punkt noch die msg.top setzt hier nochmal grafisch die Abbildung und die Konfig des Change Nodes:

        033302f1-e6cd-41aa-b34f-c0aab9f07deb-image.png

        die Quelle unter Objects:

        26d365de-7dcd-42b8-9ec4-3504c11ab831-image.png

        7f2762d5-c88f-4261-90ff-e7af0e39ccd6-image.png

        Wie man sieht kann man über die msg.top Eigenschaft auch bereits eine Anfangshierachie festlegen, indem man in den Pfad bereits einen '.' einfügt.

        Bei den Inject-Nodes kann ich natürlich msg.topic gleich mitgeben:
        4fd5edcc-ac80-4d00-9499-bbd37aacdff5-image.png

        Das Ergebnis sieht dann so aus:

        4e669d0f-4b92-4f54-812d-4c30a14299cf-image.png

        Beim Update werden dann halt die entsprechenden Objekte aktualisiert.

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

        So für alle, die es interessiert - dafür mache ich aber keinen eigenen Subflow - man kann natürlich auch umgekehrt eine iobroker Objektstruktur in einem JSON String abspeichern. Ich werde den Beispiel - Flow auch wieder löschen - aber war auch ein guter Test in wieweit Strukturen wiederhergestellt werden.

        Dazu habe ich mal einen absoluten Härtetest gemacht - und die ganze Objektstruktur eines Tasmota-Gerätes, das über mqtt angebunden ist, exportiert. ;)

        Da das nicht gerade wenige Datenpunkte sind, hier mal ein Screenshot:

        7226c03d-b28c-4c17-82cd-eca1cb6370c9-image.png

        So um das ganze auszulesen braucht es nur ein paar Standardnodes - wie gesagt ich werden den Flow nicht exportieren, aber zum Nachbauen werde ich die Konfig kurz erklären.

        57c8e3d1-2e83-45cf-ad41-0cadcfe14c5b-image.png

        1. Die erste Node ist nur eine Inject Node um das Ganze zu triggern

        2. Die zweite Node ist eine iobroker list node - mit einem '*' am Ende (Wildcard) um den gesamten Objektbaum auszulesen:
          Wichtig sind bei der list Node folgende Einstellungen zu verwenden:
          99d2ad36-54e3-4f44-9a14-7b87534c2b64-image.png
          Gut Type kann auch Any sein - aber wäre da eher vorsichtig.
          Wichtig ist kein Array auszugeben, sondern einzelne Nachrichten, weil der msg.topic und msg.payload nachbearbeitet werden soll und natürlich wollen wir den state value mitnehmen.

        3. In der nachfolgenden Change Node setzen wir msg.payload auf den val-Wert des Objektes und extrahieren bzw. modifizieren den topic, damit der konstante Anteil des Objektbaums herausgeschnitten wird.
          382b02d6-7225-4d5b-9577-1571fa32b98d-image.png

        4. In der anschliessenden JOIN Node fasse ich alles wieder in einer Nachricht zusammen - hier habe ich aber der Einfachheit halber einfach 5 s Zeitlimit genommen, man kann auch ewig viele Einzelnachrichten ausgeben lassen - aber das finde ich in diesem Fall eher hinderlich und nach 5 Sekunden sollten auch größere Objekte bearbeitet sein.
          0d301cf6-4f0b-4cff-bd4b-d4f3cb931390-image.png
          Es kommt dann schon ein langes komplexes Objekt dabei raus, das auch in dem Debugfenster nochmal vollständig angezeigt wird.

        5. Anschließend wird das Ganze über eine JSON Node Stringyfiziert. ;)

        Spätestens hier - zumindest bei großen Strings wird dieser im Debug Fenster nun abgeschnitten
        92a6355d-b23c-4766-b6c7-9296ae3c7333-image.png

        Deshalb habe ich den ganzen String in eine Datei unter dem iobroker home Verzeichnis weggeschrieben.

        Um zu überprüfen - habe ich auf dem Raspberry mal in einem Browser den String in so einem JSON Formatter analysieren lassen und das sah gut aus. (Ich weiß macht man nicht, dass man den Raspberry mit Desktop betreibt. ;) )

        672bd2c9-b1d8-45b5-984c-90a30afa4d1c-image.png

        Dann habe ich gedacht - nun müsste ich ja mit meiner Node die Struktur auch wieder in den iobroker einfügen können. ;)

        Die Inject Node hat mit dem eingebauten JSON Formatierbutton - jedenfalls auch ein fehlerfreies Objekt generiert:

        12122fa4-6bed-4d9c-8cda-c38e000e3b79-image.png

        mit einer entsprechenden msg.top Nachricht - und meiner Subflow Node also das ganze wieder importiert - natürlich unter 0_userdata.0

        und was soll ich sagen - der Reimport unter 0_userdata.0 schaut für mich einwandfrei aus:

        2fe23bfd-f2e5-4462-9cf0-c39219900b17-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.

        1 Antwort Letzte Antwort
        0
        • mickymM mickym

          Wichtig:

          In der aktuellen NodeRed Version funktioniert alles wieder ohne Fehlermeldungen

          ===================================================================

          Nachdem hier wohl einige der Meinung sind, dass NodeRed auch noch ioBroker Strukturen von sich aus anlegen können sollte, obwohl es den ioBroker zu dem Zeitpunkt noch gar nicht gab, habe ich mal eine kleinen Subflow erstellt.

          Ähnliche Anforderungen wurden ja auch im Blockly oder Javascript Umfeld gestellt. Ich habe das ganze aber nicht lange durchgetestet, sodass ihr bitte diesen Subflow rein mal als Basis nehmen könnt und ggf. noch anpassen müsst.
          Inzwischen denke ich, kann man den Subflow bedenklos nutzen, da er bereits mehrfach seit über einem Jahr im Einsatz ist. ;)

          Der Objektbaum wird aus einem JSON-String oder einem JS Objekt gebildet. Es kann als topic für den Objektbaum ein Name in der Eigenschaft msg.top mit gegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt oder er wird direkt in der Subflow Node unter top definiert. Wenn man nichts eingibt, dann werden alle Datenpunkte unter 0_userdata.0.objRoot angelegt:
          1b645fde-f1e8-4d68-8c3b-49b516ccd4ad-image.png

          Das Keep-Topic kann man dann auf true setzen, wenn man ganze Bäume also mit Wildcards über mqtt- einliest:
          Siehe dieses Posting anhand eines Zigbee2mqtt baums: https://forum.iobroker.net/post/820702
          ef66f891-ee41-4534-9910-4377629fd11c-image.png

          Voraussetzung hierfür ist natürlich, dass man Node-Red die Erlaubnis erteilt selbstständig Objekte anlegen zu dürfen.

          In der Adapterkonfiguration des Node-Red Adapters also die Option:
          a3d0a5c9-2fdc-424e-b410-fc30dae075b8-image.png

          aktivieren.

          Hier der Import:

          Hier den Subflow zum Importieren:

          [
              {
                  "id": "6e802f1553b18149",
                  "type": "subflow",
                  "name": "JSON or Obj to IOBroker",
                  "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the `top` property of the subflow-node is used. \n\nIn the properties of the subflow node a new property `keepTopic` has been added. Default is _false_ to keep the current behaviour. If set to _true_ then the originial topic will be placed between the `top` property of the subflow node and the property of the analyzed JSON object.\n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n**Update 13.09.2022:**\nSpaces in topics of objects are no longer replaced with underscores in objects. No differences between all data types.\n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der `top`-Wert der Subflow-Node verwendet.\n\nIn den Eigenschaften der Subflow-Node wurde ein neuer Parameter `keepTopic` hinzugefügt. Standardwert ist _false_, um das bisherige Verhalten beizubehalten. Setzt man die Eigenschaft auf _true_, dann wird das originale Topic zwischen der `top` Eigenschaft der Subflow-Node und Eigenschaft des analysierten JSON Objektes eingefügt.\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. \n\n**Update 13.09.2022:**\nLeerzeichen werden in Topics von Objekten nicht mehr durch Unterstriche ersetzt. Es gibt keine Unterschiede mehr zwischen den Datentypen.",
                  "category": "",
                  "in": [
                      {
                          "x": 60,
                          "y": 160,
                          "wires": [
                              {
                                  "id": "554b8c663bcb46c2"
                              }
                          ]
                      }
                  ],
                  "out": [
                      {
                          "x": 2620,
                          "y": 280,
                          "wires": [
                              {
                                  "id": "0962842ebd23e0d7",
                                  "port": 0
                              }
                          ]
                      }
                  ],
                  "env": [
                      {
                          "name": "top",
                          "type": "str",
                          "value": "objRoot"
                      },
                      {
                          "name": "keepTopic",
                          "type": "bool",
                          "value": "false"
                      }
                  ],
                  "meta": {},
                  "color": "#E2D96E",
                  "icon": "node-red/batch.svg"
              },
              {
                  "id": "3e11e8338f694832",
                  "type": "split",
                  "z": "6e802f1553b18149",
                  "name": "split object",
                  "splt": "\\n",
                  "spltType": "str",
                  "arraySplt": 1,
                  "arraySpltType": "len",
                  "stream": false,
                  "addname": "key",
                  "x": 1370,
                  "y": 160,
                  "wires": [
                      [
                          "0562a4249c8b856b"
                      ]
                  ]
              },
              {
                  "id": "0562a4249c8b856b",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "add key to topic",
                  "rules": [
                      {
                          "t": "set",
                          "p": "stateName",
                          "pt": "msg",
                          "to": "key",
                          "tot": "msg"
                      },
                      {
                          "t": "change",
                          "p": "key",
                          "pt": "msg",
                          "from": ".",
                          "fromt": "str",
                          "to": "_",
                          "tot": "str"
                      },
                      {
                          "t": "set",
                          "p": "topic",
                          "pt": "msg",
                          "to": "topic  & '.' & key",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 1560,
                  "y": 160,
                  "wires": [
                      [
                          "ddc90985bef0fafa"
                      ]
                  ]
              },
              {
                  "id": "ddc90985bef0fafa",
                  "type": "switch",
                  "z": "6e802f1553b18149",
                  "name": "is type?",
                  "property": "payload",
                  "propertyType": "msg",
                  "rules": [
                      {
                          "t": "istype",
                          "v": "array",
                          "vt": "array"
                      },
                      {
                          "t": "istype",
                          "v": "object",
                          "vt": "object"
                      },
                      {
                          "t": "else"
                      }
                  ],
                  "checkall": "true",
                  "repair": false,
                  "outputs": 3,
                  "x": 1740,
                  "y": 160,
                  "wires": [
                      [
                          "bfce19b206660fbe"
                      ],
                      [
                          "3e11e8338f694832"
                      ],
                      [
                          "1a8c03d866b85b12"
                      ]
                  ]
              },
              {
                  "id": "bfce19b206660fbe",
                  "type": "split",
                  "z": "6e802f1553b18149",
                  "name": "split array",
                  "splt": "\\n",
                  "spltType": "str",
                  "arraySplt": 1,
                  "arraySpltType": "len",
                  "stream": false,
                  "addname": "",
                  "x": 780,
                  "y": 280,
                  "wires": [
                      [
                          "e89927810c6d75ec"
                      ]
                  ]
              },
              {
                  "id": "e89927810c6d75ec",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "add index to topic",
                  "rules": [
                      {
                          "t": "set",
                          "p": "topic",
                          "pt": "msg",
                          "to": "topic  & '.' & parts.index",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 970,
                  "y": 280,
                  "wires": [
                      [
                          "a4d1a5d04564dc77"
                      ]
                  ]
              },
              {
                  "id": "f5d52c6a57d08904",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "finalize msg.topic",
                  "rules": [
                      {
                          "t": "set",
                          "p": "top",
                          "pt": "msg",
                          "to": "'0_userdata.0.' & top",
                          "tot": "jsonata"
                      },
                      {
                          "t": "set",
                          "p": "topic",
                          "pt": "msg",
                          "to": "top & '.' & topic",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 2170,
                  "y": 240,
                  "wires": [
                      [
                          "0962842ebd23e0d7"
                      ]
                  ]
              },
              {
                  "id": "1a8c03d866b85b12",
                  "type": "switch",
                  "z": "6e802f1553b18149",
                  "name": "is msg.top != null",
                  "property": "top",
                  "propertyType": "msg",
                  "rules": [
                      {
                          "t": "nnull"
                      },
                      {
                          "t": "null"
                      }
                  ],
                  "checkall": "true",
                  "repair": false,
                  "outputs": 2,
                  "x": 1950,
                  "y": 280,
                  "wires": [
                      [
                          "f5d52c6a57d08904"
                      ],
                      [
                          "74c895ce724750de"
                      ]
                  ]
              },
              {
                  "id": "e023fe88445ce43e",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "",
                  "rules": [
                      {
                          "t": "delete",
                          "p": "topic",
                          "pt": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 350,
                  "y": 200,
                  "wires": [
                      [
                          "3649300b4c233b10"
                      ]
                  ]
              },
              {
                  "id": "3649300b4c233b10",
                  "type": "switch",
                  "z": "6e802f1553b18149",
                  "name": "is type?",
                  "property": "payload",
                  "propertyType": "msg",
                  "rules": [
                      {
                          "t": "istype",
                          "v": "json",
                          "vt": "json"
                      },
                      {
                          "t": "istype",
                          "v": "array",
                          "vt": "array"
                      },
                      {
                          "t": "istype",
                          "v": "object",
                          "vt": "object"
                      },
                      {
                          "t": "else"
                      }
                  ],
                  "checkall": "true",
                  "repair": false,
                  "outputs": 4,
                  "x": 600,
                  "y": 160,
                  "wires": [
                      [
                          "fc7913a8524badb7"
                      ],
                      [
                          "bfce19b206660fbe"
                      ],
                      [
                          "3e11e8338f694832"
                      ],
                      [
                          "9ac3cc3681e8b6c6"
                      ]
                  ]
              },
              {
                  "id": "1b8480cd2df7ba3f",
                  "type": "comment",
                  "z": "6e802f1553b18149",
                  "name": "Array",
                  "info": "",
                  "x": 600,
                  "y": 280,
                  "wires": []
              },
              {
                  "id": "b3541807672be040",
                  "type": "comment",
                  "z": "6e802f1553b18149",
                  "name": "object",
                  "info": "",
                  "x": 1340,
                  "y": 100,
                  "wires": []
              },
              {
                  "id": "a4d1a5d04564dc77",
                  "type": "switch",
                  "z": "6e802f1553b18149",
                  "name": "is type?",
                  "property": "payload",
                  "propertyType": "msg",
                  "rules": [
                      {
                          "t": "istype",
                          "v": "object",
                          "vt": "object"
                      },
                      {
                          "t": "istype",
                          "v": "array",
                          "vt": "array"
                      },
                      {
                          "t": "else"
                      }
                  ],
                  "checkall": "true",
                  "repair": false,
                  "outputs": 3,
                  "x": 1160,
                  "y": 280,
                  "wires": [
                      [
                          "3e11e8338f694832"
                      ],
                      [
                          "bfce19b206660fbe"
                      ],
                      [
                          "a096a93bb82b7a93"
                      ]
                  ]
              },
              {
                  "id": "74c895ce724750de",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "finalize msg.topic",
                  "rules": [
                      {
                          "t": "set",
                          "p": "top",
                          "pt": "msg",
                          "to": "top",
                          "tot": "env"
                      },
                      {
                          "t": "set",
                          "p": "top",
                          "pt": "msg",
                          "to": "'0_userdata.0.' & top",
                          "tot": "jsonata"
                      },
                      {
                          "t": "set",
                          "p": "topic",
                          "pt": "msg",
                          "to": "top & '.' & topic",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 2170,
                  "y": 320,
                  "wires": [
                      [
                          "0962842ebd23e0d7"
                      ]
                  ]
              },
              {
                  "id": "554b8c663bcb46c2",
                  "type": "switch",
                  "z": "6e802f1553b18149",
                  "name": "",
                  "property": "keepTopic",
                  "propertyType": "env",
                  "rules": [
                      {
                          "t": "true"
                      },
                      {
                          "t": "false"
                      }
                  ],
                  "checkall": "true",
                  "repair": false,
                  "outputs": 2,
                  "x": 170,
                  "y": 160,
                  "wires": [
                      [
                          "e30ba9f0483285e4"
                      ],
                      [
                          "e023fe88445ce43e"
                      ]
                  ]
              },
              {
                  "id": "e30ba9f0483285e4",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "",
                  "rules": [
                      {
                          "t": "change",
                          "p": "topic",
                          "pt": "msg",
                          "from": "/",
                          "fromt": "str",
                          "to": ".",
                          "tot": "str"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 350,
                  "y": 120,
                  "wires": [
                      [
                          "3649300b4c233b10"
                      ]
                  ]
              },
              {
                  "id": "0962842ebd23e0d7",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "translate invalid chars in topic",
                  "rules": [
                      {
                          "t": "change",
                          "p": "topic",
                          "pt": "msg",
                          "from": "..",
                          "fromt": "str",
                          "to": ".",
                          "tot": "str"
                      },
                      {
                          "t": "change",
                          "p": "topic",
                          "pt": "msg",
                          "from": "€",
                          "fromt": "str",
                          "to": "EUR",
                          "tot": "str"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 2430,
                  "y": 280,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "9ac3cc3681e8b6c6",
                  "type": "change",
                  "z": "6e802f1553b18149",
                  "name": "set topic, if empty",
                  "rules": [
                      {
                          "t": "set",
                          "p": "topic",
                          "pt": "msg",
                          "to": "topic ? topic : $type(payload)\t",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 950,
                  "y": 200,
                  "wires": [
                      [
                          "a096a93bb82b7a93"
                      ]
                  ]
              },
              {
                  "id": "fc7913a8524badb7",
                  "type": "json",
                  "z": "6e802f1553b18149",
                  "name": "",
                  "property": "payload",
                  "action": "obj",
                  "pretty": false,
                  "x": 750,
                  "y": 100,
                  "wires": [
                      [
                          "d9e7bdd4c48a8aa1"
                      ]
                  ]
              },
              {
                  "id": "d9e7bdd4c48a8aa1",
                  "type": "switch",
                  "z": "6e802f1553b18149",
                  "name": "is type?",
                  "property": "payload",
                  "propertyType": "msg",
                  "rules": [
                      {
                          "t": "istype",
                          "v": "array",
                          "vt": "array"
                      },
                      {
                          "t": "istype",
                          "v": "object",
                          "vt": "object"
                      },
                      {
                          "t": "else"
                      }
                  ],
                  "checkall": "true",
                  "repair": false,
                  "outputs": 3,
                  "x": 900,
                  "y": 100,
                  "wires": [
                      [
                          "1520be42bcc2145e"
                      ],
                      [
                          "1520be42bcc2145e"
                      ],
                      [
                          "9ac3cc3681e8b6c6"
                      ]
                  ]
              },
              {
                  "id": "a096a93bb82b7a93",
                  "type": "junction",
                  "z": "6e802f1553b18149",
                  "x": 1380,
                  "y": 280,
                  "wires": [
                      [
                          "1a8c03d866b85b12"
                      ]
                  ]
              },
              {
                  "id": "1520be42bcc2145e",
                  "type": "junction",
                  "z": "6e802f1553b18149",
                  "x": 480,
                  "y": 20,
                  "wires": [
                      [
                          "3649300b4c233b10"
                      ]
                  ]
              },
              {
                  "id": "8d36fab85a67b5f5",
                  "type": "subflow:6e802f1553b18149",
                  "z": "7e6af0015415146d",
                  "name": "",
                  "x": 550,
                  "y": 3860,
                  "wires": [
                      []
                  ]
              }
          ]
          

          Hier wieder der Hilfetext zur Node:

          cb9a4eb3-185e-49fd-87d0-adf31fb8f291-image.png

          EDIT: Den Testflow habe ich rausgenommen, da er die alte Node enthielt. Kann man aber auch anhand des Screenshots erkennen.

          EDIT 7.4.2021: So hab den Subflow nochmal geändert, da bei Übergabe eines reinen Arrays - der Flow nicht richtig funktioniert hat. Ausserdem habe ich mal den Subflow durch Beschreibung der Nodes besser dokumentiert.

          EDIT 8.4.2021: Für einfache Arrays (die keine Objekte enthielten), hat der Flow noch nicht funktioniert. Nun wurde dies behoben und auch skalare - also auch Input, der kein Objekt enthält wird auf 0_userdata.0.{{msg.top}} durchgereicht. Die Beispiele werden in einem eigenen Post dargestellt.

          EDIT 7.12.2021: Anstelle von msg.top kann man den Startpunkt für den Objektbaum nun auch direkt in der Node angeben:
          b0ca565a-7cc3-43d1-a87e-21c4198d5f8d-image.png

          Ist msg.top leer werden alle states direkt unter 0_userdata.0 angelegt.

          EDIT 14.6.2022: Ein neue Eigenschaft wurde der Subflow-Node hinzugefügt: keepTopic

          Damit kann man die bisherigen Topic behalten und mit Wildcards arbeiten und somit ganze Objektbäume im iobroker erstellen:

          e3c0bf54-096e-4d01-a4f1-5c366352bc50-image.png

          Ein Beispiel gibts im Posting vom heutigen Datum also dem 14.6.2022.

          EDIT 13.9.2022:

          Leerzeichen in den topics werden nicht mehr bei Objekten ersetzt und somit erfolgt keine Ungleichbehandlung zwischen Objekten und anderen Datentypen. Das hat ansonsten zur Mehrfachanlage der Topics geführt.

          EDIT 01.11.2022:
          Weitere Fehlerbehebungen. Wenn skalare Objekte zu Beginn gesendet wurden und das Topic nicht übernommen werden sollte, oder gar nicht vorhanden war, dann entstanden topics mit einem Punkt am Ende. Das wurde nun behoben. Das bedeutet jedoch andererseits, dass skalare Werte nicht mehr direkt in den top Datenpunkt geschrieben werden, sondern als Wert mit der Bezeichnung ihres Datentyps. "Hello World" als String, wird deshalb als Wert mit Namen "string" ausgegeben - Ausnahme ist, natürlich wenn die topics erhalten bleiben (keepTopic = true)

          EDIT 22.05.2023:
          Objekteigenschaften mit Punkten können im iobroker nicht als topic bzw. state erstellt werden. Deshalb werden alle Punkte in Objekteigenschaften durch Unterstriche ersetzt. Also "Wohnzi." wird zu "Wohnzi_".

          =============================================================================================================================

          Für alle die, die Node bereits benutzen - wie folgt vorgehen.

          1. Den Code normal in die Zwischenablage kopieren und dann importieren.
          2. Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.

          07910a9e-986e-4d20-aa8a-694cf1a0a62e-image.png

          1. Anschließend braucht man nur den Subflow ersetzen.

          0861d7e5-b997-4960-b83c-309033d5015b-image.png

          1. Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.

          =============================================================================================================================

          Anwendungsbeispiele und Flows:

          befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

          Nun zu den einzelnen Inputs in den Inject-Nodes:

          1. Example.SimpleArray

          [1,5,6.2,2,3]
          

          fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
          Ergebnis

          309b4092-119c-4d58-b807-f868f9c7b637-image.png

          2. Example.ComplexArray

          [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
          

          020f93df-4c30-4fab-8596-380ca60051cd-image.png
          Ergebnis

          1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

          3. Skalar (Input ist kein Objekt)

          d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

          Ergebnis

          cad2b586-de06-4303-a705-6a79709f779d-image.png

          4. Objekt:

          {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
          

          89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
          Ergebnis:

          704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

          5. ObjectArray:

          [
              {
                  "start": 45,
                  "end": 100,
                  "date": "24.3.2021 18:44",
                  "diff": 1,
                  "quantity": 0,
                  "price": "0.00",
                  "basicPrice": 0,
                  "startDate": "24.3.2021 18:44",
                  "duration": 1,
                  "perHour": 0
              },
              {
                  "start": 51,
                  "end": 52,
                  "date": "24.3.2021 15:59",
                  "diff": 3,
                  "quantity": 0,
                  "price": "0.00",
                  "basicPrice": 0,
                  "startDate": "24.3.2021 15:57",
                  "duration": 3,
                  "perHour": 0
              },
              {
                  "start": 59,
                  "end": 100,
                  "date": "24.2.2021 14:27",
                  "diff": 29,
                  "quantity": 0,
                  "price": "0.00",
                  "basicPrice": 0,
                  "startDate": "24.2.2021 13:59",
                  "duration": 29,
                  "perHour": 0
              }
          ]
          

          d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

          Ergebnis:

          586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

          6. JSON-String

          {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
          

          4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
          Ergebnis:

          6e21154f-c8ce-4477-9633-926d2af2ebf1-image.png

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

          So ich habe den Subflow nochmals geändert - da in der alten Version beim einem initialen Array - dies nicht richtig funktionierte:

          Ausserdem habe ich mal die Nodes besser benannt - damit man die Funktion der Nodes besser erkennt:

          89d141c7-4677-45ca-ba43-ca086ef0882a-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.

          1 Antwort Letzte Antwort
          0
          • mickymM mickym

            Wichtig:

            In der aktuellen NodeRed Version funktioniert alles wieder ohne Fehlermeldungen

            ===================================================================

            Nachdem hier wohl einige der Meinung sind, dass NodeRed auch noch ioBroker Strukturen von sich aus anlegen können sollte, obwohl es den ioBroker zu dem Zeitpunkt noch gar nicht gab, habe ich mal eine kleinen Subflow erstellt.

            Ähnliche Anforderungen wurden ja auch im Blockly oder Javascript Umfeld gestellt. Ich habe das ganze aber nicht lange durchgetestet, sodass ihr bitte diesen Subflow rein mal als Basis nehmen könnt und ggf. noch anpassen müsst.
            Inzwischen denke ich, kann man den Subflow bedenklos nutzen, da er bereits mehrfach seit über einem Jahr im Einsatz ist. ;)

            Der Objektbaum wird aus einem JSON-String oder einem JS Objekt gebildet. Es kann als topic für den Objektbaum ein Name in der Eigenschaft msg.top mit gegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt oder er wird direkt in der Subflow Node unter top definiert. Wenn man nichts eingibt, dann werden alle Datenpunkte unter 0_userdata.0.objRoot angelegt:
            1b645fde-f1e8-4d68-8c3b-49b516ccd4ad-image.png

            Das Keep-Topic kann man dann auf true setzen, wenn man ganze Bäume also mit Wildcards über mqtt- einliest:
            Siehe dieses Posting anhand eines Zigbee2mqtt baums: https://forum.iobroker.net/post/820702
            ef66f891-ee41-4534-9910-4377629fd11c-image.png

            Voraussetzung hierfür ist natürlich, dass man Node-Red die Erlaubnis erteilt selbstständig Objekte anlegen zu dürfen.

            In der Adapterkonfiguration des Node-Red Adapters also die Option:
            a3d0a5c9-2fdc-424e-b410-fc30dae075b8-image.png

            aktivieren.

            Hier der Import:

            Hier den Subflow zum Importieren:

            [
                {
                    "id": "6e802f1553b18149",
                    "type": "subflow",
                    "name": "JSON or Obj to IOBroker",
                    "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the `top` property of the subflow-node is used. \n\nIn the properties of the subflow node a new property `keepTopic` has been added. Default is _false_ to keep the current behaviour. If set to _true_ then the originial topic will be placed between the `top` property of the subflow node and the property of the analyzed JSON object.\n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n**Update 13.09.2022:**\nSpaces in topics of objects are no longer replaced with underscores in objects. No differences between all data types.\n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der `top`-Wert der Subflow-Node verwendet.\n\nIn den Eigenschaften der Subflow-Node wurde ein neuer Parameter `keepTopic` hinzugefügt. Standardwert ist _false_, um das bisherige Verhalten beizubehalten. Setzt man die Eigenschaft auf _true_, dann wird das originale Topic zwischen der `top` Eigenschaft der Subflow-Node und Eigenschaft des analysierten JSON Objektes eingefügt.\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. \n\n**Update 13.09.2022:**\nLeerzeichen werden in Topics von Objekten nicht mehr durch Unterstriche ersetzt. Es gibt keine Unterschiede mehr zwischen den Datentypen.",
                    "category": "",
                    "in": [
                        {
                            "x": 60,
                            "y": 160,
                            "wires": [
                                {
                                    "id": "554b8c663bcb46c2"
                                }
                            ]
                        }
                    ],
                    "out": [
                        {
                            "x": 2620,
                            "y": 280,
                            "wires": [
                                {
                                    "id": "0962842ebd23e0d7",
                                    "port": 0
                                }
                            ]
                        }
                    ],
                    "env": [
                        {
                            "name": "top",
                            "type": "str",
                            "value": "objRoot"
                        },
                        {
                            "name": "keepTopic",
                            "type": "bool",
                            "value": "false"
                        }
                    ],
                    "meta": {},
                    "color": "#E2D96E",
                    "icon": "node-red/batch.svg"
                },
                {
                    "id": "3e11e8338f694832",
                    "type": "split",
                    "z": "6e802f1553b18149",
                    "name": "split object",
                    "splt": "\\n",
                    "spltType": "str",
                    "arraySplt": 1,
                    "arraySpltType": "len",
                    "stream": false,
                    "addname": "key",
                    "x": 1370,
                    "y": 160,
                    "wires": [
                        [
                            "0562a4249c8b856b"
                        ]
                    ]
                },
                {
                    "id": "0562a4249c8b856b",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "add key to topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "stateName",
                            "pt": "msg",
                            "to": "key",
                            "tot": "msg"
                        },
                        {
                            "t": "change",
                            "p": "key",
                            "pt": "msg",
                            "from": ".",
                            "fromt": "str",
                            "to": "_",
                            "tot": "str"
                        },
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "topic  & '.' & key",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 1560,
                    "y": 160,
                    "wires": [
                        [
                            "ddc90985bef0fafa"
                        ]
                    ]
                },
                {
                    "id": "ddc90985bef0fafa",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 3,
                    "x": 1740,
                    "y": 160,
                    "wires": [
                        [
                            "bfce19b206660fbe"
                        ],
                        [
                            "3e11e8338f694832"
                        ],
                        [
                            "1a8c03d866b85b12"
                        ]
                    ]
                },
                {
                    "id": "bfce19b206660fbe",
                    "type": "split",
                    "z": "6e802f1553b18149",
                    "name": "split array",
                    "splt": "\\n",
                    "spltType": "str",
                    "arraySplt": 1,
                    "arraySpltType": "len",
                    "stream": false,
                    "addname": "",
                    "x": 780,
                    "y": 280,
                    "wires": [
                        [
                            "e89927810c6d75ec"
                        ]
                    ]
                },
                {
                    "id": "e89927810c6d75ec",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "add index to topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "topic  & '.' & parts.index",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 970,
                    "y": 280,
                    "wires": [
                        [
                            "a4d1a5d04564dc77"
                        ]
                    ]
                },
                {
                    "id": "f5d52c6a57d08904",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "finalize msg.topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "top",
                            "pt": "msg",
                            "to": "'0_userdata.0.' & top",
                            "tot": "jsonata"
                        },
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "top & '.' & topic",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 2170,
                    "y": 240,
                    "wires": [
                        [
                            "0962842ebd23e0d7"
                        ]
                    ]
                },
                {
                    "id": "1a8c03d866b85b12",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is msg.top != null",
                    "property": "top",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "nnull"
                        },
                        {
                            "t": "null"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 2,
                    "x": 1950,
                    "y": 280,
                    "wires": [
                        [
                            "f5d52c6a57d08904"
                        ],
                        [
                            "74c895ce724750de"
                        ]
                    ]
                },
                {
                    "id": "e023fe88445ce43e",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "rules": [
                        {
                            "t": "delete",
                            "p": "topic",
                            "pt": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 350,
                    "y": 200,
                    "wires": [
                        [
                            "3649300b4c233b10"
                        ]
                    ]
                },
                {
                    "id": "3649300b4c233b10",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "json",
                            "vt": "json"
                        },
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 4,
                    "x": 600,
                    "y": 160,
                    "wires": [
                        [
                            "fc7913a8524badb7"
                        ],
                        [
                            "bfce19b206660fbe"
                        ],
                        [
                            "3e11e8338f694832"
                        ],
                        [
                            "9ac3cc3681e8b6c6"
                        ]
                    ]
                },
                {
                    "id": "1b8480cd2df7ba3f",
                    "type": "comment",
                    "z": "6e802f1553b18149",
                    "name": "Array",
                    "info": "",
                    "x": 600,
                    "y": 280,
                    "wires": []
                },
                {
                    "id": "b3541807672be040",
                    "type": "comment",
                    "z": "6e802f1553b18149",
                    "name": "object",
                    "info": "",
                    "x": 1340,
                    "y": 100,
                    "wires": []
                },
                {
                    "id": "a4d1a5d04564dc77",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 3,
                    "x": 1160,
                    "y": 280,
                    "wires": [
                        [
                            "3e11e8338f694832"
                        ],
                        [
                            "bfce19b206660fbe"
                        ],
                        [
                            "a096a93bb82b7a93"
                        ]
                    ]
                },
                {
                    "id": "74c895ce724750de",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "finalize msg.topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "top",
                            "pt": "msg",
                            "to": "top",
                            "tot": "env"
                        },
                        {
                            "t": "set",
                            "p": "top",
                            "pt": "msg",
                            "to": "'0_userdata.0.' & top",
                            "tot": "jsonata"
                        },
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "top & '.' & topic",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 2170,
                    "y": 320,
                    "wires": [
                        [
                            "0962842ebd23e0d7"
                        ]
                    ]
                },
                {
                    "id": "554b8c663bcb46c2",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "property": "keepTopic",
                    "propertyType": "env",
                    "rules": [
                        {
                            "t": "true"
                        },
                        {
                            "t": "false"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 2,
                    "x": 170,
                    "y": 160,
                    "wires": [
                        [
                            "e30ba9f0483285e4"
                        ],
                        [
                            "e023fe88445ce43e"
                        ]
                    ]
                },
                {
                    "id": "e30ba9f0483285e4",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "rules": [
                        {
                            "t": "change",
                            "p": "topic",
                            "pt": "msg",
                            "from": "/",
                            "fromt": "str",
                            "to": ".",
                            "tot": "str"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 350,
                    "y": 120,
                    "wires": [
                        [
                            "3649300b4c233b10"
                        ]
                    ]
                },
                {
                    "id": "0962842ebd23e0d7",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "translate invalid chars in topic",
                    "rules": [
                        {
                            "t": "change",
                            "p": "topic",
                            "pt": "msg",
                            "from": "..",
                            "fromt": "str",
                            "to": ".",
                            "tot": "str"
                        },
                        {
                            "t": "change",
                            "p": "topic",
                            "pt": "msg",
                            "from": "€",
                            "fromt": "str",
                            "to": "EUR",
                            "tot": "str"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 2430,
                    "y": 280,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "9ac3cc3681e8b6c6",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "set topic, if empty",
                    "rules": [
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "topic ? topic : $type(payload)\t",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 950,
                    "y": 200,
                    "wires": [
                        [
                            "a096a93bb82b7a93"
                        ]
                    ]
                },
                {
                    "id": "fc7913a8524badb7",
                    "type": "json",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "property": "payload",
                    "action": "obj",
                    "pretty": false,
                    "x": 750,
                    "y": 100,
                    "wires": [
                        [
                            "d9e7bdd4c48a8aa1"
                        ]
                    ]
                },
                {
                    "id": "d9e7bdd4c48a8aa1",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 3,
                    "x": 900,
                    "y": 100,
                    "wires": [
                        [
                            "1520be42bcc2145e"
                        ],
                        [
                            "1520be42bcc2145e"
                        ],
                        [
                            "9ac3cc3681e8b6c6"
                        ]
                    ]
                },
                {
                    "id": "a096a93bb82b7a93",
                    "type": "junction",
                    "z": "6e802f1553b18149",
                    "x": 1380,
                    "y": 280,
                    "wires": [
                        [
                            "1a8c03d866b85b12"
                        ]
                    ]
                },
                {
                    "id": "1520be42bcc2145e",
                    "type": "junction",
                    "z": "6e802f1553b18149",
                    "x": 480,
                    "y": 20,
                    "wires": [
                        [
                            "3649300b4c233b10"
                        ]
                    ]
                },
                {
                    "id": "8d36fab85a67b5f5",
                    "type": "subflow:6e802f1553b18149",
                    "z": "7e6af0015415146d",
                    "name": "",
                    "x": 550,
                    "y": 3860,
                    "wires": [
                        []
                    ]
                }
            ]
            

            Hier wieder der Hilfetext zur Node:

            cb9a4eb3-185e-49fd-87d0-adf31fb8f291-image.png

            EDIT: Den Testflow habe ich rausgenommen, da er die alte Node enthielt. Kann man aber auch anhand des Screenshots erkennen.

            EDIT 7.4.2021: So hab den Subflow nochmal geändert, da bei Übergabe eines reinen Arrays - der Flow nicht richtig funktioniert hat. Ausserdem habe ich mal den Subflow durch Beschreibung der Nodes besser dokumentiert.

            EDIT 8.4.2021: Für einfache Arrays (die keine Objekte enthielten), hat der Flow noch nicht funktioniert. Nun wurde dies behoben und auch skalare - also auch Input, der kein Objekt enthält wird auf 0_userdata.0.{{msg.top}} durchgereicht. Die Beispiele werden in einem eigenen Post dargestellt.

            EDIT 7.12.2021: Anstelle von msg.top kann man den Startpunkt für den Objektbaum nun auch direkt in der Node angeben:
            b0ca565a-7cc3-43d1-a87e-21c4198d5f8d-image.png

            Ist msg.top leer werden alle states direkt unter 0_userdata.0 angelegt.

            EDIT 14.6.2022: Ein neue Eigenschaft wurde der Subflow-Node hinzugefügt: keepTopic

            Damit kann man die bisherigen Topic behalten und mit Wildcards arbeiten und somit ganze Objektbäume im iobroker erstellen:

            e3c0bf54-096e-4d01-a4f1-5c366352bc50-image.png

            Ein Beispiel gibts im Posting vom heutigen Datum also dem 14.6.2022.

            EDIT 13.9.2022:

            Leerzeichen in den topics werden nicht mehr bei Objekten ersetzt und somit erfolgt keine Ungleichbehandlung zwischen Objekten und anderen Datentypen. Das hat ansonsten zur Mehrfachanlage der Topics geführt.

            EDIT 01.11.2022:
            Weitere Fehlerbehebungen. Wenn skalare Objekte zu Beginn gesendet wurden und das Topic nicht übernommen werden sollte, oder gar nicht vorhanden war, dann entstanden topics mit einem Punkt am Ende. Das wurde nun behoben. Das bedeutet jedoch andererseits, dass skalare Werte nicht mehr direkt in den top Datenpunkt geschrieben werden, sondern als Wert mit der Bezeichnung ihres Datentyps. "Hello World" als String, wird deshalb als Wert mit Namen "string" ausgegeben - Ausnahme ist, natürlich wenn die topics erhalten bleiben (keepTopic = true)

            EDIT 22.05.2023:
            Objekteigenschaften mit Punkten können im iobroker nicht als topic bzw. state erstellt werden. Deshalb werden alle Punkte in Objekteigenschaften durch Unterstriche ersetzt. Also "Wohnzi." wird zu "Wohnzi_".

            =============================================================================================================================

            Für alle die, die Node bereits benutzen - wie folgt vorgehen.

            1. Den Code normal in die Zwischenablage kopieren und dann importieren.
            2. Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.

            07910a9e-986e-4d20-aa8a-694cf1a0a62e-image.png

            1. Anschließend braucht man nur den Subflow ersetzen.

            0861d7e5-b997-4960-b83c-309033d5015b-image.png

            1. Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.

            =============================================================================================================================

            Anwendungsbeispiele und Flows:

            befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

            Nun zu den einzelnen Inputs in den Inject-Nodes:

            1. Example.SimpleArray

            [1,5,6.2,2,3]
            

            fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
            Ergebnis

            309b4092-119c-4d58-b807-f868f9c7b637-image.png

            2. Example.ComplexArray

            [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
            

            020f93df-4c30-4fab-8596-380ca60051cd-image.png
            Ergebnis

            1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

            3. Skalar (Input ist kein Objekt)

            d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

            Ergebnis

            cad2b586-de06-4303-a705-6a79709f779d-image.png

            4. Objekt:

            {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
            

            89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
            Ergebnis:

            704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

            5. ObjectArray:

            [
                {
                    "start": 45,
                    "end": 100,
                    "date": "24.3.2021 18:44",
                    "diff": 1,
                    "quantity": 0,
                    "price": "0.00",
                    "basicPrice": 0,
                    "startDate": "24.3.2021 18:44",
                    "duration": 1,
                    "perHour": 0
                },
                {
                    "start": 51,
                    "end": 52,
                    "date": "24.3.2021 15:59",
                    "diff": 3,
                    "quantity": 0,
                    "price": "0.00",
                    "basicPrice": 0,
                    "startDate": "24.3.2021 15:57",
                    "duration": 3,
                    "perHour": 0
                },
                {
                    "start": 59,
                    "end": 100,
                    "date": "24.2.2021 14:27",
                    "diff": 29,
                    "quantity": 0,
                    "price": "0.00",
                    "basicPrice": 0,
                    "startDate": "24.2.2021 13:59",
                    "duration": 29,
                    "perHour": 0
                }
            ]
            

            d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

            Ergebnis:

            586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

            6. JSON-String

            {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
            

            4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
            Ergebnis:

            6e21154f-c8ce-4477-9633-926d2af2ebf1-image.png

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

            Neue Version 8.4.2021:

            [
               {
                   "id": "c3403a60.92fbb8",
                   "type": "subflow",
                   "name": "JSON or Obj to IOBroker",
                   "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                   "category": "",
                   "in": [
                       {
                           "x": 60,
                           "y": 160,
                           "wires": [
                               {
                                   "id": "94876630.f71748"
                               }
                           ]
                       }
                   ],
                   "out": [
                       {
                           "x": 2280,
                           "y": 260,
                           "wires": [
                               {
                                   "id": "74b0b536.02371c",
                                   "port": 0
                               },
                               {
                                   "id": "ab9b1e85.eea2a",
                                   "port": 0
                               }
                           ]
                       }
                   ],
                   "env": [],
                   "color": "#E2D96E",
                   "icon": "node-red/batch.svg"
               },
               {
                   "id": "eea737e7.7e8fb8",
                   "type": "split",
                   "z": "c3403a60.92fbb8",
                   "name": "split object",
                   "splt": "\\n",
                   "spltType": "str",
                   "arraySplt": 1,
                   "arraySpltType": "len",
                   "stream": false,
                   "addname": "key",
                   "x": 1170,
                   "y": 160,
                   "wires": [
                       [
                           "dc473616.c2b508"
                       ]
                   ]
               },
               {
                   "id": "dc473616.c2b508",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "add key to topic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "stateName",
                           "pt": "msg",
                           "to": "key",
                           "tot": "msg"
                       },
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "topic  & '.' & key",
                           "tot": "jsonata"
                       },
                       {
                           "t": "change",
                           "p": "topic",
                           "pt": "msg",
                           "from": " ",
                           "fromt": "str",
                           "to": "_",
                           "tot": "str"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1360,
                   "y": 160,
                   "wires": [
                       [
                           "78697695.9a72c8"
                       ]
                   ]
               },
               {
                   "id": "78697695.9a72c8",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is type?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "istype",
                           "v": "object",
                           "vt": "object"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 3,
                   "x": 1540,
                   "y": 160,
                   "wires": [
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "eea737e7.7e8fb8"
                       ],
                       [
                           "bdfdae99.f4d9d"
                       ]
                   ]
               },
               {
                   "id": "d839cef8.577f1",
                   "type": "split",
                   "z": "c3403a60.92fbb8",
                   "name": "split array",
                   "splt": "\\n",
                   "spltType": "str",
                   "arraySplt": 1,
                   "arraySpltType": "len",
                   "stream": false,
                   "addname": "",
                   "x": 580,
                   "y": 280,
                   "wires": [
                       [
                           "36327f2d.8efc3"
                       ]
                   ]
               },
               {
                   "id": "36327f2d.8efc3",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "add index to topic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "topic  & '.' & parts.index",
                           "tot": "jsonata"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 770,
                   "y": 280,
                   "wires": [
                       [
                           "d8f58d9b.b6a1"
                       ]
                   ]
               },
               {
                   "id": "74b0b536.02371c",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "finalize msg.topic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "top",
                           "pt": "msg",
                           "to": "'0_userdata.0.' & top",
                           "tot": "jsonata"
                       },
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "top & topic",
                           "tot": "jsonata"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1970,
                   "y": 240,
                   "wires": [
                       []
                   ]
               },
               {
                   "id": "4cdee7cb.910c38",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is type?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "json",
                           "vt": "json"
                       },
                       {
                           "t": "istype",
                           "v": "object",
                           "vt": "object"
                       },
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 4,
                   "x": 400,
                   "y": 160,
                   "wires": [
                       [
                           "c1c41535.17d3b8"
                       ],
                       [
                           "eea737e7.7e8fb8"
                       ],
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "d8f58d9b.b6a1"
                       ]
                   ]
               },
               {
                   "id": "c1c41535.17d3b8",
                   "type": "json",
                   "z": "c3403a60.92fbb8",
                   "name": "",
                   "property": "payload",
                   "action": "",
                   "pretty": false,
                   "x": 570,
                   "y": 120,
                   "wires": [
                       [
                           "3ccd67db.375058"
                       ]
                   ]
               },
               {
                   "id": "bdfdae99.f4d9d",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is msg.top != null",
                   "property": "top",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "nnull"
                       },
                       {
                           "t": "null"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 2,
                   "x": 1750,
                   "y": 280,
                   "wires": [
                       [
                           "74b0b536.02371c"
                       ],
                       [
                           "7ba7dc21.fdb214"
                       ]
                   ]
               },
               {
                   "id": "7ba7dc21.fdb214",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "payload = warning",
                   "rules": [
                       {
                           "t": "set",
                           "p": "payload",
                           "pt": "msg",
                           "to": "Please define msg.top as root for the object structure",
                           "tot": "str"
                       },
                       {
                           "t": "delete",
                           "p": "topic",
                           "pt": "msg"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1970,
                   "y": 300,
                   "wires": [
                       [
                           "ab9b1e85.eea2a"
                       ]
                   ]
               },
               {
                   "id": "ab9b1e85.eea2a",
                   "type": "rbe",
                   "z": "c3403a60.92fbb8",
                   "name": "",
                   "func": "rbe",
                   "gap": "",
                   "start": "",
                   "inout": "out",
                   "septopics": true,
                   "property": "payload",
                   "x": 2130,
                   "y": 300,
                   "wires": [
                       []
                   ]
               },
               {
                   "id": "94876630.f71748",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "",
                   "rules": [
                       {
                           "t": "delete",
                           "p": "topic",
                           "pt": "msg"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 210,
                   "y": 160,
                   "wires": [
                       [
                           "4cdee7cb.910c38"
                       ]
                   ]
               },
               {
                   "id": "3ccd67db.375058",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is array?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 2,
                   "x": 700,
                   "y": 120,
                   "wires": [
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "eea737e7.7e8fb8"
                       ]
                   ]
               },
               {
                   "id": "80dde279.c28ec",
                   "type": "comment",
                   "z": "c3403a60.92fbb8",
                   "name": "Array",
                   "info": "",
                   "x": 400,
                   "y": 280,
                   "wires": []
               },
               {
                   "id": "95ee816e.68a16",
                   "type": "comment",
                   "z": "c3403a60.92fbb8",
                   "name": "object",
                   "info": "",
                   "x": 1140,
                   "y": 100,
                   "wires": []
               },
               {
                   "id": "d8f58d9b.b6a1",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is type?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "object",
                           "vt": "object"
                       },
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 3,
                   "x": 960,
                   "y": 280,
                   "wires": [
                       [
                           "eea737e7.7e8fb8"
                       ],
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "bdfdae99.f4d9d"
                       ]
                   ]
               },
               {
                   "id": "ff5e1c47.969ce",
                   "type": "subflow:c3403a60.92fbb8",
                   "z": "6e170384.60c96c",
                   "name": "",
                   "env": [],
                   "x": 2030,
                   "y": 3940,
                   "wires": [
                       [
                           "55508830.4f7648",
                           "d33d7111.87185"
                       ]
                   ]
               }
            ]
            
            

            59082740-c25c-440d-b41b-621cd60c496a-image.png

            Hier nun die einzelnen Beispiele einmal als Gesamtflow - hier aber dann auch nochmal in Screenshots dargestellt:

            Erstmal zum Selbstausprobieren der Gesamtflow:

            [
               {
                   "id": "c3403a60.92fbb8",
                   "type": "subflow",
                   "name": "JSON or Obj to IOBroker",
                   "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                   "category": "",
                   "in": [
                       {
                           "x": 60,
                           "y": 160,
                           "wires": [
                               {
                                   "id": "94876630.f71748"
                               }
                           ]
                       }
                   ],
                   "out": [
                       {
                           "x": 2280,
                           "y": 260,
                           "wires": [
                               {
                                   "id": "74b0b536.02371c",
                                   "port": 0
                               },
                               {
                                   "id": "ab9b1e85.eea2a",
                                   "port": 0
                               }
                           ]
                       }
                   ],
                   "env": [],
                   "color": "#E2D96E",
                   "icon": "node-red/batch.svg"
               },
               {
                   "id": "eea737e7.7e8fb8",
                   "type": "split",
                   "z": "c3403a60.92fbb8",
                   "name": "split object",
                   "splt": "\\n",
                   "spltType": "str",
                   "arraySplt": 1,
                   "arraySpltType": "len",
                   "stream": false,
                   "addname": "key",
                   "x": 1170,
                   "y": 160,
                   "wires": [
                       [
                           "dc473616.c2b508"
                       ]
                   ]
               },
               {
                   "id": "dc473616.c2b508",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "add key to topic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "stateName",
                           "pt": "msg",
                           "to": "key",
                           "tot": "msg"
                       },
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "topic  & '.' & key",
                           "tot": "jsonata"
                       },
                       {
                           "t": "change",
                           "p": "topic",
                           "pt": "msg",
                           "from": " ",
                           "fromt": "str",
                           "to": "_",
                           "tot": "str"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1360,
                   "y": 160,
                   "wires": [
                       [
                           "78697695.9a72c8"
                       ]
                   ]
               },
               {
                   "id": "78697695.9a72c8",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is type?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "istype",
                           "v": "object",
                           "vt": "object"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 3,
                   "x": 1540,
                   "y": 160,
                   "wires": [
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "eea737e7.7e8fb8"
                       ],
                       [
                           "bdfdae99.f4d9d"
                       ]
                   ]
               },
               {
                   "id": "d839cef8.577f1",
                   "type": "split",
                   "z": "c3403a60.92fbb8",
                   "name": "split array",
                   "splt": "\\n",
                   "spltType": "str",
                   "arraySplt": 1,
                   "arraySpltType": "len",
                   "stream": false,
                   "addname": "",
                   "x": 580,
                   "y": 280,
                   "wires": [
                       [
                           "36327f2d.8efc3"
                       ]
                   ]
               },
               {
                   "id": "36327f2d.8efc3",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "add index to topic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "topic  & '.' & parts.index",
                           "tot": "jsonata"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 770,
                   "y": 280,
                   "wires": [
                       [
                           "d8f58d9b.b6a1"
                       ]
                   ]
               },
               {
                   "id": "74b0b536.02371c",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "finalize msg.topic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "top",
                           "pt": "msg",
                           "to": "'0_userdata.0.' & top",
                           "tot": "jsonata"
                       },
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "top & topic",
                           "tot": "jsonata"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1970,
                   "y": 240,
                   "wires": [
                       []
                   ]
               },
               {
                   "id": "4cdee7cb.910c38",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is type?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "json",
                           "vt": "json"
                       },
                       {
                           "t": "istype",
                           "v": "object",
                           "vt": "object"
                       },
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 4,
                   "x": 400,
                   "y": 160,
                   "wires": [
                       [
                           "c1c41535.17d3b8"
                       ],
                       [
                           "eea737e7.7e8fb8"
                       ],
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "d8f58d9b.b6a1"
                       ]
                   ]
               },
               {
                   "id": "c1c41535.17d3b8",
                   "type": "json",
                   "z": "c3403a60.92fbb8",
                   "name": "",
                   "property": "payload",
                   "action": "",
                   "pretty": false,
                   "x": 570,
                   "y": 120,
                   "wires": [
                       [
                           "3ccd67db.375058"
                       ]
                   ]
               },
               {
                   "id": "bdfdae99.f4d9d",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is msg.top != null",
                   "property": "top",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "nnull"
                       },
                       {
                           "t": "null"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 2,
                   "x": 1750,
                   "y": 280,
                   "wires": [
                       [
                           "74b0b536.02371c"
                       ],
                       [
                           "7ba7dc21.fdb214"
                       ]
                   ]
               },
               {
                   "id": "7ba7dc21.fdb214",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "payload = warning",
                   "rules": [
                       {
                           "t": "set",
                           "p": "payload",
                           "pt": "msg",
                           "to": "Please define msg.top as root for the object structure",
                           "tot": "str"
                       },
                       {
                           "t": "delete",
                           "p": "topic",
                           "pt": "msg"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1970,
                   "y": 300,
                   "wires": [
                       [
                           "ab9b1e85.eea2a"
                       ]
                   ]
               },
               {
                   "id": "ab9b1e85.eea2a",
                   "type": "rbe",
                   "z": "c3403a60.92fbb8",
                   "name": "",
                   "func": "rbe",
                   "gap": "",
                   "start": "",
                   "inout": "out",
                   "septopics": true,
                   "property": "payload",
                   "x": 2130,
                   "y": 300,
                   "wires": [
                       []
                   ]
               },
               {
                   "id": "94876630.f71748",
                   "type": "change",
                   "z": "c3403a60.92fbb8",
                   "name": "",
                   "rules": [
                       {
                           "t": "delete",
                           "p": "topic",
                           "pt": "msg"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 210,
                   "y": 160,
                   "wires": [
                       [
                           "4cdee7cb.910c38"
                       ]
                   ]
               },
               {
                   "id": "3ccd67db.375058",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is array?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 2,
                   "x": 700,
                   "y": 120,
                   "wires": [
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "eea737e7.7e8fb8"
                       ]
                   ]
               },
               {
                   "id": "80dde279.c28ec",
                   "type": "comment",
                   "z": "c3403a60.92fbb8",
                   "name": "Array",
                   "info": "",
                   "x": 400,
                   "y": 280,
                   "wires": []
               },
               {
                   "id": "95ee816e.68a16",
                   "type": "comment",
                   "z": "c3403a60.92fbb8",
                   "name": "object",
                   "info": "",
                   "x": 1140,
                   "y": 100,
                   "wires": []
               },
               {
                   "id": "d8f58d9b.b6a1",
                   "type": "switch",
                   "z": "c3403a60.92fbb8",
                   "name": "is type?",
                   "property": "payload",
                   "propertyType": "msg",
                   "rules": [
                       {
                           "t": "istype",
                           "v": "object",
                           "vt": "object"
                       },
                       {
                           "t": "istype",
                           "v": "array",
                           "vt": "array"
                       },
                       {
                           "t": "else"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 3,
                   "x": 960,
                   "y": 280,
                   "wires": [
                       [
                           "eea737e7.7e8fb8"
                       ],
                       [
                           "d839cef8.577f1"
                       ],
                       [
                           "bdfdae99.f4d9d"
                       ]
                   ]
               },
               {
                   "id": "39af146b.246efc",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "Example.Object",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "top",
                           "v": "Example.Object",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "{\"Präsenz Wohnzimmer Essbereich\":true,\"Präsenz Bad\":true,\"Präsenz Schlafzimmer\":true,\"Thermometer Bad\":true,\"Präsenz Flur\":true,\"Würfel Wohnzimmer\":{\"1\":\"TV\"},\"Präsenz Küche\":true,\"Würfel Schlafzimmer\":true,\"Thermometer Küche\":true,\"Präsenz Diele\":true,\"Präsenz Wohnzimmer\":true,\"Präsenz Büro\":true}",
                   "payloadType": "json",
                   "x": 1740,
                   "y": 3920,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "55508830.4f7648",
                   "type": "ioBroker out",
                   "z": "6e170384.60c96c",
                   "name": "",
                   "topic": "",
                   "ack": "true",
                   "autoCreate": "true",
                   "stateName": "",
                   "role": "",
                   "payloadType": "",
                   "readonly": "",
                   "stateUnit": "",
                   "stateMin": "",
                   "stateMax": "",
                   "x": 2260,
                   "y": 3940,
                   "wires": []
               },
               {
                   "id": "ef13139d.f769b",
                   "type": "comment",
                   "z": "6e170384.60c96c",
                   "name": "JSON String im iobroker abbilden",
                   "info": "",
                   "x": 1710,
                   "y": 3660,
                   "wires": []
               },
               {
                   "id": "eb4a9e48.412dd",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "Example.JSON_String",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "top",
                           "v": "Example.JSON_String",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "{\"squadName\":\"Super hero squad\",\"homeTown\":\"Metro City\",\"formed\":2016,\"secretBase\":\"Super tower\",\"active\":true,\"members\":[{\"name\":\"Molecule Man\",\"age\":29,\"secretIdentity\":\"Dan Jukes\",\"powers\":[\"Radiation resistance\",\"Turning tiny\",\"Radiation blast\"],\"dressed\":{\"head\":\"Kopfbedeckung\"}},{\"name\":\"Madame Uppercut\",\"age\":69,\"secretIdentity\":\"Jane Wilson\",\"powers\":[\"Million tonne punch\",\"Damage resistance\",\"Superhuman reflexes\"]},{\"name\":\"Eternal Flame\",\"age\":1000000,\"secretIdentity\":\"Unknown\",\"powers\":[\"Immortality\",\"Heat Immunity\",\"Inferno\",\"Teleportation\",\"Interdimensional travel\"]}]}",
                   "payloadType": "str",
                   "x": 1720,
                   "y": 4000,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "e634a854.6906e8",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "missing msg.top",
                   "props": [
                       {
                           "p": "payload"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "{\"Leaving\":\"288.700000\",\"Returning\":\"24.900000\"}",
                   "payloadType": "str",
                   "x": 1740,
                   "y": 4040,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "ff5e1c47.969ce",
                   "type": "subflow:c3403a60.92fbb8",
                   "z": "6e170384.60c96c",
                   "name": "",
                   "env": [],
                   "x": 2030,
                   "y": 3940,
                   "wires": [
                       [
                           "55508830.4f7648"
                       ]
                   ]
               },
               {
                   "id": "9ba223c1.87f48",
                   "type": "change",
                   "z": "6e170384.60c96c",
                   "name": "Example.AddTopic",
                   "rules": [
                       {
                           "t": "set",
                           "p": "top",
                           "pt": "msg",
                           "to": "Example.AddTopic",
                           "tot": "str"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 1730,
                   "y": 3760,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "5faa833d.62380c",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "Example.ObjectArray",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "top",
                           "v": "Example.ObjectArray",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "[{\"start\":45,\"end\":100,\"date\":\"24.3.2021 18:44\",\"diff\":1,\"quantity\":0,\"price\":\"0.00\",\"basicPrice\":0,\"startDate\":\"24.3.2021 18:44\",\"duration\":1,\"perHour\":0},{\"start\":51,\"end\":52,\"date\":\"24.3.2021 15:59\",\"diff\":3,\"quantity\":0,\"price\":\"0.00\",\"basicPrice\":0,\"startDate\":\"24.3.2021 15:57\",\"duration\":3,\"perHour\":0},{\"start\":59,\"end\":100,\"date\":\"24.2.2021 14:27\",\"diff\":29,\"quantity\":0,\"price\":\"0.00\",\"basicPrice\":0,\"startDate\":\"24.2.2021 13:59\",\"duration\":29,\"perHour\":0}]",
                   "payloadType": "json",
                   "x": 1720,
                   "y": 3960,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "cbaeed2b.bf7b4",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "Example.Skalar",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "top",
                           "v": "Example.Skalar",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "Hello World",
                   "payloadType": "str",
                   "x": 1740,
                   "y": 3880,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "ddd0a692.9d8f28",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "Example.ComplexArray",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "top",
                           "v": "Example.ComplexArray",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "[1,2,[3,4,5],{\"Leaving\":\"288.700000\",\"Returning\":\"24.900000\"}]",
                   "payloadType": "jsonata",
                   "x": 1720,
                   "y": 3840,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               },
               {
                   "id": "55be416c.3246",
                   "type": "inject",
                   "z": "6e170384.60c96c",
                   "name": "Example.SimpleArray",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "top",
                           "v": "Example.SimpleArray",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "[1,5,6.2,2,3]",
                   "payloadType": "jsonata",
                   "x": 1720,
                   "y": 3800,
                   "wires": [
                       [
                           "ff5e1c47.969ce"
                       ]
                   ]
               }
            ]
            

            befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

            Nun zu den einzelnen Inputs in den Inject-Nodes:

            1. Example.SimpleArray

            [1,5,6.2,2,3]
            

            fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
            Ergebnis

            309b4092-119c-4d58-b807-f868f9c7b637-image.png

            2. Example.ComplexArray

            [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
            

            020f93df-4c30-4fab-8596-380ca60051cd-image.png
            Ergebnis

            1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

            3. Skalar (Input ist kein Objekt)

            d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

            Ergebnis

            3dc945e3-5539-44ef-891f-9fe6ab09f30d-image.png

            4. Objekt:

            {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
            

            89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
            Ergebnis:

            704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

            5. ObjectArray:

            [
                {
                    "start": 45,
                    "end": 100,
                    "date": "24.3.2021 18:44",
                    "diff": 1,
                    "quantity": 0,
                    "price": "0.00",
                    "basicPrice": 0,
                    "startDate": "24.3.2021 18:44",
                    "duration": 1,
                    "perHour": 0
                },
                {
                    "start": 51,
                    "end": 52,
                    "date": "24.3.2021 15:59",
                    "diff": 3,
                    "quantity": 0,
                    "price": "0.00",
                    "basicPrice": 0,
                    "startDate": "24.3.2021 15:57",
                    "duration": 3,
                    "perHour": 0
                },
                {
                    "start": 59,
                    "end": 100,
                    "date": "24.2.2021 14:27",
                    "diff": 29,
                    "quantity": 0,
                    "price": "0.00",
                    "basicPrice": 0,
                    "startDate": "24.2.2021 13:59",
                    "duration": 29,
                    "perHour": 0
                }
            ]
            

            d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

            Ergebnis:

            586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

            6. JSON-String

            {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
            

            4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
            Ergebnis:

            6e21154f-c8ce-4477-9633-926d2af2ebf1-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.

            S 1 Antwort Letzte Antwort
            0
            • mickymM mickym

              Neue Version 8.4.2021:

              [
                 {
                     "id": "c3403a60.92fbb8",
                     "type": "subflow",
                     "name": "JSON or Obj to IOBroker",
                     "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                     "category": "",
                     "in": [
                         {
                             "x": 60,
                             "y": 160,
                             "wires": [
                                 {
                                     "id": "94876630.f71748"
                                 }
                             ]
                         }
                     ],
                     "out": [
                         {
                             "x": 2280,
                             "y": 260,
                             "wires": [
                                 {
                                     "id": "74b0b536.02371c",
                                     "port": 0
                                 },
                                 {
                                     "id": "ab9b1e85.eea2a",
                                     "port": 0
                                 }
                             ]
                         }
                     ],
                     "env": [],
                     "color": "#E2D96E",
                     "icon": "node-red/batch.svg"
                 },
                 {
                     "id": "eea737e7.7e8fb8",
                     "type": "split",
                     "z": "c3403a60.92fbb8",
                     "name": "split object",
                     "splt": "\\n",
                     "spltType": "str",
                     "arraySplt": 1,
                     "arraySpltType": "len",
                     "stream": false,
                     "addname": "key",
                     "x": 1170,
                     "y": 160,
                     "wires": [
                         [
                             "dc473616.c2b508"
                         ]
                     ]
                 },
                 {
                     "id": "dc473616.c2b508",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "add key to topic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "stateName",
                             "pt": "msg",
                             "to": "key",
                             "tot": "msg"
                         },
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "topic  & '.' & key",
                             "tot": "jsonata"
                         },
                         {
                             "t": "change",
                             "p": "topic",
                             "pt": "msg",
                             "from": " ",
                             "fromt": "str",
                             "to": "_",
                             "tot": "str"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1360,
                     "y": 160,
                     "wires": [
                         [
                             "78697695.9a72c8"
                         ]
                     ]
                 },
                 {
                     "id": "78697695.9a72c8",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is type?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "istype",
                             "v": "object",
                             "vt": "object"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 3,
                     "x": 1540,
                     "y": 160,
                     "wires": [
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "eea737e7.7e8fb8"
                         ],
                         [
                             "bdfdae99.f4d9d"
                         ]
                     ]
                 },
                 {
                     "id": "d839cef8.577f1",
                     "type": "split",
                     "z": "c3403a60.92fbb8",
                     "name": "split array",
                     "splt": "\\n",
                     "spltType": "str",
                     "arraySplt": 1,
                     "arraySpltType": "len",
                     "stream": false,
                     "addname": "",
                     "x": 580,
                     "y": 280,
                     "wires": [
                         [
                             "36327f2d.8efc3"
                         ]
                     ]
                 },
                 {
                     "id": "36327f2d.8efc3",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "add index to topic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "topic  & '.' & parts.index",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 770,
                     "y": 280,
                     "wires": [
                         [
                             "d8f58d9b.b6a1"
                         ]
                     ]
                 },
                 {
                     "id": "74b0b536.02371c",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "finalize msg.topic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "top",
                             "pt": "msg",
                             "to": "'0_userdata.0.' & top",
                             "tot": "jsonata"
                         },
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "top & topic",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1970,
                     "y": 240,
                     "wires": [
                         []
                     ]
                 },
                 {
                     "id": "4cdee7cb.910c38",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is type?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "json",
                             "vt": "json"
                         },
                         {
                             "t": "istype",
                             "v": "object",
                             "vt": "object"
                         },
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 4,
                     "x": 400,
                     "y": 160,
                     "wires": [
                         [
                             "c1c41535.17d3b8"
                         ],
                         [
                             "eea737e7.7e8fb8"
                         ],
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "d8f58d9b.b6a1"
                         ]
                     ]
                 },
                 {
                     "id": "c1c41535.17d3b8",
                     "type": "json",
                     "z": "c3403a60.92fbb8",
                     "name": "",
                     "property": "payload",
                     "action": "",
                     "pretty": false,
                     "x": 570,
                     "y": 120,
                     "wires": [
                         [
                             "3ccd67db.375058"
                         ]
                     ]
                 },
                 {
                     "id": "bdfdae99.f4d9d",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is msg.top != null",
                     "property": "top",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "nnull"
                         },
                         {
                             "t": "null"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 2,
                     "x": 1750,
                     "y": 280,
                     "wires": [
                         [
                             "74b0b536.02371c"
                         ],
                         [
                             "7ba7dc21.fdb214"
                         ]
                     ]
                 },
                 {
                     "id": "7ba7dc21.fdb214",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "payload = warning",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "Please define msg.top as root for the object structure",
                             "tot": "str"
                         },
                         {
                             "t": "delete",
                             "p": "topic",
                             "pt": "msg"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1970,
                     "y": 300,
                     "wires": [
                         [
                             "ab9b1e85.eea2a"
                         ]
                     ]
                 },
                 {
                     "id": "ab9b1e85.eea2a",
                     "type": "rbe",
                     "z": "c3403a60.92fbb8",
                     "name": "",
                     "func": "rbe",
                     "gap": "",
                     "start": "",
                     "inout": "out",
                     "septopics": true,
                     "property": "payload",
                     "x": 2130,
                     "y": 300,
                     "wires": [
                         []
                     ]
                 },
                 {
                     "id": "94876630.f71748",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "",
                     "rules": [
                         {
                             "t": "delete",
                             "p": "topic",
                             "pt": "msg"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 210,
                     "y": 160,
                     "wires": [
                         [
                             "4cdee7cb.910c38"
                         ]
                     ]
                 },
                 {
                     "id": "3ccd67db.375058",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is array?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 2,
                     "x": 700,
                     "y": 120,
                     "wires": [
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "eea737e7.7e8fb8"
                         ]
                     ]
                 },
                 {
                     "id": "80dde279.c28ec",
                     "type": "comment",
                     "z": "c3403a60.92fbb8",
                     "name": "Array",
                     "info": "",
                     "x": 400,
                     "y": 280,
                     "wires": []
                 },
                 {
                     "id": "95ee816e.68a16",
                     "type": "comment",
                     "z": "c3403a60.92fbb8",
                     "name": "object",
                     "info": "",
                     "x": 1140,
                     "y": 100,
                     "wires": []
                 },
                 {
                     "id": "d8f58d9b.b6a1",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is type?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "object",
                             "vt": "object"
                         },
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 3,
                     "x": 960,
                     "y": 280,
                     "wires": [
                         [
                             "eea737e7.7e8fb8"
                         ],
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "bdfdae99.f4d9d"
                         ]
                     ]
                 },
                 {
                     "id": "ff5e1c47.969ce",
                     "type": "subflow:c3403a60.92fbb8",
                     "z": "6e170384.60c96c",
                     "name": "",
                     "env": [],
                     "x": 2030,
                     "y": 3940,
                     "wires": [
                         [
                             "55508830.4f7648",
                             "d33d7111.87185"
                         ]
                     ]
                 }
              ]
              
              

              59082740-c25c-440d-b41b-621cd60c496a-image.png

              Hier nun die einzelnen Beispiele einmal als Gesamtflow - hier aber dann auch nochmal in Screenshots dargestellt:

              Erstmal zum Selbstausprobieren der Gesamtflow:

              [
                 {
                     "id": "c3403a60.92fbb8",
                     "type": "subflow",
                     "name": "JSON or Obj to IOBroker",
                     "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                     "category": "",
                     "in": [
                         {
                             "x": 60,
                             "y": 160,
                             "wires": [
                                 {
                                     "id": "94876630.f71748"
                                 }
                             ]
                         }
                     ],
                     "out": [
                         {
                             "x": 2280,
                             "y": 260,
                             "wires": [
                                 {
                                     "id": "74b0b536.02371c",
                                     "port": 0
                                 },
                                 {
                                     "id": "ab9b1e85.eea2a",
                                     "port": 0
                                 }
                             ]
                         }
                     ],
                     "env": [],
                     "color": "#E2D96E",
                     "icon": "node-red/batch.svg"
                 },
                 {
                     "id": "eea737e7.7e8fb8",
                     "type": "split",
                     "z": "c3403a60.92fbb8",
                     "name": "split object",
                     "splt": "\\n",
                     "spltType": "str",
                     "arraySplt": 1,
                     "arraySpltType": "len",
                     "stream": false,
                     "addname": "key",
                     "x": 1170,
                     "y": 160,
                     "wires": [
                         [
                             "dc473616.c2b508"
                         ]
                     ]
                 },
                 {
                     "id": "dc473616.c2b508",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "add key to topic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "stateName",
                             "pt": "msg",
                             "to": "key",
                             "tot": "msg"
                         },
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "topic  & '.' & key",
                             "tot": "jsonata"
                         },
                         {
                             "t": "change",
                             "p": "topic",
                             "pt": "msg",
                             "from": " ",
                             "fromt": "str",
                             "to": "_",
                             "tot": "str"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1360,
                     "y": 160,
                     "wires": [
                         [
                             "78697695.9a72c8"
                         ]
                     ]
                 },
                 {
                     "id": "78697695.9a72c8",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is type?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "istype",
                             "v": "object",
                             "vt": "object"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 3,
                     "x": 1540,
                     "y": 160,
                     "wires": [
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "eea737e7.7e8fb8"
                         ],
                         [
                             "bdfdae99.f4d9d"
                         ]
                     ]
                 },
                 {
                     "id": "d839cef8.577f1",
                     "type": "split",
                     "z": "c3403a60.92fbb8",
                     "name": "split array",
                     "splt": "\\n",
                     "spltType": "str",
                     "arraySplt": 1,
                     "arraySpltType": "len",
                     "stream": false,
                     "addname": "",
                     "x": 580,
                     "y": 280,
                     "wires": [
                         [
                             "36327f2d.8efc3"
                         ]
                     ]
                 },
                 {
                     "id": "36327f2d.8efc3",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "add index to topic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "topic  & '.' & parts.index",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 770,
                     "y": 280,
                     "wires": [
                         [
                             "d8f58d9b.b6a1"
                         ]
                     ]
                 },
                 {
                     "id": "74b0b536.02371c",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "finalize msg.topic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "top",
                             "pt": "msg",
                             "to": "'0_userdata.0.' & top",
                             "tot": "jsonata"
                         },
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "top & topic",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1970,
                     "y": 240,
                     "wires": [
                         []
                     ]
                 },
                 {
                     "id": "4cdee7cb.910c38",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is type?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "json",
                             "vt": "json"
                         },
                         {
                             "t": "istype",
                             "v": "object",
                             "vt": "object"
                         },
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 4,
                     "x": 400,
                     "y": 160,
                     "wires": [
                         [
                             "c1c41535.17d3b8"
                         ],
                         [
                             "eea737e7.7e8fb8"
                         ],
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "d8f58d9b.b6a1"
                         ]
                     ]
                 },
                 {
                     "id": "c1c41535.17d3b8",
                     "type": "json",
                     "z": "c3403a60.92fbb8",
                     "name": "",
                     "property": "payload",
                     "action": "",
                     "pretty": false,
                     "x": 570,
                     "y": 120,
                     "wires": [
                         [
                             "3ccd67db.375058"
                         ]
                     ]
                 },
                 {
                     "id": "bdfdae99.f4d9d",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is msg.top != null",
                     "property": "top",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "nnull"
                         },
                         {
                             "t": "null"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 2,
                     "x": 1750,
                     "y": 280,
                     "wires": [
                         [
                             "74b0b536.02371c"
                         ],
                         [
                             "7ba7dc21.fdb214"
                         ]
                     ]
                 },
                 {
                     "id": "7ba7dc21.fdb214",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "payload = warning",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "Please define msg.top as root for the object structure",
                             "tot": "str"
                         },
                         {
                             "t": "delete",
                             "p": "topic",
                             "pt": "msg"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1970,
                     "y": 300,
                     "wires": [
                         [
                             "ab9b1e85.eea2a"
                         ]
                     ]
                 },
                 {
                     "id": "ab9b1e85.eea2a",
                     "type": "rbe",
                     "z": "c3403a60.92fbb8",
                     "name": "",
                     "func": "rbe",
                     "gap": "",
                     "start": "",
                     "inout": "out",
                     "septopics": true,
                     "property": "payload",
                     "x": 2130,
                     "y": 300,
                     "wires": [
                         []
                     ]
                 },
                 {
                     "id": "94876630.f71748",
                     "type": "change",
                     "z": "c3403a60.92fbb8",
                     "name": "",
                     "rules": [
                         {
                             "t": "delete",
                             "p": "topic",
                             "pt": "msg"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 210,
                     "y": 160,
                     "wires": [
                         [
                             "4cdee7cb.910c38"
                         ]
                     ]
                 },
                 {
                     "id": "3ccd67db.375058",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is array?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 2,
                     "x": 700,
                     "y": 120,
                     "wires": [
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "eea737e7.7e8fb8"
                         ]
                     ]
                 },
                 {
                     "id": "80dde279.c28ec",
                     "type": "comment",
                     "z": "c3403a60.92fbb8",
                     "name": "Array",
                     "info": "",
                     "x": 400,
                     "y": 280,
                     "wires": []
                 },
                 {
                     "id": "95ee816e.68a16",
                     "type": "comment",
                     "z": "c3403a60.92fbb8",
                     "name": "object",
                     "info": "",
                     "x": 1140,
                     "y": 100,
                     "wires": []
                 },
                 {
                     "id": "d8f58d9b.b6a1",
                     "type": "switch",
                     "z": "c3403a60.92fbb8",
                     "name": "is type?",
                     "property": "payload",
                     "propertyType": "msg",
                     "rules": [
                         {
                             "t": "istype",
                             "v": "object",
                             "vt": "object"
                         },
                         {
                             "t": "istype",
                             "v": "array",
                             "vt": "array"
                         },
                         {
                             "t": "else"
                         }
                     ],
                     "checkall": "true",
                     "repair": false,
                     "outputs": 3,
                     "x": 960,
                     "y": 280,
                     "wires": [
                         [
                             "eea737e7.7e8fb8"
                         ],
                         [
                             "d839cef8.577f1"
                         ],
                         [
                             "bdfdae99.f4d9d"
                         ]
                     ]
                 },
                 {
                     "id": "39af146b.246efc",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "Example.Object",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "top",
                             "v": "Example.Object",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "{\"Präsenz Wohnzimmer Essbereich\":true,\"Präsenz Bad\":true,\"Präsenz Schlafzimmer\":true,\"Thermometer Bad\":true,\"Präsenz Flur\":true,\"Würfel Wohnzimmer\":{\"1\":\"TV\"},\"Präsenz Küche\":true,\"Würfel Schlafzimmer\":true,\"Thermometer Küche\":true,\"Präsenz Diele\":true,\"Präsenz Wohnzimmer\":true,\"Präsenz Büro\":true}",
                     "payloadType": "json",
                     "x": 1740,
                     "y": 3920,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "55508830.4f7648",
                     "type": "ioBroker out",
                     "z": "6e170384.60c96c",
                     "name": "",
                     "topic": "",
                     "ack": "true",
                     "autoCreate": "true",
                     "stateName": "",
                     "role": "",
                     "payloadType": "",
                     "readonly": "",
                     "stateUnit": "",
                     "stateMin": "",
                     "stateMax": "",
                     "x": 2260,
                     "y": 3940,
                     "wires": []
                 },
                 {
                     "id": "ef13139d.f769b",
                     "type": "comment",
                     "z": "6e170384.60c96c",
                     "name": "JSON String im iobroker abbilden",
                     "info": "",
                     "x": 1710,
                     "y": 3660,
                     "wires": []
                 },
                 {
                     "id": "eb4a9e48.412dd",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "Example.JSON_String",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "top",
                             "v": "Example.JSON_String",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "{\"squadName\":\"Super hero squad\",\"homeTown\":\"Metro City\",\"formed\":2016,\"secretBase\":\"Super tower\",\"active\":true,\"members\":[{\"name\":\"Molecule Man\",\"age\":29,\"secretIdentity\":\"Dan Jukes\",\"powers\":[\"Radiation resistance\",\"Turning tiny\",\"Radiation blast\"],\"dressed\":{\"head\":\"Kopfbedeckung\"}},{\"name\":\"Madame Uppercut\",\"age\":69,\"secretIdentity\":\"Jane Wilson\",\"powers\":[\"Million tonne punch\",\"Damage resistance\",\"Superhuman reflexes\"]},{\"name\":\"Eternal Flame\",\"age\":1000000,\"secretIdentity\":\"Unknown\",\"powers\":[\"Immortality\",\"Heat Immunity\",\"Inferno\",\"Teleportation\",\"Interdimensional travel\"]}]}",
                     "payloadType": "str",
                     "x": 1720,
                     "y": 4000,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "e634a854.6906e8",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "missing msg.top",
                     "props": [
                         {
                             "p": "payload"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "{\"Leaving\":\"288.700000\",\"Returning\":\"24.900000\"}",
                     "payloadType": "str",
                     "x": 1740,
                     "y": 4040,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "ff5e1c47.969ce",
                     "type": "subflow:c3403a60.92fbb8",
                     "z": "6e170384.60c96c",
                     "name": "",
                     "env": [],
                     "x": 2030,
                     "y": 3940,
                     "wires": [
                         [
                             "55508830.4f7648"
                         ]
                     ]
                 },
                 {
                     "id": "9ba223c1.87f48",
                     "type": "change",
                     "z": "6e170384.60c96c",
                     "name": "Example.AddTopic",
                     "rules": [
                         {
                             "t": "set",
                             "p": "top",
                             "pt": "msg",
                             "to": "Example.AddTopic",
                             "tot": "str"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1730,
                     "y": 3760,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "5faa833d.62380c",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "Example.ObjectArray",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "top",
                             "v": "Example.ObjectArray",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "[{\"start\":45,\"end\":100,\"date\":\"24.3.2021 18:44\",\"diff\":1,\"quantity\":0,\"price\":\"0.00\",\"basicPrice\":0,\"startDate\":\"24.3.2021 18:44\",\"duration\":1,\"perHour\":0},{\"start\":51,\"end\":52,\"date\":\"24.3.2021 15:59\",\"diff\":3,\"quantity\":0,\"price\":\"0.00\",\"basicPrice\":0,\"startDate\":\"24.3.2021 15:57\",\"duration\":3,\"perHour\":0},{\"start\":59,\"end\":100,\"date\":\"24.2.2021 14:27\",\"diff\":29,\"quantity\":0,\"price\":\"0.00\",\"basicPrice\":0,\"startDate\":\"24.2.2021 13:59\",\"duration\":29,\"perHour\":0}]",
                     "payloadType": "json",
                     "x": 1720,
                     "y": 3960,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "cbaeed2b.bf7b4",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "Example.Skalar",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "top",
                             "v": "Example.Skalar",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "Hello World",
                     "payloadType": "str",
                     "x": 1740,
                     "y": 3880,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "ddd0a692.9d8f28",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "Example.ComplexArray",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "top",
                             "v": "Example.ComplexArray",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "[1,2,[3,4,5],{\"Leaving\":\"288.700000\",\"Returning\":\"24.900000\"}]",
                     "payloadType": "jsonata",
                     "x": 1720,
                     "y": 3840,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 },
                 {
                     "id": "55be416c.3246",
                     "type": "inject",
                     "z": "6e170384.60c96c",
                     "name": "Example.SimpleArray",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "top",
                             "v": "Example.SimpleArray",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "[1,5,6.2,2,3]",
                     "payloadType": "jsonata",
                     "x": 1720,
                     "y": 3800,
                     "wires": [
                         [
                             "ff5e1c47.969ce"
                         ]
                     ]
                 }
              ]
              

              befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

              Nun zu den einzelnen Inputs in den Inject-Nodes:

              1. Example.SimpleArray

              [1,5,6.2,2,3]
              

              fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
              Ergebnis

              309b4092-119c-4d58-b807-f868f9c7b637-image.png

              2. Example.ComplexArray

              [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
              

              020f93df-4c30-4fab-8596-380ca60051cd-image.png
              Ergebnis

              1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

              3. Skalar (Input ist kein Objekt)

              d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

              Ergebnis

              3dc945e3-5539-44ef-891f-9fe6ab09f30d-image.png

              4. Objekt:

              {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
              

              89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
              Ergebnis:

              704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

              5. ObjectArray:

              [
                  {
                      "start": 45,
                      "end": 100,
                      "date": "24.3.2021 18:44",
                      "diff": 1,
                      "quantity": 0,
                      "price": "0.00",
                      "basicPrice": 0,
                      "startDate": "24.3.2021 18:44",
                      "duration": 1,
                      "perHour": 0
                  },
                  {
                      "start": 51,
                      "end": 52,
                      "date": "24.3.2021 15:59",
                      "diff": 3,
                      "quantity": 0,
                      "price": "0.00",
                      "basicPrice": 0,
                      "startDate": "24.3.2021 15:57",
                      "duration": 3,
                      "perHour": 0
                  },
                  {
                      "start": 59,
                      "end": 100,
                      "date": "24.2.2021 14:27",
                      "diff": 29,
                      "quantity": 0,
                      "price": "0.00",
                      "basicPrice": 0,
                      "startDate": "24.2.2021 13:59",
                      "duration": 29,
                      "perHour": 0
                  }
              ]
              

              d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

              Ergebnis:

              586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

              6. JSON-String

              {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
              

              4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
              Ergebnis:

              6e21154f-c8ce-4477-9633-926d2af2ebf1-image.png

              S Offline
              S Offline
              schonpaule
              schrieb am zuletzt editiert von
              #6

              @mickym Hallo mickym ,

              irgendwie verstehe ich das mit dem msg.top als root nicht ..... Was bedeutet das für mich beim anlegen des DP ? Also Channel\Gerät ..... ?

              das Script wäre nämlich genau das was ich brauchen könnte !

              MfG.

              Jean

              mickymM 1 Antwort Letzte Antwort
              0
              • S schonpaule

                @mickym Hallo mickym ,

                irgendwie verstehe ich das mit dem msg.top als root nicht ..... Was bedeutet das für mich beim anlegen des DP ? Also Channel\Gerät ..... ?

                das Script wäre nämlich genau das was ich brauchen könnte !

                MfG.

                Jean

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

                @schonpaule

                Es muss als topic für den Objektbaum ein Name in der Eigenschaft msg.top mitgegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt.

                Nein mit msg.top legst Du den Namen fest unter dem die Struktur unter 0_userdata.0 angelegt werden soll.

                Also wenn Du msg.top="meineStruktur", dann legt der Flow alles unter dem Punkt 0_userdata.0.meineStruktur an.

                Seit dem Admin5 musst Du dann aber nachträglich die Verzeichnispunkte leider wieder als Objektverzeichnisse nachlegen. Also dann das Script von @fastfoot drüberlaufen lassen. Wenn die Struktur mal steht, ist es kein Problem, da dann alle Punkte natürlich aktualisiert werden.

                Wenn Du Dir eigentlich das nächste Posting anschaust, da ist eigentlich auch alles mit Screenshots dokumentiert.

                1c6a2887-308f-4db9-b882-c28799c67f6a-image.png

                Also im Javascript noch die Erstellung von Objekten erlauben und dann dieses Script über 0_userdata.0 laufen lassen. Node-Red darf leider keine Objekte sondern nur states erstellen. Ich hab schon ein issue aufgemacht - aber ich befürchte, dass wird dauern ob und wann sich da jemand kümmert.

                /**
                * Zweck:       Korrigiert übergeordnete Ordnerstrukturen eines Datenpunkts
                * Datum:      07.08.2021
                * Autor:       @fastfoot
                */
                 
                //              In den Settings der Javascript-Instanz muss setObject erlaubt sein!!!
                 
                let arr = [],
                   id = '';
                 
                const ids = $('0_userdata.0.*');
                ids.each(idTmp => {
                   arr=idTmp.split('.');
                   arr.splice(arr.length-1);
                   id=arr.join('.');
                   if(arr[0] === '0_userdata' || arr[0] === 'alias' || arr[0] === 'mqtt' || arr[0] === 'javascript'){
                       correctObject(id, arr);
                   }
                })
                 
                function correctObject(id,arr){
                   if(arr.length === 2) return;
                   if(!existsObject(id)){
                       let obj = {};
                       obj = {
                           type: 'folder',
                           common:{
                               name: arr[arr.length - 1]
                           }
                       }
                       extendObject(id, obj, e => {
                           if (e) log('Fehler beim Schreiben des Objektes: '+ id + ' ' + e);
                       })
                   }
                   arr.splice(arr.length - 1);
                   id = arr.join('.');
                   correctObject(id, arr);
                }
                 
                
                

                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.

                S 1 Antwort Letzte Antwort
                0
                • mickymM mickym

                  @schonpaule

                  Es muss als topic für den Objektbaum ein Name in der Eigenschaft msg.top mitgegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt.

                  Nein mit msg.top legst Du den Namen fest unter dem die Struktur unter 0_userdata.0 angelegt werden soll.

                  Also wenn Du msg.top="meineStruktur", dann legt der Flow alles unter dem Punkt 0_userdata.0.meineStruktur an.

                  Seit dem Admin5 musst Du dann aber nachträglich die Verzeichnispunkte leider wieder als Objektverzeichnisse nachlegen. Also dann das Script von @fastfoot drüberlaufen lassen. Wenn die Struktur mal steht, ist es kein Problem, da dann alle Punkte natürlich aktualisiert werden.

                  Wenn Du Dir eigentlich das nächste Posting anschaust, da ist eigentlich auch alles mit Screenshots dokumentiert.

                  1c6a2887-308f-4db9-b882-c28799c67f6a-image.png

                  Also im Javascript noch die Erstellung von Objekten erlauben und dann dieses Script über 0_userdata.0 laufen lassen. Node-Red darf leider keine Objekte sondern nur states erstellen. Ich hab schon ein issue aufgemacht - aber ich befürchte, dass wird dauern ob und wann sich da jemand kümmert.

                  /**
                  * Zweck:       Korrigiert übergeordnete Ordnerstrukturen eines Datenpunkts
                  * Datum:      07.08.2021
                  * Autor:       @fastfoot
                  */
                   
                  //              In den Settings der Javascript-Instanz muss setObject erlaubt sein!!!
                   
                  let arr = [],
                     id = '';
                   
                  const ids = $('0_userdata.0.*');
                  ids.each(idTmp => {
                     arr=idTmp.split('.');
                     arr.splice(arr.length-1);
                     id=arr.join('.');
                     if(arr[0] === '0_userdata' || arr[0] === 'alias' || arr[0] === 'mqtt' || arr[0] === 'javascript'){
                         correctObject(id, arr);
                     }
                  })
                   
                  function correctObject(id,arr){
                     if(arr.length === 2) return;
                     if(!existsObject(id)){
                         let obj = {};
                         obj = {
                             type: 'folder',
                             common:{
                                 name: arr[arr.length - 1]
                             }
                         }
                         extendObject(id, obj, e => {
                             if (e) log('Fehler beim Schreiben des Objektes: '+ id + ' ' + e);
                         })
                     }
                     arr.splice(arr.length - 1);
                     id = arr.join('.');
                     correctObject(id, arr);
                  }
                   
                  
                  
                  S Offline
                  S Offline
                  schonpaule
                  schrieb am zuletzt editiert von
                  #8

                  @mickym , Hi ..... auch schlaflos ;) ?
                  Und in welchem Node trage ich die msg.top ein ? Sorry bei dem Node Red bin ich ganz neu, und hab noch keinen so richtigen Plan ! Die einfacheren Dinge wie schalten etc. hatte ich gleich verstanden. Aber hier hab ich gerade einen Knoten im Hirn :) Aber schonmal vielen Dank für die schnelle Antwort zu dieser späten Stunde !

                  Ich probier mich mal durch !

                  mickymM 1 Antwort Letzte Antwort
                  0
                  • S schonpaule

                    @mickym , Hi ..... auch schlaflos ;) ?
                    Und in welchem Node trage ich die msg.top ein ? Sorry bei dem Node Red bin ich ganz neu, und hab noch keinen so richtigen Plan ! Die einfacheren Dinge wie schalten etc. hatte ich gleich verstanden. Aber hier hab ich gerade einen Knoten im Hirn :) Aber schonmal vielen Dank für die schnelle Antwort zu dieser späten Stunde !

                    Ich probier mich mal durch !

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

                    @schonpaule Ja ich bin inzwischen zur Nachteule mutiert.

                    Wenn Dein JSON oder was weiß ich in der msg.payload ist - hängst einfach noch eine Change Node davor in dem msg.top festlegst.

                    e4476603-e41a-4cce-bd08-3396c6a0637e-image.png

                    3ec9f58f-5d01-469f-b646-179c0c77da8d-image.png

                    6128976e-82d3-4725-92eb-6a08bfdf07f9-image.png

                    Und wenn Du das in iobroker out Node jagst - werden diese Datenpunkte angelegt.

                    7b7ffeef-3b26-4803-8b06-98d7c4f6ed90-image.png

                    Die iobroker out Node erstellt die Stuktur sofern Du die Erstellung von Fremdobjekten im Adapter zulässt.

                    Das ist dann das Ergebnis:

                    72c2c5ec-156f-443a-9990-23f38b3ad89c-image.png

                    Das Problem ist nur, dass das Verzeichnis mickym kein Objekt ist, deswegen musst Du das mit dem Javascript noch anlegen.

                    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.

                    S 1 Antwort Letzte Antwort
                    0
                    • mickymM mickym

                      @schonpaule Ja ich bin inzwischen zur Nachteule mutiert.

                      Wenn Dein JSON oder was weiß ich in der msg.payload ist - hängst einfach noch eine Change Node davor in dem msg.top festlegst.

                      e4476603-e41a-4cce-bd08-3396c6a0637e-image.png

                      3ec9f58f-5d01-469f-b646-179c0c77da8d-image.png

                      6128976e-82d3-4725-92eb-6a08bfdf07f9-image.png

                      Und wenn Du das in iobroker out Node jagst - werden diese Datenpunkte angelegt.

                      7b7ffeef-3b26-4803-8b06-98d7c4f6ed90-image.png

                      Die iobroker out Node erstellt die Stuktur sofern Du die Erstellung von Fremdobjekten im Adapter zulässt.

                      Das ist dann das Ergebnis:

                      72c2c5ec-156f-443a-9990-23f38b3ad89c-image.png

                      Das Problem ist nur, dass das Verzeichnis mickym kein Objekt ist, deswegen musst Du das mit dem Javascript noch anlegen.

                      S Offline
                      S Offline
                      schonpaule
                      schrieb am zuletzt editiert von
                      #10

                      @mickym ...... ja mit dem schlafen habe ich es auch nicht mehr so .......

                      Ich probiere es gleich mal, mein Input ist von knx Ultimate die Gruppenadressen, NodeRed legt zwar welche an aber leider nur die reinen Nummern......

                      Danke vielmals das du so Hilfsbereit bist :) !

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • S schonpaule

                        @mickym ...... ja mit dem schlafen habe ich es auch nicht mehr so .......

                        Ich probiere es gleich mal, mein Input ist von knx Ultimate die Gruppenadressen, NodeRed legt zwar welche an aber leider nur die reinen Nummern......

                        Danke vielmals das du so Hilfsbereit bist :) !

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

                        @schonpaule Kein Problem, solange das Gehirn noch funktioniert. ;) - Wie sieht denn Deine Payload aus? Das Skript kann natürlich nicht mehr, als mit was Du es fütterst. Aber vielleicht bekommen wir ja zusammen hin, was Du willst. ;)

                        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.

                        S 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          @schonpaule Kein Problem, solange das Gehirn noch funktioniert. ;) - Wie sieht denn Deine Payload aus? Das Skript kann natürlich nicht mehr, als mit was Du es fütterst. Aber vielleicht bekommen wir ja zusammen hin, was Du willst. ;)

                          S Offline
                          S Offline
                          schonpaule
                          schrieb am zuletzt editiert von
                          #12

                          @mickym , also der Payload sind KNX Gruppenadressen die am Ende nur den Status true oder false beinhalten sollen. Ich will diese dann in VIS weiterverarbeiten und durch das schreiben auf den Bus auch an allen Visualisierungen aktuell halten. Nicht erschrecken das ist ein ziemlich großes Projekt was die Menge der DP´s angeht ;)

                          84047c10-5b06-4d99-a7f7-5466b9a9b9f0-image.png

                          9602b058-2312-4f42-adee-4f937edd8ea2-image.png

                          So sieht es ungefähr optisch aus als Text bekomme ich es gar nicht in einen Text wegen der 100000 Beschränkung :)

                          mickymM 1 Antwort Letzte Antwort
                          0
                          • S schonpaule

                            @mickym , also der Payload sind KNX Gruppenadressen die am Ende nur den Status true oder false beinhalten sollen. Ich will diese dann in VIS weiterverarbeiten und durch das schreiben auf den Bus auch an allen Visualisierungen aktuell halten. Nicht erschrecken das ist ein ziemlich großes Projekt was die Menge der DP´s angeht ;)

                            84047c10-5b06-4d99-a7f7-5466b9a9b9f0-image.png

                            9602b058-2312-4f42-adee-4f937edd8ea2-image.png

                            So sieht es ungefähr optisch aus als Text bekomme ich es gar nicht in einen Text wegen der 100000 Beschränkung :)

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

                            @schonpaule In der Change Node - setzt Du die msg.payload und nicht die msg.top. Und wie gesagt die Change Node hinter die KNX Node bzw. vor die Subflow-Node klemmen und nicht davor.

                            edf70468-c22d-4fae-becb-4dd7c3a2964d-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.

                            1 Antwort Letzte Antwort
                            0
                            • W Offline
                              W Offline
                              Waldmensch
                              schrieb am zuletzt editiert von
                              #14

                              @mickym Ich habe gerade mal Deinen Subflow getestet. Der läuft soweit 1A. Ich schreibe damit das Objekt, was mein PV Speicher liefert. Was seltsam ist, ist, das mein Log mit warnings geflutet wird. Das scheint daran zu liegen, das die Datenpunkte readonly angelegt werden

                              
                              node-red.0
                              2021-11-28 08:41:42.027	warn	Read-only state "0_userdata.0.Solarwatt.SData.ACS.U_L2" has been written without ack-flag with value "225"
                              
                              

                              Man kann das umgehen, indem man in der Ouot-Node unten bei "Readonly" einstellt "Object is writable".

                              iobroker.png

                              mickymM 2 Antworten Letzte Antwort
                              0
                              • W Waldmensch

                                @mickym Ich habe gerade mal Deinen Subflow getestet. Der läuft soweit 1A. Ich schreibe damit das Objekt, was mein PV Speicher liefert. Was seltsam ist, ist, das mein Log mit warnings geflutet wird. Das scheint daran zu liegen, das die Datenpunkte readonly angelegt werden

                                
                                node-red.0
                                2021-11-28 08:41:42.027	warn	Read-only state "0_userdata.0.Solarwatt.SData.ACS.U_L2" has been written without ack-flag with value "225"
                                
                                

                                Man kann das umgehen, indem man in der Ouot-Node unten bei "Readonly" einstellt "Object is writable".

                                iobroker.png

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

                                @waldmensch Ja das war mir bekannt - das sind alles Dinge seit dem admin5 - Du musst auch nachdem der Flow gelaufen ist, einmal das Skript von fastfoot drüber laufen lassen, damit die Objekte angelegt werden.

                                Da das ganze ja in userdata geschrieben wird - kann man man anstelle es auf writeable zu setzen das ACK -Flag setzen, also anstelle von command - ein value setzen. Das sollte ebenfalls gehen:

                                100f74bd-11d3-4a98-ab60-4a8d949e10fb-image.png

                                Es ist generelle so, dass man mit den Einstellungen in der iobroker-out Node - die Prüfung dieser Nodes ausschaltet . Der Subflow hat damit eigentlich gar nichts zu tun, der spaltet die Objekte ja nur in Einzelnachrichten auf und setzt die topics. ;)

                                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
                                • W Waldmensch

                                  @mickym Ich habe gerade mal Deinen Subflow getestet. Der läuft soweit 1A. Ich schreibe damit das Objekt, was mein PV Speicher liefert. Was seltsam ist, ist, das mein Log mit warnings geflutet wird. Das scheint daran zu liegen, das die Datenpunkte readonly angelegt werden

                                  
                                  node-red.0
                                  2021-11-28 08:41:42.027	warn	Read-only state "0_userdata.0.Solarwatt.SData.ACS.U_L2" has been written without ack-flag with value "225"
                                  
                                  

                                  Man kann das umgehen, indem man in der Ouot-Node unten bei "Readonly" einstellt "Object is writable".

                                  iobroker.png

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

                                  @waldmensch Generell muss man seit dem Admin5 - einmal auch immer noch das Skript von @fastfoot drüberlaufen lassen - das automatische Erstellen von Objekten im Admin5 lässt wohl auf sich warten.

                                  Also dieses Skript importieren - und einmal ausführen:

                                  /**
                                  * Zweck:       Korrigiert übergeordnete Ordnerstrukturen eines Datenpunkts
                                  * Datum:      07.08.2021
                                  * Autor:       @fastfoot
                                  */
                                  
                                  //              In den Settings der Javascript-Instanz muss setObject erlaubt sein!!!
                                  
                                  let arr = [],
                                    id = '';
                                  
                                  const ids = $('0_userdata.0.*');
                                  ids.each(idTmp => {
                                    arr=idTmp.split('.');
                                    arr.splice(arr.length-1);
                                    id=arr.join('.');
                                    if(arr[0] === '0_userdata' || arr[0] === 'alias' || arr[0] === 'mqtt' || arr[0] === 'javascript'){
                                        correctObject(id, arr);
                                    }
                                  })
                                  
                                  function correctObject(id,arr){
                                    if(arr.length === 2) return;
                                    if(!existsObject(id)){
                                        let obj = {};
                                        obj = {
                                            type: 'folder',
                                            common:{
                                                name: arr[arr.length - 1]
                                            }
                                        }
                                        extendObject(id, obj, e => {
                                            if (e) log('Fehler beim Schreiben des Objektes: '+ id + ' ' + e);
                                        })
                                    }
                                    arr.splice(arr.length - 1);
                                    id = arr.join('.');
                                    correctObject(id, arr);
                                  }
                                  

                                  Muss man nur einmal machen - wenn die Objekte angelegt sind - kann der Flow ungehindert weiter in die einzelnen Datenpunkte schreiben.

                                  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 mickym

                                    Wichtig:

                                    In der aktuellen NodeRed Version funktioniert alles wieder ohne Fehlermeldungen

                                    ===================================================================

                                    Nachdem hier wohl einige der Meinung sind, dass NodeRed auch noch ioBroker Strukturen von sich aus anlegen können sollte, obwohl es den ioBroker zu dem Zeitpunkt noch gar nicht gab, habe ich mal eine kleinen Subflow erstellt.

                                    Ähnliche Anforderungen wurden ja auch im Blockly oder Javascript Umfeld gestellt. Ich habe das ganze aber nicht lange durchgetestet, sodass ihr bitte diesen Subflow rein mal als Basis nehmen könnt und ggf. noch anpassen müsst.
                                    Inzwischen denke ich, kann man den Subflow bedenklos nutzen, da er bereits mehrfach seit über einem Jahr im Einsatz ist. ;)

                                    Der Objektbaum wird aus einem JSON-String oder einem JS Objekt gebildet. Es kann als topic für den Objektbaum ein Name in der Eigenschaft msg.top mit gegeben werden, dann wird dieser Datenpunkt als Wurzel unter 0_userdata.0.top mit dem im Objekt oder JSON-String zugehörigen Objekten angelegt oder er wird direkt in der Subflow Node unter top definiert. Wenn man nichts eingibt, dann werden alle Datenpunkte unter 0_userdata.0.objRoot angelegt:
                                    1b645fde-f1e8-4d68-8c3b-49b516ccd4ad-image.png

                                    Das Keep-Topic kann man dann auf true setzen, wenn man ganze Bäume also mit Wildcards über mqtt- einliest:
                                    Siehe dieses Posting anhand eines Zigbee2mqtt baums: https://forum.iobroker.net/post/820702
                                    ef66f891-ee41-4534-9910-4377629fd11c-image.png

                                    Voraussetzung hierfür ist natürlich, dass man Node-Red die Erlaubnis erteilt selbstständig Objekte anlegen zu dürfen.

                                    In der Adapterkonfiguration des Node-Red Adapters also die Option:
                                    a3d0a5c9-2fdc-424e-b410-fc30dae075b8-image.png

                                    aktivieren.

                                    Hier der Import:

                                    Hier den Subflow zum Importieren:

                                    [
                                        {
                                            "id": "6e802f1553b18149",
                                            "type": "subflow",
                                            "name": "JSON or Obj to IOBroker",
                                            "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the `top` property of the subflow-node is used. \n\nIn the properties of the subflow node a new property `keepTopic` has been added. Default is _false_ to keep the current behaviour. If set to _true_ then the originial topic will be placed between the `top` property of the subflow node and the property of the analyzed JSON object.\n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n**Update 13.09.2022:**\nSpaces in topics of objects are no longer replaced with underscores in objects. No differences between all data types.\n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der `top`-Wert der Subflow-Node verwendet.\n\nIn den Eigenschaften der Subflow-Node wurde ein neuer Parameter `keepTopic` hinzugefügt. Standardwert ist _false_, um das bisherige Verhalten beizubehalten. Setzt man die Eigenschaft auf _true_, dann wird das originale Topic zwischen der `top` Eigenschaft der Subflow-Node und Eigenschaft des analysierten JSON Objektes eingefügt.\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. \n\n**Update 13.09.2022:**\nLeerzeichen werden in Topics von Objekten nicht mehr durch Unterstriche ersetzt. Es gibt keine Unterschiede mehr zwischen den Datentypen.",
                                            "category": "",
                                            "in": [
                                                {
                                                    "x": 60,
                                                    "y": 160,
                                                    "wires": [
                                                        {
                                                            "id": "554b8c663bcb46c2"
                                                        }
                                                    ]
                                                }
                                            ],
                                            "out": [
                                                {
                                                    "x": 2620,
                                                    "y": 280,
                                                    "wires": [
                                                        {
                                                            "id": "0962842ebd23e0d7",
                                                            "port": 0
                                                        }
                                                    ]
                                                }
                                            ],
                                            "env": [
                                                {
                                                    "name": "top",
                                                    "type": "str",
                                                    "value": "objRoot"
                                                },
                                                {
                                                    "name": "keepTopic",
                                                    "type": "bool",
                                                    "value": "false"
                                                }
                                            ],
                                            "meta": {},
                                            "color": "#E2D96E",
                                            "icon": "node-red/batch.svg"
                                        },
                                        {
                                            "id": "3e11e8338f694832",
                                            "type": "split",
                                            "z": "6e802f1553b18149",
                                            "name": "split object",
                                            "splt": "\\n",
                                            "spltType": "str",
                                            "arraySplt": 1,
                                            "arraySpltType": "len",
                                            "stream": false,
                                            "addname": "key",
                                            "x": 1370,
                                            "y": 160,
                                            "wires": [
                                                [
                                                    "0562a4249c8b856b"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "0562a4249c8b856b",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "add key to topic",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "stateName",
                                                    "pt": "msg",
                                                    "to": "key",
                                                    "tot": "msg"
                                                },
                                                {
                                                    "t": "change",
                                                    "p": "key",
                                                    "pt": "msg",
                                                    "from": ".",
                                                    "fromt": "str",
                                                    "to": "_",
                                                    "tot": "str"
                                                },
                                                {
                                                    "t": "set",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "to": "topic  & '.' & key",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 1560,
                                            "y": 160,
                                            "wires": [
                                                [
                                                    "ddc90985bef0fafa"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "ddc90985bef0fafa",
                                            "type": "switch",
                                            "z": "6e802f1553b18149",
                                            "name": "is type?",
                                            "property": "payload",
                                            "propertyType": "msg",
                                            "rules": [
                                                {
                                                    "t": "istype",
                                                    "v": "array",
                                                    "vt": "array"
                                                },
                                                {
                                                    "t": "istype",
                                                    "v": "object",
                                                    "vt": "object"
                                                },
                                                {
                                                    "t": "else"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 3,
                                            "x": 1740,
                                            "y": 160,
                                            "wires": [
                                                [
                                                    "bfce19b206660fbe"
                                                ],
                                                [
                                                    "3e11e8338f694832"
                                                ],
                                                [
                                                    "1a8c03d866b85b12"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "bfce19b206660fbe",
                                            "type": "split",
                                            "z": "6e802f1553b18149",
                                            "name": "split array",
                                            "splt": "\\n",
                                            "spltType": "str",
                                            "arraySplt": 1,
                                            "arraySpltType": "len",
                                            "stream": false,
                                            "addname": "",
                                            "x": 780,
                                            "y": 280,
                                            "wires": [
                                                [
                                                    "e89927810c6d75ec"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "e89927810c6d75ec",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "add index to topic",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "to": "topic  & '.' & parts.index",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 970,
                                            "y": 280,
                                            "wires": [
                                                [
                                                    "a4d1a5d04564dc77"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "f5d52c6a57d08904",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "finalize msg.topic",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "top",
                                                    "pt": "msg",
                                                    "to": "'0_userdata.0.' & top",
                                                    "tot": "jsonata"
                                                },
                                                {
                                                    "t": "set",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "to": "top & '.' & topic",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 2170,
                                            "y": 240,
                                            "wires": [
                                                [
                                                    "0962842ebd23e0d7"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "1a8c03d866b85b12",
                                            "type": "switch",
                                            "z": "6e802f1553b18149",
                                            "name": "is msg.top != null",
                                            "property": "top",
                                            "propertyType": "msg",
                                            "rules": [
                                                {
                                                    "t": "nnull"
                                                },
                                                {
                                                    "t": "null"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 2,
                                            "x": 1950,
                                            "y": 280,
                                            "wires": [
                                                [
                                                    "f5d52c6a57d08904"
                                                ],
                                                [
                                                    "74c895ce724750de"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "e023fe88445ce43e",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "",
                                            "rules": [
                                                {
                                                    "t": "delete",
                                                    "p": "topic",
                                                    "pt": "msg"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 350,
                                            "y": 200,
                                            "wires": [
                                                [
                                                    "3649300b4c233b10"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "3649300b4c233b10",
                                            "type": "switch",
                                            "z": "6e802f1553b18149",
                                            "name": "is type?",
                                            "property": "payload",
                                            "propertyType": "msg",
                                            "rules": [
                                                {
                                                    "t": "istype",
                                                    "v": "json",
                                                    "vt": "json"
                                                },
                                                {
                                                    "t": "istype",
                                                    "v": "array",
                                                    "vt": "array"
                                                },
                                                {
                                                    "t": "istype",
                                                    "v": "object",
                                                    "vt": "object"
                                                },
                                                {
                                                    "t": "else"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 4,
                                            "x": 600,
                                            "y": 160,
                                            "wires": [
                                                [
                                                    "fc7913a8524badb7"
                                                ],
                                                [
                                                    "bfce19b206660fbe"
                                                ],
                                                [
                                                    "3e11e8338f694832"
                                                ],
                                                [
                                                    "9ac3cc3681e8b6c6"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "1b8480cd2df7ba3f",
                                            "type": "comment",
                                            "z": "6e802f1553b18149",
                                            "name": "Array",
                                            "info": "",
                                            "x": 600,
                                            "y": 280,
                                            "wires": []
                                        },
                                        {
                                            "id": "b3541807672be040",
                                            "type": "comment",
                                            "z": "6e802f1553b18149",
                                            "name": "object",
                                            "info": "",
                                            "x": 1340,
                                            "y": 100,
                                            "wires": []
                                        },
                                        {
                                            "id": "a4d1a5d04564dc77",
                                            "type": "switch",
                                            "z": "6e802f1553b18149",
                                            "name": "is type?",
                                            "property": "payload",
                                            "propertyType": "msg",
                                            "rules": [
                                                {
                                                    "t": "istype",
                                                    "v": "object",
                                                    "vt": "object"
                                                },
                                                {
                                                    "t": "istype",
                                                    "v": "array",
                                                    "vt": "array"
                                                },
                                                {
                                                    "t": "else"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 3,
                                            "x": 1160,
                                            "y": 280,
                                            "wires": [
                                                [
                                                    "3e11e8338f694832"
                                                ],
                                                [
                                                    "bfce19b206660fbe"
                                                ],
                                                [
                                                    "a096a93bb82b7a93"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "74c895ce724750de",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "finalize msg.topic",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "top",
                                                    "pt": "msg",
                                                    "to": "top",
                                                    "tot": "env"
                                                },
                                                {
                                                    "t": "set",
                                                    "p": "top",
                                                    "pt": "msg",
                                                    "to": "'0_userdata.0.' & top",
                                                    "tot": "jsonata"
                                                },
                                                {
                                                    "t": "set",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "to": "top & '.' & topic",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 2170,
                                            "y": 320,
                                            "wires": [
                                                [
                                                    "0962842ebd23e0d7"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "554b8c663bcb46c2",
                                            "type": "switch",
                                            "z": "6e802f1553b18149",
                                            "name": "",
                                            "property": "keepTopic",
                                            "propertyType": "env",
                                            "rules": [
                                                {
                                                    "t": "true"
                                                },
                                                {
                                                    "t": "false"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 2,
                                            "x": 170,
                                            "y": 160,
                                            "wires": [
                                                [
                                                    "e30ba9f0483285e4"
                                                ],
                                                [
                                                    "e023fe88445ce43e"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "e30ba9f0483285e4",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "",
                                            "rules": [
                                                {
                                                    "t": "change",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "from": "/",
                                                    "fromt": "str",
                                                    "to": ".",
                                                    "tot": "str"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 350,
                                            "y": 120,
                                            "wires": [
                                                [
                                                    "3649300b4c233b10"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "0962842ebd23e0d7",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "translate invalid chars in topic",
                                            "rules": [
                                                {
                                                    "t": "change",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "from": "..",
                                                    "fromt": "str",
                                                    "to": ".",
                                                    "tot": "str"
                                                },
                                                {
                                                    "t": "change",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "from": "€",
                                                    "fromt": "str",
                                                    "to": "EUR",
                                                    "tot": "str"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 2430,
                                            "y": 280,
                                            "wires": [
                                                []
                                            ]
                                        },
                                        {
                                            "id": "9ac3cc3681e8b6c6",
                                            "type": "change",
                                            "z": "6e802f1553b18149",
                                            "name": "set topic, if empty",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "topic",
                                                    "pt": "msg",
                                                    "to": "topic ? topic : $type(payload)\t",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 950,
                                            "y": 200,
                                            "wires": [
                                                [
                                                    "a096a93bb82b7a93"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "fc7913a8524badb7",
                                            "type": "json",
                                            "z": "6e802f1553b18149",
                                            "name": "",
                                            "property": "payload",
                                            "action": "obj",
                                            "pretty": false,
                                            "x": 750,
                                            "y": 100,
                                            "wires": [
                                                [
                                                    "d9e7bdd4c48a8aa1"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "d9e7bdd4c48a8aa1",
                                            "type": "switch",
                                            "z": "6e802f1553b18149",
                                            "name": "is type?",
                                            "property": "payload",
                                            "propertyType": "msg",
                                            "rules": [
                                                {
                                                    "t": "istype",
                                                    "v": "array",
                                                    "vt": "array"
                                                },
                                                {
                                                    "t": "istype",
                                                    "v": "object",
                                                    "vt": "object"
                                                },
                                                {
                                                    "t": "else"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 3,
                                            "x": 900,
                                            "y": 100,
                                            "wires": [
                                                [
                                                    "1520be42bcc2145e"
                                                ],
                                                [
                                                    "1520be42bcc2145e"
                                                ],
                                                [
                                                    "9ac3cc3681e8b6c6"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "a096a93bb82b7a93",
                                            "type": "junction",
                                            "z": "6e802f1553b18149",
                                            "x": 1380,
                                            "y": 280,
                                            "wires": [
                                                [
                                                    "1a8c03d866b85b12"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "1520be42bcc2145e",
                                            "type": "junction",
                                            "z": "6e802f1553b18149",
                                            "x": 480,
                                            "y": 20,
                                            "wires": [
                                                [
                                                    "3649300b4c233b10"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "8d36fab85a67b5f5",
                                            "type": "subflow:6e802f1553b18149",
                                            "z": "7e6af0015415146d",
                                            "name": "",
                                            "x": 550,
                                            "y": 3860,
                                            "wires": [
                                                []
                                            ]
                                        }
                                    ]
                                    

                                    Hier wieder der Hilfetext zur Node:

                                    cb9a4eb3-185e-49fd-87d0-adf31fb8f291-image.png

                                    EDIT: Den Testflow habe ich rausgenommen, da er die alte Node enthielt. Kann man aber auch anhand des Screenshots erkennen.

                                    EDIT 7.4.2021: So hab den Subflow nochmal geändert, da bei Übergabe eines reinen Arrays - der Flow nicht richtig funktioniert hat. Ausserdem habe ich mal den Subflow durch Beschreibung der Nodes besser dokumentiert.

                                    EDIT 8.4.2021: Für einfache Arrays (die keine Objekte enthielten), hat der Flow noch nicht funktioniert. Nun wurde dies behoben und auch skalare - also auch Input, der kein Objekt enthält wird auf 0_userdata.0.{{msg.top}} durchgereicht. Die Beispiele werden in einem eigenen Post dargestellt.

                                    EDIT 7.12.2021: Anstelle von msg.top kann man den Startpunkt für den Objektbaum nun auch direkt in der Node angeben:
                                    b0ca565a-7cc3-43d1-a87e-21c4198d5f8d-image.png

                                    Ist msg.top leer werden alle states direkt unter 0_userdata.0 angelegt.

                                    EDIT 14.6.2022: Ein neue Eigenschaft wurde der Subflow-Node hinzugefügt: keepTopic

                                    Damit kann man die bisherigen Topic behalten und mit Wildcards arbeiten und somit ganze Objektbäume im iobroker erstellen:

                                    e3c0bf54-096e-4d01-a4f1-5c366352bc50-image.png

                                    Ein Beispiel gibts im Posting vom heutigen Datum also dem 14.6.2022.

                                    EDIT 13.9.2022:

                                    Leerzeichen in den topics werden nicht mehr bei Objekten ersetzt und somit erfolgt keine Ungleichbehandlung zwischen Objekten und anderen Datentypen. Das hat ansonsten zur Mehrfachanlage der Topics geführt.

                                    EDIT 01.11.2022:
                                    Weitere Fehlerbehebungen. Wenn skalare Objekte zu Beginn gesendet wurden und das Topic nicht übernommen werden sollte, oder gar nicht vorhanden war, dann entstanden topics mit einem Punkt am Ende. Das wurde nun behoben. Das bedeutet jedoch andererseits, dass skalare Werte nicht mehr direkt in den top Datenpunkt geschrieben werden, sondern als Wert mit der Bezeichnung ihres Datentyps. "Hello World" als String, wird deshalb als Wert mit Namen "string" ausgegeben - Ausnahme ist, natürlich wenn die topics erhalten bleiben (keepTopic = true)

                                    EDIT 22.05.2023:
                                    Objekteigenschaften mit Punkten können im iobroker nicht als topic bzw. state erstellt werden. Deshalb werden alle Punkte in Objekteigenschaften durch Unterstriche ersetzt. Also "Wohnzi." wird zu "Wohnzi_".

                                    =============================================================================================================================

                                    Für alle die, die Node bereits benutzen - wie folgt vorgehen.

                                    1. Den Code normal in die Zwischenablage kopieren und dann importieren.
                                    2. Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.

                                    07910a9e-986e-4d20-aa8a-694cf1a0a62e-image.png

                                    1. Anschließend braucht man nur den Subflow ersetzen.

                                    0861d7e5-b997-4960-b83c-309033d5015b-image.png

                                    1. Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.

                                    =============================================================================================================================

                                    Anwendungsbeispiele und Flows:

                                    befc4a14-483d-43fc-b4a5-23fefaf0fa09-image.png

                                    Nun zu den einzelnen Inputs in den Inject-Nodes:

                                    1. Example.SimpleArray

                                    [1,5,6.2,2,3]
                                    

                                    fd24d6d6-0979-4160-a519-8e1c973cf897-image.png
                                    Ergebnis

                                    309b4092-119c-4d58-b807-f868f9c7b637-image.png

                                    2. Example.ComplexArray

                                    [1,2,[3,4,5],{"Leaving":"288.700000","Returning":"24.900000"}]
                                    

                                    020f93df-4c30-4fab-8596-380ca60051cd-image.png
                                    Ergebnis

                                    1d21885e-c2e4-4d5c-a56c-1054d97cfad1-image.png

                                    3. Skalar (Input ist kein Objekt)

                                    d0f5c66f-ff51-4931-b5d2-2cf6f2b713a0-image.png

                                    Ergebnis

                                    cad2b586-de06-4303-a705-6a79709f779d-image.png

                                    4. Objekt:

                                    {"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Präsenz Schlafzimmer":true,"Thermometer Bad":true,"Präsenz Flur":true,"Würfel Wohnzimmer":{"1":"TV"},"Präsenz Küche":true,"Würfel Schlafzimmer":true,"Thermometer Küche":true,"Präsenz Diele":true,"Präsenz Wohnzimmer":true,"Präsenz Büro":true}
                                    

                                    89c6e1d7-b5f0-4dab-b137-b5775b4781ec-image.png
                                    Ergebnis:

                                    704546f2-3b16-4b2d-94d4-e4836c03550c-image.png

                                    5. ObjectArray:

                                    [
                                        {
                                            "start": 45,
                                            "end": 100,
                                            "date": "24.3.2021 18:44",
                                            "diff": 1,
                                            "quantity": 0,
                                            "price": "0.00",
                                            "basicPrice": 0,
                                            "startDate": "24.3.2021 18:44",
                                            "duration": 1,
                                            "perHour": 0
                                        },
                                        {
                                            "start": 51,
                                            "end": 52,
                                            "date": "24.3.2021 15:59",
                                            "diff": 3,
                                            "quantity": 0,
                                            "price": "0.00",
                                            "basicPrice": 0,
                                            "startDate": "24.3.2021 15:57",
                                            "duration": 3,
                                            "perHour": 0
                                        },
                                        {
                                            "start": 59,
                                            "end": 100,
                                            "date": "24.2.2021 14:27",
                                            "diff": 29,
                                            "quantity": 0,
                                            "price": "0.00",
                                            "basicPrice": 0,
                                            "startDate": "24.2.2021 13:59",
                                            "duration": 29,
                                            "perHour": 0
                                        }
                                    ]
                                    

                                    d2fe3518-677f-4ed1-864d-674c7806a35b-image.png

                                    Ergebnis:

                                    586d1ec2-d51c-4b58-97ba-8aa0c2bc370b-image.png

                                    6. JSON-String

                                    {"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"],"dressed":{"head":"Kopfbedeckung"}},{"name":"Madame Uppercut","age":69,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}
                                    

                                    4ae85b8b-85bf-4513-b701-6bdf1147808e-image.png
                                    Ergebnis:

                                    6e21154f-c8ce-4477-9633-926d2af2ebf1-image.png

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

                                    @mickym So ich habe die Node nochmals leicht überarbeitet. Die Bedeutung ist leider mit dem Admin 5 etwas verloren gegangen und man hat auch in den letzten 4 Monaten anscheinend immer noch keine Zeit gehabt den Admin oder NodeRed so anzupassen, dass ggf. Objekte selbst erstellt werden. Dennoch ist der Flow vielleicht noch hilfreich.

                                    Die Node setzt nun nicht mehr zwingend das Füttern der Node mit msg.top voraus, um den Ausgangsdatenpunkt (objRoot) für den zu erstellenden Objektbaum festzulegen, sondern die Node kann nun auch mit Umgebungsvaribalen arbeiten. Endlich mal ein sinnvoller Einsatz für Umgebungsvariablen in Subflows. ;)

                                    43d96699-8c8e-4c99-a76e-c7131fd930a4-image.png

                                    Das heißt man kann nun direkt in der Node den Startpunkt eingeben. msg.top funktioniert aber weiterhin.

                                    [
                                       {
                                           "id": "c3403a60.92fbb8",
                                           "type": "subflow",
                                           "name": "JSON or Obj to IOBroker",
                                           "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the top-value of the node (environment variable top) is used. \n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der top-Wert (Umgebungsvariable top) der Node verwendet. <br>\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. ",
                                           "category": "parser",
                                           "in": [
                                               {
                                                   "x": 60,
                                                   "y": 160,
                                                   "wires": [
                                                       {
                                                           "id": "94876630.f71748"
                                                       }
                                                   ]
                                               }
                                           ],
                                           "out": [
                                               {
                                                   "x": 2120,
                                                   "y": 280,
                                                   "wires": [
                                                       {
                                                           "id": "74b0b536.02371c",
                                                           "port": 0
                                                       },
                                                       {
                                                           "id": "ad539a91.237888",
                                                           "port": 0
                                                       }
                                                   ]
                                               }
                                           ],
                                           "env": [
                                               {
                                                   "name": "top",
                                                   "type": "str",
                                                   "value": "objRoot"
                                               }
                                           ],
                                           "meta": {},
                                           "color": "#E2D96E",
                                           "icon": "node-red/batch.svg"
                                       },
                                       {
                                           "id": "eea737e7.7e8fb8",
                                           "type": "split",
                                           "z": "c3403a60.92fbb8",
                                           "name": "split object",
                                           "splt": "\\n",
                                           "spltType": "str",
                                           "arraySplt": 1,
                                           "arraySpltType": "len",
                                           "stream": false,
                                           "addname": "key",
                                           "x": 1170,
                                           "y": 160,
                                           "wires": [
                                               [
                                                   "dc473616.c2b508"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "dc473616.c2b508",
                                           "type": "change",
                                           "z": "c3403a60.92fbb8",
                                           "name": "add key to topic",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "stateName",
                                                   "pt": "msg",
                                                   "to": "key",
                                                   "tot": "msg"
                                               },
                                               {
                                                   "t": "set",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "to": "topic  & '.' & key",
                                                   "tot": "jsonata"
                                               },
                                               {
                                                   "t": "change",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "from": " ",
                                                   "fromt": "str",
                                                   "to": "_",
                                                   "tot": "str"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 1360,
                                           "y": 160,
                                           "wires": [
                                               [
                                                   "78697695.9a72c8"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "78697695.9a72c8",
                                           "type": "switch",
                                           "z": "c3403a60.92fbb8",
                                           "name": "is type?",
                                           "property": "payload",
                                           "propertyType": "msg",
                                           "rules": [
                                               {
                                                   "t": "istype",
                                                   "v": "array",
                                                   "vt": "array"
                                               },
                                               {
                                                   "t": "istype",
                                                   "v": "object",
                                                   "vt": "object"
                                               },
                                               {
                                                   "t": "else"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 3,
                                           "x": 1540,
                                           "y": 160,
                                           "wires": [
                                               [
                                                   "d839cef8.577f1"
                                               ],
                                               [
                                                   "eea737e7.7e8fb8"
                                               ],
                                               [
                                                   "bdfdae99.f4d9d"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "d839cef8.577f1",
                                           "type": "split",
                                           "z": "c3403a60.92fbb8",
                                           "name": "split array",
                                           "splt": "\\n",
                                           "spltType": "str",
                                           "arraySplt": 1,
                                           "arraySpltType": "len",
                                           "stream": false,
                                           "addname": "",
                                           "x": 580,
                                           "y": 280,
                                           "wires": [
                                               [
                                                   "36327f2d.8efc3"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "36327f2d.8efc3",
                                           "type": "change",
                                           "z": "c3403a60.92fbb8",
                                           "name": "add index to topic",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "to": "topic  & '.' & parts.index",
                                                   "tot": "jsonata"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 770,
                                           "y": 280,
                                           "wires": [
                                               [
                                                   "d8f58d9b.b6a1"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "74b0b536.02371c",
                                           "type": "change",
                                           "z": "c3403a60.92fbb8",
                                           "name": "finalize msg.topic",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "top",
                                                   "pt": "msg",
                                                   "to": "'0_userdata.0.' & top",
                                                   "tot": "jsonata"
                                               },
                                               {
                                                   "t": "set",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "to": "top & topic",
                                                   "tot": "jsonata"
                                               },
                                               {
                                                   "t": "change",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "from": "..",
                                                   "fromt": "str",
                                                   "to": ".",
                                                   "tot": "str"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 1970,
                                           "y": 240,
                                           "wires": [
                                               []
                                           ]
                                       },
                                       {
                                           "id": "4cdee7cb.910c38",
                                           "type": "switch",
                                           "z": "c3403a60.92fbb8",
                                           "name": "is type?",
                                           "property": "payload",
                                           "propertyType": "msg",
                                           "rules": [
                                               {
                                                   "t": "istype",
                                                   "v": "json",
                                                   "vt": "json"
                                               },
                                               {
                                                   "t": "istype",
                                                   "v": "object",
                                                   "vt": "object"
                                               },
                                               {
                                                   "t": "istype",
                                                   "v": "array",
                                                   "vt": "array"
                                               },
                                               {
                                                   "t": "else"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 4,
                                           "x": 400,
                                           "y": 160,
                                           "wires": [
                                               [
                                                   "c1c41535.17d3b8"
                                               ],
                                               [
                                                   "eea737e7.7e8fb8"
                                               ],
                                               [
                                                   "d839cef8.577f1"
                                               ],
                                               [
                                                   "d8f58d9b.b6a1"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "c1c41535.17d3b8",
                                           "type": "json",
                                           "z": "c3403a60.92fbb8",
                                           "name": "",
                                           "property": "payload",
                                           "action": "",
                                           "pretty": false,
                                           "x": 570,
                                           "y": 120,
                                           "wires": [
                                               [
                                                   "3ccd67db.375058"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "bdfdae99.f4d9d",
                                           "type": "switch",
                                           "z": "c3403a60.92fbb8",
                                           "name": "is msg.top != null",
                                           "property": "top",
                                           "propertyType": "msg",
                                           "rules": [
                                               {
                                                   "t": "nnull"
                                               },
                                               {
                                                   "t": "null"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 2,
                                           "x": 1750,
                                           "y": 280,
                                           "wires": [
                                               [
                                                   "74b0b536.02371c"
                                               ],
                                               [
                                                   "ad539a91.237888"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "94876630.f71748",
                                           "type": "change",
                                           "z": "c3403a60.92fbb8",
                                           "name": "",
                                           "rules": [
                                               {
                                                   "t": "delete",
                                                   "p": "topic",
                                                   "pt": "msg"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 210,
                                           "y": 160,
                                           "wires": [
                                               [
                                                   "4cdee7cb.910c38"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "3ccd67db.375058",
                                           "type": "switch",
                                           "z": "c3403a60.92fbb8",
                                           "name": "is array?",
                                           "property": "payload",
                                           "propertyType": "msg",
                                           "rules": [
                                               {
                                                   "t": "istype",
                                                   "v": "array",
                                                   "vt": "array"
                                               },
                                               {
                                                   "t": "else"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 2,
                                           "x": 700,
                                           "y": 120,
                                           "wires": [
                                               [
                                                   "d839cef8.577f1"
                                               ],
                                               [
                                                   "eea737e7.7e8fb8"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "80dde279.c28ec",
                                           "type": "comment",
                                           "z": "c3403a60.92fbb8",
                                           "name": "Array",
                                           "info": "",
                                           "x": 400,
                                           "y": 280,
                                           "wires": []
                                       },
                                       {
                                           "id": "95ee816e.68a16",
                                           "type": "comment",
                                           "z": "c3403a60.92fbb8",
                                           "name": "object",
                                           "info": "",
                                           "x": 1140,
                                           "y": 100,
                                           "wires": []
                                       },
                                       {
                                           "id": "d8f58d9b.b6a1",
                                           "type": "switch",
                                           "z": "c3403a60.92fbb8",
                                           "name": "is type?",
                                           "property": "payload",
                                           "propertyType": "msg",
                                           "rules": [
                                               {
                                                   "t": "istype",
                                                   "v": "object",
                                                   "vt": "object"
                                               },
                                               {
                                                   "t": "istype",
                                                   "v": "array",
                                                   "vt": "array"
                                               },
                                               {
                                                   "t": "else"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 3,
                                           "x": 960,
                                           "y": 280,
                                           "wires": [
                                               [
                                                   "eea737e7.7e8fb8"
                                               ],
                                               [
                                                   "d839cef8.577f1"
                                               ],
                                               [
                                                   "bdfdae99.f4d9d"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "ad539a91.237888",
                                           "type": "change",
                                           "z": "c3403a60.92fbb8",
                                           "name": "finalize msg.topic",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "top",
                                                   "pt": "msg",
                                                   "to": "top",
                                                   "tot": "env"
                                               },
                                               {
                                                   "t": "set",
                                                   "p": "top",
                                                   "pt": "msg",
                                                   "to": "'0_userdata.0.' & top",
                                                   "tot": "jsonata"
                                               },
                                               {
                                                   "t": "set",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "to": "top & topic",
                                                   "tot": "jsonata"
                                               },
                                               {
                                                   "t": "change",
                                                   "p": "topic",
                                                   "pt": "msg",
                                                   "from": "..",
                                                   "fromt": "str",
                                                   "to": ".",
                                                   "tot": "str"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 1970,
                                           "y": 320,
                                           "wires": [
                                               []
                                           ]
                                       },
                                       {
                                           "id": "eaa55be.3b517a8",
                                           "type": "subflow:c3403a60.92fbb8",
                                           "z": "73f6b143.7ca56",
                                           "name": "",
                                           "env": [],
                                           "x": 270,
                                           "y": 520,
                                           "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.

                                    WalW 1 Antwort Letzte Antwort
                                    0
                                    • mickymM mickym

                                      @mickym So ich habe die Node nochmals leicht überarbeitet. Die Bedeutung ist leider mit dem Admin 5 etwas verloren gegangen und man hat auch in den letzten 4 Monaten anscheinend immer noch keine Zeit gehabt den Admin oder NodeRed so anzupassen, dass ggf. Objekte selbst erstellt werden. Dennoch ist der Flow vielleicht noch hilfreich.

                                      Die Node setzt nun nicht mehr zwingend das Füttern der Node mit msg.top voraus, um den Ausgangsdatenpunkt (objRoot) für den zu erstellenden Objektbaum festzulegen, sondern die Node kann nun auch mit Umgebungsvaribalen arbeiten. Endlich mal ein sinnvoller Einsatz für Umgebungsvariablen in Subflows. ;)

                                      43d96699-8c8e-4c99-a76e-c7131fd930a4-image.png

                                      Das heißt man kann nun direkt in der Node den Startpunkt eingeben. msg.top funktioniert aber weiterhin.

                                      [
                                         {
                                             "id": "c3403a60.92fbb8",
                                             "type": "subflow",
                                             "name": "JSON or Obj to IOBroker",
                                             "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the top-value of the node (environment variable top) is used. \n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der top-Wert (Umgebungsvariable top) der Node verwendet. <br>\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. ",
                                             "category": "parser",
                                             "in": [
                                                 {
                                                     "x": 60,
                                                     "y": 160,
                                                     "wires": [
                                                         {
                                                             "id": "94876630.f71748"
                                                         }
                                                     ]
                                                 }
                                             ],
                                             "out": [
                                                 {
                                                     "x": 2120,
                                                     "y": 280,
                                                     "wires": [
                                                         {
                                                             "id": "74b0b536.02371c",
                                                             "port": 0
                                                         },
                                                         {
                                                             "id": "ad539a91.237888",
                                                             "port": 0
                                                         }
                                                     ]
                                                 }
                                             ],
                                             "env": [
                                                 {
                                                     "name": "top",
                                                     "type": "str",
                                                     "value": "objRoot"
                                                 }
                                             ],
                                             "meta": {},
                                             "color": "#E2D96E",
                                             "icon": "node-red/batch.svg"
                                         },
                                         {
                                             "id": "eea737e7.7e8fb8",
                                             "type": "split",
                                             "z": "c3403a60.92fbb8",
                                             "name": "split object",
                                             "splt": "\\n",
                                             "spltType": "str",
                                             "arraySplt": 1,
                                             "arraySpltType": "len",
                                             "stream": false,
                                             "addname": "key",
                                             "x": 1170,
                                             "y": 160,
                                             "wires": [
                                                 [
                                                     "dc473616.c2b508"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "dc473616.c2b508",
                                             "type": "change",
                                             "z": "c3403a60.92fbb8",
                                             "name": "add key to topic",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "stateName",
                                                     "pt": "msg",
                                                     "to": "key",
                                                     "tot": "msg"
                                                 },
                                                 {
                                                     "t": "set",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "to": "topic  & '.' & key",
                                                     "tot": "jsonata"
                                                 },
                                                 {
                                                     "t": "change",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "from": " ",
                                                     "fromt": "str",
                                                     "to": "_",
                                                     "tot": "str"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 1360,
                                             "y": 160,
                                             "wires": [
                                                 [
                                                     "78697695.9a72c8"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "78697695.9a72c8",
                                             "type": "switch",
                                             "z": "c3403a60.92fbb8",
                                             "name": "is type?",
                                             "property": "payload",
                                             "propertyType": "msg",
                                             "rules": [
                                                 {
                                                     "t": "istype",
                                                     "v": "array",
                                                     "vt": "array"
                                                 },
                                                 {
                                                     "t": "istype",
                                                     "v": "object",
                                                     "vt": "object"
                                                 },
                                                 {
                                                     "t": "else"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 3,
                                             "x": 1540,
                                             "y": 160,
                                             "wires": [
                                                 [
                                                     "d839cef8.577f1"
                                                 ],
                                                 [
                                                     "eea737e7.7e8fb8"
                                                 ],
                                                 [
                                                     "bdfdae99.f4d9d"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "d839cef8.577f1",
                                             "type": "split",
                                             "z": "c3403a60.92fbb8",
                                             "name": "split array",
                                             "splt": "\\n",
                                             "spltType": "str",
                                             "arraySplt": 1,
                                             "arraySpltType": "len",
                                             "stream": false,
                                             "addname": "",
                                             "x": 580,
                                             "y": 280,
                                             "wires": [
                                                 [
                                                     "36327f2d.8efc3"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "36327f2d.8efc3",
                                             "type": "change",
                                             "z": "c3403a60.92fbb8",
                                             "name": "add index to topic",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "to": "topic  & '.' & parts.index",
                                                     "tot": "jsonata"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 770,
                                             "y": 280,
                                             "wires": [
                                                 [
                                                     "d8f58d9b.b6a1"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "74b0b536.02371c",
                                             "type": "change",
                                             "z": "c3403a60.92fbb8",
                                             "name": "finalize msg.topic",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "top",
                                                     "pt": "msg",
                                                     "to": "'0_userdata.0.' & top",
                                                     "tot": "jsonata"
                                                 },
                                                 {
                                                     "t": "set",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "to": "top & topic",
                                                     "tot": "jsonata"
                                                 },
                                                 {
                                                     "t": "change",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "from": "..",
                                                     "fromt": "str",
                                                     "to": ".",
                                                     "tot": "str"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 1970,
                                             "y": 240,
                                             "wires": [
                                                 []
                                             ]
                                         },
                                         {
                                             "id": "4cdee7cb.910c38",
                                             "type": "switch",
                                             "z": "c3403a60.92fbb8",
                                             "name": "is type?",
                                             "property": "payload",
                                             "propertyType": "msg",
                                             "rules": [
                                                 {
                                                     "t": "istype",
                                                     "v": "json",
                                                     "vt": "json"
                                                 },
                                                 {
                                                     "t": "istype",
                                                     "v": "object",
                                                     "vt": "object"
                                                 },
                                                 {
                                                     "t": "istype",
                                                     "v": "array",
                                                     "vt": "array"
                                                 },
                                                 {
                                                     "t": "else"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 4,
                                             "x": 400,
                                             "y": 160,
                                             "wires": [
                                                 [
                                                     "c1c41535.17d3b8"
                                                 ],
                                                 [
                                                     "eea737e7.7e8fb8"
                                                 ],
                                                 [
                                                     "d839cef8.577f1"
                                                 ],
                                                 [
                                                     "d8f58d9b.b6a1"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "c1c41535.17d3b8",
                                             "type": "json",
                                             "z": "c3403a60.92fbb8",
                                             "name": "",
                                             "property": "payload",
                                             "action": "",
                                             "pretty": false,
                                             "x": 570,
                                             "y": 120,
                                             "wires": [
                                                 [
                                                     "3ccd67db.375058"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "bdfdae99.f4d9d",
                                             "type": "switch",
                                             "z": "c3403a60.92fbb8",
                                             "name": "is msg.top != null",
                                             "property": "top",
                                             "propertyType": "msg",
                                             "rules": [
                                                 {
                                                     "t": "nnull"
                                                 },
                                                 {
                                                     "t": "null"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 2,
                                             "x": 1750,
                                             "y": 280,
                                             "wires": [
                                                 [
                                                     "74b0b536.02371c"
                                                 ],
                                                 [
                                                     "ad539a91.237888"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "94876630.f71748",
                                             "type": "change",
                                             "z": "c3403a60.92fbb8",
                                             "name": "",
                                             "rules": [
                                                 {
                                                     "t": "delete",
                                                     "p": "topic",
                                                     "pt": "msg"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 210,
                                             "y": 160,
                                             "wires": [
                                                 [
                                                     "4cdee7cb.910c38"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "3ccd67db.375058",
                                             "type": "switch",
                                             "z": "c3403a60.92fbb8",
                                             "name": "is array?",
                                             "property": "payload",
                                             "propertyType": "msg",
                                             "rules": [
                                                 {
                                                     "t": "istype",
                                                     "v": "array",
                                                     "vt": "array"
                                                 },
                                                 {
                                                     "t": "else"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 2,
                                             "x": 700,
                                             "y": 120,
                                             "wires": [
                                                 [
                                                     "d839cef8.577f1"
                                                 ],
                                                 [
                                                     "eea737e7.7e8fb8"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "80dde279.c28ec",
                                             "type": "comment",
                                             "z": "c3403a60.92fbb8",
                                             "name": "Array",
                                             "info": "",
                                             "x": 400,
                                             "y": 280,
                                             "wires": []
                                         },
                                         {
                                             "id": "95ee816e.68a16",
                                             "type": "comment",
                                             "z": "c3403a60.92fbb8",
                                             "name": "object",
                                             "info": "",
                                             "x": 1140,
                                             "y": 100,
                                             "wires": []
                                         },
                                         {
                                             "id": "d8f58d9b.b6a1",
                                             "type": "switch",
                                             "z": "c3403a60.92fbb8",
                                             "name": "is type?",
                                             "property": "payload",
                                             "propertyType": "msg",
                                             "rules": [
                                                 {
                                                     "t": "istype",
                                                     "v": "object",
                                                     "vt": "object"
                                                 },
                                                 {
                                                     "t": "istype",
                                                     "v": "array",
                                                     "vt": "array"
                                                 },
                                                 {
                                                     "t": "else"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 3,
                                             "x": 960,
                                             "y": 280,
                                             "wires": [
                                                 [
                                                     "eea737e7.7e8fb8"
                                                 ],
                                                 [
                                                     "d839cef8.577f1"
                                                 ],
                                                 [
                                                     "bdfdae99.f4d9d"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "ad539a91.237888",
                                             "type": "change",
                                             "z": "c3403a60.92fbb8",
                                             "name": "finalize msg.topic",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "top",
                                                     "pt": "msg",
                                                     "to": "top",
                                                     "tot": "env"
                                                 },
                                                 {
                                                     "t": "set",
                                                     "p": "top",
                                                     "pt": "msg",
                                                     "to": "'0_userdata.0.' & top",
                                                     "tot": "jsonata"
                                                 },
                                                 {
                                                     "t": "set",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "to": "top & topic",
                                                     "tot": "jsonata"
                                                 },
                                                 {
                                                     "t": "change",
                                                     "p": "topic",
                                                     "pt": "msg",
                                                     "from": "..",
                                                     "fromt": "str",
                                                     "to": ".",
                                                     "tot": "str"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 1970,
                                             "y": 320,
                                             "wires": [
                                                 []
                                             ]
                                         },
                                         {
                                             "id": "eaa55be.3b517a8",
                                             "type": "subflow:c3403a60.92fbb8",
                                             "z": "73f6b143.7ca56",
                                             "name": "",
                                             "env": [],
                                             "x": 270,
                                             "y": 520,
                                             "wires": [
                                                 []
                                             ]
                                         }
                                      ]
                                      

                                      WalW Online
                                      WalW Online
                                      Wal
                                      Developer
                                      schrieb am zuletzt editiert von
                                      #18

                                      @mickym ,
                                      danke das funktioniert mit dem LibreHardwareMonitor sehr gut.
                                      Objekte werden jetzt selbst erstellt.

                                      Gruß
                                      Walter

                                      DoorIO-Adapter
                                      wioBrowser-Adapter und wioBrowser

                                      Bernd1967B 1 Antwort Letzte Antwort
                                      0
                                      • WalW Wal

                                        @mickym ,
                                        danke das funktioniert mit dem LibreHardwareMonitor sehr gut.
                                        Objekte werden jetzt selbst erstellt.

                                        Bernd1967B Offline
                                        Bernd1967B Offline
                                        Bernd1967
                                        schrieb am zuletzt editiert von Bernd1967
                                        #19

                                        @mickym
                                        Danke für dein Subflow, kann ich auch gerade sehr gut gebrauchen.

                                        Ich hab allerdings Schwierigkeiten die Daten in einen Json String zurück zu konvertieren.
                                        Hab es oben wie Du mit der Tasmota Steckdose es gemacht hast nachgebaut, nur mit einem anderen Pfad.
                                        Aber das klappt nicht, ich nehme an das es am Change Node liegt und dort bei den Regulären Ausdruck ?
                                        Ich möchte ganz einfach das was im IOBroker Pfad untet "0_userdata.0.objRoot" vorhanden ist als Datei speichern.

                                        Unbenannt.jpg

                                        1.jpg

                                        Struktur im IOBroker:
                                        2.jpg

                                        Ergebnis:
                                        {"version":3,"devices.554-6546532-36565-654654.Test":""}

                                        mickymM 1 Antwort Letzte Antwort
                                        0
                                        • Bernd1967B Bernd1967

                                          @mickym
                                          Danke für dein Subflow, kann ich auch gerade sehr gut gebrauchen.

                                          Ich hab allerdings Schwierigkeiten die Daten in einen Json String zurück zu konvertieren.
                                          Hab es oben wie Du mit der Tasmota Steckdose es gemacht hast nachgebaut, nur mit einem anderen Pfad.
                                          Aber das klappt nicht, ich nehme an das es am Change Node liegt und dort bei den Regulären Ausdruck ?
                                          Ich möchte ganz einfach das was im IOBroker Pfad untet "0_userdata.0.objRoot" vorhanden ist als Datei speichern.

                                          Unbenannt.jpg

                                          1.jpg

                                          Struktur im IOBroker:
                                          2.jpg

                                          Ergebnis:
                                          {"version":3,"devices.554-6546532-36565-654654.Test":""}

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

                                          @bernd1967 Mal unabhängig davon, dass man so eine Struktur im iobroker auch einfach exportieren kann, aber was stimmt denn mit dem Ergebnis nicht? - Das schaut doch richtig aus?

                                          Das was Du vielleicht als Problem ansiehst - ist ggf. gar keines. Falls Du erwartet hast, dass Du unter devices eine hierarchische Struktur bekommst - kann nicht funktionieren, da das kein Objekt ist. Das Problem ist eher die list Node - die gibt auch wenn Du ANY als Filter hast nur die states aus. Da müsste man halt wieder ein Issue aufmachen.

                                          Für das Wiederherstellen der Struktur spielt das aber keine Rolle - diese wird, wenn Du meinen Subflow nimmst wieder 1:1 richtig hergestellt:

                                          45868363-176a-4f42-bc07-55e405f9f246-image.png

                                          Du siehst ja, dass Du aus der List node nur 2 Objekte rausbekommst:

                                          c8664fab-7997-4c08-8de8-b2a77251a259-image.png

                                          Auch wenn ich das im iobroker direkt exportiere bekommst Du nur 2 Objekte zurück:

                                          {
                                           "0_userdata.0.objRoot.devices.554-6546532-36565-654654.Test": {
                                             "common": {
                                               "read": true,
                                               "write": true,
                                               "desc": "Created by Node-Red",
                                               "role": "state",
                                               "name": "devices.554-6546532-36565-654654.Test",
                                               "type": "string"
                                             },
                                             "native": {},
                                             "type": "state",
                                             "from": "system.adapter.node-red.0",
                                             "user": "system.user.admin",
                                             "ts": 1646489307670,
                                             "_id": "0_userdata.0.objRoot.devices.554-6546532-36565-654654.Test",
                                             "acl": {
                                               "object": 1636,
                                               "state": 1636,
                                               "owner": "system.user.admin",
                                               "ownerGroup": "system.group.administrator"
                                             }
                                           },
                                           "0_userdata.0.objRoot.version": {
                                             "common": {
                                               "read": true,
                                               "write": true,
                                               "desc": "Created by Node-Red",
                                               "role": "state",
                                               "name": "version",
                                               "type": "number"
                                             },
                                             "native": {},
                                             "type": "state",
                                             "from": "system.adapter.node-red.0",
                                             "user": "system.user.admin",
                                             "ts": 1646489307667,
                                             "_id": "0_userdata.0.objRoot.version",
                                             "acl": {
                                               "object": 1636,
                                               "state": 1636,
                                               "owner": "system.user.admin",
                                               "ownerGroup": "system.group.administrator"
                                             }
                                           }
                                          }
                                          

                                          Falls Du eine Objekthierarchie in Deinem JSON wiederherstellen möchtest, dann ist da nicht banal und muss man quasi selbst programmieren.

                                          Mit einer Flow Variablen und einer function Node ist das dann sicher am Einfachsten. Hier mal eine Möglichkeit:

                                          0820c6f6-f5cc-435b-acbb-de46b5d1509a-image.png

                                          [
                                             {
                                                 "id": "fe734f5c8eab6919",
                                                 "type": "ioBroker list",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "topic": "0_userdata.0.objRoot.*",
                                                 "objType": "",
                                                 "regex": "",
                                                 "asArray": "false",
                                                 "onlyIDs": "true",
                                                 "withValues": "true",
                                                 "x": 340,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "6a6e0bcf573c21d2"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "81d74c3a4c8d8c69",
                                                 "type": "inject",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "Trigger",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "",
                                                 "payload": "true",
                                                 "payloadType": "bool",
                                                 "x": 150,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "fe734f5c8eab6919"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "6a6e0bcf573c21d2",
                                                 "type": "change",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "payload",
                                                         "pt": "msg",
                                                         "to": "payload.val",
                                                         "tot": "msg"
                                                     },
                                                     {
                                                         "t": "change",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "from": ".*objRoot\\.(.*)$",
                                                         "fromt": "re",
                                                         "to": "$1",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 570,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "c54cee7f0f242594"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "c54cee7f0f242594",
                                                 "type": "function",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "func": "flow.set (\"objRoot.\" + msg.topic, msg.payload);\nreturn msg;",
                                                 "outputs": 1,
                                                 "noerr": 0,
                                                 "initialize": "",
                                                 "finalize": "",
                                                 "libs": [],
                                                 "x": 760,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "1d53b3a03cb1e658"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "1d53b3a03cb1e658",
                                                 "type": "change",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "payload",
                                                         "pt": "msg",
                                                         "to": "objRoot",
                                                         "tot": "flow"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 950,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "22c29b67c34b4b4f"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "eef15bb0d92eb826",
                                                 "type": "debug",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "active": true,
                                                 "tosidebar": true,
                                                 "console": false,
                                                 "tostatus": false,
                                                 "complete": "false",
                                                 "statusVal": "",
                                                 "statusType": "auto",
                                                 "x": 1490,
                                                 "y": 2620,
                                                 "wires": []
                                             },
                                             {
                                                 "id": "22c29b67c34b4b4f",
                                                 "type": "trigger",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "op1": "",
                                                 "op2": "",
                                                 "op1type": "nul",
                                                 "op2type": "payl",
                                                 "duration": "250",
                                                 "extend": true,
                                                 "overrideDelay": false,
                                                 "units": "ms",
                                                 "reset": "",
                                                 "bytopic": "all",
                                                 "topic": "topic",
                                                 "outputs": 1,
                                                 "x": 1160,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "90872318bacb6745"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "90872318bacb6745",
                                                 "type": "json",
                                                 "z": "54b226bc.0793e8",
                                                 "name": "",
                                                 "property": "payload",
                                                 "action": "",
                                                 "pretty": false,
                                                 "x": 1330,
                                                 "y": 2620,
                                                 "wires": [
                                                     [
                                                         "eef15bb0d92eb826"
                                                     ]
                                                 ]
                                             }
                                          ]
                                          

                                          damit bekommst dann dieses Ergebnis:

                                          {"version":3,"devices":{"554-6546532-36565-654654":{"Test":""}}}
                                          

                                          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.

                                          Bernd1967B 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

                                          523

                                          Online

                                          32.4k

                                          Benutzer

                                          81.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