Milesight GS601: LoRaWAN-Vape- & Rauchmelder
Milesight GS601 LoRaWAN-Vape- & Rauchmelder: eigener ChirpStack/ThingsBoard-Decoder, decodiertes Beispiel, Vaping-Index-Alarme und Smart-School-Integration.
- LoRaWAN
- Class C, OTAA
- Band / Port
- EU868 / Port 85
- Erfassungsbereich
- 4 x 4 m, Montage in 2,4 bis 3 m
- Sensoren
- TVOC, PM1.0/2.5/10, Temperatur, Feuchte
- Privatsphäre
- Keine Kamera, kein Mikrofon
- Lokale Alarme
- Summer + LED, Sabotageerkennung
- Stromversorgung
- USB-C / Netzbetrieb
Was misst der GS601?
Vaping-Index
Kombinierter Wert 0 bis 100 (UINT8), der bei einem Vaping- oder Rauchereignis ansteigt; der zentrale Alarmwert.
TVOC
Flüchtige organische Verbindungen in ppb (UINT16 LE), das zentrale Luftchemie-Signal hinter dem Vaping-Index.
Feinstaub
PM1.0, PM2.5 und PM10 in Mikrogramm pro Kubikmeter (je UINT16 LE).
Temperatur & Feuchte
Onboard-Klimawerte (Temperatur INT16 LE /10 in Grad C, Feuchte UINT16 LE /10 in % RH) als Kontext und für Brandalarme.
Sabotage & Belegung
Sabotage-Trigger-Flag (UINT8) plus optionaler Belegungsstatus (0 frei / 1 belegt).
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 id = bytes[i++];
if (id === 0x00) { // battery (%)
data.battery = bytes[i]; i += 1;
} else if (id === 0x01) { // vaping index (0..100)
data.vaping_index = bytes[i]; i += 1;
} else if (id === 0x03) { // PM1.0 (ug/m3)
data.pm1_0 = readUInt16LE(bytes, i); i += 2;
} else if (id === 0x05) { // PM2.5 (ug/m3)
data.pm2_5 = readUInt16LE(bytes, i); i += 2;
} else if (id === 0x07) { // PM10 (ug/m3)
data.pm10 = readUInt16LE(bytes, i); i += 2;
} else if (id === 0x09) { // temperature (C)
data.temperature = readInt16LE(bytes, i) / 10; i += 2;
} else if (id === 0x0b) { // humidity (%RH)
data.humidity = readUInt16LE(bytes, i) / 10; i += 2;
} else if (id === 0x0d) { // TVOC
data.tvoc = readUInt16LE(bytes, i); i += 2;
} else if (id === 0x0f) { // tamper status (0/1)
data.tamper = bytes[i]; i += 1;
} else if (id === 0x12) { // occupancy (0/1)
data.occupancy = bytes[i]; i += 1;
} else {
break; // alarm frames, raw TVOC blocks and config replies are deployment-specific
}
}
return { data: data };
}
function readUInt16LE(b, i) {
return (b[i + 1] << 8) | b[i];
}
function readInt16LE(b, i) {
var v = readUInt16LE(b, i);
return v > 0x7fff ? v - 0x10000 : v;
}
Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation (Communication Protocol / User Guide).
Command-ID-Format: 00 Batterie (%), 01 Vaping-Index, 03/05/07 PM1.0/PM2.5/PM10 (UINT16 LE), 09 Temperatur (INT16 LE, /10), 0b Feuchte (UINT16 LE, /10), 0d TVOC, 0f Sabotage, 12 Belegung. Das ist der periodische Report-Pfad, nach der veröffentlichten Milesight-Byte-Spezifikation implementiert. Alarm-Frames (z. B. Command-ID 02 für einen Vaping-Index-Alarm) und Roh-TVOC-Blöcke tragen zusätzliche Type-Bytes und sind deployment-spezifisch, daher bricht die Schleife bei unbekannten IDs ab; wir erweitern sie um die Alarm-Typen, die du tatsächlich nutzt. Dieselbe Logik kommt in einen ThingsBoard-Uplink-Converter.
Uplink (hex)
00640114030500050800070C0009E1000BE0010D9600Decoded JSON
{ "battery": 100, "vaping_index": 20, "pm1_0": 5, "pm2_5": 8, "pm10": 12, "temperature": 22.5, "humidity": 48, "tvoc": 150 }Einsatzszenarien
Konfiguration & Stolpersteine
Class-C-Versorgung
Der GS601 ist ein Class-C-Gerät mit dauerhaftem Empfang, läuft also per USB-C oder Netz, nicht per Batterie. Steckdose am Montageort einplanen.
Platzierung
Der Erfassungsbereich liegt bei etwa 4 x 4 m bei einer Montagehöhe von 2,4 bis 3 m. Mittig über dem Raum montieren und nicht direkt vor Lüftungen, die die Luft wegspülen.
Privacy by Design
Keine Kamera, kein Mikrofon: erfasst nur die Luftchemie. Das ist das zentrale Argument für Toiletten und Umkleiden, für Stakeholder dokumentieren.
Alarm- vs. Report-Frames
Periodische Reports und Ereignis-Alarme nutzen verschiedene Command-IDs. Vaping-Index-Alarm-Uplinks als Priorität behandeln und beim Aktivieren den Alarm-Typ explizit decodieren.
So unterstützt dich merkaio beim GS601
Von der Beschaffung bis zum laufenden Betrieb, alles aus einer Hand und auf eigener europäischer Infrastruktur.
Pre-Staging & Provisioning
Wir konfigurieren den GS601, 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.