Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. JSON Array auslesen: Blockly, JavaScript, NodeRed

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    JSON Array auslesen: Blockly, JavaScript, NodeRed

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

      @mickym vielen Dank!
      NodeRed hab ich zum Glück schon im Einsatz, weil da meine virtuellen Alexa Smart Home Geräte sind.

      Auf das Video bin ich sehr gespannt!

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

        @domi920 sagte in JSON Array mit Hilfe von Blockly pharsen, Daten auslesen:

        @mickym vielen Dank!
        NodeRed hab ich zum Glück schon im Einsatz, weil da meine virtuellen Alexa Smart Home Geräte sind.

        Auf das Video bin ich sehr gespannt!

        So ich hoffe, Du nimmst es etwas mit Humor und verzeihst meine nicht ganz perfekten Versuche im Video die beiden Fenster parallel darzustellen. Ich wußte ja nicht, dass Du dieses hervorragende Tool mit den roten Knoten schon im Einsatz hast, weil ihr halt immer Blockly in Euren Threads schreibt. 😉 Im Prinzip brauchst Du Video 2 ja dann nicht mehr. 😉

        Hier mal die Videos:

        1. BlocklyFan schreibt JSON-string.mp4
        2. BlocklyFan probiert mal was Neues.mp4
        3. BlocklyFan importiert 1. Node Red Flow und ist begeistert.mp4
        4. BlocklyFan ändert JSON String und Datenpunkte werden aktualisiert.mp4

        Ach und weil Du den NodeRed Adapter schon im Einsatz hast, der Flow funktioniert nur, wenn Du in der Adapterkonfiguration (wie im Video 2 dargestellt), das Erstellen von Fremdobjekten zu lässt (anhakst). 😉

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

          @mickym Natürlich nehme ich deine Nachricht mit Humor 😆 Dein Humor & vor allem deine Hilfe ist exzellent!
          Ich glaube, dass viele Leute hier lieber Blockly haben, weil sie NodeRed nicht kennen. Ich selbst habe es auch nur wegen Alexa 😆

          Wenn wir noch den Feinschliff machen könnten, wär ich nur noch glücklich:
          Wie bzw. wo kann man den Pfad von

          0_userdata.0.saugroboter.
          

          ändern?

          Muss der JSON im gleichen Ordner sein, oder ist es auch in Ordnung, wenn dieser im Ordner vom Saugroboter ist?

          Wenn ich das richtig sehe, kann man in NodeRed im "Eingangs-Datenpunkt" einstellen, ob dieser nur auf bestätigte oder egal reagiert, oder?

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

            @domi920 Also eigene Daten schreiben sollte man immer unter 0_userdata.0 - deswegen habe ich das auch so fest codiert.

            So nun zu Deinen Fragen:

            1. Nein den JSON kannst Du herausholen woher Du willst (ist in der iobroker IN Node festgelegt) - der Flow läuft immer von links nach rechts wie beim Lesen. Also Eingang (iobroker-IN) - Subflow ist Bearbeitung - Ausgang ist iobrokerOut:

            3604ff70-0810-4bb8-8d22-a6ce3b40f2b3-image.png

            Einfach bei Topic den richtigen Pfad reinkopieren in die iobroker-IN Node

            1. Das ACK - Flag entspricht dem Blockly egal=Send all events, bestätigt = Only updates, unbestätigt = only commands

            2. Den Ausgang muss wie gesagt direkt unter 0_userdata.0 liegen - da dies der vorgesehene Punkt ist, um eigene Datenpunkte zu erstellen:

            Wie der oberste Punkte heißen soll, kannst Du in meiner Subflow Node festlegen:

            ee6f4b99-b6d5-4b8f-8599-54e9ac0cfd54-image.png

            Du kannst da auch tiefer liegende Punkte nehmen, wie wohnung.saugroboter.

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

              @mickym Habs gerade durch etwas rumprobieren selbst rausgefunden. Aber da bin ich noch am Screenshots machen, bekomme ich von dir schon die Meisterlösung!
              Respekt!

              Nur noch kurz am Rande, weißt Du zufälligerweise, wie man die Zeitpläne zählen kann? Also sprich wie viele Ordner erstellt wurden?

              Wobei es dann auch wichtig wäre, dass die Ordner gelöscht werden, wenn eine Reinigungsaufgabe gelöscht wird und das JSON dementsprechend aktualisiert wird.
              Was meinst Du? Ist das möglich, oder überhaupt sinnvoll?

              mickym 2 Replies Last reply Reply Quote 0
              • Domi920
                Domi920 last edited by

                Muss jetzt leider los zur Arbeit...😞
                Werde die Beiträge Nachmittags sehen, bin aber schon sehr gespannt!

                Nochmals vielen Dank!👏

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

                  @domi920 Also löschen geht meines Erachten im iobroker generell schlecht (unabhängig von Blockly oder NodeRed) - da musst Du dann wirklich Javascript bemühen - da muss man in der Objektdatenbank rumpfuschen - Das ist generell nicht vorgesehen.
                  Die aktiven Pläne musst Du dann wie gesagt über die Anzahl der Array-Elemente ermitteln oder über den Datenpunkt enabled=true in den jeweiligen Programmen.

                  Entweder nimmst Du die Lösung von @paul53 und schreibst die Anzahl in einen eigenen Datenpunkt oder natürlich kannst Du das auch mit NodeRed machen und das ebenfalls wegschreiben.

                  fa41ccb0-dce8-41d3-a7f7-c7619c5093a5-image.png

                  [
                     {
                         "id": "baf62ac3e6514347",
                         "type": "json",
                         "z": "8f752c62d86ac247",
                         "name": "",
                         "property": "payload",
                         "action": "",
                         "pretty": false,
                         "x": 470,
                         "y": 260,
                         "wires": [
                             [
                                 "3e49a6f21e39ab84"
                             ]
                         ]
                     },
                     {
                         "id": "3e49a6f21e39ab84",
                         "type": "change",
                         "z": "8f752c62d86ac247",
                         "name": "",
                         "rules": [
                             {
                                 "t": "set",
                                 "p": "payload",
                                 "pt": "msg",
                                 "to": "$count(payload)\t",
                                 "tot": "jsonata"
                             }
                         ],
                         "action": "",
                         "property": "",
                         "from": "",
                         "to": "",
                         "reg": false,
                         "x": 650,
                         "y": 260,
                         "wires": [
                             [
                                 "f9d30469e17cd287"
                             ]
                         ]
                     },
                     {
                         "id": "f9d30469e17cd287",
                         "type": "debug",
                         "z": "8f752c62d86ac247",
                         "name": "",
                         "active": true,
                         "tosidebar": true,
                         "console": false,
                         "tostatus": false,
                         "complete": "false",
                         "statusVal": "",
                         "statusType": "auto",
                         "x": 870,
                         "y": 260,
                         "wires": []
                     }
                  ]
                  

                  Also 3 aktive Pläne - 0,1,2

                  0b8244a6-476f-49b0-bb19-825f337f7289-image.png

                  Ansonsten frohes Schaffen. 🙂

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

                    @domi920 sagte in JSON Array mit Hilfe von Blockly pharsen, Daten auslesen:

                    @mickym Habs gerade durch etwas rumprobieren selbst rausgefunden. Aber da bin ich noch am Screenshots machen, bekomme ich von dir schon die Meisterlösung!
                    Respekt!

                    Nur noch kurz am Rande, weißt Du zufälligerweise, wie man die Zeitpläne zählen kann? Also sprich wie viele Ordner erstellt wurden?

                    Wobei es dann auch wichtig wäre, dass die Ordner gelöscht werden, wenn eine Reinigungsaufgabe gelöscht wird und das JSON dementsprechend aktualisiert wird.
                    Was meinst Du? Ist das möglich, oder überhaupt sinnvoll?

                    Na in dem Fall ist Blockly - bzw. der Javascript Adapter dem NodeRed Adapter überlegen. 😞 - Aber wir haben ja den iobroker, der aus beiden Welten das Zusammenspiel perfekt macht. 😉

                    1f58a8c4-5676-400a-b188-de31fe8dc149-image.png

                    hier mal die Javascript-Funktion aus Blockly heraus, die zum Beispiel den Folder 2 löscht.

                    <xml xmlns="https://developers.google.com/blockly/xml">
                     <variables>
                       <variable id="g:Gr?6y85H-gihw.$wnT">x</variable>
                     </variables>
                     <block type="update" id="wK+|12P;LDH{a5Z]Sr:q" disabled="true" x="-3412" y="88">
                       <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                       <field name="OID">0_userdata.0.saugroboter.JSON</field>
                       <field name="WITH_DELAY">FALSE</field>
                       <value name="VALUE">
                         <block type="text" id="PpI!PNqc:^[L|B9@jKDz">
                           <field name="TEXT">[{"sid":"timing_name_648006833100","cleanCtl":{"type":"SpotArea","spotAreas":"0,2"},"enabled":true,"onlyOnce":false,"weekdays":{"Mon":false,"Tue":true,"Wed":true,"Thu":true,"Fri":true,"Sat":true,"Sun":true},"hour":"19","minute":"0"},{"sid":"timing_name_720007986100","cleanCtl":{"type":"SpotArea","spotAreas":"4,6"},"enabled":true,"onlyOnce":false,"weekdays":{"Mon":false,"Tue":false,"Wed":false,"Thu":false,"Fri":true,"Sat":false,"Sun":true},"hour":"20","minute":"0"},{"sid":"timing_name_630005676100","cleanCtl":{"type":"SpotArea","spotAreas":"4"},"enabled":true,"onlyOnce":false,"weekdays":{"Mon":false,"Tue":false,"Wed":false,"Thu":true,"Fri":false,"Sat":false,"Sun":false},"hour":"17","minute":"30"}]</field>
                         </block>
                       </value>
                     </block>
                     <block type="procedures_defcustomnoreturn" id="a2D_Fmwyck/4#~s8?Cd," x="-3412" y="188">
                       <mutation statements="false">
                         <arg name="x" varid="g:Gr?6y85H-gihw.$wnT"></arg>
                       </mutation>
                       <field name="NAME">deleteFolder</field>
                       <field name="SCRIPT">ZGVsZXRlT2JqZWN0KCcwX3VzZXJkYXRhLjAuc2F1Z3JvYm90ZXIuJyArIHgsdHJ1ZSk7</field>
                       <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                     </block>
                     <block type="procedures_callcustomnoreturn" id="i1}%R1(cx,TY4cg_vcJK" x="-3412" y="263">
                       <mutation name="deleteFolder">
                         <arg name="x"></arg>
                       </mutation>
                       <value name="ARG0">
                         <block type="text" id="Qd$6sU!+1=}G?~QKJw@.">
                           <field name="TEXT">2</field>
                         </block>
                       </value>
                     </block>
                    </xml>
                    

                    Wie gesagt - ich weiß aber nicht, ob das sinnvoll ist. In meinen Augen sind das ja nur die Reinigungsprogramme und das sagt meines Erachtens nichts über den Vollzug aus. Du kannst nur - wie beschrieben die Elemente zählen und die überzähligen dann ggf. Löschen - um das 1:1 mit dem Gerät zu halten.

                    1 Reply Last reply Reply Quote 2
                    • mickym
                      mickym Most Active last edited by mickym

                      OK - ich glaub ich hab es Dir nun rund gemacht - mit der Visualisierung musst Dich aber nun selbst kümmern.

                      Ich muss aber wieder mal zugeben, dass mir die letzte Stunde, das Blockly den letzten Nerv gekostet hat:

                      b53d0412-ad24-4f7d-90ae-7e2fd3f44759-image.png

                      Diese blöde Schleife hat auch gezählt wenn der neue Wert GRÖSSER als der vorherige Wert war, obwohl die Schrittweite positiv war.

                      Wenn ich also meine Zähler i von 4 nach 3 in Schritten von +1 - bin ich davon ausgegangen, dass die Schleife gar nicht ausgeführt wird. Anstelle dessen wir im Javascript Code eine Prüfung gemacht und diese immer ausgeführt also rückwärts und vorwärts. Sowas finde ich echt ätzend.

                      Na wenn mans weiß, macht man halt so ein Bedingung vorne dran.

                      So der ganze Zyklus sieht nun so aus. Wo immer Dein Array mit den Staubsauger-Programmen herkommt, triggert dies den NodeRed Flow. Dieser Schreibt nun die Datenpunkte und zählt gleichzeitig die aktiven Programme und schreibt diese in einen Datenpunkt active:

                      587b6a8b-e04e-4147-9f4f-14ec2c740244-image.png

                      d258fe16-c278-4418-95a1-36048e4fc9a8-image.png

                      Hier der Flow:

                      [
                         {
                             "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# 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. ",
                             "category": "",
                             "in": [
                                 {
                                     "x": 60,
                                     "y": 160,
                                     "wires": [
                                         {
                                             "id": "554b8c663bcb46c2"
                                         }
                                     ]
                                 }
                             ],
                             "out": [
                                 {
                                     "x": 2320,
                                     "y": 280,
                                     "wires": [
                                         {
                                             "id": "f5d52c6a57d08904",
                                             "port": 0
                                         },
                                         {
                                             "id": "74c895ce724750de",
                                             "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": "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": 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"
                                 },
                                 {
                                     "t": "change",
                                     "p": "topic",
                                     "pt": "msg",
                                     "from": "..",
                                     "fromt": "str",
                                     "to": ".",
                                     "tot": "str"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 2170,
                             "y": 240,
                             "wires": [
                                 []
                             ]
                         },
                         {
                             "id": "c863dd7d651b2272",
                             "type": "switch",
                             "z": "6e802f1553b18149",
                             "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": 580,
                             "y": 160,
                             "wires": [
                                 [
                                     "158930afddd0780b"
                                 ],
                                 [
                                     "3e11e8338f694832"
                                 ],
                                 [
                                     "bfce19b206660fbe"
                                 ],
                                 [
                                     "a4d1a5d04564dc77"
                                 ]
                             ]
                         },
                         {
                             "id": "158930afddd0780b",
                             "type": "json",
                             "z": "6e802f1553b18149",
                             "name": "",
                             "property": "payload",
                             "action": "",
                             "pretty": false,
                             "x": 770,
                             "y": 120,
                             "wires": [
                                 [
                                     "3649300b4c233b10"
                                 ]
                             ]
                         },
                         {
                             "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": [
                                 [
                                     "c863dd7d651b2272"
                                 ]
                             ]
                         },
                         {
                             "id": "3649300b4c233b10",
                             "type": "switch",
                             "z": "6e802f1553b18149",
                             "name": "is array?",
                             "property": "payload",
                             "propertyType": "msg",
                             "rules": [
                                 {
                                     "t": "istype",
                                     "v": "array",
                                     "vt": "array"
                                 },
                                 {
                                     "t": "else"
                                 }
                             ],
                             "checkall": "true",
                             "repair": false,
                             "outputs": 2,
                             "x": 900,
                             "y": 120,
                             "wires": [
                                 [
                                     "bfce19b206660fbe"
                                 ],
                                 [
                                     "3e11e8338f694832"
                                 ]
                             ]
                         },
                         {
                             "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"
                                 ],
                                 [
                                     "1a8c03d866b85b12"
                                 ]
                             ]
                         },
                         {
                             "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"
                                 },
                                 {
                                     "t": "change",
                                     "p": "topic",
                                     "pt": "msg",
                                     "from": "..",
                                     "fromt": "str",
                                     "to": ".",
                                     "tot": "str"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 2170,
                             "y": 320,
                             "wires": [
                                 []
                             ]
                         },
                         {
                             "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": [
                                 [
                                     "c863dd7d651b2272"
                                 ]
                             ]
                         },
                         {
                             "id": "44531c3bb9864c19",
                             "type": "subflow:6e802f1553b18149",
                             "z": "8f752c62d86ac247",
                             "name": "",
                             "env": [
                                 {
                                     "name": "top",
                                     "value": "saugroboter",
                                     "type": "str"
                                 }
                             ],
                             "x": 530,
                             "y": 200,
                             "wires": [
                                 [
                                     "5f78966b590a9a12"
                                 ]
                             ]
                         },
                         {
                             "id": "5f78966b590a9a12",
                             "type": "ioBroker out",
                             "z": "8f752c62d86ac247",
                             "name": "",
                             "topic": "",
                             "ack": "true",
                             "autoCreate": "true",
                             "stateName": "",
                             "role": "",
                             "payloadType": "",
                             "readonly": "false",
                             "stateUnit": "",
                             "stateMin": "",
                             "stateMax": "",
                             "x": 860,
                             "y": 200,
                             "wires": []
                         },
                         {
                             "id": "07bf530c8f1ad27e",
                             "type": "comment",
                             "z": "8f752c62d86ac247",
                             "name": "Saugroboter",
                             "info": "",
                             "x": 250,
                             "y": 140,
                             "wires": []
                         },
                         {
                             "id": "6ba806159cd6d525",
                             "type": "ioBroker in",
                             "z": "8f752c62d86ac247",
                             "name": "Saugroboter JSON",
                             "topic": "0_userdata.0.saugroboter.JSON",
                             "payloadType": "value",
                             "onlyack": "",
                             "func": "all",
                             "gap": "",
                             "fireOnStart": "false",
                             "outFormat": "MQTT",
                             "x": 270,
                             "y": 200,
                             "wires": [
                                 [
                                     "44531c3bb9864c19",
                                     "baf62ac3e6514347"
                                 ]
                             ]
                         },
                         {
                             "id": "baf62ac3e6514347",
                             "type": "json",
                             "z": "8f752c62d86ac247",
                             "name": "",
                             "property": "payload",
                             "action": "",
                             "pretty": false,
                             "x": 470,
                             "y": 260,
                             "wires": [
                                 [
                                     "3e49a6f21e39ab84"
                                 ]
                             ]
                         },
                         {
                             "id": "3e49a6f21e39ab84",
                             "type": "change",
                             "z": "8f752c62d86ac247",
                             "name": "",
                             "rules": [
                                 {
                                     "t": "set",
                                     "p": "payload",
                                     "pt": "msg",
                                     "to": "$count(payload)\t",
                                     "tot": "jsonata"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 650,
                             "y": 260,
                             "wires": [
                                 [
                                     "cb865b6162ed7ec9"
                                 ]
                             ]
                         },
                         {
                             "id": "cb865b6162ed7ec9",
                             "type": "ioBroker out",
                             "z": "8f752c62d86ac247",
                             "name": "",
                             "topic": "0_userdata.0.saugroboter.active",
                             "ack": "true",
                             "autoCreate": "true",
                             "stateName": "",
                             "role": "",
                             "payloadType": "",
                             "readonly": "false",
                             "stateUnit": "",
                             "stateMin": "",
                             "stateMax": "",
                             "x": 910,
                             "y": 260,
                             "wires": []
                         }
                      ]
                      

                      Nur wenn sich diese Anzahl in saugroboter.active ÄNDERT wird dann das Blockly getriggert und dann auch nur was gemacht, wenn dieser Wert kleiner dem vorherigen war.

                      Ist dies der Fall, werden die überschüssigen Instanzen (Folder) aus dem Objektbaum gelöscht.

                      <xml xmlns="https://developers.google.com/blockly/xml">
                       <variables>
                         <variable id="g:Gr?6y85H-gihw.$wnT">x</variable>
                         <variable id="Y-Z`dQy%$Td7c7O`-EJk">i</variable>
                       </variables>
                       <block type="procedures_defcustomnoreturn" id="a2D_Fmwyck/4#~s8?Cd," x="-3338" y="163">
                         <mutation statements="false">
                           <arg name="x" varid="g:Gr?6y85H-gihw.$wnT"></arg>
                         </mutation>
                         <field name="NAME">deleteFolder</field>
                         <field name="SCRIPT">ZGVsZXRlT2JqZWN0KCcwX3VzZXJkYXRhLjAuc2F1Z3JvYm90ZXIuJyArIHgsdHJ1ZSk7</field>
                         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                       </block>
                       <block type="on" id="fu-KQiD%.0vog6%T@$y|" x="-3310" y="212">
                         <field name="OID">0_userdata.0.saugroboter.active</field>
                         <field name="CONDITION">ne</field>
                         <field name="ACK_CONDITION"></field>
                         <statement name="STATEMENT">
                           <block type="controls_if" id="t4?%.,%m20rnv[ozfOGe">
                             <value name="IF0">
                               <block type="logic_compare" id="vR3-_hRs(p+Nl8,F-OVV">
                                 <field name="OP">LT</field>
                                 <value name="A">
                                   <block type="on_source" id="hr%EaHL{hsPNYY~K;aaX">
                                     <field name="ATTR">state.val</field>
                                   </block>
                                 </value>
                                 <value name="B">
                                   <block type="on_source" id="%aE{/c6}0,-.aVd3KiM}">
                                     <field name="ATTR">oldState.val</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <statement name="DO0">
                               <block type="controls_for" id="GNNhz!w:xNy~]@a,m-]3">
                                 <field name="VAR" id="Y-Z`dQy%$Td7c7O`-EJk">i</field>
                                 <value name="FROM">
                                   <shadow type="math_number" id="2j`MFD9kK9);d]-Ms1+B">
                                     <field name="NUM">0</field>
                                   </shadow>
                                   <block type="on_source" id="CR,@!%|Sl}[MaT/)28%E">
                                     <field name="ATTR">state.val</field>
                                   </block>
                                 </value>
                                 <value name="TO">
                                   <shadow type="math_number" id="BE[.yVgscNuBm(]AYehV">
                                     <field name="NUM">10</field>
                                   </shadow>
                                   <block type="math_arithmetic" id="9Kl;E,/s?6caL%a[P:oO">
                                     <field name="OP">MINUS</field>
                                     <value name="A">
                                       <shadow type="math_number" id="C9mU)9lGiRAR^M0*dR%_">
                                         <field name="NUM">1</field>
                                       </shadow>
                                       <block type="on_source" id="#Fh2=M^I[X5MhcE%0]Z:">
                                         <field name="ATTR">oldState.val</field>
                                       </block>
                                     </value>
                                     <value name="B">
                                       <shadow type="math_number" id="OZi=IHmpz~fLy$*G){1a">
                                         <field name="NUM">1</field>
                                       </shadow>
                                     </value>
                                   </block>
                                 </value>
                                 <value name="BY">
                                   <shadow type="math_number" id="m{of7#bxr2dv#]CEa+)-">
                                     <field name="NUM">1</field>
                                   </shadow>
                                 </value>
                                 <statement name="DO">
                                   <block type="procedures_callcustomnoreturn" id="i1}%R1(cx,TY4cg_vcJK">
                                     <mutation name="deleteFolder">
                                       <arg name="x"></arg>
                                     </mutation>
                                     <value name="ARG0">
                                       <block type="variables_get" id="/]dc7r$3FiA4t9sY7i,Y">
                                         <field name="VAR" id="Y-Z`dQy%$Td7c7O`-EJk">i</field>
                                       </block>
                                     </value>
                                   </block>
                                 </statement>
                               </block>
                             </statement>
                           </block>
                         </statement>
                       </block>
                      </xml>
                      

                      Einerseits zwar schade, dass man nicht ohne Blockly auskommt, andererseits ist es perfektes Beispiel wie die beiden Tools aus 2 Welten im iobroker zusammen arbeiten können.

                      EDIT: Und die aktuelles JS Doku zufinden - ist auch ein Kampf - wenn man das nicht jeden Tag braucht - sollte irgendwie in der aktuellen Doku irgendwo verlinkt sein:
                      https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#deleteobject

                      fe3a257e-00b0-48ab-93fd-5c2f77632cd8-image.png

                      und Achtung - ich habe die "very dangerous" Variante in dem Blockly verwendet. 😉

                      Es wurden also verwendet bei dieser Logik:

                      1. NodeRed
                      2. Blockly
                      3. JavaScript

                      Ach und vielleicht solltest Du die Überschrift des Threadtitels anpassen. 😉

                      Domi920 1 Reply Last reply Reply Quote 1
                      • Domi920
                        Domi920 @mickym last edited by

                        @mickym ich bin sprachlos begeistert!
                        Da hast du wirklich das Non-Plus-Ultra vorgelegt!
                        Und vor allem einfach, nachvollziehbar & detailliert beschrieben 👏

                        Werde Deine Vorlage noch ausgiebig testen und mich dann nochmal melden, falls noch was sein sollte.

                        Nachdem ich bei mir alles zufriedenstellend integriert habe, werde ich den Entwickler vom Ecovacs Adapter kontaktieren und dies verlinken.
                        Denke es könnte für viele eine große Hilfe sein.

                        Vielen vielen Dank nochmal für Deine Kompetenz!

                        Ich hoffe der Titel bzw. die Überschrift ist passend. Falls nich nehme ich gerne Vorschläge an 😄

                        Gruß Dominik

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        563
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        4
                        16
                        1711
                        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