Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Gelöst] Discovery über Ping

    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

    [Gelöst] Discovery über Ping

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

      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;

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

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

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

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

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

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

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

              @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

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

                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.

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

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

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

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

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

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

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

                        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]

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

                          @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] ```

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          682
                          Online

                          31.9k
                          Users

                          80.2k
                          Topics

                          1.3m
                          Posts

                          4
                          14
                          795
                          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