Milesight WTS: LoRaWAN Solar Weather Station

Milesight WTS LoRaWAN weather station: own ChirpStack/ThingsBoard decoder, decoded example, wind, rain, pressure and temperature for smart city.

Milesight WTS
WTSSensor
LoRaWAN
Class A, OTAA
Band / port
EU868 / port 85
Power
Solar with rechargeable battery backup
Ingress protection
IP65
Temperature
-40 to +80 °C
Wind speed
0 to 60 m/s
Configuration
NFC (Milesight ToolBox)
Measurements

What the WTS measures

Temperature & humidity

Ambient air temperature and relative humidity.

Wind speed & direction

Wind speed in m/s and direction in degrees.

Barometric pressure

Atmospheric pressure in hPa for forecasting and trend alerts.

Rainfall

Cumulative rainfall in mm plus a tipping-bucket counter.

Battery level

Reported as a percentage, with local storage and retransmission.

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 === 0x04 && type === 0x68) {   // humidity (%RH)
      data.humidity = bytes[i] / 2; i += 1;
    } else if (channel === 0x05 && type === 0x84) {   // wind direction (°)
      data.wind_direction = readInt16LE(bytes, i) / 10; i += 2;
    } else if (channel === 0x06 && type === 0x73) {   // barometric pressure (hPa)
      data.pressure = readUInt16LE(bytes, i) / 10; i += 2;
    } else if (channel === 0x07 && type === 0x92) {   // wind speed (m/s)
      data.wind_speed = readUInt16LE(bytes, i) / 10; i += 2;
    } else if (channel === 0x08 && type === 0x77) {   // rainfall total (mm) + counter
      data.rainfall_total = readUInt16LE(bytes, i) / 100;
      data.rainfall_counter = bytes[i + 2]; i += 3;
    } else {
      break;
    }
  }
  return { data: data };
}

function readUInt16LE(b, i) {
  return (b[i + 1] << 8) | b[i];
}
function readInt16LE(b, i) {
  var v = readUInt16LE(b, i);
  return v > 0x7fff ? v - 0x10000 : v;
}

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

Channel format: 01 75 battery (%), 03 67 temperature (INT16 little-endian, /10), 04 68 humidity (/2), 05 84 wind direction (INT16, /10), 06 73 pressure (UINT16, /10), 07 92 wind speed (UINT16, /10), 08 77 rainfall total (UINT16, /100) plus a 1-byte tipping counter. Alarm channels (0x83/0x86/0x87/0x88) repeat the same value plus an alarm-type byte. For ThingsBoard the same channel logic goes into an uplink converter.

Uplink (hex)

01755A0367EA000468640584080706739427079223000877E20405

Decoded JSON

{ "battery": 90, "temperature": 23.4, "humidity": 50, "wind_direction": 180, "pressure": 1013.2, "wind_speed": 3.5, "rainfall_total": 12.5, "rainfall_counter": 5 }
From the field

Configuration & pitfalls

NFC setup

Keys, reporting interval and threshold alarms are set over NFC with the Milesight ToolBox before the station goes on the mast.

Solar power budget

The station charges from its solar panel with battery backup. Pick a reporting interval that keeps the battery topped up through several overcast days.

Rainfall counter rollover

Rainfall is a cumulative total with a separate tipping counter. Track the difference between uplinks in your dashboard, and handle the counter resetting after a clear-history command.

Wind direction reference

Wind direction is reported in degrees. Mount the station with the orientation mark to true north so the values stay meaningful.

Your partner

How merkaio supports your WTS

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

Pre-staging & provisioning

We configure the WTS, 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 device, no Milesight gateway or cloud required. You add the codec to the device profile and provision it via OTAA.
Yes, for both ChirpStack and ThingsBoard, implemented from the published Milesight byte specification. The same channel logic goes into a ThingsBoard uplink converter.
Air temperature, relative humidity, barometric pressure, wind speed, wind direction and cumulative rainfall, plus battery level. Each value has its own IPSO channel in the uplink.
It is a Class A device on LoRaWAN port 85. Uplinks carry the weather channels, and dedicated alarm channels are sent immediately when a threshold is crossed.
It runs on a solar panel with a rechargeable battery backup, so it suits remote masts and fields without mains power. Battery level is reported as a percentage.
Rainfall arrives as a cumulative total in millimetres (UINT16, divided by 100) plus a 1-byte tipping counter. Your dashboard computes per-interval rainfall from the difference between consecutive totals.
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.