Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter Socket.IO Benötige Hilfe zum Updateverhalten

    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

    Adapter Socket.IO Benötige Hilfe zum Updateverhalten

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

      Hallo Zusammen,
      ich versuche mich gerade in den Adapter Socket.io einzuarbeiten. Soweit läuft er und sendet Updates. Im file conn.js habe ich die Stelle ausgemacht, an welcher eine Wildcard definiert ist, dass von allen Objekten ein Update übertragen wird. Da dies eine Flut an Daten bedeutet, versuche ich gerade die Datenmenge über eine Auswahl zu reduzieren. Ich komme diesbezüglich nicht weiter. Versucht habe ich ein Beispiel aus dem Forum (funktioniert leider nicht):

      let myState = 'hm-rpc.0.NEQ1684242.1.STATE';
      servConn._socket.emit('subscribe', myState); 
      
      

      Gibt es eine Möglichkeit, das Update auf selektierte Adapter zu reduzieren? Z.B. hue.0., hue.1. usw.? Aus den Adapter Updates meine ich herausgelesen zu haben, dass dafür eine Array Lösung gesetzt wurde. Wenn ja würde ich mich über Hilfe freuen. Wie muss ich dies in dem auf GitHub als Beispiel hinterlegten Code einfügen? Das müsste doch aus der index.html heraus gehen...

      Vielen Dank!

      Grüße
      Michael

      UncleSam 1 Reply Last reply Reply Quote 0
      • UncleSam
        UncleSam Developer @mischu last edited by

        @mischu sagte in Adapter Socket.IO Benötige Hilfe zum Updateverhalten:

        Ich komme diesbezüglich nicht weiter. Versucht habe ich ein Beispiel aus dem Forum (funktioniert leider nicht):

        let myState = 'hm-rpc.0.NEQ1684242.1.STATE';
        servConn._socket.emit('subscribe', myState); 
        

        Du solltest niemals auf etwas zugreifen, das mit _ beginnt. Das sind internals.

        Gibt es eine Möglichkeit, das Update auf selektierte Adapter zu reduzieren? Z.B. hue.0., hue.1. usw.? Aus den Adapter Updates meine ich herausgelesen zu haben, dass dafür eine Array Lösung gesetzt wurde. Wenn ja würde ich mich über Hilfe freuen. Wie muss ich dies in dem auf GitHub als Beispiel hinterlegten Code einfügen? Das müsste doch aus der index.html heraus gehen...

        Wenn du nicht alle Updates bekommen willst, musst du im init() den Wert von autoSubscribe auf false setzen.
        Siehe hier: https://github.com/ioBroker/ioBroker.socketio/blob/919a467121e673590377a4fd1023f99ee38656b5/example/conn.js#L180

        Danach kannst du die Methode subscribe() verwenden. Die Akzeptiert State Namen, Arrays und Wildcards. Also z.B. servConn.subscribe('hue.*').

        Und stelle sicher, dass du Port 8084 verwendest, siehe auch hier: https://forum.iobroker.net/topic/41118/socket-io-eigene-visualisierung

        1 Reply Last reply Reply Quote 0
        • M
          mischu last edited by

          @unclesam said in Adapter Socket.IO Benötige Hilfe zum Updateverhalten:

          autoSubscribe

          Danke für die schnelle Antwort!

          Um im conn.js autoSubscribe auf false zu stellen habe ich folgendes gemacht:

          init:             function (connOptions, connCallbacks, objectsRequired, autoSubscribe) {
                autoSubscribe = false;
          

          Die Updates haben gestoppt.

          In der index.html habe ich folgendes eingefügt:

          servConn.namespace   = 'myapp';
          servConn.subscribe('hue.*');
          servConn._useStorage = false;
          
          var states = [];
          servConn.init({
            name:          'myapp',  // optional - default 'vis.0'
            connLink:      'http://localhost:8084',  // optional URL of the socket.io adapter
            socketSession: '',           // optional - used by authentication
          

          Leider bekomme ich keine updates...😕

          UncleSam 1 Reply Last reply Reply Quote 0
          • UncleSam
            UncleSam Developer @mischu last edited by

            @mischu sagte in Adapter Socket.IO Benötige Hilfe zum Updateverhalten:

            @unclesam said in Adapter Socket.IO Benötige Hilfe zum Updateverhalten:

            autoSubscribe

            Danke für die schnelle Antwort!

            Um im conn.js autoSubscribe auf false zu stellen habe ich folgendes gemacht:

            init:             function (connOptions, connCallbacks, objectsRequired, autoSubscribe) {
                  autoSubscribe = false;
            

            Moment, was? Nein, du sollst beim Aufruf von init() den vierten Parameter auf false setzen, nicht das conn.js ändern. Bitte daran nie etwas ändern, weil du dann weder Updates machen kannst noch dir irgendjemand helfen kann (da wir meistens den offiziellen Source anschauen).

            In der index.html habe ich folgendes eingefügt:

            servConn.namespace   = 'myapp';
            servConn.subscribe('hue.*');
            servConn._useStorage = false;
            
            var states = [];
            servConn.init({
              name:          'myapp',  // optional - default 'vis.0'
              connLink:      'http://localhost:8084',  // optional URL of the socket.io adapter
              socketSession: '',           // optional - used by authentication
            

            Leider bekomme ich keine updates...😕

            Ich habe nicht gerne angebissene Sachen... kannst du bitte das ganze init() posten? Am besten gleich den ganzen JS Code aus deiner HTML Datei.

            Und ich würde nichts machen, bevor du das init() aufgerufen hast.

            Die Verbindung zum Server funktioniert (in den Developer Tools nachschauen - F12)? Der socket.io Adapter läuft?

            M 1 Reply Last reply Reply Quote 0
            • M
              mischu @UncleSam last edited by

              @unclesam

              Hier der HTML code. Ich stehe gerade komplett auf dem Schlauch... was muss ich eintragen, dass ich spezifische Updates bekomme und diese im console.log angezeigt werden? ioBroker läuft und Verbindung zum Server wird aufgebaut. Das ist bis auf meine Ergänzung

              servConn.subscribe('hue.*');
              

              der aktuelle Beispielcode von GitHub. Mehr habe ich noch nicht aufgebaut, da ich erst das Autoupdate zum laufen bekommen möchte.

              servConn.namespace   = 'myapp';
              servConn.subscribe('hue.*');
              servConn._useStorage = false;
              
              var states = [];
              servConn.init({
                name:          'myapp',  // optional - default 'vis.0'
                connLink:      'http://192.168.178.43:8084',  // optional URL of the socket.io adapter
                socketSession: '',           // optional - used by authentication   
              }, {
                onConnChange: function (isConnected) {
              	if (isConnected) {
              	  console.log('connected');
              	  servConn.getStates(function (err, _states) {
              		var count = 0;
              		for (var id in _states) {
              		  count++;
              		}
              		console.log('Received ' + count + ' states.');
              		states = _states;
              	  });
              	} else {
              	  console.log('disconnected');
              	}
                },
                onRefresh: function () {
              	window.location.reload();
                },
                onUpdate: function (id, state) {
              	setTimeout(function () {
              	  console.log('NEW VALUE of ' + id + ': ' + JSON.stringify(state));
              	  states[id] = state;
              	}, 0);
                },
                onError: function (err) {
              	window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600);
                }
              });
              
              UncleSam 1 Reply Last reply Reply Quote 0
              • UncleSam
                UncleSam Developer @mischu last edited by

                @mischu Also, die ersten zwei Argumente von init() hast du ja schon: die Config und die Callbacks, das dritte ist, ob du Objektänderungen willst, das kannst du auf false setzen und das vierte eben auch auf false.

                Damit sieht dann dein init() etwa so aus (Optionen und Callbacks habe ich rausgekürzt):

                servConn.init({
                  // options
                }, {
                  // callbacks
                }, false, false);
                

                Und nun würde ich das subscribe() eben erst nach dem Aufruf von init() machen. Also ganz zuunterst im Script.

                Wenn jetzt etwas nicht geht, wäre das Konsolen-Log interessant. Welche Meldungen kommen? Wo gibt es vielleicht noch Fehlermeldungen?

                M 1 Reply Last reply Reply Quote 0
                • M
                  mischu @UncleSam last edited by mischu

                  @unclesam
                  Nochmals Dankeschön für Deinen Einsatz! Ok, wenn ich das false bei autoSubscribe weglasse rennen Updates.

                  Mit dem false bei autoSubscribe ist Stille. Hier die logs:

                  ioBroker:
                  socketio.0 2021-01-20 16:19:13.301 info (5112) ==>Connected system.user.admin from ::ffff:192.168.178.20

                  console chrome:
                  conn.js:150 Trying connect...
                  16:19:11.965 conn.js:296 2021-01-20T15:19:11.965Z Connected => authenticate
                  16:19:12.037 conn.js:317 2021-01-20T15:19:12.037Z Authenticated: true
                  16:19:12.044 socketTest.js:14 connected
                  16:19:13.804 socketTest.js:20 Received 10926 states.

                  Also er verbindet, lädt die States aber es findet kein traffic beim update statt. Somit gehe ich davon aus, dass ein Problem im Bereich der Definition des gewünschten Updates herrscht. Also bei:

                  servConn.subscribe('hue.*')
                  

                  Ich habe dies wie empfohlen ganz am Ende platziert.

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  533
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  javascript javascript adapter.io updates socketio update
                  2
                  7
                  264
                  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