NEWS
Socket.io > Subscribe
-
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 -
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
KaiOK, geschafft :)
servConn.init({ .... }, false, false); // autoSubscribe deaktiviertUnd 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) ;)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden