Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [gelöst] sendTo() in eigenem Adapter funktioniert nicht

    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] sendTo() in eigenem Adapter funktioniert nicht

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

      Hallo zusammen,

      ich versuche mich gerade an einem eigenen Adapter und wollte sendTo() für das Weiterreichen von Daten vom Adapter (main()) zu seinem Admin (admin/index.html) verwenden. Das klappt aber nicht, da der übergebene callback nie aufgerufen wird.

      Ich bin dann hingegangen und habe iobroker noch einmal neu aufgesetzt und das adapter.template installiert, mit nur einer Ergänzung, nämlich dem Aufruf von sendTo() und einer minimalen Anpassung in adapter.on(…), aber auch hier der gleiche Effekt.

      iobroker läuft bei mir unter win7.

      Zur Verdeutlichung hier mal der Quellcode

      (1) main.js aus dem template mit minimaler Anpassung :

      // Some message was sent to adapter instance over message box. Used by email, pushover, text2speech, ...
      adapter.on('message', function (obj) {
          /* if (typeof obj == 'object' && obj.message) { */
      
          if (typeof obj == 'object') {
              if (obj.command == 'send') {
                  // e.g. send email or pushover or whatever
                  console.log('send command');
      
                  // Send response in callback if required
                  if (obj.callback) adapter.sendTo(obj.from, obj.command, 'Message received', obj.callback);
              }
          }
      });
      

      (2) admin/index.html mit minimaler Anpassung in load() -> nur sendTo ergänzt:

      // the function loadSettings has to exist ...
          function load(settings, onChange) {
              // example: select elements with id=key and class=value and insert value
              for (var key in settings) {
                  // example: select elements with id=key and class=value and insert value
                  if ($('#' + key + '.value').attr('type') == 'checkbox') {
                      $('#' + key + '.value').prop('checked', settings[key]).change(function () {
                          onChange();
                      });
                  } else {
                      $('#' + key + '.value').val(settings[key]).change(function () {
                          onChange();
                      }).keyup(function () {
                          $(this).trigger('change');
                      });
                  }
              }
      
              sendTo(null, 'send', null, function (list) {
                  alert(list);
              });
      
              // Signal to admin, that no changes yet
              onChange(false);
          }
      

      Es rührt sich einfach nichts. Ich würde jetzt erwarten, dass mein Alert die Meldung "Message received" ausgibt. Einer eine Idee was ich falsch mache?

      Ein weiterer Effekt, der mir aufgefallen ist: beim Neuladen der Testinstanz wird anscheinend niemals das unload-Ereignis geschmissen, da der Text 'cleand everything up …' nie im Log erscheint. Hat diesen Effekt auch schon jemand beobachtet?

      Quellcode zu unload:

      // is called when adapter shuts down - callback has to be called under any circumstances!
      adapter.on('unload', function (callback) {
          try {
              adapter.log.info('cleaned everything up...');
              callback();
          } catch (e) {
              callback();
          }
      });
      

      Jemand eine Idee?

      Grüße

      Carsten

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

        Wäre mir neu das alert in Verbindung mit nodejs/iobroker funktioniert.

        Du musst "Adapter.log.info" nutzen.

        Gesendet von meinem m8 mit Tapatalk

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

          Damit das Message-Handling funktioniert musst Du im io-package folgendes angeben:

                  "messagebox":               true,
                  "subscribe":                "messagebox",
          
          

          unter "common".

          Kannst es bei iobroker.sql o.ä. prüfen. Ansonsten kommen keine Nachrichten an.

          Hast Du das drin?

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

            @apollon77:

            Das war der Fehler. Super vielen dank. Die Info sollte auf jeden Fall in der Doku unter:

            https://github.com/ioBroker/ioBroker/wi … mon-fields

            nachgepflegt werden. Wenn man das nicht weiss, sucht man sich blöde. Wo sollten eigentlich Dokuergänzungen gemeldet werden, hier im Forum in einem betimmten Thread, oder in Jira, oder …?

            @JeyCee: Das hat erst mal nichts mit node.js zu tun, da der code im Browser ausgeführt wird, also ganz normales Javascript.

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

              Dann habe ich nicht begriffen wie nodejs funktioniert.

              Ich dachte nodejs ist eine Server Anwendung die es möglich macht JS ohne Browser auszuführen.

              Und demnach würden alle Skripte und Adapter code auf dem Server ausgeführt.

              Bitte um Aufklärung.

              Gesendet von meinem m8 mit Tapatalk

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

                @Jey Cee: was Du schreibst ist ja richtig. Der serverseitige Teil eines Adapters läuft ja auch unter node.js, also das was ich unter main.js aufgeführt habe. Der clientseitige Teil, also admin/index.html für die Parametrierung des Adapters läuft im Browser, egal ob Firefox, Chrome, Safari oder was auch immer und ist schnödes javascript.

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

                  Aufklärung ist einfach: Der Teil wo "alert" verwendet wurde war aus der "admin.html"-Datei. Das ist HTML/JS was den Adapter-Konfigurationsdialog darstellt. Daher läuft dieser Teil im Browser und ist normales JavaScript und kein Serverseitiges nodejs.

                  Andere Teile von oben (der Teil der hier die Nachricht empfängt) ist Serverside-code und läuft in nodejs,

                  Konnte ich es klarer machen?

                  Hehe doppelt 🙂

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

                    @carsten04:

                    @apollon77:

                    Das war der Fehler. Super vielen dank. Die Info sollte auf jeden Fall in der Doku unter:

                    https://github.com/ioBroker/ioBroker/wi … mon-fields

                    nachgepflegt werden. Wenn man das nicht weiss, sucht man sich blöde. Wo sollten eigentlich Dokuergänzungen gemeldet werden, hier im Forum in einem betimmten Thread, oder in Jira, oder …?

                    @JeyCee: Das hat erst mal nichts mit node.js zu tun, da der code im Browser ausgeführt wird, also ganz normales Javascript. `
                    Habe in der Doku aufgenommen:

                    https://github.com/ioBroker/ioBroker/wi … ackagejson

                    Ich glaube es reicht jetzt nur "messagebox" auf true zu setzen.

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

                      Danke für die Erklärung, jetzt ist das Klar und ergibt Sinn.

                      Gesendet von meinem m8 mit Tapatalk

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

                        Jetzt muss ich den Thread nochmal hoch holen.

                        Die 'sendTo' Funktion will einfach nicht funktionieren. Ich hab alles gelesen was ich dazu finden konnte und natürlich hab ich die io-packages.js angepasst.

                        • Adapter instanz neu anlegen

                        • Adapter löschen & neu installieren

                        • ioBroker neustart

                        Nichts hat geholfen.

                        Um Tippfehler zu vermeiden hab ich sogar den code per copy & paste eingefügt.

                        Was übersehe ich?

                        {
                            "common": {
                                "name":                     "upnp",
                                "version":                  "0.3.7",
                                "title":                    "UPnP Adapter",
                                "desc":                     {
                         			"en": "ioBroker UPnP Adapter",
                        			"de": "ioBroker UPnP Adapter",
                        			"ru": "ioBroker UPnP драйвер как образец"
                        	        },
                                "platform":                 "Javascript/Node.js",
                                "license":                  "MIT",
                                "mode":                     "daemon",
                                "icon":                     "upnp-discovery.png",
                                "keywords":                 ["upnp"],
                        		"extIcon":          "https://raw.githubusercontent.com/Jey-Cee/ioBroker.upnp/master/admin/upnp-discovery.png",
                        		"readme":           "https://github.com/Jey-Cee/ioBroker.upnp/blob/master/README.md",
                        		"loglevel":         "info",
                                "type":                     "hardware",
                                "messagebox":               true,
                                "subscribe":                "messagebox"
                            },
                            "native": {
                        	"enableAutoDiscover": "",
                        	"enableAutoSubscription": ""
                            },
                            "instanceObjects": [
                              {}
                          ]
                        }
                        
                        
                        / Some message was sent to adapter instance over message box. Used by email, pushover, text2speech, ...
                        adapter.on('message', function (obj) {
                            adapter.log.info('incoming message');
                        });
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • apollon77
                          apollon77 last edited by

                          Hast du auch ein iobroker upload adaptername gemacht?!

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

                            Nein das hab ich noch nicht gemacht. Das werde ich heute Abend noch testen.

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

                              Die io-package wird per "upload" aktualisiert und quasi "integriert". Kannst Danach sachauen das in der Instanzdefinition auf die Messagebox drin steht.

                              Ansonsten danach ggf nochmal iobroker stop und start

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

                                @apollon77:

                                Hast du auch ein iobroker upload adaptername gemacht?! `

                                Danke das war es.

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                597
                                Online

                                31.8k
                                Users

                                80.0k
                                Topics

                                1.3m
                                Posts

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