Milesight GS301: LoRaWAN-Geruchsmelder (NH3 & H2S)

Milesight GS301 LoRaWAN-Geruchsmelder: eigener ChirpStack/ThingsBoard-Decoder fuer NH3, H2S, Temperatur und Feuchte, mit dekodiertem Beispiel.

Milesight GS301
GS301Sensor
LoRaWAN
Class A, OTAA
Band / Port
EU868 / Port 85
NH3-Bereich
0 bis 10 ppm, Genauigkeit +/- 5%
H2S-Bereich
0 bis 5 ppm, Genauigkeit +/- 5%
Messprinzip
Festkoerper-Elektrochemie
Lokaler Alarm
LED und Summer bei Schwellwert
Konfiguration
NFC (Milesight ToolBox)
Messgrößen

Was misst der GS301?

Ammoniak (NH3)

Elektrochemische Zelle, 0 bis 10 ppm, ausgegeben als ppm (Rohwert / 100).

Schwefelwasserstoff (H2S)

Elektrochemische Zelle, 0 bis 5 ppm, ausgegeben als ppm (Kanal 05, Rohwert / 100 bis Firmware v1.1; Kanal 06, Rohwert / 1000 ab v1.2).

Temperatur

Umgebungstemperatur in Grad Celsius (INT16, /10).

Feuchte

Relative Luftfeuchte 0 bis 100 % RH (Rohwert / 2).

Batteriestand

Wird periodisch gemeldet, mit lokaler Speicherung und erneuter Uebertragung.

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 === 0x01 && type === 0x75) {          // battery (%)
      data.battery = bytes[i]; i += 1;
    } else if (channel === 0x02 && type === 0x67) {   // temperature (degC)
      data.temperature = readInt16LE(bytes, i) / 10; i += 2;
    } else if (channel === 0x03 && type === 0x68) {   // humidity (%RH)
      data.humidity = bytes[i] / 2; i += 1;
    } else if (channel === 0x04 && type === 0x7d) {   // NH3 (ppm)
      var nh3 = readUInt16LE(bytes, i); i += 2;
      if (nh3 === 0xfffe || nh3 === 0xffff) {
        data.nh3_status = nh3 === 0xffff ? "device_error" : "polarizing";
      } else {
        data.nh3 = nh3 / 100;
      }
    } else if (channel === 0x05 && type === 0x7d) {   // H2S (ppm), Firmware <= v1.1
      var h2s = readUInt16LE(bytes, i); i += 2;
      if (h2s === 0xfffe || h2s === 0xffff) {
        data.h2s_status = h2s === 0xffff ? "device_error" : "polarizing";
      } else {
        data.h2s = h2s / 100;
      }
    } else if (channel === 0x06 && type === 0x7d) {   // H2S (ppm), Firmware >= v1.2
      var h2s12 = readUInt16LE(bytes, i); i += 2;
      if (h2s12 === 0xfffe || h2s12 === 0xffff) {
        data.h2s_status = h2s12 === 0xffff ? "device_error" : "polarizing";
      } else {
        data.h2s = h2s12 / 1000;
      }
    } else {
      break;
    }
  }
  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).

Kanalformat: 01 75 Batterie (%), 02 67 Temperatur (INT16 Little-Endian, /10), 03 68 Feuchte (/2), 04 7d NH3 (UINT16 Little-Endian, /100, ppm). H2S hat zwischen den Firmware-Staenden den Kanal gewechselt: 05 7d (/100, ppm) bis v1.1 und 06 7d (/1000, ppm) ab v1.2, daher verarbeitet der Decoder beide. Die Rohwerte 0xFFFE und 0xFFFF auf einem Gaskanal sind keine echten Messwerte: 0xFFFE bedeutet, dass die elektrochemische Zelle noch polarisiert, 0xFFFF meldet einen Geraetefehler, daher bildet der Decoder sie auf ein Statusfeld ab. Implementiert nach der veroeffentlichten Milesight-Byte-Spezifikation. Fuer ThingsBoard wandert dieselbe Logik in einen Uplink-Converter.

Uplink (hex)

01756402670A01036864047D0000057D0100

Decoded JSON

{ "battery": 100, "temperature": 26.6, "humidity": 50, "nh3": 0, "h2s": 0.01 }
Aus der Praxis

Konfiguration & Stolpersteine

NFC-Einrichtung

Keys, Meldeintervall und NH3/H2S-Schwellwerte werden vor dem Rollout per NFC mit der Milesight ToolBox gesetzt.

Aufwaermphase

Elektrochemische Zellen brauchen nach dem Einschalten eine Aufwaermzeit. Fruehe Uplinks koennen ein Statusflag statt eines Messwerts tragen; Alarme bis zu gueltigen Werten unterdruecken.

Kalibrierdrift

Elektrochemische Gaszellen driften mit der Zeit. Regelmaessige Kalibrierung mit der ToolBox einplanen und den Offset dokumentieren, damit die Dashboard-Werte nachvollziehbar bleiben.

Schwellwertalarm & D2D

Ueberschreitet NH3 oder H2S den Schwellwert, loest das Geraet lokal LED und Summer aus und kann per D2D ohne Gateway einen Lueftungsaktor schalten. D2D-Ereignisse im Monitoring beruecksichtigen.

Dein Partner

So unterstützt dich merkaio beim GS301

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

Pre-Staging & Provisioning

Wir konfigurieren den GS301, 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-Geraet, kein Milesight-Gateway oder -Cloud noetig. Sie hinterlegen den Codec im Device-Profile und provisionieren das Geraet per OTAA.
Ja, fuer ChirpStack und ThingsBoard, implementiert nach der veroeffentlichten Milesight-Byte-Spezifikation. Dieselbe Kanal-Logik wandert in einen ThingsBoard-Uplink-Converter.
Er misst Ammoniak (NH3) von 0 bis 10 ppm und Schwefelwasserstoff (H2S) von 0 bis 5 ppm mit einer Festkoerper-elektrochemischen Zelle, dazu Umgebungstemperatur und Feuchte fuer den vollen Kontext.
Es ist ein Class-A-Geraet auf LoRaWAN-Port 85. Jeder Uplink kann Batterie, Temperatur, Feuchte und die beiden Gaskanaele tragen.
Es sind keine echten Konzentrationen. 0xFFFE bedeutet, dass die elektrochemische Zelle nach dem Einschalten noch polarisiert, 0xFFFF signalisiert einen Geraetefehler oder Defekt, daher bildet der Decoder sie auf ein Statusfeld statt auf einen ppm-Wert ab.
Bis Firmware v1.1 meldet der GS301 H2S auf Kanal 05 mit /100-Skalierung. Ab v1.2 liegt H2S auf Kanal 06 mit feinerer /1000-Skalierung fuer bessere Aufloesung im unteren Bereich. Unser Decoder verarbeitet beide, daher zeigt das Dashboard unabhaengig von der Firmware den korrekten ppm-Wert.
Ja. Erreicht NH3 oder H2S den konfigurierten Schwellwert, loest der Melder lokal eine LED und einen Summer aus und kann zusaetzlich einen Alarm-Uplink sowie einen D2D-Befehl an ein Lueftungsgeraet ohne Gateway senden.
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.