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. Visualisierung
  4. Socket.io > Subscribe

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Socket.io > Subscribe

Geplant Angeheftet Gesperrt Verschoben Visualisierung
socket io
2 Beiträge 1 Kommentatoren 331 Aufrufe 2 Watching
  • Ä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.
  • X Offline
    X Offline
    xdelta
    schrieb am zuletzt editiert von xdelta
    #1

    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 Antwort Letzte Antwort
    0
    • X 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 Offline
      X Offline
      xdelta
      schrieb am zuletzt editiert von xdelta
      #2

      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 Antwort Letzte Antwort
      1
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      797

      Online

      32.4k

      Benutzer

      81.6k

      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