Milesight TS201: LoRaWAN Temperature Probe (DS18B20)

Milesight TS201 LoRaWAN temperature probe (DS18B20): own ChirpStack/ThingsBoard decoder, decoded example, threshold alarms, cold-chain integration.

Milesight TS201
TS201Sensor
LoRaWAN
v1.0.3 Class A, OTAA / ABP
Band / port
EU868 / port 85
Probe
Detachable DS18B20, 1.5 m cable, 50 mm tip
Temperature
-40 to +125 °C, ±0.5 °C (-10 to +85 °C)
Resolution
0.1 °C
Local storage
4000 records, retransmission
Battery
2700 mAh ER14505 Li-SOCl₂, up to ~9 years
Measurements

What the TS201 measures

Temperature

Detachable DS18B20 probe, -40 to +125 °C, reported as INT16 little-endian scaled by /10.

Battery level

Percentage value, reported periodically alongside readings.

Threshold alarm

Dedicated alarm channel fires immediately when a configured limit is crossed.

Abrupt change alarm

Mutation channel reports a sudden temperature jump with the change magnitude.

Probe fault status

Channel B3 67 flags a read error or an out-of-range reading when the DS18B20 probe is faulty or disconnected.

History records

Up to 4000 timestamped records stored on device and retransmitted after an outage.

Data into your dashboard

Integration

Sensor / controller

Measures or controls in the field and sends LoRaWAN uplinks.

LoRaWAN gateway

Receives the radio packets and forwards them to the server.

ChirpStack

Network server: manages sessions and decodes the payload.

ThingsBoard / Grafana

Dashboards, alarms, rules and reports.

ChirpStack v4 · decodeUplink
function decodeUplink(input) {
  var bytes = input.bytes;
  var data = {};

  for (var i = 0; i < bytes.length; ) {
    var channel = bytes[i++];
    var type = bytes[i++];

    if (channel === 0x01 && type === 0x75) {          // battery (%)
      data.battery = bytes[i]; i += 1;
    } else if (channel === 0x03 && type === 0x67) {   // temperature (°C)
      data.temperature = readInt16LE(bytes, i) / 10; i += 2;
    } else if (channel === 0x83 && type === 0x67) {   // threshold alarm
      data.temperature = readInt16LE(bytes, i) / 10;
      data.temperature_alarm = readAlarm(bytes[i + 2]); i += 3;
    } else if (channel === 0x93 && type === 0x67) {   // abrupt change alarm
      data.temperature = readInt16LE(bytes, i) / 10;
      data.temperature_mutation = readInt16LE(bytes, i + 2) / 10;
      data.temperature_alarm = readAlarm(bytes[i + 4]); i += 5;
    } else if (channel === 0xb3 && type === 0x67) {   // probe sensor status
      data.temperature_sensor_status = readSensorStatus(bytes[i]); i += 1;
    } else if (channel === 0xff) {                     // device info (skip)
      break;
    } else {
      break;
    }
  }
  return { data: data };
}

function readInt16LE(b, i) {
  var v = (b[i + 1] << 8) | b[i];
  return v > 0x7fff ? v - 0x10000 : v;
}
function readAlarm(v) {
  var m = { 0: "threshold alarm release", 1: "threshold alarm", 2: "mutation alarm" };
  return m[v] !== undefined ? m[v] : v;
}
function readSensorStatus(v) {
  var m = { 0: "read error", 1: "out of range" };
  return m[v] !== undefined ? m[v] : v;
}

Implemented from the published Milesight byte specification (Communication Protocol / User Guide).

Channel format: 01 75 battery (%), 03 67 temperature (INT16 little-endian, /10). Alarm uplinks use channel 83 67 (threshold, +1-byte alarm flag) and 93 67 (abrupt change, +2-byte mutation value +1-byte alarm flag); the flag maps 0 to threshold release, 1 to threshold alarm, 2 to mutation alarm. Channel B3 67 reports a probe fault (0 read error, 1 out of range). Device-info segments on channel FF (version, serial number) appear in the first uplink after a join; extend the loop if you store them. Built from the published Milesight byte specification. For ThingsBoard the same channel logic goes into an uplink converter.

Uplink (hex)

01756403671C01

Decoded JSON

{ "battery": 100, "temperature": 28.4 }
From the field

Configuration & pitfalls

NFC setup

Keys, reporting interval and threshold alarms are set over NFC with the Milesight ToolBox app before rollout.

Detachable probe

The DS18B20 probe unplugs for self-calibration and replacement. Document the probe serial so a swap stays traceable on the dashboard.

Threshold and mutation alarms

Threshold (83 67) and abrupt-change (93 67) alarms are sent immediately, outside the reporting interval. Treat them as priority events in dashboard rules.

Probe placement

Keep the transmitter body outside the cold zone and route only the 1.5 m probe inside, so the battery and radio stay in a stable temperature.

Your partner

How merkaio supports your TS201

From sourcing to day-to-day operation, all from one partner on our own European infrastructure.

Pre-staging & provisioning

We configure the TS201, set keys, intervals and alarms, and ship it ready to deploy.

Own decoder

Payload codec for ChirpStack v4 and ThingsBoard, implemented from the Milesight specification.

Dashboard integration

Data lands in your ThingsBoard or Grafana, with alarms and reports.

Operations & monitoring

We run the LoRaWAN stack and dashboards on European infrastructure, you just use the data.

Frequently asked questions

Yes. It is a standard LoRaWAN v1.0.3 Class A device, no Milesight gateway or cloud required. You add the codec to the device profile and provision it via OTAA or ABP.
Yes, for both ChirpStack and ThingsBoard, implemented from the published Milesight byte specification. The same channel logic goes into a ThingsBoard uplink converter.
The temperature version uses a detachable DS18B20 probe on a 1.5 m cable with a 50 mm stainless steel 316 food-grade tip, measuring -40 to +125 °C at 0.1 °C resolution.
It reports on LoRaWAN port 85. Each regular uplink carries the temperature reading; the battery level is reported alongside it, and alarms use separate channels.
The TS201 stores up to 4000 timestamped records locally and retransmits them once the link is back, so cold-chain logs stay complete during a gateway or network interruption.
Yes. It is EN12830 certified for cold-chain applications and rated IP67, with immediate threshold alarms for HACCP-style monitoring of food and pharmaceutical storage.
From the same series

Related devices

Let's discuss your infrastructure. Digital and on-site.

Whether it's IoT platform development, hardware selection, managed hosting for ChirpStack, ThingsBoard, Grafana or NetBird VPN, or migration from a self-hosted setup - we'll find the right solution for your use case. Book a free 30-minute consultation, no commitment required.

Timo Wevelsiep

Your contact

Timo Wevelsiep

Founder, merkaio

15 minutes, no commitment, directly with Timo.

By submitting, you agree to our Privacy Policy.

Decoder for ChirpStack v4. merkaio is an independent integrator and is not affiliated with Milesight.