# HG changeset patch # User Michiel Broek # Date 1590668594 -7200 # Node ID cfe2327100274ba9030cb9bb2898f758644b25ff # Parent a165f6c20a44000273cadbff01ae173cb64c5988 Monitor nodes now uses websockets instead of polling. diff -r a165f6c20a44 -r cfe232710027 bmsd/nodes.c --- 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); } diff -r a165f6c20a44 -r cfe232710027 www/js/mon_node.js --- 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 = '
'; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; + record = dataAdapter.records[0]; + updateScreen(); + } + }); + + function updateScreen() { + var oline = (record.online) ? 'On-line' : 'Off-line', + html = '
'; + html += '
Systeem overzicht
Uuid' + record.uuid + '
Systeem' + record.node + '
Online' + oline + '
Type' + record.group_id + '
Eerst gezien' + record.firstseen + '
Laatst gezien' + record.lastseen + '
'; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + if (record.online) { html += ''; html += ''; html += ''; html += ''; + + if (record.temperature > 0) + html += ''; + if (record.humidity > 0) + html += ''; + if (record.barometer > 0) + html += ''; + if ((record.gps_latitude != 0) && (record.gps_longitude != 0)) + html += ''; + html += ''; + if (record.net_rssi < 0) + html += ''; + html += ''; + } + html += ''; + html += ''; + $('#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 += ''; - } - if (record.humidity > 0) { - html += ''; - } - if (record.barometer > 0) { - html += ''; - } - if ((record.gps_latitude != 0) && (record.gps_longitude != 0)) { - html += ''; - } - html += ''; - if (record.net_rssi < 0) { - html += ''; - } - html += ''; + 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 += ''; - html += ''; - $('#ContentPanel').html(html); + updateScreen(); } - }); - - // Get the data immediatly and then at regular intervals to refresh. - dataAdapter.dataBind(); - setInterval(function() { - dataAdapter.dataBind(); - }, 30000); + } });
Systeem overzicht
Uuid' + record.uuid + '
Systeem' + record.node + '
Online' + oline + '
Type' + record.group_id + '
Eerst gezien' + record.firstseen + '
Laatst gezien' + record.lastseen + '
Hardware maker' + record.hardwaremake + '
Hardware model' + record.hardwaremodel + '
OS' + record.os + ' versie: ' + record.os_version + '
Firmware' + record.firmware + '
Temperatuur' + record.temperature.toFixed(1) + '°C
Vochtigheid' + record.humidity.toFixed(1) + '%
Luchtdruk' + record.barometer.toFixed(0) + '
GPS' + record.gps_latitude + ' ' + record.gps_longitude + ' ' + record.gps_altitude + '
Netwerk' + record.net_ifname + ' ' + record.net_address + '
WiFi signaal' + record.net_rssi + '
Update interval' + record.up_interval + ' sec.
Temperatuur' + record.temperature.toFixed(1) + '°C
Vochtigheid' + record.humidity.toFixed(1) + '%
Luchtdruk' + record.barometer.toFixed(0) + '
GPS' + record.gps_latitude + ' ' + record.gps_longitude + ' ' + record.gps_altitude + '
Netwerk' + record.net_ifname + ' ' + record.net_address + '
WiFi signaal' + record.net_rssi + '
Update interval' + record.up_interval + ' sec.