From 41b63a6ec8e86595ec4ae08a684d960a0fa541dd Mon Sep 17 00:00:00 2001 From: cixio <5869764+cixio@users.noreply.github.com> Date: Wed, 31 Jan 2024 23:02:46 +0100 Subject: [PATCH 1/2] added xdata decoding for KNMI Tachometer --- js/xdata.js | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/js/xdata.js b/js/xdata.js index 5377d11..1235e72 100644 --- a/js/xdata.js +++ b/js/xdata.js @@ -592,6 +592,37 @@ function parseSKYDEW(xdata) { return _output } +function parseKnmiTachometer(xdata) { + // KNMI Tachometer for Vaisala OIF411 + // + // Sample data: 80022B5A1EE4001384A407F8 (length = 24 characters) + + // Run some checks over the input + if(xdata.length != 24){ + // Invalid dataset + return {}; + } + + if(xdata.substr(0,2) !== '80'){ + // Not a KNMI Tachometer (shouldn't get here) + return {}; + } + + var _output = {}; + + // uptime (in seconds) of the arduino tachometer board + _output['tacho_uptime'] = (parseInt(xdata.substr(4,8),16) * 8 / 1000000).toFixed(); + + // time the Vaisala OIF411 motor needs to make 400 rounds + _delta = parseInt(xdata.substr(12,8),16) * 8 / 1000000; + _output['tacho_delta'] = _delta.toFixed(3); + + // calculated rounds per second + _output['tacho_rps'] = (400 / _delta).toFixed(3); + + return _output +} + function parseXDATA(data, pressure, temperature){ // Accept an XDATA string, or multiple XDATA entries, delimited by '#' // Attempt to parse each one, and return an object @@ -683,8 +714,9 @@ function parseXDATA(data, pressure, temperature){ // POPS if (!_instruments.includes("POPS")) _instruments.push('POPS'); } else if (_instrument === '80'){ - // Unknown! - //console.log("Saw unknown XDATA instrument 0x80.") + // KNMI Tachometer + _xdata_temp = parseKnmiTachometer(_current_xdata); + _output = Object.assign(_output,_xdata_temp); }else { // Unknown! From 7da2b20be9b4d8067b0ac7112e144edfaf06bf9b Mon Sep 17 00:00:00 2001 From: cixio <5869764+cixio@users.noreply.github.com> Date: Wed, 31 Jan 2024 23:11:27 +0100 Subject: [PATCH 2/2] code layout fix --- js/xdata.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/xdata.js b/js/xdata.js index 1235e72..49ba6fd 100644 --- a/js/xdata.js +++ b/js/xdata.js @@ -714,10 +714,10 @@ function parseXDATA(data, pressure, temperature){ // POPS if (!_instruments.includes("POPS")) _instruments.push('POPS'); } else if (_instrument === '80'){ - // KNMI Tachometer + // KNMI Tachometer _xdata_temp = parseKnmiTachometer(_current_xdata); - _output = Object.assign(_output,_xdata_temp); - }else { + _output = Object.assign(_output,_xdata_temp); + } else { // Unknown! }