NEWS
Konfiguration fremder Adapter / Instanzen anderer Adapter
-
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?
Mitadapter.getForeignObjects('system.adapter.mqtt', function(err, objects) { . .. })
führte zu keinem Erfolg.Jemand eine Idee?
Cheers,
Zefau -
@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> */
-
@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 waradapter.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 -
@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. -
@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.