Milesight AT101: LoRaWAN GPS- & Wi-Fi-Asset-Tracker

Milesight AT101 LoRaWAN Asset-Tracker: GNSS plus Wi-Fi-Ortung, eigener ChirpStack/ThingsBoard-Decoder, dekodiertes Beispiel, Geofencing und Flotten-Integration.

Milesight AT101
AT101Sensor
LoRaWAN
Class A, OTAA
Ortung
GNSS (GPS/BeiDou) + Wi-Fi-Scan
Schutzart
IP67
Sensoren
Temperatur, Neigung, Sabotage
Batterie
Bis zu 15 Jahre (2 Fixes/Tag)
Reichweite
Bis 15 km ländlich, 2 km urban
Konfiguration
NFC / Bluetooth (Milesight ToolBox)
Messgrößen

Was misst der AT101?

Standort

Breiten-/Längengrad aus GNSS oder Wi-Fi-MAC-Scan, skaliert mit 1.000.000.

Bewegungsstatus

Start, in Bewegung und Stopp aus dem integrierten Beschleunigungssensor.

Geofence-Status

Innerhalb, außerhalb oder nicht gesetzt gegenüber dem konfigurierten Bereich.

Temperatur

Onboard-Temperatur mit optionalem Alarm bei abnormaler Temperatur.

Neigung und Sabotage

Geräteposition (normal/Neigung) sowie Montage-/Demontage-Sabotageereignisse.

Daten ins Dashboard

Integration

Sensor / Controller

Misst oder steuert vor Ort und sendet LoRaWAN-Uplinks.

LoRaWAN-Gateway

Empfängt die Funkpakete und reicht sie an den Server weiter.

ChirpStack

Network-Server: verwaltet Sessions und decodiert das Payload.

ThingsBoard / Grafana

Dashboards, Alarme, Regeln und 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) {     // temperature + alarm flag
      data.temperature = readInt16LE(bytes, i) / 10;
      data.temperature_alarm = bytes[i + 2] === 1 ? "abnormal" : "normal";
      i += 3;
    } else if ((channel === 0x04 || channel === 0x84) && type === 0x88) { // location
      data.latitude = readInt32LE(bytes, i) / 1000000;
      data.longitude = readInt32LE(bytes, i + 4) / 1000000;
      var status = bytes[i + 8];
      data.motion_status = MOTION[status & 0x0f];
      data.geofence_status = GEOFENCE[status >> 4];
      i += 9;
    } else if (channel === 0x05 && type === 0x00) {     // device position
      data.position = bytes[i] === 1 ? "tilt" : "normal"; i += 1;
    } else if (channel === 0x07 && type === 0x00) {     // tamper status
      data.tamper_status = bytes[i] === 1 ? "uninstall" : "install"; i += 1;
    } else if (channel === 0x06 && type === 0xd9) {     // Wi-Fi scan result
      var wifi = {
        mac: readMAC(bytes, i + 1),
        rssi: readInt8(bytes[i + 7])
      };
      data.wifi = data.wifi || [];
      if (wifi.mac !== "ff:ff:ff:ff:ff:ff") data.wifi.push(wifi);
      i += 9;
    } else {
      break;                                            // unknown channel
    }
  }
  return { data: data };
}

var MOTION = { 0: "unknown", 1: "start", 2: "moving", 3: "stop" };
var GEOFENCE = { 0: "inside", 1: "outside", 2: "unset", 3: "unknown" };

function readInt8(b) { return b > 0x7f ? b - 0x100 : b; }
function readInt16LE(b, i) {
  var v = (b[i + 1] << 8) | b[i];
  return v > 0x7fff ? v - 0x10000 : v;
}
function readUInt32LE(b, i) {
  return ((b[i + 3] << 24) | (b[i + 2] << 16) | (b[i + 1] << 8) | b[i]) >>> 0;
}
function readInt32LE(b, i) {
  var v = readUInt32LE(b, i);
  return v > 0x7fffffff ? v - 0x100000000 : v;
}
function readMAC(b, i) {
  var out = [];
  for (var k = 0; k < 6; k++) out.push(("0" + (b[i + k] & 0xff).toString(16)).slice(-2));
  return out.join(":");
}

Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation (Communication Protocol / User Guide).

Kanalformat: 01 75 Batterie (%), 03 67 Temperatur (INT16 Little-Endian, /10), 83 67 Temperatur mit Alarm-Flag für abnormale Werte, 04/84 88 Standort (Breiten- und Längengrad als INT32 Little-Endian, /1.000.000) plus ein Status-Byte, dessen unteres Nibble die Bewegung und oberes Nibble den Geofence kodiert, 05 00 Geräteposition (Neigung), 07 00 Sabotage. Umgesetzt aus der veröffentlichten Milesight-Byte-Spezifikation. Im Wi-Fi-Ortungsmodus sendet der Tracker 06 D9 Scan-Ergebnisse (BSSID-Liste) statt eines GNSS-Fixes, die ein Ortungs-Backend in Koordinaten auflöst. Für ThingsBoard wandert dieselbe Kanallogik in einen Uplink-Converter.

