Milesight GS601: LoRaWAN-Vape- & Rauchmelder

Milesight GS601 LoRaWAN-Vape- & Rauchmelder: eigener ChirpStack/ThingsBoard-Decoder, decodiertes Beispiel, Vaping-Index-Alarme und Smart-School-Integration.

Milesight GS601
GS601Sensor
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
Messgrößen

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).

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 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)

00640114030500050800070C0009E1000BE0010D9600

Decoded JSON

{ "battery": 100, "vaping_index": 20, "pm1_0": 5, "pm2_5": 8, "pm10": 12, "temperature": 22.5, "humidity": 48, "tvoc": 150 }
Aus der Praxis

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.

Dein Partner

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

Ja. Es ist ein Standard-LoRaWAN-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. Der periodische Report-Pfad ist sofort nutzbar, die Alarm-Frames erweitern wir nach Bedarf.
Nein. Der GS601 erkennt Vaping und Rauchen rein über die Luftchemie (TVOC und Feinstaub), kann also in Toiletten und Umkleiden eingesetzt werden, ohne Bild oder Ton aufzuzeichnen.
Es ist ein kombinierter Index von 0 bis 100 aus den Onboard-TVOC- und Feinstaubwerten. Er steigt bei einem Vaping- oder Rauchereignis und ist der Wert, auf den die meisten Dashboards alarmieren.
Es ist ein Class-C-Gerät auf LoRaWAN-Port 85. Class C hält das Empfangsfenster offen, akzeptiert also Downlinks (z. B. zum Stummschalten des Summers) nahezu in Echtzeit und braucht Netzversorgung.
Ja. Der GS601 hat einen Onboard-Summer, eine LED und einen Sabotagesensor, kann also lokal alarmieren und Manipulation melden, bevor das Uplink die Plattform erreicht.
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.