Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Socket.io > Subscribe

    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

    Socket.io > Subscribe

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

      Hallo,
      ich versuche mich gerade an socket.io - eher erfolglos 😉

      Wie kann ich konkret nur einen Datenpunkt.State subscriben und das "_autoSubscribe" für alle anderen loswerden (womit der Browser in 1 Minute so viele DPs aktualisiert, dass er abstürzt).

      Hier das Minimalbeispiel:

      <!DOCTYPE html>
      <html lang="de">
        <head>
          <link rel="icon" href="data:,">
          <meta charset="utf-8" />
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      
          <script src="http://IP:8082/socket.io/socket.io.js"></script>
          <script src="conn.js"></script>
      </head>
      
      <body>
      <br>
      
      Wasserzählerstatus: <b id="wasserzaehlerStatus">unbekannt</b><br>
      Stromverbrauch aktuell:  <b id="stromvAktuell">unbekannt</b><br>
      
      </body>
      <script>
      
          servConn.namespace   = 'mobile.0';
          servConn._useStorage = false;
      
          var states = [];
        
          servConn.init({
              name:          'mobile.0',  // optional - default 'vis.0'
              connLink:      'http://IP:8082',  // 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++;
                          }
                          
                          states = _states;
      
                          servConn.getStates("mqtt.0.wasserzaehler.status", (error, states) => {
      						document.getElementById("wasserzaehlerStatus").innerHTML = states["mqtt.0.wasserzaehler.status"].val + ".";
                          });
      					servConn.getStates("hm-rpc.1.MEQ0123456.1.POWER", (error, states) => {
      						document.getElementById("stromvAktuell").innerHTML = states["hm-rpc.1.MEQ0123456.1.POWER"].val + " W/h";
                          });    
      
                      });
      
                  } 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;
      			
      				servConn.getStates("mqtt.0.wasserzaehler.status", (error, states) => {
      					document.getElementById("wasserzaehlerStatus").innerHTML = states["mqtt.0.wasserzaehler.status"].val + ".";
                      });
      				servConn.getStates("hm-rpc.1.MEQ0123456.1.POWER", (error, states) => {
      					document.getElementById("stromvAktuell").innerHTML = states["hm-rpc.1.MEQ0123456.1.POWER"].val + " W/h";
                      });
      
                  }, 0);
      
              },
      
              onError: function (err) {
      
                  window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600);
      
              }
      
          });
      
      </script>
      </html>
      
      

      Grüße
      Kai

      X 1 Reply Last reply Reply Quote 0
      • X
        xdelta @xdelta last edited by xdelta

        OK, geschafft 🙂

        servConn.init({
              ....
        }, false, false);  // autoSubscribe deaktiviert
        
        

        Und so konnte ich meine Teststates subscriben:

        let wasserzaehler = 'mqtt.0.wasserzaehler.status';
        let stromv = 'hm-rpc.1.MEQ0123456.1.POWER';
        
        servConn._socket.emit('subscribe', wasserzaehler); 
        servConn._socket.emit('subscribe', stromv); 
        

        Oder mehrere Subscriptions als Array:

        let wasserzaehler = 'mqtt.0.wasserzaehler.status';
        let stromv = 'hm-rpc.1.MEQ0123456.1.POWER';
        let subscriptions = [wasserzaehler, stromv];
        
        servConn._socket.emit('subscribe', subscriptions);
        

        Da ich leider keinen thread hier im Forum gefunden habe, der am Ende ein (vollständiges) Minimalbeispiel aufzeigt, sollte dieser Post als gutes Beispiel für einen Start dienen (und nicht mir als Alleinunterhalter) 😉

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

        Support us

        ioBroker
        Community Adapters
        Donate

        687
        Online

        31.9k
        Users

        80.1k
        Topics

        1.3m
        Posts

        socket io
        1
        2
        237
        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