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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Das volle Potential der Objekte nutzen!

NEWS

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

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

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

Das volle Potential der Objekte nutzen!

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
how-to
9 Beiträge 3 Kommentatoren 4.2k Aufrufe 9 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Jey CeeJ Online
    Jey CeeJ Online
    Jey Cee
    Developer
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    7
    • Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      1
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        1
        • Jey CeeJ Online
          Jey CeeJ Online
          Jey Cee
          Developer
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          2
          • Jey CeeJ Online
            Jey CeeJ Online
            Jey Cee
            Developer
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #7

                @Jey-Cee

                Sehr coole, einfache Erklärung :+1: :sunglasses:

                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 Antwort Letzte Antwort
                0
                • Jey CeeJ Online
                  Jey CeeJ Online
                  Jey Cee
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  Nach Oben mit dir

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

                  1 Antwort Letzte Antwort
                  0
                  • Jey CeeJ Online
                    Jey CeeJ Online
                    Jey Cee
                    Developer
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

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

                    423

                    Online

                    32.4k

                    Benutzer

                    81.4k

                    Themen

                    1.3m

                    Beiträge
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2025
                    logo
                    • Anmelden

                    • Du hast noch kein Konto? Registrieren

                    • Anmelden oder registrieren, um zu suchen
                    • Erster Beitrag
                      Letzter Beitrag
                    0
                    • Home
                    • Aktuell
                    • Tags
                    • Ungelesen 0
                    • Kategorien
                    • Unreplied
                    • Beliebt
                    • GitHub
                    • Docu
                    • Hilfe