Milesight VS135: Ultra-ToF-LoRaWAN-Personenzähler
Milesight VS135 Ultra-ToF-Personenzähler: eigenes ChirpStack-Decoder-Framework für Linien-, Zonen- und Verweilzeit-Zählung plus Retail-Integration.
- LoRaWAN
- Class C, OTAA / ABP
- Band
- EU868 / US915 / AS923 und weitere
- Erfassung
- ToF-Tiefe 2. Generation + KI, keine Kamerabilder
- Zählgenauigkeit
- bis zu 99,8 %
- Montagehöhe
- 2 bis 6,5 m (Hochdecken-Montage)
- Stromversorgung
- DC 12 V / PoE (netzgespeist, keine Batterie)
- Betriebstemperatur
- -20 bis +50 °C
Was misst der VS135?
Linienquerung (rein / raus)
Bis zu vier Zähllinien, kumulierte Personen rein und raus je Linie.
Zonenzählung
Bis zu vier Zonen melden die aktuelle Personenzahl je Bereich.
Verweilzeit
Durchschnittliche und maximale Verweilzeit je Zone zur Warteschlangenanalyse.
Periodenzählung
Personen rein und raus je Meldeintervall, getrennt vom laufenden Gesamtwert.
Multi-Device-Stitching
Master- und Child-Sensoren liefern einen kombinierten Zählwert für breite Eingänge.
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 = { lines: {}, regions: {}, dwell: {} };
// Channel groups (IPSO): each counting line uses a fixed triplet of channels.
var inChns = [0x03, 0x06, 0x09, 0x0c];
var outChns = [0x04, 0x07, 0x0a, 0x0d];
var periodChns = [0x05, 0x08, 0x0b, 0x0e];
for (var i = 0; i < bytes.length; ) {
var channel = bytes[i++];
var type = bytes[i++];
// Device info on join / power-on: skip with known lengths.
if (channel === 0xff) {
if (type === 0x01) { i += 1; } // protocol version
else if (type === 0x09) { i += 2; } // hardware version
else if (type === 0x16) { i += 8; } // serial number
else if (type === 0x1f) { i += 4; } // firmware version
else { break; } // downlink-response payloads vary
continue;
}
// Line total IN: UINT32 little-endian.
if (idx(inChns, channel) >= 0 && type === 0xd2) {
data.lines["line_" + (idx(inChns, channel) + 1) + "_in"] = readUInt32LE(bytes, i);
i += 4; continue;
}
// Line total OUT: UINT32 little-endian.
if (idx(outChns, channel) >= 0 && type === 0xd2) {
data.lines["line_" + (idx(outChns, channel) + 1) + "_out"] = readUInt32LE(bytes, i);
i += 4; continue;
}
// Line period IN/OUT: two UINT16 little-endian values.
if (idx(periodChns, channel) >= 0 && type === 0xcc) {
var n = idx(periodChns, channel) + 1;
data.lines["line_" + n + "_period_in"] = readUInt16LE(bytes, i);
data.lines["line_" + n + "_period_out"] = readUInt16LE(bytes, i + 2);
i += 4; continue;
}
// Region count: four UINT8 head counts.
if (channel === 0x0f && type === 0xe3) {
for (var r = 0; r < 4; r++) { data.regions["region_" + (r + 1)] = bytes[i + r]; }
i += 4; continue;
}
// Region dwell time: region id + avg + max (UINT16 little-endian, seconds).
if (channel === 0x10 && type === 0xe4) {
var region = bytes[i];
data.dwell["region_" + region + "_avg"] = readUInt16LE(bytes, i + 1);
data.dwell["region_" + region + "_max"] = readUInt16LE(bytes, i + 3);
i += 5; continue;
}
// Occlusion / sensor alarm: node id + alarm type.
if (channel === 0x50 && type === 0xfc) {
data.alarm = { node: bytes[i + 1], type: bytes[i + 2] };
i += 3; continue;
}
break; // unknown channel: stop, the mapping is deployment-specific
}
return { data: data };
}
function idx(arr, v) {
for (var k = 0; k < arr.length; k++) { if (arr[k] === v) { return k; } }
return -1;
}
function readUInt16LE(b, i) {
return ((b[i + 1] << 8) | b[i]) & 0xffff;
}
function readUInt32LE(b, i) {
return ((b[i + 3] << 24) | (b[i + 2] << 16) | (b[i + 1] << 8) | b[i]) >>> 0;
}
Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation (Communication Protocol / User Guide).
Die VS135-Payload ist konfigurationsabhängig: Welche Zähllinien, Zonen und Verweilzeit-Kanäle erscheinen, hängt davon ab, wie Sie die Erfassungslinien und Bereiche im Web-GUI einrichten. Linien-Gesamtwerte sind UINT32 little-endian, Zonenzählwerte sind ein Byte je Bereich und Verweilzeiten sind UINT16 in Sekunden. Master- und Child-Sensoren nutzen für das Multi-Device-Stitching getrennte Kanalgruppen. Das ist ein Framework, kein fertiges Drop-in: Wir gleichen die finale Feldzuordnung gegen ein echtes Uplink Ihrer Installation ab. Die LoRaWAN-Version ist Class C und netzgespeist. Für ThingsBoard kommt dieselbe Kanal-Logik in einen Uplink-Converter.
Einsatzszenarien
Smart-Retail-Frequenzmessung
Besucher an Eingängen und Zonen zählen, um Personal und Conversion zu steuern.
MehrWarteschlangen- und Verweilanalyse
Zonen-Verweilzeit erkennt wachsende Schlangen an Kassen und Servicepunkten.
MehrArbeitsplatzbelegung
Anonyme Raum- und Zonenbelegung für die Planung von Schreibtischen und Meetingräumen.
MehrKonfiguration & Stolpersteine
Erst Linien und Zonen zeichnen
Zähllinien und Zonen werden vor dem Rollout über das lokale Wi-Fi-Web-GUI konfiguriert. Die Kanäle im Uplink existieren nur für die Linien und Bereiche, die Sie tatsächlich definieren.
Automatische Höhenerkennung
Der Sensor erkennt seine Montagehöhe selbst. Montieren Sie ihn waagerecht und innerhalb von 2 bis 6,5 m, da eine schräge oder unzulässige Montage die Tiefengenauigkeit verschlechtert.
Master- und Child-Stitching
Für breite Eingänge mehrere Geräte koppeln. Child-Sensoren melden unter eigener Kanalgruppe, daher müssen Decoder und Dashboard Master- und Child-Werte summieren.
Class-C-Stromversorgung
Die LoRaWAN-Version läuft über DC 12 V oder PoE und hält ihr Empfangsfenster offen. Planen Sie eine Dauerversorgung ein, das ist kein Batteriesensor.
So unterstützt dich merkaio beim VS135
Von der Beschaffung bis zum laufenden Betrieb, alles aus einer Hand und auf eigener europäischer Infrastruktur.
Pre-Staging & Provisioning
Wir konfigurieren den VS135, 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.