Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Frage] Verwendung von getForeignObjects (Adapter socketio)

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    849

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[Frage] Verwendung von getForeignObjects (Adapter socketio)

Scheduled Pinned Locked Moved Entwicklung
10 Posts 4 Posters 1.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • carsten04C Online
    carsten04C Online
    carsten04
    Developer
    wrote on last edited by
    #1

    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
    0
    • carsten04C Online
      carsten04C Online
      carsten04
      Developer
      wrote on last edited by
      #2

      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
      0
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        wrote on last edited by
        #3

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

        Persönlicher Support
        Spenden -> paypal.me/J3YC33

        1 Reply Last reply
        0
        • carsten04C Online
          carsten04C Online
          carsten04
          Developer
          wrote on last edited by
          #4

          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
          0
          • Jey CeeJ Online
            Jey CeeJ Online
            Jey Cee
            Developer
            wrote on last edited by
            #5

            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.

            Persönlicher Support
            Spenden -> paypal.me/J3YC33

            1 Reply Last reply
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              wrote on last edited by
              #6

              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.bormannS 1 Reply Last reply
              0
              • carsten04C Online
                carsten04C Online
                carsten04
                Developer
                wrote on last edited by
                #7

                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
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  wrote on last edited by
                  #8

                  getForeignObjects ist wegen cloud/admin reingerutscht.

                  Ansonsten war noch keine Anforderung es zu machen.

                  1 Reply Last reply
                  0
                  • carsten04C Online
                    carsten04C Online
                    carsten04
                    Developer
                    wrote on last edited by
                    #9

                    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
                    0
                    • BluefoxB Bluefox

                      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.bormannS Offline
                      s.bormannS Offline
                      s.bormann
                      Most Active
                      wrote on last edited by s.bormann
                      #10

                      @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
                      1
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      773

                      Online

                      32.6k

                      Users

                      82.1k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe