Milesight EM300-MCS: LoRaWAN Magnet Contact Sensor

Milesight EM300-MCS LoRaWAN magnet contact sensor: own ChirpStack/ThingsBoard decoder, decoded example, open/close alarms plus temperature and humidity.

Milesight EM300-MCS
EM300-MCSSensor
LoRaWAN
Class A, OTAA
Band / port
EU868 / port 85
Sensing
Reed magnet contact (open/close)
Magnet gap
Switches within a 20 to 30 mm gap to the magnet
Temperature
-30 to +70 °C (SHT30)
Humidity
0 to 100 % RH
Battery
4000 mAh, over 10 years (SF7, EU868)
Measurements

What the EM300-MCS measures

Magnet status

Open or close state of the reed contact, reported on change and on interval.

Temperature

Sensirion SHT30, -30 to +70 °C, high accuracy.

Humidity

Relative humidity 0 to 100 % RH (non-condensing).

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 === 0x06 && type === 0x00) {   // magnet contact
      data.magnet_status = bytes[i] === 0 ? "close" : "open"; i += 1;
    } else {
      break;
    }
  }
  return { data: data };
}

function readInt16LE(b, i) {
  var v = (b[i + 1] << 8) | 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), 06 00 magnet status (0 = close, 1 = open). Implemented from the published Milesight byte specification. The device also sends history records (channel 0x20) and downlink confirmations (channel 0xFE/0xFF) which a production decoder can extend. For ThingsBoard the same logic goes into an uplink converter.

Uplink (hex)

0175640367AD00046873060000

Decoded JSON

{ "battery": 100, "temperature": 17.3, "humidity": 57.5, "magnet_status": "close" }
From the field

Configuration & pitfalls

NFC setup

Keys, reporting interval, alarm options and the open/close polarity are set over NFC with the Milesight ToolBox before rollout.

Magnet alignment

The reed switch reads as closed while the supplied magnet sits within roughly a 20 to 30 mm gap. Mount sensor and magnet on the fixed and moving sides so they line up when shut, or you get false open events.

Event vs interval reports

A status change is sent immediately while temperature and humidity follow the regular interval. Dashboard rules should treat magnet open uplinks as priority events.

IP67 venting lag

The sealed enclosure equalises air through a vent membrane, so after a large temperature jump it can take around an hour until the temperature reading settles. Account for this when alerting on fast transitions.

Your partner

How merkaio supports your EM300-MCS

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

Pre-staging & provisioning

We configure the EM300-MCS, 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.
It reports magnet contact status (open or close) for doors, windows and enclosures, plus on-board temperature and humidity and the battery level, so one device covers access and climate.
It is a Class A device on LoRaWAN port 85. A status change is sent immediately, while temperature and humidity follow the configured reporting interval.
It ships with a replaceable 4000 mAh battery rated for over ten years (SF7, EU868) under standard conditions; an 8000 mAh version is optional. Actual life depends on the reporting interval and how often the contact changes state.
Yes. The enclosure is rated IP67 and the operating range is -30 to +70 °C, so it suits indoor doors as well as outdoor gates and refrigerated environments.
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.