Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Das volle Potential der Objekte nutzen!

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    12
    2
    276

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

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

Das volle Potential der Objekte nutzen!

Das volle Potential der Objekte nutzen!

Scheduled Pinned Locked Moved ioBroker Allgemein
how-to
9 Posts 3 Posters 4.2k Views 9 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Jey CeeJ Online
    Jey CeeJ Online
    Jey Cee
    Developer
    wrote on last edited by Jey Cee
    #1

    Immer wieder bekomme ich Anfragen (auch von Entwicklern) ob es nicht möglich wäre Statische Daten, also Namen, IP Adressen oder ähnliches in einem State aus zu geben.
    Auch bei anderen Adaptern sehe ich öfter das Statische Daten in States aus gegeben werden, dabei ist das oft gar nicht Nötig. Damit verschwendet man unnötig Ressourcen und macht den Objektbaum unübersichtlich.
    Deswegen möchte ich an dieser Stelle mal auf "native" einen Bestandteil der Objekte eingehen.

    1. Basics
    2. Verwaltung im Admin
    3. Verwendung im JS Adapter
    4. Verwendung in VIS

    Persönlicher Support
    Spenden -> paypal.me/J3YC33

    MicM 1 Reply Last reply
    7
    • Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      wrote on last edited by
      #2

      1. Basics

      • Ein Objekt ist kein State => Objekte dienen der Verwaltung, States zur Datenhaltung.

      • Ein State Existiert nicht ohne Objekt => Bedeutet es wird für jeden State ein Objekt angelegt und sie sind miteinander Verknüpft.

      • Ein Objekt in ioBroker ist eine JSON Struktur, die wie folgt aussieht:

      {
        "type": "device",
        "common": {
          "name": "192.168.0.233"
        },
        "native": {
          "enabled": true,
          "ip": "192.168.0.233",
          "mac": "00:0e:58:35:e6:2a",
          "vendor": "Sonos Inc., 614 Chapala St., Santa Barbara CA 93101, United States"
        },
        "from": "system.adapter.net-tools.0",
        "user": "system.user.admin",
        "ts": 1599989452490,
        "_id": "net-tools.0.000e5835e62a",
        "acl": {
          "object": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        }
      }
      

      Für unsere Betrachtung spielt nur der Key "native" eine Rolle.
      Wie man in dem Beispiel sieht sind hier verschiedene Daten enthalten. In den meisten Objekten ist dieser Teil leer, aber er ist immer vorhanden.
      Die Daten in native werden üblicherweise vom Adapter geschrieben und können für die Unterschiedlichsten Zwecke verwendet werden. Andere Adapter und der JS Controller ignorieren diesen Teil und verändern dort nichts.

      Am häufigsten werden dort Daten abgelegt die der Adapter für Funktionen benötigt.
      Es können jedoch auch Statische Daten in native abgelegt werden, die dann an verschiedenen Stellen angezeigt werden können, z.B. in der Adapter Konfiguration.

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      paul53P 1 Reply Last reply
      1
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        wrote on last edited by
        #3

        2. Verwaltung im Admin

        Die Objekte lassen sich im Tab Objekte verwalten. Bekannt dürfte vor allem die Möglichkeit sein Objekte an zu legen oder löschen. Für die erweiterte Verwaltung muss man auf das Stift-Symbol am Ende der Zeile neben dem Mülleimer Klicken.
        Anschließen sieht man so ein Fenster:

        745f461a-b34d-49c9-a55a-1877a7acafa3-image.png
        Je nach Objekt Typ sieht man sehr Unterschiedliche Informationen oder gar keine.

        55fabb4d-e738-4da5-8292-3ee96c835f30-image.png
        Wechselt man in den Tab Nativ werden die Informationen aus native angezeigt. Hier kann man sie auch bearbeiten, löschen oder neue Hinzufügen. Hierbei ist Vorsicht geboten, das verändern oder löschen kann unerwünschte Folgen haben. Neue Einträge Hinzufügen hingegen ist mit geringem Risiko verbunden, trotzdem sollte man das nur bei Selbst erstellten Objekten machen.

        Persönlicher Support
        Spenden -> paypal.me/J3YC33

        1 Reply Last reply
        1
        • Jey CeeJ Online
          Jey CeeJ Online
          Jey Cee
          Developer
          wrote on last edited by
          #4

          3. Verwendung im JS Adapter

          Im JS Adapter gibt es die Funktion getObject(), diese liefert das gesamte Object als JSON zurück.
          Dadurch kann man sehr einfach die Daten auslesen die man haben will.

          Beispiel:

          let obj = getObject('net-tools.0.000e5835e62a');
          console.log(obj.native.ip);  //erwatete Ausgabe: 192.168.0.233
          

          obj = ganzes Objekt
          native = Key "native"
          ip = Key "ip" ist ein Element von native

          Persönlicher Support
          Spenden -> paypal.me/J3YC33

          1 Reply Last reply
          2
          • Jey CeeJ Online
            Jey CeeJ Online
            Jey Cee
            Developer
            wrote on last edited by
            #5

            4. Verwendung in VIS

            Out-of-the-Box kann man nicht auf native eines Objekts zugreifen, dafür gibt es kein Widget, wäre aber wohl möglich.
            Um das dennoch zu bewerkstelligen habe ich ein Skript erstellt das man im VIS Editor einfügen kann. Anschließend kann das "basic - String" Widget zum Anzeigen der gewünschten Daten aus native verwendet werden.

            1. Skript einfügen (Code am Ende):
              29e0ea79-8e84-4a52-9405-290406de3e1e-image.png

            2. Dem Widget die CSS Klasse native-XXX zuweisen. XXX steht für den Key dessen Wert angezeigt werden soll.
              3d3f491a-aede-4470-bc87-7735e9576724-image.png

            3. Object Auswählen
              af924164-d435-42a1-876d-e2595946ecc6-image.png


            Anmerkung: "Voranstellen HTML" und "HTML anhängen" Funktioniert nicht.

            Skript:

            const timeout = 50;
            
            $(document).ready(function(){
                setTimeout( () => {
                    getNativeData();   
                }, timeout)
                
            });
            
            function getNativeData(){
                
                const nativeElements = document.querySelectorAll('div[class*="native-"]');
                
                for (let i = 0; i <= nativeElements.length - 1; i++) {
                    const arr = [ ...nativeElements[i].classList ];
                    const propName = arr.find(checkForNative).replace('native-', '');
                    const id = nativeElements[i].lastElementChild.lastElementChild.dataset.oid;
                      
                      vis.conn.getObject(id, true, (err, obj) => {
                          if (!err){
                              nativeElements[i].lastElementChild.lastElementChild.outerText = obj.native[propName];
                          }
                            
                        })
                }
            }
            
            function checkForNative(className) {
                const regex = new RegExp('native-');
                let finding = className.match(regex);
                
                return finding;
            }
            

            Persönlicher Support
            Spenden -> paypal.me/J3YC33

            1 Reply Last reply
            2
            • Jey CeeJ Jey Cee

              1. Basics

              • Ein Objekt ist kein State => Objekte dienen der Verwaltung, States zur Datenhaltung.

              • Ein State Existiert nicht ohne Objekt => Bedeutet es wird für jeden State ein Objekt angelegt und sie sind miteinander Verknüpft.

              • Ein Objekt in ioBroker ist eine JSON Struktur, die wie folgt aussieht:

              {
                "type": "device",
                "common": {
                  "name": "192.168.0.233"
                },
                "native": {
                  "enabled": true,
                  "ip": "192.168.0.233",
                  "mac": "00:0e:58:35:e6:2a",
                  "vendor": "Sonos Inc., 614 Chapala St., Santa Barbara CA 93101, United States"
                },
                "from": "system.adapter.net-tools.0",
                "user": "system.user.admin",
                "ts": 1599989452490,
                "_id": "net-tools.0.000e5835e62a",
                "acl": {
                  "object": 1636,
                  "owner": "system.user.admin",
                  "ownerGroup": "system.group.administrator"
                }
              }
              

              Für unsere Betrachtung spielt nur der Key "native" eine Rolle.
              Wie man in dem Beispiel sieht sind hier verschiedene Daten enthalten. In den meisten Objekten ist dieser Teil leer, aber er ist immer vorhanden.
              Die Daten in native werden üblicherweise vom Adapter geschrieben und können für die Unterschiedlichsten Zwecke verwendet werden. Andere Adapter und der JS Controller ignorieren diesen Teil und verändern dort nichts.

              Am häufigsten werden dort Daten abgelegt die der Adapter für Funktionen benötigt.
              Es können jedoch auch Statische Daten in native abgelegt werden, die dann an verschiedenen Stellen angezeigt werden können, z.B. in der Adapter Konfiguration.

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by paul53
              #6

              @Jey-Cee sagte:

              Ein Objekt in ioBroker ist eine JSON Struktur

              Nur die Darstellung in der RAW-Ansicht des Admin-Adapters ist ein JSON, das beim Speichern in ein Objekt gewandelt wird.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              • Jey CeeJ Jey Cee

                Immer wieder bekomme ich Anfragen (auch von Entwicklern) ob es nicht möglich wäre Statische Daten, also Namen, IP Adressen oder ähnliches in einem State aus zu geben.
                Auch bei anderen Adaptern sehe ich öfter das Statische Daten in States aus gegeben werden, dabei ist das oft gar nicht Nötig. Damit verschwendet man unnötig Ressourcen und macht den Objektbaum unübersichtlich.
                Deswegen möchte ich an dieser Stelle mal auf "native" einen Bestandteil der Objekte eingehen.

                1. Basics
                2. Verwaltung im Admin
                3. Verwendung im JS Adapter
                4. Verwendung in VIS
                MicM Offline
                MicM Offline
                Mic
                Developer
                wrote on last edited by
                #7

                @Jey-Cee

                Sehr coole, einfache Erklärung 👍 😎

                Ich denke, "unser" Unverständnis bezüglich States (und dass dahinter ein Objekt ist) kommt sicherlich auch daher, weil viele, mich eingeschlossen, halt in ioBroker mit Blockly/JS des JS-Adapters einsteigen, und da wird dank dem Konzept von Bluefox und aller Core-Entwickler dem Anwender bereits sehr vieles abgenommen, d.h. etwa mit createState(), getState(), setState(), ohne dass man checkt und checken muss, was das so im Hintergrund bedeutet, es funktioniert halt einfach und logisch, etwa wenn man einen createState() losfeuert, etc... 😉
                Eigentlich erst mit Start in der Adapter-Entwicklung habe ich bzw. musste ich mich damit näher beschäftigen und hab anfangs auch nicht gecheckt, warum einerseits adapter.setObjectNotExistsAsync() notwendig ist um einen neuen "State" (also Objekt!) zu erzeugen (im JS-Adapter reichte da ja ein createState()), anderseits ich mit adapter.setStateAsync() ich einen State setzen kann...

                1 Reply Last reply
                0
                • Jey CeeJ Online
                  Jey CeeJ Online
                  Jey Cee
                  Developer
                  wrote on last edited by
                  #8

                  Nach Oben mit dir

                  Persönlicher Support
                  Spenden -> paypal.me/J3YC33

                  1 Reply Last reply
                  0
                  • Jey CeeJ Online
                    Jey CeeJ Online
                    Jey Cee
                    Developer
                    wrote on last edited by
                    #9

                    @jey-cee sagte in Das volle Potential der Objekte nutzen!:

                    Nach Oben mit dir

                    Und wieder mal hoch mit dir

                    Persönlicher Support
                    Spenden -> paypal.me/J3YC33

                    1 Reply Last reply
                    0
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    Support us

                    ioBroker
                    Community Adapters
                    Donate
                    FAQ Cloud / IOT
                    HowTo: Node.js-Update
                    HowTo: Backup/Restore
                    Downloads
                    BLOG

                    199

                    Online

                    32.4k

                    Users

                    81.3k

                    Topics

                    1.3m

                    Posts
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    ioBroker Community 2014-2025
                    logo
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Recent
                    • Tags
                    • Unread 0
                    • Categories
                    • Unreplied
                    • Popular
                    • GitHub
                    • Docu
                    • Hilfe