Monitor nodes now uses websockets instead of polling.

Thu, 28 May 2020 14:23:14 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 28 May 2020 14:23:14 +0200
changeset 695
cfe232710027
parent 694
a165f6c20a44
child 696
f4de55f587c1

Monitor nodes now uses websockets instead of polling.

bmsd/nodes.c file | annotate | diff | comparison | revisions
www/js/mon_node.js file | annotate | diff | comparison | revisions
--- a/bmsd/nodes.c	Sun May 24 12:12:34 2020 +0200
+++ b/bmsd/nodes.c	Thu May 28 14:23:14 2020 +0200
@@ -180,10 +180,38 @@
 
     msg = xstrcpy((char *)"{\"node\":\"");
     msg = xstrcat(msg, edge_node);
-    msg = xstrcat(msg, (char *)"\",\"group\":\"");
+    msg = xstrcat(msg, (char *)"\",\"group_id\":\"");
     msg = xstrcat(msg, group_id);
     msg = xstrcat(msg, (char *)"\",\"online\":");
     msg = xstrcat(msg, node->online ? (char *)"1":(char *)"0");
+    msg = xstrcat(msg, (char *)",\"interval\":");
+    snprintf(buf, 73, "%d", node->interval);
+    msg = xstrcat(msg, buf);
+    if (node->hardwaremake) {
+	msg = xstrcat(msg, (char *)",\"hardwaremake\":\"");
+	msg = xstrcat(msg, node->hardwaremake);
+	msg = xstrcat(msg, (char *)"\"");
+    }
+    if (node->hardwaremodel) {
+	msg = xstrcat(msg, (char *)",\"hardwaremodel\":\"");
+	msg = xstrcat(msg, node->hardwaremodel);
+	msg = xstrcat(msg, (char *)"\"");
+    }
+    if (node->os) {
+	msg = xstrcat(msg, (char *)",\"os\":\"");
+	msg = xstrcat(msg, node->os);
+	msg = xstrcat(msg, (char *)"\"");
+    }
+    if (node->os_version) {
+	msg = xstrcat(msg, (char *)",\"os_version\":\"");
+	msg = xstrcat(msg, node->os_version);
+	msg = xstrcat(msg, (char *)"\"");
+    }
+    if (node->firmware) {
+	msg = xstrcat(msg, (char *)",\"firmware\":\"");
+	msg = xstrcat(msg, node->firmware);
+	msg = xstrcat(msg, (char *)"\"");
+    }
     msg = xstrcat(msg, (char *)",\"lastseen\":\"");
     mytime = localtime(&node->lastseen);
     snprintf(buf, 73, "%04d-%02d-%02d %02d:%02d:%02d",
@@ -200,11 +228,13 @@
     	snprintf(buf, 64, "%.1f", node->humidity);
     	msg = xstrcat(msg, buf);
     }
-    msg = xstrcat(msg, (char *)",\"ip\":\"");
+    msg = xstrcat(msg, (char *)",\"net_ifname\":\"");
+    msg = xstrcat(msg, node->net_ifname);
+    msg = xstrcat(msg, (char *)"\",\"net_address\":\"");
     msg = xstrcat(msg, node->net_address);
     msg = xstrcat(msg, (char *)"\"");
     if (node->net_rssi != 0) {
-    	msg = xstrcat(msg, (char *)",\"rssi\":");
+    	msg = xstrcat(msg, (char *)",\"net_rssi\":");
     	snprintf(buf, 64, "%d", node->net_rssi);
     	msg = xstrcat(msg, buf);
     }
