Thu, 28 May 2020 14:23:14 +0200
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) + '°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) + '°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); + } });