Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Konfiguration fremder Adapter / Instanzen anderer Adapter

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Konfiguration fremder Adapter / Instanzen anderer Adapter

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

      Hallo zusammen,

      für einen meiner Adapter habe ich den MQTT Adapter als Dependency definiert. Ich will meine gesamte Kommunikation über den MQTT Adapter lenken und in meinem Adapter nur die Daten auswerten und States verwalten.

      Für diesen Zweck möchte ich mit meinem Adapter die MQTT Instanzen auslesen und wissen, ob die Instanz als Broker oder Client definiert wurde.

      Wie kann ich das anstellen?
      Mit adapter.getForeignObjects('system.adapter.mqtt', function(err, objects) { . .. }) führte zu keinem Erfolg.

      Jemand eine Idee?

      Cheers,
      Zefau

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Zefau last edited by paul53

        @Zefau
        system.adapter.mqtt ist kein Objekt !

        adapter.getForeignObject('system.adapter.mqtt.0', function(err, object) { . .. })
        

        bzw. weitere Instanzen.

        adapter.getForeignObjects() lässt sich so nicht anwenden. Aus dem Skript des js-controllers:

           /**
            * Get objects by pattern, by specific type and resolve their enums.
            *
            * Get all objects in the system of specified type. E.g.:
            *
            *        <pre><code>
            *            adapter.getForeignObjects('hm-rega.0.*', 'state', ['rooms', 'functions'], function (err, objs) {
            *              if (err) adapter.log.error('Cannot get object: ' + err);
            *              // objs look like:
            *              // {
            *              //    "hm-rega.0.ABC0000.1.STATE": {
            *              //        common: {...},
            *              //        native: {},
            *              //        type: 'state',
            *              //        enums: {
            *              //           'enums.rooms.livingroom': 'Living room',
            *              //           'enums.functions.light': 'Light'
            *              //       }
            *              //    },
            *              //    "hm-rega.0.ABC0000.2.STATE": {
            *              //        common: {...},
            *              //        native: {},
            *              //        type: 'state',
            *              //        enums: {
            *              //           'enums.rooms.sleepingroom': 'Sleeping room',
            *              //           'enums.functions.window': 'Windows'
            *              //       }
            *              //    }
            *            }
            *        </code></pre>
            *
            * @alias getForeignObjects
            * @memberof Adapter
            * @param {string} pattern object ID/wildchars
            * @param {string} type type of object: 'state', 'channel' or 'device'. Default - 'state'
            * @param {string|string[]} enums object ID, that must be overwritten or created.
            * @param {object} options optional user context
            * @param {function} callback return result
            *        <pre><code>
            *            function (err, obj) {
            *              if (err) adapter.log.error('Cannot get object: ' + err);
            *            }
            *        </code></pre>
            */
        
        Zefau 1 Reply Last reply Reply Quote 0
        • Zefau
          Zefau @paul53 last edited by

          @paul53 Habe inzwischen mehrere Adapter entwickelt (nello, nuki2, plex) und muss leider sagen, dass die Doku für Entwickler wirklich mist ist.

          Habe als Quelle bisher immer https://github.com/ioBroker/ioBroker.docs/blob/master/docs/en/dev/adapterdev.md#how-to-read-object genutzt.
          Dort war adapter.getForeignObject('otherAdapter.X.someState', function (err, obj) { angegeben.

          Vielen Dank für die Rückmeldung. Ich probier das mal und werde zukünftig direkt in die Doku des Quelltextes des js-controllers gucken 🙂

          Cheers,
          Zefau

          AlCalzone 1 Reply Last reply Reply Quote 0
          • Zefau
            Zefau last edited by

            @paul53 Nochmal danke für die Hilfe.

            Ich habe im ioBroker.discovery Adapter zufällig gefunden, was ich gesucht habe:

            function getMQTTInstances(callback)
            {
            	adapter.objects.getObjectView('system', 'instance', {startkey: 'system.adapter.mqtt.', endkey: 'system.adapter.mqtt.\u9999'}, (err, instances) =>
            	{
            		if (instances && instances.rows)
            		{
            			let result = [];
            			instances.rows.forEach(row => {
            				result.push({id: row.id.replace('system.adapter.', ''), config: row.value.native.type})
            			});
            			
            			callback(null, result);
            		}
            		else
            			callback('Could not retrieve MQTT instances!');
            	});
            }
            

            Damit erhalte ich eine Auflistung der Instanzen des MQTT Adapters.
            An dieser Stelle nur zur Vollständigkeit, falls mal jemand über die Suche hierher findet.

            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer @Zefau last edited by

              @Zefau sagte in Konfiguration fremder Adapter / Instanzen anderer Adapter:

              Dort war adapter.getForeignObject [...] angegeben

              Mit adapter.getForeignObjects [...] führte zu keinem Erfolg.

              Das sind auch zwei unterschiedliche Methoden. Mit "s" (Mehrzahl) vs. ohne "s" (Singular).

              @Zefau sagte in Konfiguration fremder Adapter / Instanzen anderer Adapter:

              muss leider sagen, dass die Doku für Entwickler wirklich mist ist.

              Da muss ich dir zustimmen. Ich habe einen Mittelweg gelöst, der IMO zwei Fliegen mit einer Klappe schlägt. Bei Verwendung eines aktuellen Templates mit einem Editor der TypeScript versteht (VSCode / WebStorm) solltest du zumindest anhand der Syntaxhilfe Unterstützung beim Aufruf der Funktionen bekommen. Mit der richtigen Option wird auch gemeckert, wenn du Funktionen falsch verwendest.

              Zugegeben, die aus dem Quellcode kopierte Beschreibung der Funktion ist auch nicht wirklich gut:

              Get foreign objects by pattern, by specific type and resolve their enums.

              Wenn du hierzu Verbesserungsvorschläge hast, immer her damit. Am besten Issues in https://github.com/ioBroker/adapter-core eröffnen.

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

              Support us

              ioBroker
              Community Adapters
              Donate

              942
              Online

              31.6k
              Users

              79.4k
              Topics

              1.3m
              Posts

              adapter
              3
              5
              703
              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