NEWS
im Adapter alle eigenen Objekte durchgehen?
-
Moin! (bin erst seit ein paar Tagen im Thema...)
Im Javascript-Adapter mache ich dies:var Objekte; Objekte = $("mein-adapter.0.Obj.*")
Obj ist ein Ordner, in dem sich weitere Ordner befinden, in denen ich Datenpunkte durchsuchen möchte. Externe Hardware sendet mir eine ID (0..255), anhand der ich dann in "Objekte" das zu ändernde Objekt suche (ist eine Eigenschaft "Nr" unter "native"). Dieser Ansatz erschien mir richtig, muss er aber nicht sein...
Nun gibt es ja im Adapter den Selector nicht. Wie kann ich nun in meinen eigenen Objekten jenes mit der gesuchten Nummer finden?
-
@ELK
Aus der Datei adapter.js (js-controller):/** * Read all states of this adapter, that pass the pattern * * Allows to read all states of current adapter according to pattern. To read all states of current adapter use: * <pre><code> * adapter.getStates('*', function (err, states) { * for (var id in states) { * adapter.log.debug('"' + id + '" = "' + states[id].val); * } * }); * </code></pre> * * @alias getStates * @memberof Adapter * @param {string} pattern string in form 'adapter.0.*' or like this. It can be array of IDs too. * @param {object} options optional argument to describe the user context * @param {function} callback return result function (err, states) {}, where states is an object like {"ID1": {"val": 1, "ack": true}, "ID2": {"val": 2, "ack": false}, ...} */
adapter.getStates('mein-adapter.0.Obj.*', function (err, states) { for (var id in states) { // Auswertung } });
-
Danke für die schnelle Antwort!
Sieht gut aus, doch leider klemmt es bei mir wohl noch irgendwo anders...this.log.info("vor getStates"); adapter.getStates("mein-adapter.0.Obj.*",function(err,states) { this.log.info("in getStates"); for(var id in states) { this.log.info(id); } }); this.log.info("nach getStates");
ergibt im Log "vor getStates". Und das wars dann. Auch kein Fehler im Log. Stille...
Das muss was unglaublich blödes sein... aber was? -
ist der Aufruf in promises geschachtelt? Dann wird der Fehler vermutlich vertuscht durch eine
UnhandeldPromiseRejectionWarning
. Du leitest den cb vongetStates
klassisch mitfunction
ein statt einer Arrow-Function, dadurch wird ein neuerthis
Kontext geschaffen. Was auch immerthis
vorher für einen Fokus hatte, ist somit dahin undthis
wird im cb kein Attributlog
haben. -
Danke für die Geduld...
Geschachtelt ist nix und auch mit Arrow Function hat sich nichts geändert. So sieht es jetzt aus:async onReady() { this.log.info("vor getStates..."); adapter.getStates("mein-adapter.0.Obj.*", (err, states) => { this.log.info("in getStates..."); for(var id in states) { this.log.info(id.toString() + JSON.stringify(id)); } });
danach kommen noch div. Initialisierungen, die aber nicht mehr erreicht werden.
Ist evtl. der Objektpfad falsch, so dass es keinen Rückgabewert gibt? Ich glaube, da habe ich noch Verständnisschwierigkeiten...
Im Ordner mein-adapter.0 habe ich den Ordner Obj manuell angelegt, in dem sich verschiedene weitere Ordner befinden, in denen sich jeweils eine Anzahl Datenpunktobjekte befinden (schrieb ich ja oben schon). Ich möchte also alle Objekte unterhalb von mein-adapter.0.Obj durchgehen.
Danke für die Anteilnahme! -
@ELK Hast du den kompletten Code irgendwo zur Verfügung? Du sagst ja, dass 'in getStates ...' nicht geloggt wird, der cb also nie ausgeführt wird.
-
ja, klar... aber im Moment habe ich den Eindruck, dass ich irgendwelche ganz grundlegenden Fehler habe/mache. Bevor ich euch weiter sinnlos Zeit stehle, wühle ich erstmal etwas weiter. Ich schreibe wieder, wenn ich etwas qualifizierter sagen kann, was ich gemacht habe...
Die Dokumentation der im Adapter verwendbaren Funktionen erscheint mir noch nicht einmal lückenhaft zu sein, bestenfalls "rudimentär angedeutet". Oder gibt es irgendwo noch weitere Informationen? -
@ELK sagte:
bestenfalls "rudimentär angedeutet". Oder gibt es irgendwo noch weitere Informationen?
Da stimme ich zu. Auf Github zum js-controller sind innerhalb der Datei adapter.js einige Funktionen vor ihrer Deklaration recht ausführlich kommentiert.
-
ok, danke... 7500 Zeilen... ich fange mal an
-
öhm.... kann ich irgendwie bessere Debugmeldungen bekommen? Mein Adapter steht schon auf debug, aber wenn bestimmte Fehler auftreten, passiert einfach kommentarlos nichts. Mein eigentlich gelöstes Kontextproblem von weiter oben war ja im log nicht zu sehen.