Milesight VS133: AI-ToF-Personenzähler (LoRaWAN)
Milesight VS133 AI-ToF-Personenzähler: eigenes ChirpStack-Decoder-Framework für Linien-In/Out und Zonen-Zählung, plus Smart-Retail- und Footfall-Integration.
- LoRaWAN
- Class C, OTAA
- Technologie
- ToF-Tiefensensor 2. Generation mit KI
- Genauigkeit
- Bis 99,8 %, anonym (keine Bilder)
- Zählung
- Linie In/Out, Zonen-Präsenz, Verweildauer
- Montage
- Deckenmontage, Draufsicht
- Stromversorgung
- PoE 802.3af oder DC (Class C)
- Konfiguration
- Web-GUI, Linien und Zonen einzeichnen
Was misst der VS133?
Linienüberquerungen (In/Out)
Bidirektionale Zählung je gezeichneter Linie, bis zu vier Linien.
Zonen-Präsenz
Aktuelle Personenzahl in bis zu vier gezeichneten Zonen.
Verweildauer
Durchschnittliche und maximale Verweildauer je Zone für Warteschlangen- und Zonen-Analyse.
Demografie
Optionale Unterscheidung Erwachsene/Kinder und Personal-Filter, vollständig anonym.
Verdeckungs-Alarm
Meldet eine blockierte Linsensicht, damit Datenlücken erklärbar sind.
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: {} };
for (var i = 0; i < bytes.length; ) {
var channel = bytes[i++];
var type = bytes[i++];
// Device info on join / power-on (0xFF segments)
if (channel === 0xff) { i += deviceInfoLen(type); continue; }
// Line counters: channels 03/06/09/0C = total IN, 04/07/0A/0D = total OUT.
// Type 0xD2, value is UINT32 little-endian.
if (type === 0xd2 && isLineIn(channel)) {
line(data, lineIndex(channel, IN_BASE)).in = readUInt32LE(bytes, i);
i += 4; continue;
}
if (type === 0xd2 && isLineOut(channel)) {
line(data, lineIndex(channel, OUT_BASE)).out = readUInt32LE(bytes, i);
i += 4; continue;
}
// Per-line period (channels 05/08/0B/0E, type 0xCC): in + out UINT16 LE.
if (type === 0xcc && isLinePeriod(channel)) {
var ln = line(data, lineIndex(channel, PERIOD_BASE));
ln.period_in = readUInt16LE(bytes, i);
ln.period_out = readUInt16LE(bytes, i + 2);
i += 4; continue;
}
// Region headcount (channel 0F, type 0xE3): four UINT8 region counts.
if (channel === 0x0f && type === 0xe3) {
for (var r = 0; r < 4; r++) region(data, r + 1).count = bytes[i + r];
i += 4; continue;
}
// Region dwell (channel 10, type 0xE4): region id + avg + max (UINT16 LE).
if (channel === 0x10 && type === 0xe4) {
var rg = region(data, bytes[i]);
rg.avg_dwell = readUInt16LE(bytes, i + 1);
rg.max_dwell = readUInt16LE(bytes, i + 3);
i += 5; continue;
}
// Occlusion / lens-blocked alarm (channel 50, type 0xFC).
if (channel === 0x50 && type === 0xfc) {
data.occlusion_alarm = bytes[i + 2];
i += 3; continue;
}
// Unknown channel: stop. Region/child layout is deployment-specific.
break;
}
return { data: data };
}
var IN_BASE = 0x03, OUT_BASE = 0x04, PERIOD_BASE = 0x05;
function isLineIn(c) { return c === 0x03 || c === 0x06 || c === 0x09 || c === 0x0c; }
function isLineOut(c) { return c === 0x04 || c === 0x07 || c === 0x0a || c === 0x0d; }
function isLinePeriod(c) { return c === 0x05 || c === 0x08 || c === 0x0b || c === 0x0e; }
function lineIndex(c, base) { return (c - base) / 3 + 1; }
function line(data, n) {
var key = "line_" + n;
if (!data.lines[key]) data.lines[key] = {};
return data.lines[key];
}
function region(data, n) {
var key = "region_" + n;
if (!data.regions[key]) data.regions[key] = {};
return data.regions[key];
}
function readUInt16LE(b, i) { return (b[i + 1] << 8) | b[i]; }
function readUInt32LE(b, i) {
return ((b[i + 3] << 24) | (b[i + 2] << 16) | (b[i + 1] << 8) | b[i]) >>> 0;
}
function deviceInfoLen(type) {
// 0xFF segment lengths are firmware-specific (version, SN, downlink ACKs).
void type; return 1;
}
Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation (Communication Protocol / User Guide).
Die VS133-Payload ist konfigurationsabhängig: Wie viele Zähllinien und Zonen Sie in der Web-GUI einzeichnen, entscheidet, welche Kanäle auftauchen, und Multi-Sensor-Setups (Master plus Child) ergänzen einen zweiten Kanalblock. Das ist ein Framework im IPSO-Kanalformat, kein fixer Drop-in: Linienzähler kommen als UINT32 little-endian Summen auf den Kanälen 03/06/09/0C (In) und 04/07/0A/0D (Out), Zonen-Zählung als vier Bytes auf Kanal 0F und die Verweildauer je Zone auf Kanal 10. Wir setzen es nach der veröffentlichten Milesight-Byte-Spezifikation um und passen es an ein echtes Uplink-Telegramm aus dem Einsatz an. Als Class-C-Gerät nimmt die VS133 außerdem Downlinks an, etwa um das Report-Intervall zu setzen oder Zähler zurückzusetzen.
Einsatzszenarien
Smart-Retail-Footfall
Besucher an Eingängen und Zonen zählen, um Conversion und Personaleinsatz zu messen.
MehrSmart-Office-Belegung
Nutzung von Besprechungsräumen und Etagen erfassen, um Flächen richtig zu dimensionieren.
MehrWarteschlangen- und Verweildauer-Analyse
Verweildauer je Zone zeigt langsame Kassen und überfüllte Bereiche.
Konfiguration & Stolpersteine
Erst Linien und Zonen einzeichnen
Zähllinien und Zonen werden vor dem Rollout in der Web-GUI konfiguriert. Die Payload trägt nur die aktivierten Kanäle, also zuerst das Layout festlegen, dann den Decoder zuordnen.
Montagehöhe bei Deckenmontage
Das ToF-Sichtfeld ist fest, die Montagehöhe bestimmt also die erfasste Breite. Deckenhöhe vor der Halterungsbestellung gegen die Abdeckungstabelle im Datenblatt prüfen.
Class-C-Versorgung, keine Batterie
Die VS133 läuft über PoE oder DC und hält ihr Empfangsfenster dauerhaft offen. Verkabelung und einen PoE-Switch-Port einplanen, kein Batteriebudget.
Master- und Child-Layout
Verkettete Sensoren für einen breiten Eingang melden einen zweiten Kanalblock (Child-Zählung). Dokumentieren Sie, welcher Knoten Master ist, damit Summen nicht doppelt gezählt werden.
So unterstützt dich merkaio beim VS133
Von der Beschaffung bis zum laufenden Betrieb, alles aus einer Hand und auf eigener europäischer Infrastruktur.
Pre-Staging & Provisioning
Wir konfigurieren den VS133, 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.