ChirpStack führt bei jedem Uplink eine kleine JavaScript-Funktion aus. Sie bekommt die rohen Bytes und gibt ein JSON-Objekt zurück. Die decodierten Werte stehen dann im Event-Stream (MQTT/HTTP) bereit und lassen sich an ThingsBoard, Grafana oder jede Anwendung weiterreichen. Dieselbe Codec-Datei enthält auch den Downlink-Encoder für steuerbare Geräte (Relais, Thermostate, Ventile).
ChirpStack Payload Decoder: Von Hex zu sauberem JSON
ChirpStack-v4-Payload-Decoder schreiben: ein JS-Codec am Device-Profile, der LoRaWAN-Hex in sauberes JSON verwandelt, mit Milesight-Beispiel.
Der Datenfluss
LoRaWAN-Geräte senden kompakte Binär-Payloads wie 0175640367AD00046873. Ein Payload-Codec macht aus diesem Hex strukturiertes JSON, das Dashboard, Regeln und Alarme wirklich nutzen können. So schreibst, hinterlegst und testest du einen in ChirpStack v4.
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.
Was ein Payload-Codec macht
Wo der Codec in ChirpStack v4 liegt
In ChirpStack v4 sitzt der Codec am Device-Profile, nicht am Gerät: Device Profiles, dein Profile, Codec, JavaScript-Funktionen. Jedes Gerät mit diesem Profile erbt den Decoder. Deshalb modellieren wir ein sauberes Profile pro Gerätetyp, statt Code pro Gerät einzufügen.
Die Decoder-Funktion
ChirpStack v4 erwartet eine decodeUplink(input)-Funktion. input.bytes ist ein Array von Byte-Werten; du gibst { data: { ... } } zurück. Milesight nutzt ein Channel-Format, wiederholt [Channel-ID][Channel-Type][Payload]:
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) { // Batterie (%)
data.battery = bytes[i]; i += 1;
} else if (channel === 0x03 && type === 0x67) { // Temperatur, INT16 LE / 10
data.temperature = readInt16LE(bytes, i) / 10; i += 2;
} else if (channel === 0x04 && type === 0x68) { // Feuchte, UINT8 / 2
data.humidity = bytes[i] / 2; i += 1;
} else {
break; // unbekannter Channel, abbrechen statt fehlzuparsen
}
}
return { data: data };
}
function readInt16LE(b, i) {
var v = (b[i + 1] << 8) | b[i];
return v > 0x7fff ? v - 0x10000 : v;
}
Vor dem Vertrauen testen
Device Profiles, Codec, Test nutzen (oder den Events-Tab des Geräts bei einem Live-Uplink). Ein bekanntes Payload einfügen und das JSON prüfen:
Input (hex): 0175640367AD00046873
Output (JSON): { "battery": 100, "temperature": 17.3, "humidity": 57.5 }
Sieht ein Wert falsch aus, liegt es fast immer an der Endianness (Milesight ist little-endian) oder einem Skalierungsfaktor (Temperatur durch 10, Feuchte durch 2).
Häufige Stolpersteine
- Endianness: Milesight-Payloads sind little-endian. Mehrbyte-Werte in falscher Reihenfolge gelesen ergeben Unsinn.
- Skalierungsfaktoren: Temperatur wird durch 10 geteilt, Feuchte durch 2. Ein fehlender Divisor ist der häufigste Decode-Bug.
- Unbekannte Channels: Bei unbekanntem Channel abbrechen, statt den Rest des Payloads fehlzuparsen.
- v3 zu v4: v3 nutzt eine andere Funktionssignatur und zeigte decodierte Daten als
objectJSON. v4 zeigt sie direkt alsobject. Codecs und Converter zusammen migrieren.
Von Hex zum Dashboard
Sobald der Codec sauberes JSON zurückgibt, publiziert ChirpStack es über seine Integration. Von dort fließt es in dein Dashboard, siehe ChirpStack zu ThingsBoard. Wir schreiben, hinterlegen und betreiben den Codec für jedes Gerät als Teil des ChirpStack Managed Hosting.
Geräte mit fertigem Decoder
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.
merkaio ist unabhängiger Integrator und nicht mit Milesight affiliiert.