Milesight GS301: LoRaWAN-Geruchsmelder (NH3 & H2S)
Milesight GS301 LoRaWAN-Geruchsmelder: eigener ChirpStack/ThingsBoard-Decoder fuer NH3, H2S, Temperatur und Feuchte, mit dekodiertem Beispiel.
- 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)
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.
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 === 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)
01756402670A01036864047D0000057D0100Decoded JSON
{ "battery": 100, "temperature": 26.6, "humidity": 50, "nh3": 0, "h2s": 0.01 }Einsatzszenarien
Smarte Sanitaerueberwachung
NH3 und H2S in oeffentlichen Toiletten messen und die Reinigung bei steigendem Geruch ausloesen.
MehrSmart Office & Gebaeude
Waschraeume und Gemeinschaftsbereiche mit datenbasierten Reinigungsplaenen frisch halten.
MehrSanitaerbereiche im Handel
Luftqualitaet in Kundentoiletten ueberwachen und Personal vor Beschwerden disponieren.
MehrKonfiguration & 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.
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
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.