Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    347

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.5k

[Frage] Verwendung von getForeignObjects (Adapter socketio)

Geplant Angeheftet Gesperrt Verschoben Entwicklung
10 Beiträge 4 Kommentatoren 1.5k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • carsten04C Online
    carsten04C Online
    carsten04
    Developer
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • carsten04C Online
      carsten04C Online
      carsten04
      Developer
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • carsten04C Online
          carsten04C Online
          carsten04
          Developer
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • Jey CeeJ Online
            Jey CeeJ Online
            Jey Cee
            Developer
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • carsten04C Online
                carsten04C Online
                carsten04
                Developer
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #8

                  getForeignObjects ist wegen cloud/admin reingerutscht.

                  Ansonsten war noch keine Anforderung es zu machen.

                  1 Antwort Letzte Antwort
                  0
                  • carsten04C Online
                    carsten04C Online
                    carsten04
                    Developer
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                      1
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      759

                      Online

                      32.5k

                      Benutzer

                      81.8k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe