@bradtech/sensor-lorawan 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HOWTO.md +99 -0
- package/LICENSE +620 -0
- package/README.md +27 -0
- package/dist/BradOSCodec.d.ts +68 -0
- package/dist/BradOSCodec.d.ts.map +1 -0
- package/dist/BradOSCodec.js +123 -0
- package/dist/BradOSCodec.js.map +1 -0
- package/dist/LoRaWanPipeline.d.ts +142 -0
- package/dist/LoRaWanPipeline.d.ts.map +1 -0
- package/dist/LoRaWanPipeline.js +280 -0
- package/dist/LoRaWanPipeline.js.map +1 -0
- package/dist/defaultAdapters.d.ts +49 -0
- package/dist/defaultAdapters.d.ts.map +1 -0
- package/dist/defaultAdapters.js +70 -0
- package/dist/defaultAdapters.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -0
- package/src/BradOSCodec.ts +165 -0
- package/src/LoRaWanPipeline.ts +443 -0
- package/src/defaultAdapters.ts +82 -0
- package/src/index.ts +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoRaWanPipeline.js","sourceRoot":"","sources":["../src/LoRaWanPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Sensor } from '@bradtech/sensor';
|
|
2
|
+
import { CanopyMicroclimateConverter, EvapotranspirationConverter, GroundFrostRiskConverter } from '@bradtech/sensor-air';
|
|
3
|
+
import { SoilMoistureConverter, SoilWaterPotentialConverter, SoilTemperatureConverter, SoilElectricalConductivityConverter } from '@bradtech/sensor-soil';
|
|
4
|
+
import { SolarRadiationConverter, RainGaugeConverter, WindConverter, BarometricPressureConverter } from '@bradtech/sensor-weather';
|
|
5
|
+
import { BatterySoCConverter, SolarHarvestingConverter } from '@bradtech/sensor-power';
|
|
6
|
+
import { AcousticSplConverter, AcousticWeatherConverter } from '@bradtech/sensor-acoustic';
|
|
7
|
+
/**
|
|
8
|
+
* Pre-instantiated out-of-the-box domain sensor adapters dictionary.
|
|
9
|
+
* Avoids redundant allocations across high-frequency message processing pipelines.
|
|
10
|
+
*/
|
|
11
|
+
export declare const defaultSensorAdapters: {
|
|
12
|
+
/** In-canopy temperature, humidity, dew point and foliar VPD adapter */
|
|
13
|
+
canopyAir: CanopyMicroclimateConverter;
|
|
14
|
+
/** Hargreaves-Samani FAO-56 daily reference evapotranspiration (ET0) adapter */
|
|
15
|
+
evapotranspiration: EvapotranspirationConverter;
|
|
16
|
+
/** Roland Stull wet-bulb temperature and ground frost risk evaluator */
|
|
17
|
+
frostRisk: GroundFrostRiskConverter;
|
|
18
|
+
/** Multi-depth soil volumetric water content (VWC %) calibrated adapter */
|
|
19
|
+
soilMoisture: SoilMoistureConverter;
|
|
20
|
+
/** Van Genuchten soil matric water potential (kPa) and pF scale adapter */
|
|
21
|
+
soilWaterPotential: SoilWaterPotentialConverter;
|
|
22
|
+
/** Multi-depth soil profile thermistor adapter */
|
|
23
|
+
soilTemperature: SoilTemperatureConverter;
|
|
24
|
+
/** 25°C temperature-normalized soil electrical conductivity (mS/cm) adapter */
|
|
25
|
+
soilEc: SoilElectricalConductivityConverter;
|
|
26
|
+
/** Broadband solar pyranometer (W/m²) and PAR PPFD photon flux adapter */
|
|
27
|
+
solarRadiation: SolarRadiationConverter;
|
|
28
|
+
/** Tipping bucket rainfall accumulation (mm) and rain rate (mm/h) adapter */
|
|
29
|
+
rainGauge: RainGaugeConverter;
|
|
30
|
+
/** Anemometer wind speed (km/h) and 16-cardinal vane direction adapter */
|
|
31
|
+
wind: WindConverter;
|
|
32
|
+
/** Absolute barometric pressure and sea-level QNH reduction adapter */
|
|
33
|
+
barometricPressure: BarometricPressureConverter;
|
|
34
|
+
/** Chemistry-aware non-linear battery SoC (%) and brownout adapter */
|
|
35
|
+
battery: BatterySoCConverter;
|
|
36
|
+
/** Solar panel photovoltaic harvesting voltage adapter */
|
|
37
|
+
solarHarvesting: SolarHarvestingConverter;
|
|
38
|
+
/** MEMS microphone Sound Pressure Level (dBA SPL) adapter */
|
|
39
|
+
acousticSpl: AcousticSplConverter;
|
|
40
|
+
/** Acoustic rain droplet impact and aerodynamic wind turbulence adapter */
|
|
41
|
+
acousticWeather: AcousticWeatherConverter;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Registers all built-in Brad domain sensor adapters into the global Quatrain Sensor facade.
|
|
45
|
+
*
|
|
46
|
+
* @returns The initialized Sensor singleton class for fluent chaining.
|
|
47
|
+
*/
|
|
48
|
+
export declare function registerDefaultSensorAdapters(): typeof Sensor;
|
|
49
|
+
//# sourceMappingURL=defaultAdapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultAdapters.d.ts","sourceRoot":"","sources":["../src/defaultAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACJ,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACJ,qBAAqB,EACrB,2BAA2B,EAC3B,wBAAwB,EACxB,mCAAmC,EACrC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACJ,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,2BAA2B,EAC7B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACtF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAE1F;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAC/B,wEAAwE;;IAExE,gFAAgF;;IAEhF,wEAAwE;;IAExE,2EAA2E;;IAE3E,2EAA2E;;IAE3E,kDAAkD;;IAElD,+EAA+E;;IAE/E,0EAA0E;;IAE1E,6EAA6E;;IAE7E,0EAA0E;;IAE1E,uEAAuE;;IAEvE,sEAAsE;;IAEtE,0DAA0D;;IAE1D,6DAA6D;;IAE7D,2EAA2E;;CAE7E,CAAA;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,MAAM,CAkB7D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultSensorAdapters = void 0;
|
|
4
|
+
exports.registerDefaultSensorAdapters = registerDefaultSensorAdapters;
|
|
5
|
+
const sensor_1 = require("@bradtech/sensor");
|
|
6
|
+
const sensor_air_1 = require("@bradtech/sensor-air");
|
|
7
|
+
const sensor_soil_1 = require("@bradtech/sensor-soil");
|
|
8
|
+
const sensor_weather_1 = require("@bradtech/sensor-weather");
|
|
9
|
+
const sensor_power_1 = require("@bradtech/sensor-power");
|
|
10
|
+
const sensor_acoustic_1 = require("@bradtech/sensor-acoustic");
|
|
11
|
+
/**
|
|
12
|
+
* Pre-instantiated out-of-the-box domain sensor adapters dictionary.
|
|
13
|
+
* Avoids redundant allocations across high-frequency message processing pipelines.
|
|
14
|
+
*/
|
|
15
|
+
exports.defaultSensorAdapters = {
|
|
16
|
+
/** In-canopy temperature, humidity, dew point and foliar VPD adapter */
|
|
17
|
+
canopyAir: new sensor_air_1.CanopyMicroclimateConverter(),
|
|
18
|
+
/** Hargreaves-Samani FAO-56 daily reference evapotranspiration (ET0) adapter */
|
|
19
|
+
evapotranspiration: new sensor_air_1.EvapotranspirationConverter(),
|
|
20
|
+
/** Roland Stull wet-bulb temperature and ground frost risk evaluator */
|
|
21
|
+
frostRisk: new sensor_air_1.GroundFrostRiskConverter(),
|
|
22
|
+
/** Multi-depth soil volumetric water content (VWC %) calibrated adapter */
|
|
23
|
+
soilMoisture: new sensor_soil_1.SoilMoistureConverter(),
|
|
24
|
+
/** Van Genuchten soil matric water potential (kPa) and pF scale adapter */
|
|
25
|
+
soilWaterPotential: new sensor_soil_1.SoilWaterPotentialConverter(),
|
|
26
|
+
/** Multi-depth soil profile thermistor adapter */
|
|
27
|
+
soilTemperature: new sensor_soil_1.SoilTemperatureConverter(),
|
|
28
|
+
/** 25°C temperature-normalized soil electrical conductivity (mS/cm) adapter */
|
|
29
|
+
soilEc: new sensor_soil_1.SoilElectricalConductivityConverter(),
|
|
30
|
+
/** Broadband solar pyranometer (W/m²) and PAR PPFD photon flux adapter */
|
|
31
|
+
solarRadiation: new sensor_weather_1.SolarRadiationConverter(),
|
|
32
|
+
/** Tipping bucket rainfall accumulation (mm) and rain rate (mm/h) adapter */
|
|
33
|
+
rainGauge: new sensor_weather_1.RainGaugeConverter(),
|
|
34
|
+
/** Anemometer wind speed (km/h) and 16-cardinal vane direction adapter */
|
|
35
|
+
wind: new sensor_weather_1.WindConverter(),
|
|
36
|
+
/** Absolute barometric pressure and sea-level QNH reduction adapter */
|
|
37
|
+
barometricPressure: new sensor_weather_1.BarometricPressureConverter(),
|
|
38
|
+
/** Chemistry-aware non-linear battery SoC (%) and brownout adapter */
|
|
39
|
+
battery: new sensor_power_1.BatterySoCConverter(),
|
|
40
|
+
/** Solar panel photovoltaic harvesting voltage adapter */
|
|
41
|
+
solarHarvesting: new sensor_power_1.SolarHarvestingConverter(),
|
|
42
|
+
/** MEMS microphone Sound Pressure Level (dBA SPL) adapter */
|
|
43
|
+
acousticSpl: new sensor_acoustic_1.AcousticSplConverter(),
|
|
44
|
+
/** Acoustic rain droplet impact and aerodynamic wind turbulence adapter */
|
|
45
|
+
acousticWeather: new sensor_acoustic_1.AcousticWeatherConverter(),
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Registers all built-in Brad domain sensor adapters into the global Quatrain Sensor facade.
|
|
49
|
+
*
|
|
50
|
+
* @returns The initialized Sensor singleton class for fluent chaining.
|
|
51
|
+
*/
|
|
52
|
+
function registerDefaultSensorAdapters() {
|
|
53
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.canopyAir, 'canopyAir');
|
|
54
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.evapotranspiration, 'evapotranspiration');
|
|
55
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.frostRisk, 'frostRisk');
|
|
56
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.soilMoisture, 'soilMoisture');
|
|
57
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.soilWaterPotential, 'soilWaterPotential');
|
|
58
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.soilTemperature, 'soilTemperature');
|
|
59
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.soilEc, 'soilEc');
|
|
60
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.solarRadiation, 'solarRadiation');
|
|
61
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.rainGauge, 'rainGauge');
|
|
62
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.wind, 'wind');
|
|
63
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.barometricPressure, 'barometricPressure');
|
|
64
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.battery, 'battery');
|
|
65
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.solarHarvesting, 'solarHarvesting');
|
|
66
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.acousticSpl, 'acousticSpl');
|
|
67
|
+
sensor_1.Sensor.addAdapter(exports.defaultSensorAdapters.acousticWeather, 'acousticWeather');
|
|
68
|
+
return sensor_1.Sensor;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=defaultAdapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultAdapters.js","sourceRoot":"","sources":["../src/defaultAdapters.ts"],"names":[],"mappings":";;;AA+DA,sEAkBC;AAjFD,6CAAyC;AACzC,qDAI6B;AAC7B,uDAK8B;AAC9B,6DAKiC;AACjC,yDAAsF;AACtF,+DAA0F;AAE1F;;;GAGG;AACU,QAAA,qBAAqB,GAAG;IAClC,wEAAwE;IACxE,SAAS,EAAE,IAAI,wCAA2B,EAAE;IAC5C,gFAAgF;IAChF,kBAAkB,EAAE,IAAI,wCAA2B,EAAE;IACrD,wEAAwE;IACxE,SAAS,EAAE,IAAI,qCAAwB,EAAE;IACzC,2EAA2E;IAC3E,YAAY,EAAE,IAAI,mCAAqB,EAAE;IACzC,2EAA2E;IAC3E,kBAAkB,EAAE,IAAI,yCAA2B,EAAE;IACrD,kDAAkD;IAClD,eAAe,EAAE,IAAI,sCAAwB,EAAE;IAC/C,+EAA+E;IAC/E,MAAM,EAAE,IAAI,iDAAmC,EAAE;IACjD,0EAA0E;IAC1E,cAAc,EAAE,IAAI,wCAAuB,EAAE;IAC7C,6EAA6E;IAC7E,SAAS,EAAE,IAAI,mCAAkB,EAAE;IACnC,0EAA0E;IAC1E,IAAI,EAAE,IAAI,8BAAa,EAAE;IACzB,uEAAuE;IACvE,kBAAkB,EAAE,IAAI,4CAA2B,EAAE;IACrD,sEAAsE;IACtE,OAAO,EAAE,IAAI,kCAAmB,EAAE;IAClC,0DAA0D;IAC1D,eAAe,EAAE,IAAI,uCAAwB,EAAE;IAC/C,6DAA6D;IAC7D,WAAW,EAAE,IAAI,sCAAoB,EAAE;IACvC,2EAA2E;IAC3E,eAAe,EAAE,IAAI,0CAAwB,EAAE;CACjD,CAAA;AAED;;;;GAIG;AACH,SAAgB,6BAA6B;IAC1C,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAC/D,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAA;IACjF,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAC/D,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IACrE,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAA;IACjF,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;IAC3E,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACzD,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;IACzE,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAC/D,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrD,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAA;IACjF,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAC3D,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;IAC3E,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IACnE,eAAM,CAAC,UAAU,CAAC,6BAAqB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;IAE3E,OAAO,eAAM,CAAA;AAChB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./BradOSCodec"), exports);
|
|
18
|
+
__exportStar(require("./LoRaWanPipeline"), exports);
|
|
19
|
+
__exportStar(require("./defaultAdapters"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,oDAAiC;AACjC,oDAAiC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bradtech/sensor-lorawan",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "LoRaWAN ChirpStack uplink binary decoder, FPort dispatching pipeline, and pre-instantiated domain adapters for BradOS probes",
|
|
5
|
+
"author": "Olivier Lépine <olivier@lepine.fr>",
|
|
6
|
+
"license": "AGPL-3.0-or-later",
|
|
7
|
+
"copyright": "Copyright (C) 2026 Olivier Lépine",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public",
|
|
10
|
+
"registry": "https://registry.npmjs.org/"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/bradtech-oss/stack.git",
|
|
15
|
+
"directory": "packages/sensor-lorawan"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"iot",
|
|
19
|
+
"lorawan",
|
|
20
|
+
"chirpstack",
|
|
21
|
+
"decoder",
|
|
22
|
+
"brados",
|
|
23
|
+
"fport",
|
|
24
|
+
"pipeline",
|
|
25
|
+
"telemetry",
|
|
26
|
+
"brad",
|
|
27
|
+
"agpl-v3"
|
|
28
|
+
],
|
|
29
|
+
"main": "./dist/index.js",
|
|
30
|
+
"module": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"bun": "./src/index.ts",
|
|
35
|
+
"import": "./dist/index.js",
|
|
36
|
+
"require": "./dist/index.js",
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"default": "./dist/index.js"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"src",
|
|
44
|
+
"LICENSE",
|
|
45
|
+
"README.md",
|
|
46
|
+
"HOWTO.md",
|
|
47
|
+
"!**/*.test.ts"
|
|
48
|
+
],
|
|
49
|
+
"scripts": {
|
|
50
|
+
"clean": "rm -rf dist",
|
|
51
|
+
"build": "tsc",
|
|
52
|
+
"wbuild": "tsc --watch",
|
|
53
|
+
"test": "bun test"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@bradtech/sensor": "workspace:*",
|
|
57
|
+
"@bradtech/sensor-acoustic": "workspace:*",
|
|
58
|
+
"@bradtech/sensor-air": "workspace:*",
|
|
59
|
+
"@bradtech/sensor-power": "workspace:*",
|
|
60
|
+
"@bradtech/sensor-soil": "workspace:*",
|
|
61
|
+
"@bradtech/sensor-weather": "workspace:*",
|
|
62
|
+
"@bradtech/types": "workspace:*"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@tsconfig/recommended": "^1.0.1",
|
|
66
|
+
"@types/node": "^22.10.1",
|
|
67
|
+
"typescript": "^5.1.5"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard decoded telemetry channel extracted from a binary LoRaWAN payload frame.
|
|
3
|
+
*/
|
|
4
|
+
export interface DecodedRawChannel {
|
|
5
|
+
/** Semantic channel type corresponding to the decoded physical quantity */
|
|
6
|
+
channelType:
|
|
7
|
+
| 'canopy_temp'
|
|
8
|
+
| 'canopy_hum'
|
|
9
|
+
| 'soil_moisture'
|
|
10
|
+
| 'soil_temp'
|
|
11
|
+
| 'soil_ec'
|
|
12
|
+
| 'solar'
|
|
13
|
+
| 'rain'
|
|
14
|
+
| 'wind_speed'
|
|
15
|
+
| 'wind_dir'
|
|
16
|
+
| 'pressure'
|
|
17
|
+
| 'battery'
|
|
18
|
+
| 'acoustic_spl'
|
|
19
|
+
| 'acoustic_rain'
|
|
20
|
+
| 'acoustic_wind'
|
|
21
|
+
| 'generic'
|
|
22
|
+
/** Numerical value extracted from the 32-bit floating point payload */
|
|
23
|
+
rawValue: number
|
|
24
|
+
/** Physical hardware transducer manufacturer identifier (e.g. 'SHT40', 'Brad soil sensor', 'SI1145', 'BMP280') */
|
|
25
|
+
sensorSource?: string
|
|
26
|
+
/** Full commercial model name of the sensor component (e.g. 'Sensirion SHT40', 'Silicon Labs SI1145') */
|
|
27
|
+
sensorModel?: string
|
|
28
|
+
/** Depth placement in centimeters for multi-layer soil probes (10, 20, 30 cm) */
|
|
29
|
+
depthCm?: number
|
|
30
|
+
/** Optional unit hint for human diagnostic display */
|
|
31
|
+
unitHint?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Decoded fields extracted from the 9-byte BradOS boot frame (FPort 1).
|
|
36
|
+
*/
|
|
37
|
+
export interface DecodedBootPayload {
|
|
38
|
+
/** Firmware semantic version string (e.g. "2.1.0") */
|
|
39
|
+
version: string
|
|
40
|
+
/** Build day of year code (e.g. 236 for DOY 236) */
|
|
41
|
+
buildDoy: number
|
|
42
|
+
/** Battery voltage at boot in millivolts */
|
|
43
|
+
batteryMv: number
|
|
44
|
+
/** Microcontroller hardware reset reason bitmask/code */
|
|
45
|
+
resetReason: number
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* BradOS Binary LoRaWAN Payload Codec.
|
|
50
|
+
*
|
|
51
|
+
* Decodes compact IEEE 754 Float32 Little-Endian telemetry payloads and maps
|
|
52
|
+
* LoRaWAN FPort identifiers to hardware sensor sources and physical channels.
|
|
53
|
+
*/
|
|
54
|
+
export class BradOSCodec {
|
|
55
|
+
/**
|
|
56
|
+
* Decodes a Base64-encoded string or raw binary Buffer into an IEEE 754 32-bit Little-Endian float.
|
|
57
|
+
*
|
|
58
|
+
* @param data - Base64 string from ChirpStack or Node.js Buffer.
|
|
59
|
+
* @returns Decoded number, or null if buffer length is invalid (< 4 bytes).
|
|
60
|
+
*/
|
|
61
|
+
static decodeFloat32(data: string | Buffer): number | null {
|
|
62
|
+
try {
|
|
63
|
+
const buffer = typeof data === 'string' ? Buffer.from(data, 'base64') : data
|
|
64
|
+
if (buffer.length < 4) return null
|
|
65
|
+
return buffer.readFloatLE(0)
|
|
66
|
+
} catch {
|
|
67
|
+
return null
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Decodes the 9-byte BradOS boot payload frame transmitted on FPort 1.
|
|
73
|
+
*
|
|
74
|
+
* Byte layout:
|
|
75
|
+
* - Byte 0..2: Major, Minor, Patch version (uint8, uint8, uint8)
|
|
76
|
+
* - Byte 3..4: Build Day-of-Year (uint16 LE)
|
|
77
|
+
* - Byte 5..6: Battery voltage in mV (uint16 LE)
|
|
78
|
+
* - Byte 7: Hardware reset reason (uint8)
|
|
79
|
+
*
|
|
80
|
+
* @param data - Base64 string or binary buffer.
|
|
81
|
+
* @returns Decoded boot parameters, or null if corrupted.
|
|
82
|
+
*/
|
|
83
|
+
static decodeBootPayload(data: string | Buffer): DecodedBootPayload | null {
|
|
84
|
+
try {
|
|
85
|
+
const buffer = typeof data === 'string' ? Buffer.from(data, 'base64') : data
|
|
86
|
+
if (buffer.length < 8) return null
|
|
87
|
+
|
|
88
|
+
const major = buffer.readUInt8(0)
|
|
89
|
+
const minor = buffer.readUInt8(1)
|
|
90
|
+
const patch = buffer.readUInt8(2)
|
|
91
|
+
const buildDoy = buffer.readUInt16LE(3)
|
|
92
|
+
const batteryMv = buffer.readUInt16LE(5)
|
|
93
|
+
const resetReason = buffer.readUInt8(7)
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
version: `${major}.${minor}.${patch}`,
|
|
97
|
+
buildDoy,
|
|
98
|
+
batteryMv,
|
|
99
|
+
resetReason,
|
|
100
|
+
}
|
|
101
|
+
} catch {
|
|
102
|
+
return null
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Maps an incoming LoRaWAN FPort number and binary payload to a standard channel descriptor
|
|
108
|
+
* with automatic hardware sensor attribution (SHT40, Brad soil sensor, Davis, SI1145, BMP280, MP34DT01).
|
|
109
|
+
*
|
|
110
|
+
* @param fPort - LoRaWAN Application Port number.
|
|
111
|
+
* @param data - Base64 string or raw binary buffer containing the 4-byte Float32 payload.
|
|
112
|
+
* @returns Decoded raw channel descriptor, or null if payload is malformed.
|
|
113
|
+
*/
|
|
114
|
+
static decodeFPortChannel(fPort: number, data: string | Buffer): DecodedRawChannel | null {
|
|
115
|
+
const floatVal = this.decodeFloat32(data)
|
|
116
|
+
if (floatVal === null) return null
|
|
117
|
+
|
|
118
|
+
switch (fPort) {
|
|
119
|
+
case 2:
|
|
120
|
+
return { channelType: 'battery', rawValue: floatVal, sensorSource: 'ASR6502 ADC', sensorModel: 'Internal ADC', unitHint: 'V' }
|
|
121
|
+
case 9:
|
|
122
|
+
return { channelType: 'solar', rawValue: floatVal, sensorSource: 'SI1145', sensorModel: 'Silicon Labs SI1145', unitHint: 'index' }
|
|
123
|
+
case 11:
|
|
124
|
+
return { channelType: 'canopy_hum', rawValue: floatVal, sensorSource: 'SHT40', sensorModel: 'Sensirion SHT40', unitHint: '%' }
|
|
125
|
+
case 12:
|
|
126
|
+
return { channelType: 'soil_moisture', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 10cm', depthCm: 10, unitHint: '%' }
|
|
127
|
+
case 13:
|
|
128
|
+
return { channelType: 'soil_moisture', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 20cm', depthCm: 20, unitHint: '%' }
|
|
129
|
+
case 14:
|
|
130
|
+
return { channelType: 'soil_moisture', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 30cm', depthCm: 30, unitHint: '%' }
|
|
131
|
+
case 15:
|
|
132
|
+
return { channelType: 'canopy_temp', rawValue: floatVal, sensorSource: 'SHT40', sensorModel: 'Sensirion SHT40', unitHint: '°C' }
|
|
133
|
+
case 16:
|
|
134
|
+
return { channelType: 'soil_temp', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 10cm', depthCm: 10, unitHint: '°C' }
|
|
135
|
+
case 17:
|
|
136
|
+
return { channelType: 'soil_temp', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 20cm', depthCm: 20, unitHint: '°C' }
|
|
137
|
+
case 18:
|
|
138
|
+
return { channelType: 'soil_temp', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 30cm', depthCm: 30, unitHint: '°C' }
|
|
139
|
+
case 19:
|
|
140
|
+
return { channelType: 'solar', rawValue: floatVal, sensorSource: 'SI1145', sensorModel: 'Silicon Labs SI1145', unitHint: 'W/m²' }
|
|
141
|
+
case 20:
|
|
142
|
+
return { channelType: 'rain', rawValue: floatVal, sensorSource: 'Davis 7852', sensorModel: 'Davis Rain Collector', unitHint: 'mm' }
|
|
143
|
+
case 21:
|
|
144
|
+
return { channelType: 'wind_speed', rawValue: floatVal, sensorSource: 'Davis 6410', sensorModel: 'Davis Anemometer', unitHint: 'km/h' }
|
|
145
|
+
case 22:
|
|
146
|
+
return { channelType: 'wind_dir', rawValue: floatVal, sensorSource: 'Davis 6410', sensorModel: 'Davis Vane', unitHint: '°' }
|
|
147
|
+
case 23:
|
|
148
|
+
return { channelType: 'pressure', rawValue: floatVal, sensorSource: 'BMP280', sensorModel: 'Bosch BMP280', unitHint: 'hPa' }
|
|
149
|
+
case 24:
|
|
150
|
+
return { channelType: 'acoustic_spl', rawValue: floatVal, sensorSource: 'MP34DT01', sensorModel: 'ST MEMS Microphone', unitHint: 'dBA' }
|
|
151
|
+
case 25:
|
|
152
|
+
return { channelType: 'acoustic_rain', rawValue: floatVal, sensorSource: 'MP34DT01', sensorModel: 'ST MEMS Microphone', unitHint: 'index' }
|
|
153
|
+
case 26:
|
|
154
|
+
return { channelType: 'acoustic_wind', rawValue: floatVal, sensorSource: 'MP34DT01', sensorModel: 'ST MEMS Microphone', unitHint: 'index' }
|
|
155
|
+
case 31:
|
|
156
|
+
return { channelType: 'soil_ec', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 10cm', depthCm: 10, unitHint: 'mS/cm' }
|
|
157
|
+
case 32:
|
|
158
|
+
return { channelType: 'soil_ec', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 20cm', depthCm: 20, unitHint: 'mS/cm' }
|
|
159
|
+
case 33:
|
|
160
|
+
return { channelType: 'soil_ec', rawValue: floatVal, sensorSource: 'Brad soil sensor', sensorModel: 'Brad Soil Sensor 30cm', depthCm: 30, unitHint: 'mS/cm' }
|
|
161
|
+
default:
|
|
162
|
+
return { channelType: 'generic', rawValue: floatVal }
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|