Milesight TS101: LoRaWAN-Einsteck-Temperaturfühler

Milesight TS101 LoRaWAN-Einsteck-Temperaturfühler: eigener ChirpStack/ThingsBoard-Decoder, decodiertes Beispiel, Sprung-Alarme und Cold-Chain-Integration.

Milesight TS101
TS101Sensor
LoRaWAN
Class A, OTAA
Band / Port
EU868 / Port 85
Fühler
316 Edelstahl, lebensmittelecht, 400 mm
Temperatur
-30 bis +70 °C, +/-0,5 °C typ.
Schutzart / Schlag
IP67, IK10 Transceiver
Batterie
4000 mAh ER18505, bis zu 10 Jahre
Konfiguration
NFC (Milesight ToolBox)
Messgrößen

Was misst der TS101?

Temperatur

Einsteckfühler, -30 bis +70 °C, 0,1 °C Auflösung, +/-0,5 °C typische Genauigkeit.

Sprung-Alarm

Mutation-Alarm bei schnellem Temperatursprung, sofort außerhalb des Intervalls gesendet.

Schwellwert-Alarm

Unter, über, zwischen oder außerhalb eines Bandes, mit dem auslösenden Wert.

Batteriestand

Wird periodisch in Prozent gemeldet, mit lokaler Speicherung und Retransmission.

History-Puffer

Bis zu 1200 Einträge mit Zeitstempel lokal gespeichert und nach einer Funklücke nachgesendet.

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 === 0xff) {                            // device info on join / power-on
      i += deviceInfoLen(type);
    } else if (channel === 0x01 && type === 0x75) {    // battery (%)
      data.battery = bytes[i]; i += 1;
    } else if (channel === 0x03 && type === 0x67) {    // temperature (deg C)
      data.temperature = readInt16LE(bytes, i) / 10; i += 2;
    } else if (channel === 0x83 && type === 0x67) {    // threshold alarm
      data.temperature = readInt16LE(bytes, i) / 10;
      data.alarm = readAlarm(bytes[i + 2]); i += 3;
    } else if (channel === 0x93 && type === 0xd7) {    // mutation (abrupt-change) alarm
      data.temperature = readInt16LE(bytes, i) / 10;
      data.temperature_mutation = readInt16LE(bytes, i + 2) / 100;
      data.alarm = readAlarm(bytes[i + 4]); i += 5;
    } else if (channel === 0x20 && type === 0xce) {    // history: ts + temperature
      data.history = data.history || [];
      data.history.push({
        timestamp: readUInt32LE(bytes, i),
        temperature: readInt16LE(bytes, i + 4) / 10
      });
      i += 6;
    } else {
      break;
    }
  }
  return { data: data };
}

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 readAlarm(v) {
  var map = { 0: "release", 1: "threshold", 2: "mutation" };
  return map[v] !== undefined ? map[v] : v;
}
function deviceInfoLen(type) {
  // 0xFF info segments (protocol/hw/fw/SN/class); lengths are firmware-specific
  if (type === 0x16) return 8;   // serial number
  if (type === 0x09 || type === 0x0a || type === 0xff) return 2;
  return 1;
}

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

Channel-Format: 01 75 Batterie (%), 03 67 Temperatur (INT16 little-endian, /10). Ein Schwellwert-Alarm kommt auf 83 67 mit einem zusätzlichen Alarm-Byte, ein Sprung-Alarm (Mutation) auf 93 D7 mit dem Mutation-Delta. History-Uplinks auf 20 CE tragen einen UINT32-Zeitstempel plus Temperatur. Der 0xFF-Device-Info-Block erscheint beim Join und Power-on. Nach der veröffentlichten Milesight-Byte-Spezifikation implementiert; für ThingsBoard kommt dieselbe Channel-Logik in einen Uplink-Converter.

Uplink (hex)

01755C0367E000

Decoded JSON

{ "battery": 92, "temperature": 22.4 }
Aus der Praxis

Konfiguration & Stolpersteine

NFC-Setup

Keys, Reporting-Intervall und Alarm-Schwellen werden vor dem Rollout per Milesight ToolBox über NFC gesetzt. Der Fühler braucht keine Verkabelung.

Sprung-Alarm

Der Mutation-Alarm löst bei einem schnellen Temperatursprung aus, unabhängig von absoluten Schwellen. 93-D7-Uplinks in Dashboard-Regeln als Priorität behandeln.

Fühler-Platzierung

Der 400-mm-Fühler aus 316-Edelstahl muss im Produktkern oder im Medienfluss sitzen, das er messen soll. Ein schlecht eingesteckter Fühler misst Umgebungsluft statt das Medium.

History-Replay

Bis zu 1200 Einträge werden lokal gepuffert und nach einer Funklücke nachgesendet, daher muss der Ingest-Pfad den 20-CE-History-Channel akzeptieren, nicht nur Live-Werte.

Dein Partner

So unterstützt dich merkaio beim TS101

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

Pre-Staging & Provisioning

Wir konfigurieren den TS101, 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-Class-A-Gerät, kein Milesight-Gateway und keine Cloud nötig. Du hinterlegst den Codec im Device-Profile und legst das Gerät per OTAA an.
Ja, für ChirpStack und ThingsBoard, nach der veröffentlichten Milesight-Byte-Spezifikation implementiert. Dieselbe Channel-Logik kommt in einen ThingsBoard-Uplink-Converter.
Der Einsteckfühler misst -30 bis +70 °C mit 0,1 °C Auflösung und einer typischen Genauigkeit von +/-0,5 °C, geeignet für Cold-Chain-, Stapelhitze- und Prozessüberwachung.
Neben dem normalen Unter-/Über-/Zwischen-/Außerhalb-Schwellwert-Alarm sendet der TS101 einen Mutation-Alarm, wenn die Temperatur schnell springt. Das hilft, Selbsterhitzung in Stapeln oder Kompost zu erkennen, bevor eine feste Schwelle überschritten wird.
Das Gerät hat eine austauschbare 4000-mAh-ER18505-Li-SOCl2-Batterie mit bis zu zehn Jahren Laufzeit, je nach Reporting-Intervall und Spreading-Faktor.
Ja. Es speichert bis zu 1200 Einträge mit Zeitstempel lokal und sendet sie nach, sobald die Verbindung zurück ist. Der Ingest-Pfad muss daher neben Live-Uplinks auch den History-Channel akzeptieren.
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.