NEWS
socket.IO - Daten verarbeiten und subscribe
-
Hallo zusammen,
ich bin derzeit dran über HTML/CSS/JS meine eigene Visualisierung zu erstellen.
Dabei möchte ich die Datenpunkte per socket.io beim web Adapter abfragen was initial auch funktioniert und ich bekomme es auch hin Lampen zu steuern.
Da ich noch Anfänger bin fehlt mir im Moment noch das Verständnis dafür wie ich am besten mit den ankommenden Daten per socket.io umgehe.
Hab da in einem Beitrag gelesen das man Datenpunkte mit folgendem Code "subsrciben" kann:servConn._socket.emit('subscribe', subscriptions)Das bekannte Beispiel aus dem Forum läuft bei mir erstmal, jedoch kann ich die Daten nur einmalig per "getStates" abholen:
<!doctype html> <html> <head> <!-- Replace "localhost" with real IP address of controller, if default port changed, correct it too --> <script type="text/javascript" src="http://192.168.178.53:8082/socket.io/socket.io.js"></script> <script type="text/javascript" src="conn.js"></script> <script type="text/javascript" src="licht.js"></script> </head> <body> <b id="luftdruckWert">unbekannt</b><br> <script type="text/javascript"> servConn.namespace = 'mobile.0'; servConn._useStorage = false; var states = []; // STELLE 1 servConn.init({ name: 'mobile.0', // optional - default 'vis.0' connLink: 'http://192.168.178.53: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++; } // STELLE2 states = _states; servConn.getStates("mqtt.0.Wetter.Luftdruck", (error, states) => { document.getElementById("luftdruckWert").innerHTML = states["mqtt.0.Wetter.Luftdruck"].val + "mbar"; }); }); } else { console.log('disconnected'); } }, onRefresh: function () { window.location.reload(); }, onUpdate: function (id, state) { // STELLE 3 }, onError: function (err) { window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600); } }); // STELLE 4 </script> </body>Meine Fragen dazu:
Bekomme ich beim subscribe nur noch die "abonnierten" Datenpunkte geschickt vom Server?
An welcher Stelle (1/2/3/4) im Code müsste dieser subscribe rein?
Geht es auch ohne subscribe mit Filterung aller ankommenden Daten? (auch hinsichtlich Performance gesehen)
Wie kann ich die ankommenden Daten (JSON) am besten weiter verarbeiten?Ein Beispiel von jemand der das selber gemacht hat würde mir schon sehr helfen!
-
Hallo zusammen,
ich bin derzeit dran über HTML/CSS/JS meine eigene Visualisierung zu erstellen.
Dabei möchte ich die Datenpunkte per socket.io beim web Adapter abfragen was initial auch funktioniert und ich bekomme es auch hin Lampen zu steuern.
Da ich noch Anfänger bin fehlt mir im Moment noch das Verständnis dafür wie ich am besten mit den ankommenden Daten per socket.io umgehe.
Hab da in einem Beitrag gelesen das man Datenpunkte mit folgendem Code "subsrciben" kann:servConn._socket.emit('subscribe', subscriptions)Das bekannte Beispiel aus dem Forum läuft bei mir erstmal, jedoch kann ich die Daten nur einmalig per "getStates" abholen:
<!doctype html> <html> <head> <!-- Replace "localhost" with real IP address of controller, if default port changed, correct it too --> <script type="text/javascript" src="http://192.168.178.53:8082/socket.io/socket.io.js"></script> <script type="text/javascript" src="conn.js"></script> <script type="text/javascript" src="licht.js"></script> </head> <body> <b id="luftdruckWert">unbekannt</b><br> <script type="text/javascript"> servConn.namespace = 'mobile.0'; servConn._useStorage = false; var states = []; // STELLE 1 servConn.init({ name: 'mobile.0', // optional - default 'vis.0' connLink: 'http://192.168.178.53: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++; } // STELLE2 states = _states; servConn.getStates("mqtt.0.Wetter.Luftdruck", (error, states) => { document.getElementById("luftdruckWert").innerHTML = states["mqtt.0.Wetter.Luftdruck"].val + "mbar"; }); }); } else { console.log('disconnected'); } }, onRefresh: function () { window.location.reload(); }, onUpdate: function (id, state) { // STELLE 3 }, onError: function (err) { window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600); } }); // STELLE 4 </script> </body>Meine Fragen dazu:
Bekomme ich beim subscribe nur noch die "abonnierten" Datenpunkte geschickt vom Server?
An welcher Stelle (1/2/3/4) im Code müsste dieser subscribe rein?
Geht es auch ohne subscribe mit Filterung aller ankommenden Daten? (auch hinsichtlich Performance gesehen)
Wie kann ich die ankommenden Daten (JSON) am besten weiter verarbeiten?Ein Beispiel von jemand der das selber gemacht hat würde mir schon sehr helfen!