Milesight TS101: LoRaWAN-Einsteck-Temperaturfühler
Milesight TS101 LoRaWAN-Einsteck-Temperaturfühler: eigener ChirpStack/ThingsBoard-Decoder, decodiertes Beispiel, Sprung-Alarme und Cold-Chain-Integration.
- 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)
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.
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.
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)
01755C0367E000Decoded JSON
{ "battery": 92, "temperature": 22.4 }Einsatzszenarien
Cold-Chain-Monitoring
Einsteckfühler im Produktkern oder Tank mit HACCP-naher Protokollierung und Alarmen.
MehrStapel- & Komposthitze
Selbsterhitzung in Tabakstapeln, Heu oder Kompost über Sprung-Alarme erkennen.
Prozess- & Rohrtemperatur
Temperatur in Flüssigkeiten und Rohren für Versorger und Lebensmittelverarbeitung.
MehrKonfiguration & 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.
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
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.
Ihr Ansprechpartner
Timo Wevelsiep
Gründer, merkaio
15 Minuten, unverbindlich, direkt mit Timo.
Decoder für ChirpStack v4. merkaio ist unabhängiger Integrator und nicht mit Milesight affiliiert.