⚑ Sovereign Open-Source Agronomy & IoT Framework

Open Physical Telemetry &
Agronomic Intelligence

A high-precision, strongly-typed TypeScript ecosystem for multi-depth capacitive soil moisture, canopy microclimate VPD, FAO-56 evapotranspiration, and ChirpStack LoRaWAN decoding.

9
Modular Packages
100%
TypeScript & Pure Bun
AGPL-v3
Sovereign & Copyleft
< 1ms
Edge Conversion Speed

End-to-End Telemetry Architecture

From physical sensor probes to immutable OKF DataPoints ledger.

STEP 01

πŸ“‘ Physical Probes

BradOS firmware sampling I2C/analog sensors into Float32 Little-Endian binary payloads.

STEP 02

🌐 ChirpStack / LoRaWAN

Autonomous Edge-ADR transmission routed via sovereign Basicstation WSS gateway stack.

STEP 03

βš™οΈ @bradtech/sensor-lorawan

Zero-allocation dispatching pipeline converting FPorts into calibrated domain metrics.

STEP 04

πŸ“Š Immutable DataPoints

Unified OKF ontology (measured vs computed) stored in PostgreSQL / TimescaleDB.

Open Source Package Registry

Modular, tree-shakeable packages published under GNU AGPL-v3.

πŸ“‘
LoRaWAN Codec

@bradtech/sensor-lorawan

ChirpStack uplink binary decoder, BradOS FPort dispatching pipeline, and zero-allocation pre-instantiated domain adapters.

bun add @bradtech/sensor-lorawan
🧩
Core Micro-Framework

@bradtech/sensor

Foundational sensor abstraction, BaseSensorConverter, ConverterRegistry, Quatrain Sensor facade, and deterministic ReplayEngine.

bun add @bradtech/sensor
🌱
Agronomy / Soil

@bradtech/sensor-soil

Multi-depth capacitive VWC %, plot-specific linear regression (y = ax + b), van Genuchten soil matric potential pF, and normalized EC @ 25Β°C.

bun add @bradtech/sensor-soil
πŸ’¨
Microclimate

@bradtech/sensor-air

Crop canopy air microclimate, foliar Vapor Pressure Deficit (VPD in kPa), FAO-56 Penman-Monteith ET0, and spring ground frost risk.

bun add @bradtech/sensor-air
β›…
Meteorology

@bradtech/sensor-weather

Rain gauge tipping bucket accumulation & intensity rate (mm/h), 16-cardinal wind anemometer, solar radiation PAR PPFD, and barometric QNH.

bun add @bradtech/sensor-weather
πŸ”‹
Power & Energy

@bradtech/sensor-power

Li-Ion battery state-of-charge (SoC %) non-linear polynomial conversion, brownout risk protection, and MPPT solar harvesting efficiency.

bun add @bradtech/sensor-power
πŸŽ™οΈ
Acoustics

@bradtech/sensor-acoustic

Digital I2S acoustic sensing, sound pressure level (dBA SPL), and frequency spectrum analysis for acoustic rain and wind buffeting.

bun add @bradtech/sensor-acoustic
πŸ“š
OKF Ontologies

@bradtech/ontologies

Open Knowledge Format (OKF v0.1) agricultural taxonomies (soils, crops, irrigations), multilingual selectors, and open data JSON-LD graphs.

bun add @bradtech/ontologies
πŸ“
Type Definitions

@bradtech/types

Strongly-typed template literal URIs (probes/X, plots/Y, okf:metric/Z), QUDT measurement units, and polymorphic metadata contracts.

bun add @bradtech/types

Live LoRaWAN Decoder & Math Simulator

Test real Base64 Float32 Little-Endian payloads and view the calibrated OKF DataPoints output generated in real-time.

πŸ“₯ Uplink Message Input
πŸ“€ Calibrated DataPoints Output (JSON)
// Processing...

Practical HOWTO Recipes

Real-world TypeScript implementation patterns for IoT and Agronomy developers.

1. Processing ChirpStack Uplinks in Any Microservice

Decode binary messages received via MQTT or webhook from ChirpStack into standardized, immutable OKF DataPoints.

import { LoRaWanPipeline } from '@bradtech/sensor-lorawan'

// Raw JSON uplink payload from ChirpStack MQTT
const dataPoints = LoRaWanPipeline.process({
  deviceInfo: {
    deviceName: 'b25s004',
    devEui: '8c1f640000000004',
    tags: { plot: 'plots/saint-emilion-01' }
  },
  fPort: 15,
  data: 'AAAAQEF', // 24.0Β°C in Float32 LE
  publishedAt: new Date().toISOString()
})

console.log(dataPoints)
// Emits both measured temperature AND derived foliar VPD!

2. Plot-Specific Soil Moisture Linear Regression

Apply lab pedological calibration curves (y = ax + b) directly on raw capacitive dielectric readings.

import { SoilMoistureConverter } from '@bradtech/sensor-soil'

const converter = new SoilMoistureConverter()

const points = converter.convert({
  value: 45.2, // Raw capacitive reading
  device: 'probes/b25s004',
  plot: 'plots/saint-emilion-01',
  timestamp: new Date().toISOString(),
  context: {
    depthCm: 10,
    slope: 1.05,    // Plot linear slope (a)
    intercept: -0.8 // Plot intercept (b)
  }
})

// Accurately calibrated VWC % for clay-loam soils!