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. [Gelöst] Discovery über Ping

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[Gelöst] Discovery über Ping

Geplant Angeheftet Gesperrt Verschoben Entwicklung
14 Beiträge 4 Kommentatoren 912 Aufrufe
  • Ä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.
  • foxriver76F Offline
    foxriver76F Offline
    foxriver76
    Developer
    schrieb am zuletzt editiert von
    #1

    Hi Leute,

    ich hätte mal eine Frage bezüglich der Discovery Funktion mittels Ping. In meinem Fall suche ich ein Gerät, dass ich über die REST-API eindeutig identifizieren könnte. UPnP nicht vorhanden.

    Wie ist das korrekte Vorgehen? So wie ich das aktuell verstehe:

    sende PING an Broadcast 
    Für jedes antwortende Device: 
    	Spreche die API an und prüfe ob ich eine korrekte Antwort bekomme
    
    

    Gibt es da ein sinnvolleres Vorgehen?

    beste Grüße

    fox

    Videotutorials & mehr

    Hier könnt ihr mich unterstützen.

    1 Antwort Letzte Antwort
    0
    • foxriver76F Offline
      foxriver76F Offline
      foxriver76
      Developer
      schrieb am zuletzt editiert von
      #2

      Push, mit Wink an Apollon 8-)

      Videotutorials & mehr

      Hier könnt ihr mich unterstützen.

      1 Antwort Letzte Antwort
      0
      • apollon77A Offline
        apollon77A Offline
        apollon77
        schrieb am zuletzt editiert von
        #3

        Sehr viel aber nicht alles.

        Discovery selbst macht Ping und alle Discovery checks mit Typ Ping werden dann aufgerufen.

        Schau in Discovery mal diese durch. Da gibts welche die am Ende dann einen http request an eine bestimmte url der ip machen und nach Antwort auswerten ob’s gefunden wurde.

        Gefunden?

        Gesendet vom Handy …

        Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

        • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
        • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
        1 Antwort Letzte Antwort
        0
        • foxriver76F Offline
          foxriver76F Offline
          foxriver76
          Developer
          schrieb am zuletzt editiert von
          #4

          Vielen Dank, habe gute Beispiele gefunden, bzw habt ihr ja schon einen Großteil der Arbeit erledigt.

          Nur habe ich eben versucht den Discovery Adapter zu erweitern, habe entsprechendes File nach /lib/adapters geschoben, Upload und Neustart v Discovery gemacht. Nur im debug log sehe ich, dass er mein File gar nicht berücksichtigt. Habe auch logging ins File eingebaut was nicht ausgespuckt wird. Hast du eine Idee woran es liegen könnte?

          ! ````
          const tools = require(__dirname + '/../tools.js');
          ! function addSonnen(ip, device, data, options, callback) {
          var instance = tools.findInstance(options, 'sonnen', (obj) => {
          return (obj.native.ip === ip || obj.native.ip === device._name);
          });
          ! if (!instance) {
          instance = {
          _id: tools.getNextInstanceID('sonnen', options),
          common: {
          name: 'sonnen',
          title: 'sonnen (' + ip + (device._name ? (' - ' + device._name) : '') + ')'
          },
          native: native,
          comment: {
          add: [ip]
          }
          };
          options.newInstances.push(instance);
          callback(null, true, ip);
          } else {
          callback(null, false, ip);
          } // endElse
          } // endAddSonnen
          ! function detect(ip, device, options, callback) {
          adapter.log.debug('Sonnen search');
          tools.httpGet('http://' + ip + ':8080/api/v1/status', (err, data) => {
          if (err) {
          if (callback) {
          return callback(null, false, ip);
          } // endIf
          } else {
          let testData;
          try {
          testData = JSON.parse(data);
          } catch (e) {
          testData = null;
          }
          if (testData && testData.hasOwnProperty('GridFeedIn_W')) {
          var native = {
          ip: ip
          }
          addSonnen(ip, device, options, native, callback);
          } else if(callback) {
          return callback(null, false, ip);
          } // endElse

                } // endElse
          

          ! });
          } // endDetect
          ! exports.detect = detect;
          exports.type = ['ip'];
          exports.timeout = 1500;

          Videotutorials & mehr

          Hier könnt ihr mich unterstützen.

          1 Antwort Letzte Antwort
          0
          • apollon77A Offline
            apollon77A Offline
            apollon77
            schrieb am zuletzt editiert von
            #5

            Hast Du auch das richtige Verzeichnis erwischt wo das file (lib/adapter) drin liegt?

            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
            1 Antwort Letzte Antwort
            0
            • foxriver76F Offline
              foxriver76F Offline
              foxriver76
              Developer
              schrieb am zuletzt editiert von
              #6

              @apollon77:

              Hast Du auch das richtige Verzeichnis erwischt wo das file (lib/adapter) drin liegt? `

              Ich gehe davon aus:

              ls -lah /opt/iobroker/node_modules/iobroker.discovery/lib/adapters/ | grep son
              -rwxrwxrwx 1 pi pi 1,4K Aug  6 21:34 epson_stylus_px830.js
              -rwxrwxrwx 1 pi pi 1,7K Aug  6 22:16 sonnen.js
              -rwxrwxrwx 1 pi pi 6,7K Aug  6 21:34 sonos.js
              
              

              Er sollte ja einfach über jeden Adapter drüber iterieren, im debug zeigt er jeden an außer meinen hinzugefügten. Müsste eigentlich irgend ein ganz stupider Fehler sein.

              Videotutorials & mehr

              Hier könnt ihr mich unterstützen.

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                Du hattest ein paar Fehler drin. Schaue ob es läuft: https://github.com/ioBroker/ioBroker.di … /sonnen.js

                1 Antwort Letzte Antwort
                0
                • foxriver76F Offline
                  foxriver76F Offline
                  foxriver76
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @Bluefox:

                  Du hattest ein paar Fehler drin. Schaue ob es läuft: https://github.com/ioBroker/ioBroker.di … /sonnen.js `

                  Nach wie vor, geht er bei mir gar nicht in den Code rein. Im Debug Log stehen die aufgerufenen Suchmethoden je Adapter, jedoch nicht für meinen:

                  Ausschnitt aus dem Log, gesamter Lauf ist zu umfangreich:

                  2018-08-07 23:27:31.825 - debug: discovery.0 Test 192.168.178.26 maxcube
                  2018-08-07 23:27:31.826 - debug: discovery.0 Test 192.168.178.26 megad
                  2018-08-07 23:27:31.828 - debug: discovery.0 Test 192.168.178.26 miele
                  2018-08-07 23:27:31.829 - debug: discovery.0 Test 192.168.178.26 mihome
                  2018-08-07 23:27:31.829 - debug: discovery.0 Test 192.168.178.26 musiccast
                  2018-08-07 23:27:31.830 - debug: discovery.0 Test 192.168.178.26 nut
                  2018-08-07 23:27:31.831 - debug: discovery.0 Test 192.168.178.26 openhab
                  2018-08-07 23:27:31.835 - debug: discovery.0 Test 192.168.178.26 ping
                  2018-08-07 23:27:31.836 - debug: discovery.0 Test 192.168.178.26 ping DETECTED!
                  2018-08-07 23:27:31.837 - debug: discovery.0 Test 192.168.178.26 samsung
                  2018-08-07 23:27:31.838 - debug: discovery.0 Test 192.168.178.26 sonos
                  2018-08-07 23:27:31.842 - debug: discovery.0 Test 192.168.178.26 sql
                  2018-08-07 23:27:31.844 - debug: discovery.0 Test 192.168.178.26 squeezebox
                  
                  

                  beste Grüße

                  fox

                  Videotutorials & mehr

                  Hier könnt ihr mich unterstützen.

                  1 Antwort Letzte Antwort
                  0
                  • unltdnetworxU Offline
                    unltdnetworxU Offline
                    unltdnetworx
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    Das gleiche Problem hatte ich auch. Das liegt daran, dass es eine Function gibt, die überprüft ob deine Erweiterung bereits im Repo besteht und ansonsten ignoriert. Bin gerade unterwegs, darum kann ich nicht genau schauen wie diese heißt. Aber man kann zwei Zeilen davon auskommentieren und schon läuft es auch mit deinem Code.

                    Näheres heute Abend, falls gewünscht.

                    Gruß, Michael
                    Weitere Infos im Profil.
                    Wenn euch der Beitrag weitergeholfen hat, könnt ihr die Bewertung rechts unten im Beitrag nutzen.

                    1 Antwort Letzte Antwort
                    0
                    • foxriver76F Offline
                      foxriver76F Offline
                      foxriver76
                      Developer
                      schrieb am zuletzt editiert von
                      #10

                      @unltdnetworx:

                      Das gleiche Problem hatte ich auch. Das liegt daran, dass es eine Function gibt, die überprüft ob deine Erweiterung bereits im Repo besteht und ansonsten ignoriert. Bin gerade unterwegs, darum kann ich nicht genau schauen wie diese heißt. Aber man kann zwei Zeilen davon auskommentieren und schon läuft es auch mit deinem Code.

                      Näheres heute Abend, falls gewünscht. `

                      An so was dachte ich auch schon, hatte dann nur ehrlich gesagt keine Lust mehr zu debuggen.

                      Entsprechend wäre es super cool, wenn du mir Namen + Location der Funktion sagen könntest.

                      Videotutorials & mehr

                      Hier könnt ihr mich unterstützen.

                      1 Antwort Letzte Antwort
                      0
                      • unltdnetworxU Offline
                        unltdnetworxU Offline
                        unltdnetworx
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        In der main.js des Discovery gibt es die Function:

                        function isValidAdapter(adapterName, type, dependencies) {
                            if (!adapters.hasOwnProperty(adapterName)) return false;
                            var adapter = adapters[adapterName];
                            if (typeof adapter.type === 'string' && adapter.type !== type) return false;
                            if (typeof adapter.type === 'object' && adapter.type.indexOf(type) === -1) return false;
                            return ((!!adapter.dependencies) === dependencies);
                        }
                        

                        Hier meine ich die erste if-Zeile auskommentiert zu haben. Falls es so nicht klappt, melde ich mich heute Abend.

                        Edit: Ich schaue doch besser nochmal nach. Stimmt wohl so eher nicht. ;)

                        Gruß, Michael
                        Weitere Infos im Profil.
                        Wenn euch der Beitrag weitergeholfen hat, könnt ihr die Bewertung rechts unten im Beitrag nutzen.

                        1 Antwort Letzte Antwort
                        0
                        • foxriver76F Offline
                          foxriver76F Offline
                          foxriver76
                          Developer
                          schrieb am zuletzt editiert von
                          #12

                          @unltdnetworx:

                          In der main.js des Discovery gibt es die Function:

                          function isValidAdapter(adapterName, type, dependencies) {
                              if (!adapters.hasOwnProperty(adapterName)) return false;
                              var adapter = adapters[adapterName];
                              if (typeof adapter.type === 'string' && adapter.type !== type) return false;
                              if (typeof adapter.type === 'object' && adapter.type.indexOf(type) === -1) return false;
                              return ((!!adapter.dependencies) === dependencies);
                          }
                          

                          Hier meine ich die erste if-Zeile auskommentiert zu haben. Falls es so nicht klappt, melde ich mich heute Abend.

                          Edit: Ich schaue doch besser nochmal nach. Stimmt wohl so eher nicht. ;) `

                          Das wars leider nicht. Trotzdem schon mal vielen Dank.

                          Videotutorials & mehr

                          Hier könnt ihr mich unterstützen.

                          1 Antwort Letzte Antwort
                          0
                          • unltdnetworxU Offline
                            unltdnetworxU Offline
                            unltdnetworx
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            Jetzt hab ichs glaub ich:

                            ! ```
                            `function enumAdapters(repository) {
                            var dir = fs.readdirSync(__dirname + '/lib/adapters');

                            for (var f = 0; f < dir.length; f++) {
                                var parts = dir[f].split('.');
                                if (parts[parts.length - 1] === 'js') {
                                    parts.pop();
                            
                                    var moduleName = __dirname + '/lib/adapters/' + dir[f];
                                    var aName      = parts.join('.');
                            
                                    if (adapters && adapters[aname] && adapters[aname].reloadModule) {
                                        var module = require.resolve(moduleName);
                                        delete require.cache[module];
                                        delete adapters[aname];
                                    }
                            

                            ! // check if this adapter available in repository
                            if (!adapters[aname] && (!repository || repository.indexOf(aName) !== -1)) {
                            adapters[aname] = require(moduleName);
                            }
                            }
                            }
                            }! In der letzte if-Zeile muss[code]&& (!repository || repository.indexOf(aName) !== -1)[/code]` entfernt werden. Ich hab mir die Zeile kopiert und ausgeklammert im Entwicklungssystem.[/aname][/aname][/aname][/aname][/aname]

                            Gruß, Michael
                            Weitere Infos im Profil.
                            Wenn euch der Beitrag weitergeholfen hat, könnt ihr die Bewertung rechts unten im Beitrag nutzen.

                            1 Antwort Letzte Antwort
                            0
                            • foxriver76F Offline
                              foxriver76F Offline
                              foxriver76
                              Developer
                              schrieb am zuletzt editiert von
                              #14

                              @unltdnetworx:

                              Jetzt hab ichs glaub ich:

                              ! ```
                              `function enumAdapters(repository) {
                              var dir = fs.readdirSync(__dirname + '/lib/adapters');

                              for (var f = 0; f < dir.length; f++) {
                                  var parts = dir[f].split('.');
                                  if (parts[parts.length - 1] === 'js') {
                                      parts.pop();
                                      
                                      var moduleName = __dirname + '/lib/adapters/' + dir[f];
                                      var aName      = parts.join('.');
                                      
                                      if (adapters && adapters[aname] && adapters[aname].reloadModule) {
                                          var module = require.resolve(moduleName);
                                          delete require.cache[module];
                                          delete adapters[aname];
                                      }
                              

                              ! // check if this adapter available in repository
                              if (!adapters[aname] && (!repository || repository.indexOf(aName) !== -1)) {
                              adapters[aname] = require(moduleName);
                              }
                              }
                              }
                              }! In der letzte if-Zeile muss[code]&& (!repository || repository.indexOf(aName) !== -1)[/code]entfernt werden. Ich hab mir die Zeile kopiert und ausgeklammert im Entwicklungssystem. ! Wow, da ist ja sogar nen Comment im Code --> dann bin ich selbst schuld :D ! Ist auf jeden Fall der Ursprung des Problems, vielen Dank.[/aname][/aname][/aname][/aname][/aname] ```

                              Videotutorials & mehr

                              Hier könnt ihr mich unterstützen.

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              588

                              Online

                              32.7k

                              Benutzer

                              82.3k

                              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