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. (Gelöst) Rollen und Funktionen in ioBroker

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    (Gelöst) Rollen und Funktionen in ioBroker

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

      Hier mal die schrittweise Erklärung des Flows:

      579adb52-1ad2-4f61-96ac-249b1a18cd97-image.png

      Als erstes lässt man sich ein Array ausgeben über alle States mit Wildcards - ich würde keinesfalls empfehlen, hier den Wurzelbaum zu verwenden, sondern allenfalls eine Adapterinstanz.

      Im 2. Schritt selektiert man alle IDs, die beispielsweise die Funktion "Licht" beinhalten und ein boolean State zum Beispiel haben.

      3f4899b1-bfac-4ca3-b5e1-0c6484fc8420-image.png

      Im 3. Schritt macht man aus dem Array einzelne Nachrichten mit dem topic aus der payload und setzt als payload "off" zum Licht ausschalten:

      67fbe68a-8b80-4d56-9930-813991d87e71-image.png

      Hier mal dieses Beispiel als Code:

      [
         {
             "id": "dd1076bf7c4b7332",
             "type": "inject",
             "z": "7e6af0015415146d",
             "name": "trigger",
             "props": [
                 {
                     "p": "payload"
                 }
             ],
             "repeat": "",
             "crontab": "",
             "once": false,
             "onceDelay": 0.1,
             "topic": "",
             "payload": "true",
             "payloadType": "bool",
             "x": 90,
             "y": 2220,
             "wires": [
                 [
                     "0e59368979d130fb"
                 ]
             ]
         },
         {
             "id": "0e59368979d130fb",
             "type": "ioBroker list",
             "z": "7e6af0015415146d",
             "name": "",
             "topic": "0_userdata.0.homekit.devices.*",
             "objType": "state",
             "regex": "",
             "asArray": "true",
             "onlyIDs": "false",
             "withValues": "false",
             "x": 310,
             "y": 2220,
             "wires": [
                 [
                     "72e626d9f2966314",
                     "92e38896c297dc5f"
                 ]
             ]
         },
         {
             "id": "72e626d9f2966314",
             "type": "debug",
             "z": "7e6af0015415146d",
             "name": "Array mit allen Objekten",
             "active": false,
             "tosidebar": true,
             "console": false,
             "tostatus": false,
             "complete": "payload",
             "targetType": "msg",
             "statusVal": "",
             "statusType": "auto",
             "x": 590,
             "y": 2180,
             "wires": []
         },
         {
             "id": "92e38896c297dc5f",
             "type": "change",
             "z": "7e6af0015415146d",
             "name": "Filter States mit Funktion Licht",
             "rules": [
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "$.payload[enums.'enum.functions.light'=\"Licht\" and common.type=\"boolean\"]._id",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 610,
             "y": 2220,
             "wires": [
                 [
                     "d1b7bd405eaf2ae0",
                     "abf05c67fdb43e13"
                 ]
             ]
         },
         {
             "id": "d1b7bd405eaf2ae0",
             "type": "debug",
             "z": "7e6af0015415146d",
             "name": "Topics mit Function Licht",
             "active": false,
             "tosidebar": true,
             "console": false,
             "tostatus": false,
             "complete": "payload",
             "targetType": "msg",
             "statusVal": "",
             "statusType": "auto",
             "x": 890,
             "y": 2220,
             "wires": []
         },
         {
             "id": "abf05c67fdb43e13",
             "type": "split",
             "z": "7e6af0015415146d",
             "name": "",
             "splt": "\\n",
             "spltType": "str",
             "arraySplt": 1,
             "arraySpltType": "len",
             "stream": false,
             "addname": "",
             "x": 830,
             "y": 2280,
             "wires": [
                 [
                     "49ac6b5689b749d8"
                 ]
             ]
         },
         {
             "id": "8332c200351f1f67",
             "type": "debug",
             "z": "7e6af0015415146d",
             "name": "Alle Lichter ausschalten",
             "active": true,
             "tosidebar": true,
             "console": false,
             "tostatus": false,
             "complete": "payload",
             "targetType": "msg",
             "statusVal": "",
             "statusType": "auto",
             "x": 1290,
             "y": 2340,
             "wires": []
         },
         {
             "id": "49ac6b5689b749d8",
             "type": "change",
             "z": "7e6af0015415146d",
             "name": "setze topic, payload = off",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "payload",
                     "tot": "msg"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "off",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1030,
             "y": 2280,
             "wires": [
                 [
                     "8332c200351f1f67",
                     "46c147a7b8187acb"
                 ]
             ]
         },
         {
             "id": "46c147a7b8187acb",
             "type": "ioBroker out",
             "z": "7e6af0015415146d",
             "d": true,
             "name": "",
             "topic": "",
             "ack": "false",
             "autoCreate": "false",
             "stateName": "",
             "role": "",
             "payloadType": "",
             "readonly": "",
             "stateUnit": "",
             "stateMin": "",
             "stateMax": "",
             "x": 1260,
             "y": 2280,
             "wires": []
         }
      ]
      

      Das topic in der iobroker-Out Node bleibt natürlich unbesetzt.
      Ich würde aber lieber solche Arrays einmal einlesen und dann im Kontext abspeichern. Diese Rollen und Funktionen sind leider nicht direkt zugänglich, sondern nur über das Auslesen der Objekte. Und leider auch nicht über NodeRed direkt zugänglich.

      T 1 Reply Last reply Reply Quote 0
      • T
        Tableautin last edited by

        Super, besten Dank für die Erklärung. Ich denke ich werde damit in der nächsten Zeit mal herumspielen.
        Klingt ja relativ logisch vom Aufbau her, die einzelnen Probleme werden im Detail vorkommen 🙂

        Da ich nur meinen Alias-Baum verwende, sollte die zu lesende Menge an Objekten auch nicht zu groß sein, es wird wahrscheinlich nur ein paar Mal am Tag ausgeführt

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

          @mickym sagte in Rollen und Funktionen in ioBroker:

          Im 2. Schritt selektiert man alle IDs, die beispielsweise die Funktion "Licht" beinhalten und ein boolean State zum Beispiel haben.

          Sorry für die wahrscheinlich dumme Frage, aber mir fehlt leider ein wenig Erfahrung mit dem Syntax. Bei mir ist das Objekt ein wenig anders aufgebaut, da ich noch eine weitere Zwischenebene habe, die die Sprache spezifiziert.
          c8554622-c686-4206-804b-07a7227f4f2a-image.png

          Ich verwende momentan folgende Filterung im JSONata Editor, leider bekomme ich dann immer eine leere Liste zurück. Ich denke es liegt an dem falschen Zugriff auf die Unterebene im Objekt. Vielleicht kannst du mir kurz sagen, wie ich direkt darauf zugreifen kann.

          $.payload[enums.enum.functions.light='de'=\"Licht\"]._id
          

          Danke auf jeden Fall schon einmal.

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

            @tableautin Probiers mal so:

            $.payload[enums.'enum.functions.light'.de="Licht"]._id
            

            Nichts maskieren.

            4b2ec5fc-d98f-496e-9b5e-726aa50664e7-image.png

            falls das nicht klappt - dann musst du mir Dein ganzes Array hier in Code Tags reinkopieren.

            Code-Tags.gif

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

              und klappts?

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

                @mickym Scheint jetzt auf den ersten Blick zu laufen. Ich bekomme zumindest ein gefiltertes Array zurück, und das scheit die korrekten Werte zu enthalten.

                Danke nochmal für die Hilfe

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

                  Übrigens wenn Du für Deine Liste die States auslesen willst bzw. filtern willst, kannst Du mit

                  81debf0e-4186-4b93-8250-adbf7603056a-image.png

                  in der Eigenschaft den val mit nehmen und in den Filter einbauen, also

                  $.payload[enums.'enum.functions.light'.de="Licht" and val=true]._id
                  

                  und wenn Du die Namen gepflegt hast - kannst Du Dir diese anstelle der id ausgeben lassen.

                  $.payload[enums.'enum.functions.light'.de="Licht" and val=true].common.name
                  

                  Du siehst, wie genial man mit JSONATA auf Objekteigenschaften zugreifen kann.

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

                    @mickym Danke für die Erweiterung. Mal schauen ob ich es nutzen werde.
                    Da leider hin und wieder ioBroker Stati nicht ganz sauber sind ('uncertain' bei Szenen, etc) , so dass ich nicht garantieren kann, dass der value immer TRUE ist, werde ich wahrscheinlich nicht darauf filtern, sondern alle gefundenen Lampen direkt auf FALSE setzen, um danach immer einen klar definierten Zustand zu haben.

                    Die Möglichkeiten für JSONata werde ich sicherlich in Zukunft weiter nutzen, momentan bin ich froh, wenn ich mit den Objektstrukturen in NodeRed klarkomme 🙂

                    Falls es später jemand findet über die Suchfunktion, hier noch meine verwendete Filterregel, um alle Lichter auszugeben, die der Rolle "Switch" zugeordnet sind (das klappte bei mir mit den Shellys (Ausgänge) und den Zigbee Leuchten (Hue, Lidl, IKEA).

                    $.payload[enums.'enum.functions.light'.de="Licht" and common.role="switch"]._id
                    
                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @Tableautin last edited by

                      @tableautin Ich nutze diese Funktionen persönlich gar nicht und lasse die Zustände über eine JSON selbst aufbauen und speichere den Zustand in einem Datenpunkt. Damit bin ich unabhängig von diesen Definitionen der Rollen im iobroker.

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

                        ACHTUNG: Anscheinend kann man mit dem JS 5.0 nicht mehr die enums auslesen.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.0k
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        2
                        12
                        615
                        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