From 98150ad7f2a69d45fbb5dce566ec6e7697a21aa7 Mon Sep 17 00:00:00 2001 From: inmysocks Date: Sat, 7 Feb 2026 20:10:51 +0100 Subject: [PATCH] updates to allow one probe to be associated with multiple temperature sites --- node/index.js | 105 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 95 insertions(+), 10 deletions(-) diff --git a/node/index.js b/node/index.js index 45ba1ee..872ef1b 100644 --- a/node/index.js +++ b/node/index.js @@ -56,12 +56,16 @@ function createPool() { //connection.release(); } else { results.forEach(function (thisRow) { - settings[thisRow.node_id] = { - measurement_interval: thisRow.measurement_interval_minutes, - measurement_offset: thisRow.offset_from_midnight_minutes, - wake_window_length: thisRow.wake_window_length_minutes, - temperature_site: thisRow.group_id, - }; + if(Object.keys(settings).indexOf(thisRow.node_id) > -1) { + settings[thisRow.node_id].temperature_site.push(thisRow.group_id) + } else { + settings[thisRow.node_id] = { + measurement_interval: thisRow.measurement_interval_minutes, + measurement_offset: thisRow.offset_from_midnight_minutes, + wake_window_length: thisRow.wake_window_length_minutes, + temperature_site: [thisRow.group_id], + }; + } }); connection.release(); } @@ -72,6 +76,54 @@ function createPool() { return pool; } +function update_settings() { + pool.getConnection(function (err, connection) { + if (err) { + console.log("error setting the database: ", err); + } else { + connection.execute( + `SELECT + datavis_node2group.node_id, + datavis_node2group.group_id, + datavis_nodeconfiguration.measurement_interval_minutes, + datavis_nodeconfiguration.offset_from_midnight_minutes, + datavis_nodeconfiguration.wake_window_length_minutes + FROM datavis_grouptype + JOIN datavis_group2type + ON datavis_grouptype.unique_id=datavis_group2type.type_id + JOIN datavis_node2group + ON datavis_group2type.group_id=datavis_node2group.group_id + JOIN datavis_nodeconfiguration + ON datavis_nodeconfiguration.node_id=datavis_node2group.node_id + WHERE datavis_grouptype.name = 'Temperature Site';`, + [], + function (err2, results) { + if (err2) { + console.log(`Some other error getting node settings: ${err2}`); + //connection.release(); + } else { + results.forEach(function (thisRow) { + if(Object.keys(settings).indexOf(thisRow.node_id) > -1) { + settings[thisRow.node_id].temperature_site.push(thisRow.group_id) + } else { + settings[thisRow.node_id] = { + measurement_interval: thisRow.measurement_interval_minutes, + measurement_offset: thisRow.offset_from_midnight_minutes, + wake_window_length: thisRow.wake_window_length_minutes, + temperature_site: [thisRow.group_id], + }; + } + }); + connection.release(); + } + }, + ); + } + }); +} + +setInterval(update_settings, 60000) + const socket = dgram.createSocket("udp4"); let stream = fs.createWriteStream(`${filePath}/${thisDate}-log.dat`, { flags: "a+", @@ -345,7 +397,7 @@ function storeType1Messages(msgs) { storeType1Messages(msgs.slice(-1 * (msgs.length % 2500))); } else { let theseParams = []; - msgs.forEach(function (msg) { + /*msgs.forEach(function (msg) { // YYYY-MM-DD HH:mm:ss const server_received_time = sqlCurrentTimestamp(); theseParams.push( @@ -367,11 +419,44 @@ function storeType1Messages(msgs) { msg.data.remaining_charge_capacity || 500000, server_received_time, ); - }); + });*/ + let num_rows = 0 + for(let i =0; i < msgs.length; i++) { + if(settings[msg.source.slice(4)]) { + settings[msg.source.slice(4)] = { + measurement_interval: 360, + measurement_offset: 0, + wake_window_length: 4, + temperature_site: ["Unknowable 1"], + } + } + settings[msg.source.slice(4)].temperature_site.forEach(temperature_site => { + num_rows += 1 + theseParams.push( + msg.source.slice(4), + msg.reporting_node || "000000000000", + temperature_site || "Unknowable 1", + msg.timestamp, + msg.data["18_inch_temperature"] || 500000, + msg.data["36_inch_temperature"] || 500000, + msg.data.device_temperature || 500000, + msg.data.ambient_temperature || 500000, + msg.data.relative_humidity || 500000, + msg.data.barometric_pressure || 500000, + msg.data.accelerometer_x || 500000, + msg.data.accelerometer_y || 500000, + msg.data.accelerometer_z || 500000, + msg.data.battery_charge_percent || 500000, + msg.data.battery_voltage || 500000, + msg.data.remaining_charge_capacity || 500000, + server_received_time, + ); + }) + } const thisSQL = "INSERT IGNORE INTO datavis_measurement (source_node_id, reporting_node_id, associated_group_id, collection_time, temperature_18_inch, temperature_36_inch, device_temperature, ambient_temperature, relative_humidity, barometric_pressure, accelerometer_x, accelerometer_y, accelerometer_z, battery_charge_percent, battery_voltage, remaining_battery_capacity, server_received_time) VALUES " + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)," - .repeat(msgs.length) + .repeat(num_rows) .slice(0, -1) + ";"; pool.getConnection(function (err, connection) { @@ -469,7 +554,7 @@ function storeType13Messages(msgs) { }); }); const thisSQL = - "INSERT INTO datavis_nodefilemanifest (node_id,collection_time,program_id,program_version,server_received_time) VALUES " + + "INSERT IGNORE INTO datavis_nodefilemanifest (node_id,collection_time,program_id,program_version,server_received_time) VALUES " + "(?,?,?,?,?),".repeat(n).slice(0, -1) + ";"; pool.getConnection(function (err, connection) {