Dragino LSE01 Payload Decoder

Decode Dragino LSE01 LoRaWAN payloads online: battery, soil moisture, soil temperature and conductivity (EC), with Dragino's exact negative-temperature formula. Includes payload structure, verified examples and a decodeUplink codec for ChirpStack v4 and The Things Stack.

Type: Soil moisture, temperature & EC sensor LoRaWAN class: Class A FPort: 2 Payload: 11 bytes Endianness: Big-endian

Example payloads

CE2900F107A5099B6E2890 3.625 V · DS18B20 24.1 °C · moisture 19.57 % · soil 24.59 °C · EC 28200 µS/cm (official TTN repository test vector)
0B45000005DC010500C800 2.885 V · no probe (0.0) · moisture 15.00 % · soil 2.61 °C · EC 200 µS/cm (field examples from the manual)
0B45000005DCFF7E00C800 Negative soil temperature: 0xFF7E → −1.29 °C (Dragino's own formula)

Payload structure

Bytes Field Type / scale Description
0–1 Battery uint16 & 0x3FFF → mV The top 2 bits are reserved and must be masked off. Example: 0xCE29 & 0x3FFF = 0x0E29 = 3625 mV.
2–3 DS18B20 temperature int16 ÷ 10 → °C Optional external probe. Reads 0x0000 (0.0 °C) when no probe is fitted — there is no explicit sentinel.
4–5 Soil moisture uint16 ÷ 100 → % Range 0–10000 → 0–100 %. Example: 0x07A5 = 1957 → 19.57 %.
6–7 Soil temperature (raw − 0xFFFF) ÷ 100 if negative Dragino's official formula for negative values subtracts 0xFFFF (not 0x10000): 0xFF7E → −1.29 °C. Positive: raw ÷ 100.
8–9 Soil conductivity (EC) uint16 → µS/cm No scaling. Example: 0x6E28 = 28200 µS/cm.
10 Status bitfield Bit 7 = MOD (0 default, 1 raw mode: bytes 4–9 become dielectric constant and raw AD values on firmware ≥ 1.2.1). Bits 3–0 = interrupt flag.

Ready-to-use codec

ChirpStack v4 and The Things Stack share the same decodeUplink(input) signature: paste this into the device profile codec (ChirpStack) or the payload formatter (TTN).

function decodeUplink(input) {
  var b = input.bytes;
  function u16(i) { return (b[i] << 8) | b[i + 1]; }
  function int16(i) { var v = u16(i); return v >= 0x8000 ? v - 0x10000 : v; }
  var soil = u16(6);
  return {
    data: {
      battery: (u16(0) & 0x3FFF) / 1000,
      temp_ds18b20: int16(2) / 10,
      soil_moisture: u16(4) / 100,
      soil_temperature: (soil & 0x8000 ? soil - 0xFFFF : soil) / 100,
      soil_conductivity: u16(8),
      mod: b[10] >> 7,
      interrupt: b[10] & 0x0F
    }
  };
}

The Dragino LSE01 measures soil moisture, soil temperature and electrical conductivity (EC) — the core trio for precision-agriculture irrigation decisions. It reports on FPort 2 as a fixed 11-byte, big-endian frame.

Decoder pitfalls specific to this device:

  • Mask the battery. The top two bits of bytes 0–1 are not voltage; without the 0x3FFF mask a fresh battery reads as ~52 V.
  • Dragino’s negative-temperature quirk. The official decoder computes negative soil temperatures as (raw − 0xFFFF) / 100 — one less than standard two’s complement. 0xFF7E is −1.29 °C, not −1.30 °C. This tool reproduces the official behavior exactly.
  • No probe ≠ error. With no DS18B20 attached, bytes 2–3 simply read 0x0000. There is no 0x7FFF sentinel on this model (unlike the LHT52/65).
  • Check the MOD bit. If bit 7 of the status byte is set (firmware ≥ 1.2.1 raw mode), bytes 4–9 carry the dielectric constant and raw AD values instead of calibrated readings — this tool warns when it sees it.
  • EC is unscaled µS/cm; values in fertilized soil can exceed 20000.

References

  • Dragino LSE01 user manual (payload sections 2.3.1–2.3.7) — wiki.dragino.com
  • Official decoder: github.com/dragino/dragino-end-node-decoder, LSE01/ (v1.2.1)