--- a/www/js/mon_node.js	Sun May 24 12:12:34 2020 +0200
+++ b/www/js/mon_node.js	Thu May 28 14:23:14 2020 +0200
@@ -23,7 +23,8 @@
 
 $(document).ready(function() {
 
- var url = 'getnode.php?uuid="' + my_uuid + '"',
+ var record = {},
+ url = 'getnode.php?uuid="' + my_uuid + '"',
  source = {
   datatype: 'json',
   datafields: [
@@ -55,50 +56,78 @@
  },
  dataAdapter = new $.jqx.dataAdapter(source, {
   loadComplete: function(records) {
-   var record = dataAdapter.records[0],
-   oline = (record.online) ? 'On-line' : 'Off-line',
-   html = '<div id="node_table">';
-   html += '<table style="width: 100%; padding: 10px;">';
-   html += '<tr><th colspan=2>Systeem overzicht</th></tr>';
-   html += '<tr><td>Uuid</td><td>' + record.uuid + '</td></tr>';
-   html += '<tr><td>Systeem</td><td>' + record.node + '</td></tr>';
-   html += '<tr><td>Online</td><td>' + oline + '</td></tr>';
-   html += '<tr><td>Type</td><td>' + record.group_id + '</td></tr>';
-   html += '<tr><td>Eerst gezien</td><td>' + record.firstseen + '</td></tr>';
-   html += '<tr><td>Laatst gezien</td><td>' + record.lastseen + '</td></tr>';
+   record = dataAdapter.records[0];
+   updateScreen();
+  }
+ });
+
+ function updateScreen() {
+  var oline = (record.online) ? 'On-line' : 'Off-line',
+  html = '<div id="node_table">';
+  html += '<table style="width: 100%; padding: 10px;">';
+  html += '<tr><th colspan=2>Systeem overzicht</th></tr>';
+  html += '<tr><td>Uuid</td><td>' + record.uuid + '</td></tr>';
+  html += '<tr><td>Systeem</td><td>' + record.node + '</td></tr>';
+  html += '<tr><td>Online</td><td>' + oline + '</td></tr>';
+  html += '<tr><td>Type</td><td>' + record.group_id + '</td></tr>';
+  html += '<tr><td>Eerst gezien</td><td>' + record.firstseen + '</td></tr>';
+  html += '<tr><td>Laatst gezien</td><td>' + record.lastseen + '</td></tr>';
+  if (record.online) {
    html += '<tr><td>Hardware maker</td><td>' + record.hardwaremake + '</td></tr>';
    html += '<tr><td>Hardware model</td><td>' + record.hardwaremodel + '</td></tr>';
    html += '<tr><td>OS</td><td>' + record.os + ' versie: ' + record.os_version + '</td></tr>';
    html += '<tr><td>Firmware</td><td>' + record.firmware + '</td></tr>';
+
+   if (record.temperature > 0)
+    html += '<tr><td>Temperatuur</td><td>' + record.temperature.toFixed(1) + '&deg;C</td></tr>';
+   if (record.humidity > 0)
+    html += '<tr><td>Vochtigheid</td><td>' + record.humidity.toFixed(1) + '%</td></tr>';
+   if (record.barometer > 0)
+    html += '<tr><td>Luchtdruk</td><td>' + record.barometer.toFixed(0) + '</td></tr>';
+   if ((record.gps_latitude != 0) && (record.gps_longitude != 0))
+    html += '<tr><td>GPS</td><td>' + record.gps_latitude + ' ' + record.gps_longitude + ' ' + record.gps_altitude + '</td></tr>';
+   html += '<tr><td>Netwerk</td><td>' + record.net_ifname + ' ' + record.net_address + '</td></tr>';
+   if (record.net_rssi < 0)
+    html += '<tr><td>WiFi signaal</td><td>' + record.net_rssi + '</td></tr>';
+   html += '<tr><td>Update interval</td><td>' + record.up_interval + ' sec.</td></tr>';
+  }
+  html += '</<table>';
+  html += '</div>';
+  $('#ContentPanel').html(html);
+ }
+
+ // Get the data.
+ dataAdapter.dataBind();
+
+ websocket.onmessage = function(evt) {
+  var msg = evt.data;
+  var obj = JSON.parse(msg);
+  if (! obj.device && obj.node == record.node) {
+   record.online = obj.online;
    if (record.online) {
-    if (record.temperature > 0) {
-     html += '<tr><td>Temperatuur</td><td>' + record.temperature.toFixed(1) + '&deg;C</td></tr>';
-    }
-    if (record.humidity > 0) {
-     html += '<tr><td>Vochtigheid</td><td>' + record.humidity.toFixed(1) + '%</td></tr>';
-    }
-    if (record.barometer > 0) {
-     html += '<tr><td>Luchtdruk</td><td>' + record.barometer.toFixed(0) + '</td></tr>';
-    }
-    if ((record.gps_latitude != 0) && (record.gps_longitude != 0)) {
-     html += '<tr><td>GPS</td><td>' + record.gps_latitude + ' ' + record.gps_longitude + ' ' + record.gps_altitude + '</td></tr>';
-    }
-    html += '<tr><td>Netwerk</td><td>' + record.net_ifname + ' ' + record.net_address + '</td></tr>';
-    if (record.net_rssi < 0) {
-     html += '<tr><td>WiFi signaal</td><td>' + record.net_rssi + '</td></tr>';
-    }
-    html += '<tr><td>Update interval</td><td>' + record.up_interval + ' sec.</td></tr>';
+    record.group_id = obj.group_id;
+    record.lastseen = obj.lastseen;
+    if (obj.hardwaremake)
+     record.harwaremake = obj.hardwaremake;
+    if (obj.hardwaremodel)
+     record.hardwaremodel = obj.hardwaremodel;
+    if (obj.os)
+     record.os = obj.os;
+    if (obj.os_version)
+     record.os_version = obj.os_version;
+    if (obj.firmware)
+     record.firmware = obj.firmware;
+    if (obj.temperature)
+     record.temperature = obj.temperature;
+    if (obj.humidity)
+     record.humidity = obj.humidity;
+    record.net_ifname = obj.net_ifname;
+    record.net_address = obj.net_address;
+    if (obj.net_rssi)
+     record.net_rssi = obj.net_rssi;
    }
-   html += '</<table>';
-   html += '</div>';
-   $('#ContentPanel').html(html);
+   updateScreen();
   }
- });
-
- // Get the data immediatly and then at regular intervals to refresh.
- dataAdapter.dataBind();
- setInterval(function() {
-  dataAdapter.dataBind();
- }, 30000);
+ }
 });
 

mercurial