Milesight VS351: LoRaWAN Mini Thermopile-Personenzähler
Milesight VS351 LoRaWAN Thermopile-Personenzähler: eigener ChirpStack/ThingsBoard-Decoder, dekodiertes In/Out-Beispiel und Smart-Retail-Integration.
- LoRaWAN
- Class A, OTAA
- Band / Port
- EU868 / Port 85
- Sensorik
- Thermopile-IR-Array + Radar
- Zählung
- Bidirektional rein / raus
- Datenschutz
- Anonym, kein Bild, DSGVO-freundlich
- Stromversorgung
- Batterie- oder USB-Type-C-Variante
- Konfiguration
- NFC (Milesight ToolBox)
Was misst der VS351?
Gesamt rein / raus
Kumulierte Personenzahl in beide Richtungen seit dem letzten Reset.
Periode rein / raus
Im aktuellen Meldeintervall rein und raus gezählte Personen.
Temperatur
Umgebungstemperatur des Thermopile-Arrays in Grad Celsius.
Batterie / Stromstatus
Batteriestand in Prozent bei der Funkvariante oder Extern-/Lade-Status bei der Type-C-Variante.
Zähl-Alarme
Schwellenalarme auf kumulierte oder Perioden-Zählwerte, außerhalb des regulären Intervalls gesendet.
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 === 0x03 && type === 0x67) { // temperature (INT16 LE, /10 °C)
data.temperature = readInt16LE(bytes, i) / 10; i += 2;
} else if (channel === 0x04 && type === 0xcc) { // total in / out (UINT16 LE each)
data.total_in = readUInt16LE(bytes, i);
data.total_out = readUInt16LE(bytes, i + 2);
i += 4;
} else if (channel === 0x05 && type === 0xcc) { // period in / out (UINT16 LE each)
data.period_in = readUInt16LE(bytes, i);
data.period_out = readUInt16LE(bytes, i + 2);
i += 4;
} else if (channel === 0xff) { // device info (join / power-on)
i += deviceInfoLen(type);
} else {
break; // alarm / history / downlink frames
}
}
return { data: data };
}
function readUInt16LE(b, i) {
return ((b[i + 1] << 8) | b[i]) & 0xffff;
}
function readInt16LE(b, i) {
var v = readUInt16LE(b, i);
return v > 0x7fff ? v - 0x10000 : v;
}
// 0xFF segment lengths from the published byte spec: version 1B, hw/fw/tsl 2B, SN 8B, class/power 1B.
function deviceInfoLen(type) {
if (type === 0x16) return 8; // serial number
if (type === 0x09 || type === 0x0a || type === 0xff) return 2; // hw / fw / tsl version
return 1; // ipso version, class, power, reset, status
}
Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation (Communication Protocol / User Guide).
Kanalformat: 01 75 Batterie (%), 03 67 Temperatur (INT16 Little-Endian, /10), 04 cc Gesamt rein/raus (zwei UINT16 LE), 05 cc Periode rein/raus (zwei UINT16 LE). Der Kanal 0xFF trägt beim Join und Einschalten die Geräteinfo. Temperatur-Alarme (83 67) und Zähl-Alarme (84/85 cc mit angehängtem Alarm-Byte), historische Batches (20 ce) und Downlink-Antwort-Frames sind konfigurationsabhängig und werden von der Schleife übersprungen; wir ergänzen sie je Einsatz. Für ThingsBoard kommt dieselbe Kanal-Logik in einen Uplink-Converter. Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation.
Uplink (hex)
0175640367000104cc0000000005cc02000000Decoded JSON
{ "battery": 100, "temperature": 25.6, "total_in": 0, "total_out": 0, "period_in": 2, "period_out": 0 }Einsatzszenarien
Smart-Retail-Besucherzählung
Besucher je Eingang zählen und Traffic in Conversion- und Personaldaten verwandeln.
MehrGebäude- & Flächenanalyse
Messen, wie Flure, Zonen und Räume tatsächlich genutzt werden, ohne Kameras.
MehrSmart City & öffentliche Räume
Anonyme Besucherzählung in Bibliotheken, Nahverkehr und öffentlichen Gebäuden zur Kapazitätsplanung.
MehrKonfiguration & Stolpersteine
Montagehöhe & Winkel
Das Thermopile-Array hat ein festes Sichtfeld, montieren Sie es deshalb in der im Handbuch angegebenen Höhe und Neigung über dem Durchgang. Ein falscher Winkel beschneidet die Erkennungszone und zählt an den Rändern zu wenig.
Richtung der Zähllinie
Stellen Sie die Rein/Raus-Richtung per NFC passend zum echten Durchgangsfluss ein. Ist sie gespiegelt, vertauscht jeder Gesamtwert rein gegen raus und die Auswertung läuft verkehrt herum.
Periode vs. Gesamt-Reset
Periode rein/raus wird je Meldeintervall zurückgesetzt, Gesamt akkumuliert bis zum Löschen. Legen Sie im Dashboard fest, welcher Wert die Besucherkurve speist, damit nicht doppelt gezählt wird.
Anonyme Erkennung
Thermopile- und Radar-Sensorik erfassen kein Bild und keine Identität, das hält die Besucherzählung im DSGVO-Rahmen. Dokumentieren Sie das für Betriebsrat oder Verarbeitungsverzeichnis.
So unterstützt dich merkaio beim VS351
Von der Beschaffung bis zum laufenden Betrieb, alles aus einer Hand und auf eigener europäischer Infrastruktur.
Pre-Staging & Provisioning
Wir konfigurieren den VS351, 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.