Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active last edited by mickym

      So ich habe wieder mal eine neue Version des Subflows erstellt, der verhindert dass Punkte in den Objekteigenschaften enthalten sind und somit ggf. den iobroker durcheinander bringt.

      Hier nun wieder eine neue Version:

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

      Ein evtl. Update muss wieder selektiv durchgeführt werden, in dem nur der Subflow ersetzt wird. Genau ist es hier beschrieben:
      https://forum.iobroker.net/post/856928

      1 Reply Last reply Reply Quote 0
      • icebear
        icebear last edited by

        Hallo,

        Ich habe mir in Node-Red einen Flow erstellt, der mir die Preise für 'current' , 'today' und 'tomorrow' abholt und in einem Datenpunkt als json ablegt

        siehe hier:tib_Price.png

        jetzt würde ich gerne aus dieser json für 'today' und 'tomorrow' jeweils den 'niedrigsten' , 'höchsten' und den durchschnittlichen Preis extrahieren und in einen eigenen Datenpunkt schreiben.

        Ich hab aber leider keine Ahnung wie ich das anstellen muß, sprich ich weiß wohl das ich das mittels eines function node realisieren kann der die json zerlegt, aber leider gehen mein Kenntnisse nich soweit.

        Vielleicht kann ja einer helfen

        Gruß
        Holger

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

          @icebear Du wandelst den JSON String mit einer JSON Node in ein Objekt um. Dann extrahierst Du den Wert, der Dich interessiert in dem Du die payload auf den Pfad zum den entsprechenden Wert setzt. Du gehst also mit der Maus neben den Wert und kopierst den Pfad und setzt die payload auf diesen Pfad:

          copy path.gif

          Nun hast Du 3 Möglichkeiten:

          1. Das Maximum und Minimum kannst Du entweder kodieren und mit einer Function Node in dem entsprechenden Kontext speichern.
          2. Du kodierst gar nichts und speicherst das Maximum oder Minimum im Flow Kontext.

          In beiden Fällen setzt Du jeden Tag mit einer Inject Node wieder zurück, wenn Du willst.

          1. Du installierst Dir die aggregate Node , die Dir Minimum und Maximum pro Zeiteinheit also pro Tag ausgibt.

          Falls Du Dich für eine der 3 Möglichkeiten entschieden hast, können wir das konkretisieren.

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

            @mickym

            Ich hatte die aggregate node schon installiert, hatte ich aber garnich auf dem Schirm.

            Ich hab jetzt nochmal einen einfachen flow erstellt, der mir mit einem template node die aktuellen preise von tibber abholt.

            siehe hier:tib_array.png

            wie krieg ich das jetzt in die aggregate node rein

            Gruß
            Holger

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

              @icebear Klapp die Objekte auf und setze via Change Node die payload auf den Pfad des Wertes im Nachrichtenobjekt, der Dich interessiert wie in meiner Animation gezeigt. Und die payload verbindest dann mit der aggregate Node.

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

                @mickym

                also ich habs jetzt so gemacht:

                tib_iob.png

                keine Ahnung ob das nich noch einfacher oder übersichtlicher geht, aber das Ergebnis stimmt.

                Gruß
                Holger

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

                  @icebear Nun - ich kannte die Anforderung nicht im Detail. Wenn Du willst, dass ich ggf. eine einfachere Lösung finde, dann exportiere mir doch auf der einen Seite mal alle Nodes hinter dieser tibber-query node und dann mach mal eine Debug Node hinter die tibber-query Node und kopiere mir mal das komplette Objekt hier in code-tags, sodass ich die Ausgabe der tibber-query Node mit einer Inject Node simulieren kann.

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

                    @mickym

                    Vielen Dank erstmal für deine Hilfe.
                    Ich hab mich jetzt doch anders entschieden und nehm die Werte mit den zugehörigen Graphen bzw. Anzeigen aus Grafana.
                    Die 'gauges' Widgets aus iobroker gefallen mir nich so gut und passen nicht zu meiner VIS, da hab ich bei Grafana bessere Darstellungsmöglichkeiten.
                    Das laden dauert zwar ein Mü länger, aber einen Tod muß man ja sterben.

                    Trotzdem nochmal vielen Dank!

                    Gruß Holger

                    1 Reply Last reply Reply Quote 0
                    • Merlin123
                      Merlin123 last edited by

                      Ok... Kann mal jemand "für Dumme" erklären, wie das funktioniert...
                      Hab bisher mit NodeRed nix am Hut und den nur installiert, um die Daten von Tibber auszulesen (danke an der Stelle für die tolle Beschreibung! ).
                      Jetzt hab ich in IOB nen DP mit dem JSON und würde den gerne zerlegen. Also das die Werte in einzelnen DPs liegen.
                      Das JSON sieht so aus:

                      {"timestamp":"2023-06-19T16:13:37.000+02:00","power":0,"lastMeterConsumption":9194.1692,"accumulatedConsumption":0,"accumulatedProduction":3.5866,"accumulatedConsumptionLastHour":0,"accumulatedProductionLastHour":0.3924,"accumulatedCost":null,"accumulatedReward":null,"currency":null,"minPower":0,"averagePower":0,"maxPower":0,"powerProduction":1290,"minPowerProduction":676,"maxPowerProduction":4514,"lastMeterProduction":19342.1205,"powerFactor":null,"voltagePhase1":null,"voltagePhase2":null,"voltagePhase3":null,"currentL1":null,"currentL2":null,"currentL3":null,"signalStrength":null}
                      

                      Was muss ich da jetzt machen, damit die Daten des JSON in einzelne DPs kommen? Ich hab den Node importiert, verstehe hier aber grad nur Bahnhof 😞

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

                        @merlin123 ich kann Dir im Moment nur von unterwegs antworten, deshalb kann ich Dir keine Screenshots schicken. Du ziehst einfach die neue Node auf Deinen Flow und schließt sie an die Node an die Dein JSON rauskommt. Wenn du die Node öffnest dann kannst du einen Ordnernamen angeben unter dem die einzelnen States abgelegt werden sollen. Vorgegeben ist objRoot. Dann schließt Du an diese Node eine iobroker-Out Node an. Dort gibst du an, dass die States erstellt werden sollen, falls sie nicht existieren (in der Adapterkonfiguration muss Fremdobjekte erstellen aktiviert sein), dann solltest du als Typ „value“ angeben und eventuell noch als ReadOnly definieren.

                        Falls das nicht klar ist, melde Duch nochmal, dann melde ich mich am Abend nochmal.

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

                          @mickym Danke erstmal für die Erklärung. Ich hab mal versucht das umzusetzen, aber es wird nichts angelegt. Vermutlich ne Kleinigkeit....

                          Sieht bei mir jetzt so aus:
                          2023-06-19_18-08-26.png

                          2023-06-19_18-07-55.png

                          2023-06-19_18-09-05.png

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

                            @merlin123 wenn Fremdobjekte in der Adapterkonfiguration erlaubt sind, dann topic in der iobroker-out Node rauslöschen das topic wird durch die neue Node gesetzt. Readonly würde ich noch setzen. Keep topic in der subflow node auf false lassen. Selbst einen Namen in der iobroker Out Node vergeben oder rauslöschen

                            Merlin123 E 2 Replies Last reply Reply Quote 0
                            • Merlin123
                              Merlin123 @mickym last edited by

                              @mickym Dank Dir vielmals! das topic war das Problem 🙂

                              Und allgemein Danke für die Mühe, die Du dir machst 🙂

                              1 Reply Last reply Reply Quote 0
                              • E
                                Einstein2002 @mickym last edited by

                                @mickym
                                Hallo Mickym

                                so das würde ich jetzt gerne vertiefen und fange mal von oben an zu lesen.

                                Wenn es dazu Hilfe benötigt werde ich sehr gerne auf Dich zukommen! Wenn ich darf.

                                Oder hast Du eine bessere Idee wie und wo ich anfangen sollte?

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

                                  @einstein2002 Na wenn es Dir nicht nur um das Zerlegen von Objekten geht - dann solltest Du lieber einen eigenen Thread aufmachen und dann können wir das Durchgehen. Was nutzt Du denn bis jetzt für Deine Logikmaschine?

                                  Blockly oder Javascript?

                                  E 1 Reply Last reply Reply Quote 0
                                  • E
                                    Einstein2002 @mickym last edited by

                                    @mickym
                                    Ich nenne den dann mal Anfänger fragen?? Oder?

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

                                      @einstein2002 Vielleicht NodeRed für Anfänger und dann ins Einsteigerforum. Was nutzt Du denn jetzt?

                                      Du kannst auch erst mal den Artikel lesen - der ist schon bissi älter aber in Summe funktioniert der noch.

                                      https://www.smarthome-tricks.de/uebersicht-iobroker-node-red/

                                      E 1 Reply Last reply Reply Quote 0
                                      • E
                                        Einstein2002 @mickym last edited by

                                        @mickym
                                        Sorry hab schon einen neuen Thread aufgemacht! Aber dann lese ich mich mal dort ein...

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          Marv21 last edited by Marv21

                                          hey @mickym
                                          Danke fpr den tollen Subflow. Bin jetzt auch neu bei ioBroker dabei und versuche grade ein paar meiner MQTT Geschichten in einzelne Datenpunkte zu bekommen.

                                          Jetzt hab ich das Problem das ich ein Gerät habe, welches mehrere UnterTopics hat. Ich würde jetzt gerne einen Ordner für jedes unterTopic haben.

                                          /MeinGerät/TopicA hier sind mehrere Jsons
                                          /MeinGerät/TopicA/TopicB/ hier sind mehrere Jsons usw.
                                          Mit "KeepTopic" auf false legt dein flow keine weiteren "unterordner" an, die Jsons aus TopicA und TopicB werden zusammengewürfelt.
                                          Mit "KeepTopic" auf true, funktioniert es, ich bekomme unterordner für die Untertopics. Hier ist aber das Problem, dass der gesamte Baum vor meinen gewünschten Topic mit erscheint.

                                          Ist mein ioBrokerIN zB. auf MeinGerät.TopicA.TopicB.* und mein msg.top auf TopicB/, dann hab ich :
                                          0_userdata.0.TopicB.MeinGerät.TopicA.TopicB.* statt 0_userdata.0.TopicB.*

                                          Im Prinzip will ich KeepTopic, aber erst ab meinem ausgewählten Topic 🙂

                                          hast du einen Tipp? (Sorry bin hier beim schreiben mit der notierung von / . * # durcheinander gekommen, hab aber alle Kombinationen eigentlich gestestet)

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

                                            @marv21 Nun das musst Du dann wie folgt selbst implementieren, wenn einerseits der Baum erhalten werden soll, Du aber nur einen Teil des Baumpfades schreiben willst. Also einfach aus dem gewünschten Teil des gesamten Topics ausschneiden.

                                            Nehmen wir mal meine Struktur an - ich habe nur statt TopicA.TopicB - einfach folgende Struktur:

                                            fbbeb7e7-8459-4aa5-a067-99763e3f4476-image.png

                                            Du möchtest nun nur den Teilbaum ab buero schreiben. Also top Ordner für computer und decke direkt unter 0_userdata.0. . Du konfigurierst den Subflow so, dass Du gar kein Basistopic angibst - also auch kein leeres Topic :

                                            edb13675-de38-4968-8b85-6a8434c423d0-image.png

                                            sprich auch schauen, dass in top auch kein Leerzeichen drin ist. Dann bekommst Du auch den ganzen Pfad wie Du sagst:

                                            8b5df35a-4d7c-471f-83cb-ed4073cdff50-image.png

                                            Das ist ja auch von dem Subflow so gewollt. Willst Du nun nur den hinteren Teil haben und schreiben, dann musst Du das topic halt einfach neu zusammensetzen, also selbst wie gewünscht kürzen. (Der Subflow kann nicht wissen, wo Du deine Wildcards setzt, die werden ja von der iobroker In Node verarbeitet). Klemm also einfach noch eine Change-Node dahinter und verändere das topic nach Deinen Wünschen.

                                            d9a81e0c-280f-4bc0-b06a-354de2520c5a-image.png

                                            Daraus machst Du dann aus den ursprünglichen topics die topics Deiner Wahl:

                                            d78d6d62-e520-4c69-9ba2-8c058eca8900-image.png

                                            Du bekommst also sowohl decke, als auch computer als eigene Ordner auf der Top-Ebene Deiner 0_userdata.0 Struktur.

                                            Hier die Change Node zum Import

                                            [
                                                {
                                                    "id": "c2f09210b53d775b",
                                                    "type": "change",
                                                    "z": "7e6af0015415146d",
                                                    "name": "",
                                                    "rules": [
                                                        {
                                                            "t": "change",
                                                            "p": "topic",
                                                            "pt": "msg",
                                                            "from": ".*buero(.*)$",
                                                            "fromt": "re",
                                                            "to": "0_userdata.0$1",
                                                            "tot": "str"
                                                        }
                                                    ],
                                                    "action": "",
                                                    "property": "",
                                                    "from": "",
                                                    "to": "",
                                                    "reg": false,
                                                    "x": 770,
                                                    "y": 3420,
                                                    "wires": [
                                                        [
                                                            "60ac7b3cd26e0579"
                                                        ]
                                                    ]
                                                }
                                            ]
                                            

                                            Alternativ kannst Du natürlich Deine Wildcards bei topicB beginnen lassen und dann ohne keepTopic mehrere Subflow mit unterschiedlichen msg.tops verwenden.

                                            PS.: Man könnte zwar so eine Kürzung in den Subflow einarbeitet, aber da das mit der ChangeNode so einfach ist, glaube ich, dass man das besser direkt macht - also lange Erklärungen zu einem Subflow zu schreiben.

                                            Exakt funktioniert das mit dem Topic wie oben zwar so:

                                            ebcc3bc7-6eb3-4a3b-a8bc-f08b2001be3e-image.png

                                            aber das ist nur eine Schönheitsfrage.

                                            Bei Dir würde also die ChangeNode wie folgt aussehen:
                                            061a71b0-48ba-441f-894f-720905930cba-image.png

                                            und TopicB, sowie alle Topics auf der Ebene TopicB würden also direkt unter 0_userdata.0 angelegt.

                                            Als Wildcard würdest Du Dir alles ab TopicA ausgeben lassen:

                                            974ce472-e8d4-4eef-a21f-75f8e798570f-image.png

                                            Das Schöne ist in diesem Fall, dass Du Dir ja über eine Debug Node die topics ausgeben lassen kannst, um zu sehen, ob sie Deinen Wünschen entsprechen, bevor Du eine iobroker-Out Node eingibst.

                                            07041fd1-515b-4a0d-8691-5c6c51bc2019-image.png

                                            Das topic wird ja auch bei der Debug Ausgabe der payload immer mitausgegeben, so dass man das leicht kontrollieren kann.

                                            In meinem Beispiel kannst Du auch ab Licht nach unten gehen. Wie gesagt sobald der gesamte Pfad - durch KeepTopic erhalten bleibt - stehen Dir ja an Manipulation der Topics alle Möglichkeiten offen!!!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            530
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            node-red
                                            13
                                            114
                                            18485
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo