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

                                  749
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

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