Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Frage] Verwendung von getForeignObjects (Adapter socketio)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] Verwendung von getForeignObjects (Adapter socketio)

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

      Für ein Web Frontend muss ich auf die Funktion getForeignObjects zugreifen.

      let promZones = new Promise((resolve, reject) => {
                    servConn._socket.emit('getForeignObjects', 'milight-smart-light*', 'channel',
                      function (err, _channels) {
                        if (err) {
                          reject(err)
                        }
      
                        resolve(_channels)
                      })
                  }).then(...)
      
      

      Das klappt nur wenn ich in der io-package.json des socketio-Adapters:

      "allowAdmin": true
      
      

      eintrage.

      Das hat den Hintergrund, dass in lib/socket.js explizit für die Nutzung mehrere Funktionen allowAdmin===true erwartet wird.

      if (that.settings.allowAdmin) {
      ...
      socket.on('getForeignObjects', function (pattern, type, callback) {
      ...}
      }
      
      

      Zum Aufruf von z.B. getObjects ist alllowAdmin===true nicht erforderlich, von daher verstehe ich die Logik nicht so ganz.

      Meine Frage: gibt es noch eine andere Möglichkeit getForeignObjects zu nutzen, ohne das ein Setzen von allowAdmin in der io-package.json erforderlich ist? Das wäre nämlich sehr unschön, da ein Nutzer des WFE erst händisch allowAdmin setzen müsste. Eigentlich ein NoGo. Jemand eine Idee was ich tun könnte?

      Carsten

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

        Hab die Frage noch mal hochgeholt, da ich immer noch keine Idee habe. Also liebe Mitentwickler wie macht oder würdet ihr es denn implementieren mit der Nutzung von getForeignObjects und der oben beschriebenen Problematik?

        Carsten

        1 Reply Last reply Reply Quote 0
        • Jey Cee
          Jey Cee Developer last edited by

          @carsten04:

          Zum Aufruf von z.B. getObjects ist alllowAdmin===true nicht erforderlich, von daher verstehe ich die Logik nicht so ganz. ` getObjects greift nur auf die Objekte des Adapters zu, mit getForeignObjects wird auf Objekte von anderen Adaptern zu gegriffen. Das wiederum setzt entsprechende rechte voraus.

          Ich seh hier aber gar keine Notwendigkeit getForeignObjects zu nutzen wenn getObjects funktioniert. Kannst du erklären warum du unbedingt foreign brauchst?

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

            Genau das macht getObjects gerade nicht. Hier bekommst Du die Objekte von allen Adapterinstanzen wieder, ich benötige aber nur die Objekte von allen Instanzen meines Adapters und genau das geht mit getForeignObjects. Deswegen finde ich die Einschränkung über allowAdmin auch nicht wirklich stringent.

            1 Reply Last reply Reply Quote 0
            • Jey Cee
              Jey Cee Developer last edited by

              Ich hab beim durchschauen der lib/socket.js so das Gefühl da ist etwas durcheinander gekommen.

              if (that.settings.allowAdmin)
              

              Diese if abfrage taucht 2 mal auf. Dazu mach ich mal einen issue auf Github auf.

              Das hilft dir aber nicht bei deinem eigentlichen Problem.

              Wenn @Bluefox oder @Appollon77 da mal schauen würden wäre sicher nicht verkehrt, weil ich der Meinung bin das "getForeignObjects" und "getObjects" entweder beide nur dann mit "allowAdmin === true" verwendet werden können oder eben ohne.

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

                Man kann auch getObjectView verwenden:

                `servConn._socket.emit('getObjectView', 'system', 'state', {startkey: 'milight-smart-light.', endkey: 'milight-smart-light.\u9999'}, function (err, res) {
                        if (!err && res) {
                            var _res   = {};
                            for (var i = 0; i < res.rows.length; i++) {
                                _res[res.rows[i].id] = res.rows[i].value;
                            }
                            console.log(JSON.stringify(_res));
                        } else {
                            console.log(JSON.stringify(err));
                        }
                });` [/i]
                
                s.bormann 1 Reply Last reply Reply Quote 0
                • carsten04
                  carsten04 Developer last edited by

                  Besten Dank für den Hinweis Bluefox. Werde ich morgen direkt testen. Gibt es denn einen Grund warum getObjects und getForeignObjects unterschiedlich behandelt werden?

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

                    getForeignObjects ist wegen cloud/admin reingerutscht.

                    Ansonsten war noch keine Anforderung es zu machen.

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

                      Jetzt muss ich dann doch noch einmal nachfragen: wie setzt Du denn dann im cloud- / admin-Adapter allowAdmin auf true, um getForeignObjects zu nutzen? Gibt es da eine einfache Möglichkeit?

                      Ergänzung: habe gerade mit getObjectView getestet. Klappt alles so wie gedacht (ohne allowAdmin), perfekt! Wie das mit dem cloud-/admin-Adapter funktioniert würde mich trotzdem sehr interessieren. Bin auf github im Quellcode nicht richtig weiter gekommen.

                      Danke

                      Carsten

                      1 Reply Last reply Reply Quote 0
                      • s.bormann
                        s.bormann Most Active @Bluefox last edited by s.bormann

                        @bluefox sagte in [Frage] Verwendung von getForeignObjects (Adapter socketio):

                        servConn._socket.emit('getObjectView', 'system', 'state', {startkey: 'milight-smart-light.', endkey: 'milight-smart-light.\u9999'}, function (err, res) {
                               if (!err && res) {
                                   var _res   = {};
                                   for (var i = 0; i < res.rows.length; i++) {
                                      _res[res.rows[i].id] = res.rows[i].value;
                                   }
                                   console.log(JSON.stringify(_res));
                               } else {
                                   console.log(JSON.stringify(err));
                               }
                        });
                        ````                                                                                                                                                                         });
                        

                        Hi,
                        habe das ganze auch gerade probiert, funktioniert auch so weit - außer, wenn ich versuche, die Enumerations damit zu bekommen. Also wenn ich milight-smart-light durch enum ersetze, gibt es ein leeres result. Gibt es hier was besonderes? Wie komme ich an die Enumerations?
                        Danke

                        EDIT: Hat sich erledigt! Habe inzwischen rausgefunden, dass man bei der Abfrage auch das state durch enum ersetzen muss, dann gehts.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        822
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        4
                        10
                        1177
                        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