Real-World IoT Applications

Water Quality and Flood Monitoring Networks

Environmental monitoring is one of the most compelling applications for LoRa mesh networks: sensors can be deployed in remote, power-limited locations that are difficult or expensive to reach with traditional wired or cellular connectivity.

Water Quality Monitoring

Mesh-connected water quality sensors provide real-time data for rivers, lakes, reservoirs, and municipal water systems. Note that water-quality sensors (pH, turbidity, dissolved oxygen, conductivity) require regular calibration to stay accurate:

Parameters to Monitor

Hardware Architecture

A complete water quality node:

Flood Early Warning Systems

The National Weather Service (NWS), working with USGS streamgages, is the authoritative source for flood warnings. A community LoRa mesh is a supplementary, non-authoritative monitoring aid - it does not replace NWS/USGS warnings or official alerts. Mesh delivery is best-effort and unacknowledged; packets can drop. Use a local mesh to monitor your own property as an early local indicator, but make life-safety and evacuation decisions based on official NWS/USGS warnings and local emergency alerts.

As a supplement, a creek or river monitoring network may give downstream residents some local advance notice. Any lead time (sometimes cited as 30-120 minutes) is watershed-dependent and not a guaranteed property - flash-flood watersheds can give far less. Treat it as a best-effort early indicator, not a guaranteed warning window:

  1. Deploy water level sensors at upstream monitoring points (2-3 sensors per watershed)
  2. Set alert thresholds. The percentages below are illustrative only, not a safe universal recipe: trigger on rate-of-rise (e.g., cm per minute) as well as absolute level, set conservative early thresholds, and align cut points with the official NWS flood-stage definitions for that specific gauge (per-site calibration with the local NWS/USGS gage). A 90%-of-flood-stage "Emergency" trigger can fire too late to evacuate, especially in flash-flood-prone watersheds. Example illustrative levels: "Advisory" ~50% of flood stage, "Warning" ~75%, "Emergency" ~90% - but do not hard-code these as universal.
  3. Gateway node at the monitoring station forwards alerts to community mesh
  4. Room server stores alerts and delivers to all connected community members
  5. Integration with community alerting: Telegram bot, email, or siren activation

Case study framework: A network of 5 sensors along a 20-mile creek watershed, each transmitting hourly with a gateway node at the nearest road bridge, can give the downstream community a supplementary local indicator of rising water. This is an early local signal only - it does not replace NWS/USGS flood warnings, and residents should always treat official warnings and alerts as primary.

Data Management and Visualization

# Simple data pipeline for water monitoring:
# 1. Sensor node transmits JSON over LoRa mesh
# 2. Gateway node receives and publishes to MQTT
# 3. InfluxDB stores time-series data
# 4. Grafana displays dashboard with:
# - Current readings per sensor
# - Historical trend charts
# - Alert status indicators
# - Map overlay with sensor locations

# Sample query for a flood alert (threshold is illustrative only).
# Note: InfluxQL syntax shown below applies to InfluxDB 1.x;
# InfluxDB 2.x/3.x use Flux or SQL instead.
# SELECT last("level_cm") FROM water_sensors
# WHERE "location" = 'upstream_north'
# AND "level_cm" > 180 # illustrative alert threshold - calibrate per site

Air Quality and Environmental Monitoring Networks

Urban air quality monitoring is an underserved application for community mesh networks. Low-cost sensor nodes can build hyperlocal air quality maps that government monitoring stations - typically spaced miles apart - cannot provide. Keep in mind throughout that low-cost air-quality sensors are not regulatory- or reference-grade: their readings are indicative and supplementary, not authoritative.

Why Low-Cost Sensors Matter

Regulatory air quality monitors are sparse - often only a handful per metropolitan area - so a single station may represent tens of square miles (see EPA AQS network design criteria, 40 CFR Part 58 App. D). Regulatory reference monitors cost roughly $15K-$40K each, and a fully-equipped multi-pollutant station including siting and maintenance can run into the six figures; each represents a wide catchment area. Community mesh nodes with low-cost sensors (roughly $50-200 per node as a BOM estimate) can provide neighborhood-level data that reveals hotspots, traffic corridors, and industrial emission events invisible to the regional monitoring network. Community low-cost-sensor networks such as PurpleAir have demonstrated this hyperlocal value, but their readings are indicative rather than reference-grade.

Sensor Options for Air Quality

ParameterSensorCostAccuracyNotes
PM2.5 / PM10Plantower PMS5003 or SDS011$15-25SDS011 ≈ max(±15%, ±10 µg/m³)Most important for health; needs temperature correction. PMS5003 has no published absolute-accuracy spec, only consistency. Both are UART sensors - see the build note below on Meshtastic support.
CO₂Sensirion SCD40 or SCD41$35-50±(50 ppm + 5% of reading)True NDIR sensor; factory-calibrated, but relies on periodic fresh-air exposure (automatic self-calibration) to hold long-term accuracy.
VOCsSGP30 or SGP41$15-20Semi-quantitativeGood for trend and event detection; not precise absolute levels
NO₂ / O₃SPEC Sensors electrochemical$50-100 each±20 ppb (see SPEC Sensors datasheet)Higher cost; good for near-road monitoring. Electrochemical sensors drift over time and need temperature/humidity compensation.
Temp + HumidityBME280$3-8±0.5°C, ±3% RHEssential for correcting PM sensor readings
Temp + HumiditySHT31$3-8±0.3°C, ±2% RHMore accurate alternative for PM correction

Building a PM2.5 Monitoring Node

The following is a design sketch, not a turnkey recipe. The PMS5003 and SDS011 are UART laser particulate sensors, and stock Meshtastic's Telemetry module does not support them. For particulate matter in stock Meshtastic, use the I2C PMSA003I (I2C address 0x12), which the Telemetry module's air-quality metrics path supports. A UART PMS5003 requires custom firmware or a separate MCU/co-processor that injects readings into the mesh.

# Hardware: RAK4631 + RAK1906 (BME680) for temp/humidity correction
# For stock Meshtastic PM support, use the I2C PMSA003I (addr 0x12),
# NOT the UART PMS5003/SDS011 (those are not natively supported).

# Path A (recommended, no custom firmware):
#   PMSA003I (I2C) on a Meshtastic node -> AirQualityMetrics telemetry

# Path B (UART PMS5003): requires a co-processor or custom firmware.
#   Meshtastic environment telemetry uses fixed protobuf fields, so a
#   raw PMS5003 needs either:
#   - an ESP32 (e.g. T-Beam) running custom Arduino firmware that reads
#     PMS5003 + BME280 over UART/I2C and formats the data, or a custom
#     portnum, or
#   - a Raspberry Pi co-processor reading PMS5003 via UART and injecting
#     messages into the mesh via the Meshtastic Python API (see the
#     Meshtastic Python API send-message docs; clarify whether you send
#     plain text or structured telemetry).
# MeshCore note: there is no deployable "SENSOR firmware" that broadcasts
# PM telemetry; treat the working paths above as the only buildable ones.

Community Air Quality Network Design

For a neighborhood-scale (10-50 node) air quality network:

Community Value and Partnerships

Important: low-cost PM and gas sensors are not regulatory-grade. Readings require collocation/calibration and should always be presented as indicative, supplementary data - not as authoritative air-quality measurements. Do not use uncalibrated node readings as the basis for individual health decisions; defer to official AirNow/EPA data for that.