Uplink (hex)

0175640367EB000488C283DE0256A0B00002050001070000

Decoded JSON

{ "battery": 100, "temperature": 23.5, "latitude": 48.137154, "longitude": 11.575382, "motion_status": "moving", "geofence_status": "inside", "position": "tilt", "tamper_status": "install" }
Aus der Praxis

Konfiguration & Stolpersteine

GNSS oder Wi-Fi-Ortung

GNSS liefert Genauigkeit im Freien, Wi-Fi-MAC-Scan funktioniert in Innenräumen, braucht aber ein Geolocation-Backend zum Auflösen der BSSIDs. Strategie je Anwendungsfall wählen, das Payload-Layout ändert sich dadurch.

Meldestrategie

Periodisch, bewegungsgesteuert und zeitgesteuert wägen Batterielaufzeit gegen Aktualität ab. Der Bewegungsmodus spart Strom, meldet aber nur bei Bewegung, daher Dashboard-Timeouts entsprechend planen.

Geofence einrichten

Mittelpunktkoordinaten und Radius werden am Gerät konfiguriert. Wechsel innerhalb/außerhalb kommen als Status-Byte an, Dashboard-Regeln sollten sie als priorisierte Ereignisse behandeln.

GNSS-Fix-Timeout

Ein Kaltstart-Fix kann bei schlechter Himmelssicht länger dauern. Ein realistisches Ortungs-Timeout setzen, damit der Tracker die Batterie nicht beim Satellitensuchen in Innenräumen leert.

Dein Partner

So unterstützt dich merkaio beim AT101

Von der Beschaffung bis zum laufenden Betrieb, alles aus einer Hand und auf eigener europäischer Infrastruktur.

Pre-Staging & Provisioning

Wir konfigurieren den AT101, setzen Keys, Intervalle und Alarme und liefern einsatzbereit aus.

Eigener Decoder

Payload-Codec für ChirpStack v4 und ThingsBoard, nach der Milesight-Spezifikation implementiert.

Integration ins Dashboard

Die Daten landen in deinem ThingsBoard oder Grafana, inklusive Alarmen und Reports.

Betrieb & Monitoring

Wir betreiben LoRaWAN-Stack und Dashboards auf europäischer Infrastruktur, du nutzt nur die Daten.

Häufige Fragen

Ja. Es ist ein Standard-LoRaWAN-Gerät der Klasse A, kein Milesight-Gateway und keine Cloud nötig. Sie hinterlegen den Codec im Device-Profil und provisionieren das Gerät per OTAA.
Ja, für ChirpStack und ThingsBoard, umgesetzt aus der veröffentlichten Milesight-Byte-Spezifikation. Dieselbe Kanallogik wandert in einen ThingsBoard-Uplink-Converter.
Er kombiniert GNSS (GPS und BeiDou) mit Wi-Fi-Access-Point-MAC-Scanning. GNSS liefert Genauigkeit im Freien, Wi-Fi-Scan hilft in Innenräumen. Die Wi-Fi-Scan-Ergebnisse sind eine Liste von BSSIDs, die ein Geolocation-Backend in Koordinaten auflöst.
Bis zu 15 Jahre, wenn die Position etwa zweimal täglich aktualisiert wird. Das Intervall ist von 1 bis 1440 Minuten konfigurierbar, die reale Laufzeit hängt also von Meldehäufigkeit und Ortungsmodus ab.
Ja. Sie konfigurieren am Gerät einen Mittelpunkt und Radius, der Tracker meldet im Standort-Uplink einen Status innerhalb oder außerhalb, sodass Ihr Dashboard beim Verlassen oder Zurückkehren einer Zone alarmieren kann.
Er meldet Batteriestand, Onboard-Temperatur mit optionalem Alarm bei abnormaler Temperatur, die Neigungsposition, den Bewegungsstatus aus dem Beschleunigungssensor sowie Montage-/Demontage-Sabotageereignisse.
Aus derselben Serie

Verwandte Geräte

Sprechen wir über Ihre Infrastruktur. Digital und vor Ort.

Ob IoT-Plattformentwicklung, Hardwareauswahl, Managed Hosting für ChirpStack, ThingsBoard, Grafana oder NetBird VPN, oder Migration von einem Self-Hosted-Setup - wir finden die passende Lösung für Ihren Anwendungsfall. Buchen Sie ein kostenloses 30-Minuten-Gespräch, unverbindlich.

Timo Wevelsiep

Ihr Ansprechpartner

Timo Wevelsiep

Gründer, merkaio

15 Minuten, unverbindlich, direkt mit Timo.

Mit dem Absenden stimmen Sie unserer Datenschutzerklärung zu.

Decoder für ChirpStack v4. merkaio ist unabhängiger Integrator und nicht mit Milesight affiliiert.