Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Problem] Verwendung getObject in Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Problem] Verwendung getObject in Adapter

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

      probier mal

      getForeignObject
      
      unltdnetworx 1 Reply Last reply Reply Quote 0
      • unltdnetworx
        unltdnetworx Developer @htrecksler last edited by unltdnetworx

        @htrecksler sagte in [Problem] Verwendung getObject in Adapter:

        getForeignObject

        Danke für den Vorschlag. War aber nicht das Problem. Es handelt sich um einen Datenpunkt des eigenen Adapters, somit wäre es nicht nötig. Aber hab es getestet:

        adapter.getForeignObject('snips.0.devices.default', function (err, obj) {
                adapter.log.error("Test: " + JSON.stringify(obj));
            })
        

        liefert das gleiche Ergebnis.

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

          Das Callback-Argument von getObject sollte eigentlich eine optionale Eigenschaft enums enthalten. Bist du sicher, dass das angefragte Objekt zu einer Enum gehört?

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

            @AlCalzone
            Da bin ich leider sicher. Siehe das Skript im Javascript Adapter. Liefert genau die gewünschten Informationen. Wenn auch aus irgendwelchen Gründen anders als in allen Threads hier erklärt.

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

              @unltdnetworx sagte in [Problem] Verwendung getObject in Adapter:

              Siehe das Skript im Javascript Adapter

              Der Skripte-Adapter macht noch zusätzliche Magie unter der Haube. Schau dir mal im Admin die Objektdefinition an oder (noch besser) poste sie hier.

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

                @AlCalzone
                Dann liegt es wohl daran, hatte schon fast sowas vermutet. Die Ausgabe im Adapter passt ja eigentlich zum Admin.

                Dann muss ich wohl mal den Javascript-Adapter zerlegen. 😞

                Zusammengefasst kann man mit getObject außerhalb des Javscript-Adapters keine enums ausgeben lassen?!

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

                  @unltdnetworx Es gibt Möglichkeiten, an die Enums zu kommen. Ich habe sie nur nicht im Kopf. Stöber mal durch die Syntaxhilfe - ich frag auch mal wen.

                  Dutchman 1 Reply Last reply Reply Quote 0
                  • Dutchman
                    Dutchman Developer Most Active Administrators @AlCalzone last edited by

                    @AlCalzone sagte in [Problem] Verwendung getObject in Adapter:

                    @unltdnetworx Es gibt Möglichkeiten, an die Enums zu kommen. Ich habe sie nur nicht im Kopf. Stöber mal durch die Syntaxhilfe - ich frag auch mal wen.

                    beispiel :

                    getObject('hm-rpc.0.OEQ0423936.1.STATE', 'functions').enumIds
                    
                    
                    unltdnetworx 2 Replies Last reply Reply Quote 0
                    • unltdnetworx
                      unltdnetworx Developer @Dutchman last edited by

                      @Dutchman
                      Vielen Dank, ich probier es heute Abend mal.

                      1 Reply Last reply Reply Quote 0
                      • unltdnetworx
                        unltdnetworx Developer @Dutchman last edited by unltdnetworx

                        @Dutchman
                        Jetzt muss ich doch kurz mal nachfragen. Hab es noch nicht gestestet, aber es geht hier um einen Adapter, nicht um ein Skript. Da müsstest es doch mit einem Callback ausgeführt werden, oder sehe ich das falsch? Dann komme ich wieder auf mein getObject vom Anfang und da ist kein enumsID, functions o.ä. enthalten.

                        1 Reply Last reply Reply Quote 0
                        • unltdnetworx
                          unltdnetworx Developer last edited by unltdnetworx

                          var test = adapter.getObject('devices.default', 'functions').enumIds
                          adapter.log.error("Test: " + JSON.stringify(test));
                          

                          Ich hatte es schon befürchtet:

                          by controller[0]: TypeError: Cannot read property 'enumIds' of undefined 
                          

                          @AlCalzone sagte in [Problem] Verwendung getObject in Adapter:

                          Schau dir mal im Admin die Objektdefinition an oder (noch besser) poste sie hier

                          {
                            "from": "system.adapter.snips.0",
                            "user": "system.user.admin",
                            "ts": 1560161784751,
                            "common": {
                              "name": "default"
                            },
                            "native": {},
                            "acl": {
                              "object": 1638,
                              "owner": "system.user.admin",
                              "ownerGroup": "system.group.administrator"
                            },
                            "_id": "snips.0.devices.default",
                            "type": "device"
                          } 
                          

                          Unbenannt-1.jpg

                          Das wäre der Channel, JS wirft das gewünschte aus, der Adapter nicht. Ich werde mir wohl bei Gelegenheit wirklich den Code des JS-Adapters ansehen müssen.

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

                            @unltdnetworx Wenn ich mir https://github.com/ioBroker/ioBroker.js-controller/blob/master/lib/adapter.js#L3139 so anschaue, musst du manuell die Enums lesen und schauen, ob dein Objekt sich darin befindet. Dazu sollte die Methode getEnums (und verwandte) brauchbar sein.

                            1 Reply Last reply Reply Quote 0
                            • unltdnetworx
                              unltdnetworx Developer last edited by unltdnetworx

                              Zum momentanen Zwischenstand, meine aktuelle Lösung:

                              adapter.getEnums('rooms', (err, res) => {
                                  if (res) {
                                      let _result = res['enum.rooms'];
                                      
                                      for ( let rooms in _result) {
                                          if(_result[rooms].common.members == adapter.namespace + '.devices.' + roomid){
                                              //Raum in Enumeration
                                          }
                                      }
                                  } else if (err) {
                                      adapter.log.warn('No room set for device in objects enumeration.')
                                  }
                              });
                              

                              Ich stelle den Thread noch nicht auf gelöst, da das auf meinem Windows-Entwicklungssystem funktioniert, auf meinem Linux-Produktivsystem jedoch den Raum als undefined meldet.

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

                                @unltdnetworx sagte in [Problem] Verwendung getObject in Adapter:

                                auf meinem Linux-Produktivsystem jedoch den Raum als undefined meldet.

                                Logge doch zum Debuggen mal res auf beiden Systemen als JSON. Dann sollten wir schnell sehen warum.

                                1 Reply Last reply Reply Quote 0
                                • unltdnetworx
                                  unltdnetworx Developer last edited by unltdnetworx

                                  Der Vollständigkeit halber noch die Auflösung für mein Problem. Ich hatte dem Raum mehrere Geräte zugeordnet und nur mit die Gesamtheit der Geräte aller Räume mit dem enum-Eintrag des gesuchten Gerätes verglichen. Wenn man alle Geräte in jedem Raum einzeln vergleicht, dann funktioniert es. Im Testsystem war nur ein Gerät zugeorndet und somit funktionsfähig.

                                  adapter.getEnums('rooms', (err, res) => {
                                      if (res) {
                                          let _result = res['enum.rooms'];
                                          
                                          for ( let rooms in _result) {
                                              for (let thingInRoom in _result[rooms].common.members) {
                                                  if(_result[rooms].common.members[thingInRoom] == adapter.namespace + '.devices.' + roomid){
                                                      //Gerät ist in enum Räume enthalten --> Code einfügen
                                                  }
                                              }
                                          }
                                          output = output.replace(result.slots[i].rawValue, slotRoom)
                                          if(--deviceTasksToGo === 0) {
                                              loopDeviceComplete();
                                          }
                                      } else if (err) {
                                          adapter.log.warn('No room set for device in objects enumeration.')
                                          if(--deviceTasksToGo === 0) {
                                              loopDeviceComplete();
                                          }
                                      }
                                  });
                                  

                                  Danke an alle für die Vorschäge.

                                  1 Reply Last reply Reply Quote 0
                                  • unltdnetworx
                                    unltdnetworx Developer last edited by

                                    Offtopic:
                                    Kann man den Titel nicht mehr ändern? Wollte auf "gelöst" stellen.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    781
                                    Online

                                    31.8k
                                    Users

                                    79.9k
                                    Topics

                                    1.3m
                                    Posts

                                    javascript
                                    4
                                    17
                                    2516
                                    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