Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. im Adapter alle eigenen Objekte durchgehen?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    im Adapter alle eigenen Objekte durchgehen?

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

      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?

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

        @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
            }
        });
        
        1 Reply Last reply Reply Quote 0
        • ELK
          ELK last edited by

          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?

          foxriver76 1 Reply Last reply Reply Quote 0
          • foxriver76
            foxriver76 Developer @ELK last edited by

            @ELK

            ist der Aufruf in promises geschachtelt? Dann wird der Fehler vermutlich vertuscht durch eine UnhandeldPromiseRejectionWarning. Du leitest den cb von getStates klassisch mit function ein statt einer Arrow-Function, dadurch wird ein neuer this Kontext geschaffen. Was auch immer this vorher für einen Fokus hatte, ist somit dahin und this wird im cb kein Attribut log haben.

            1 Reply Last reply Reply Quote 0
            • ELK
              ELK last edited by

              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!

              foxriver76 1 Reply Last reply Reply Quote 0
              • foxriver76
                foxriver76 Developer @ELK last edited by

                @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.

                1 Reply Last reply Reply Quote 0
                • ELK
                  ELK last edited by

                  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?

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

                    @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.

                    1 Reply Last reply Reply Quote 0
                    • ELK
                      ELK last edited by

                      ok, danke... 7500 Zeilen... ich fange mal an 🙂

                      1 Reply Last reply Reply Quote 0
                      • ELK
                        ELK last edited by

                        ö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.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        905
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        adapter entwicklung
                        3
                        10
                        573
                        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