Milesight WS502: LoRaWAN-Wandschalter mit 2 Tasten

Milesight WS502 LoRaWAN-Wandschalter mit 2 Tasten: eigener ChirpStack-Decoder für Schaltzustand und Tastenevents, dekodiertes Beispiel, Downlink-Steuerung.

Milesight WS502
WS502Sensor
LoRaWAN
Class C, OTAA
Tasten
2 Tasten (switch_1, switch_2)
Verdrahtung
Phase + Last, ersetzt Standard-Wandschalter
Lokale Steuerung
Physische Tasten plus LoRaWAN-Downlink
D2D
Direktsteuerung ohne Milesight-Gateway
Stromversorgung
Netzbetrieb (keine Batterie)
Konfiguration
NFC (Milesight ToolBox)
Messgrößen

Was misst der WS502?

Schaltzustand

An/Aus-Status von switch_1 und switch_2, gemeldet bei Änderung und im Intervall.

Änderungs-Flag

Pro Taste markiert ein Flag, welcher Schalter in diesem Uplink umgeschaltet hat.

Funktionstasten-Event

Druckereignis der konfigurierbaren Funktionstaste.

Gerätestatus

Reset, Reboot und LoRaWAN-Klasse werden bei Join und Einschalten gemeldet.

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++];

    // Switch state: 1 byte. bits 0/1 = state of switch_1/switch_2,
    // bits 4/5 = "changed in this uplink" flag for switch_1/switch_2.
    if (channel === 0xff && type === 0x29) {
      var v = bytes[i]; i += 1;
      data.switch_1 = (v & 0x01) ? "on" : "off";
      data.switch_2 = (v & 0x02) ? "on" : "off";
      data.switch_1_change = ((v >> 4) & 0x01) ? "yes" : "no";
      data.switch_2_change = ((v >> 5) & 0x01) ? "yes" : "no";

    // Function key event: 1 byte (0 = no, 1 = yes)
    } else if (channel === 0xff && type === 0x2b) {
      data.function_key_event = bytes[i] ? "yes" : "no"; i += 1;

    // Device status: 1 byte (0 = off, 1 = on)
    } else if (channel === 0xff && type === 0x0b) {
      data.device_status = bytes[i] ? "on" : "off"; i += 1;

    // LoRaWAN class
    } else if (channel === 0xff && type === 0x0f) {
      data.lorawan_class = readClass(bytes[i]); i += 1;

    // Reset / reboot event
    } else if (channel === 0xff && type === 0xfe) {
      data.reset_event = "reset"; i += 1;

    // Serial number (6 bytes)
    } else if (channel === 0xff && type === 0x08) {
      data.sn = readHex(bytes, i, 6); i += 6;

    // IPSO version (1 byte, skip)
    } else if (channel === 0xff && type === 0x01) {
      i += 1;
    // Hardware / firmware version (2 bytes each, skip)
    } else if (channel === 0xff && (type === 0x09 || type === 0x0a)) {
      i += 2;
    // TSL version (2 bytes, skip)
    } else if (channel === 0xff && type === 0xff) {
      i += 2;
    } else {
      break;
    }
  }
  return { data: data };
}

function readClass(b) {
  var map = { 0: "Class A", 1: "Class B", 2: "Class C", 3: "Class CtoB" };
  return map[b] || "unknown";
}

function readHex(b, i, len) {
  var s = "";
  for (var k = 0; k < len; k++) {
    s += ("0" + (b[i + k] & 0xff).toString(16)).slice(-2);
  }
  return s;
}

Implementiert nach der veröffentlichten Milesight-Byte-Spezifikation (Communication Protocol / User Guide).

Kanalformat implementiert nach der veröffentlichten Milesight-Byte-Spezifikation: ff 29 Schaltzustand (Bit0/1 = Zustand switch_1/switch_2, Bit4/5 = Änderungs-Flag), ff 2b Funktionstasten-Event, ff 0f LoRaWAN-Klasse, ff fe Reset. Als Class-C-Gerät nimmt der WS502 Downlinks nahezu in Echtzeit an, um jede Taste zu schalten; Versions- und SN-Segmente beim Join werden übersprungen. Für ThingsBoard wandert dieselbe Logik in einen Uplink-Converter.

Uplink (hex)

FF2913

Decoded JSON

{ "switch_1": "on", "switch_2": "on", "switch_1_change": "yes", "switch_2_change": "no" }
Aus der Praxis

Konfiguration & Stolpersteine

Class-C-Versorgung

Der WS502 hält sein Empfangsfenster für nahezu Echtzeitsteuerung offen und wird daher netzbetrieben. Planen Sie die Verdrahtung entsprechend, es gibt keinen Batterie-Fallback.

Verdrahtungsvarianten

Es gibt Zwei- und Dreidraht-Varianten. Passen Sie die Variante an Ihren Stromkreis an; ein fehlender Neutralleiter ändert das Verhalten bei der unterstützten Last.

Umgang mit dem Änderungs-Flag

Jeder Uplink meldet beide Tasten plus ein Änderungs-Flag pro Taste. Dashboard-Regeln sollten auf das Flag reagieren, nicht nur auf den Zustand, um doppelte Trigger bei Intervall-Uplinks zu vermeiden.

Kindersicherung & LED

Kindersicherungszeit und LED-Modus werden per Downlink (0x25, 0x2f) gesetzt. Dokumentieren Sie diese, damit das Verhalten vor Ort den Dashboard-Erwartungen entspricht.

D2D-Steuerung

Wenn ein D2D-Befehl den Schalter umschaltet, sendet er unter Umständen keinen normalen Uplink. Berücksichtigen Sie das im Monitoring, damit der Zustand konsistent bleibt.

Dein Partner

So unterstützt dich merkaio beim WS502

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

Pre-Staging & Provisioning

Wir konfigurieren den WS502, 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-Gerät, kein Milesight-Gateway oder Cloud nötig. Sie hinterlegen den Codec im Device-Profile und registrieren das Gerät per OTAA.
Ja, für ChirpStack und ThingsBoard, implementiert nach der veröffentlichten Milesight-Byte-Spezifikation. Dieselbe Kanal-Logik wandert in einen ThingsBoard-Uplink-Converter.
Zwei unabhängige Tasten, gemeldet als switch_1 und switch_2. Jeder Uplink trägt den An/Aus-Zustand beider Tasten plus ein Flag, das markiert, welche umgeschaltet hat.
Ja. Als Class-C-Gerät hört der WS502 durchgehend und nimmt nahezu in Echtzeit Downlinks an, um jede Taste aus dem Dashboard zu schalten, zusätzlich zu den physischen Tasten.
Nein. Es ist ein netzbetriebenes Class-C-Gerät, das sein Empfangsfenster durchgehend offen hält, also ersetzt es einen verdrahteten Wandschalter und läuft nicht auf Batterie.
Ein konfigurierbarer Tastendruck, gemeldet auf Kanal ff 2b als eigenständiges Ereignis, mit dem Sie Szenen oder Automatisierungen unabhängig vom Schaltzustand auslösen können.
Ja. Der WS502 unterstützt das Milesight-D2D-Protokoll für die Direktsteuerung eines anderen Milesight-Geräts mit sehr geringer Latenz ohne den Umweg über ein Gateway.
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.