Milesight WT102: LoRaWAN-Heizkörperthermostat (Smart-TRV)

Milesight WT102 LoRaWAN-Heizkörperthermostat: eigenes ChirpStack-Decoder-Framework, dekodiertes Beispiel und Solltemperatur-Downlinks fürs Smart Office.

Milesight WT102
WT102Sensor
LoRaWAN
Class A, OTAA
Band / Port
EU868 / Port 85
Montage
M30 x 1,5 Ventilgewinde (Adapter inkl.)
Temperaturbereich
-20 bis +60 °C (NTC)
Solltemperatur
5 bis 35 °C, in 0,5-°C-Schritten
Stromversorgung
2x AA-Batterien
Konfiguration
NFC (Milesight ToolBox)
Messgrößen

Was misst der WT102?

Umgebungstemperatur

Interner NTC, -20 bis +60 °C, mit jedem Heizperioden-Uplink gemeldet.

Aktuelle Ventilöffnung

Tatsächliche Ventilstellung 0 bis 100 % aus dem Motor.

Solltemperatur

Der Sollwert, auf den das Gerät regelt, 5 bis 35 °C.

Soll-Ventilöffnung

Sollwert für den Ventilöffnungs-Regelmodus, 0 bis 100 %.

Batteriestand

In periodischen Uplinks gemeldet, mit Niedrig-Batterie-Alarm.

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

    if (channel === 0x00) {            // battery (%)
      data.battery = bytes[i]; i += 1;
    } else if (channel === 0x01) {     // ambient temperature (INT16 LE, /100)
      data.temperature = readInt16LE(bytes, i) / 100; i += 2;
    } else if (channel === 0x02) {     // motor total stroke
      data.motor_total_stroke = readUInt16LE(bytes, i); i += 2;
    } else if (channel === 0x03) {     // motor position
      data.motor_position = readUInt16LE(bytes, i); i += 2;
    } else if (channel === 0x04) {     // current valve opening (%)
      data.valve_opening = bytes[i]; i += 1;
    } else if (channel === 0x06) {     // target temperature (INT16 LE, /100)
      data.target_temperature = readInt16LE(bytes, i) / 100; i += 2;
    } else if (channel === 0x07) {     // target valve opening (%)
      data.target_valve_opening = bytes[i]; i += 1;
    } else if (channel === 0x08) {     // low-battery alarm: battery (%)
      data.low_battery_alarm = true; data.battery = bytes[i]; i += 1;
    } else {
      // calibration (0x05), event/alarm and periodic-report frames
      // (0x09..0x0E, 0x60.., 0xFF..) are configuration-dependent:
      // decode per deployment, see note
      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).

Aus der veröffentlichten Milesight-Byte-Spezifikation umgesetzt. Anders als die IPSO-Sensoren nutzt das WT102 ein Befehls-ID-Payload: jeder Frame beginnt mit einem Befehlsbyte, ohne separates Typbyte. Die Basis-Datenkanäle sind 0x00 Batterie (%), 0x01 Umgebungstemperatur (INT16 LE, /100), 0x04 aktuelle Ventilöffnung (%), 0x06 Solltemperatur (INT16 LE, /100), 0x07 Soll-Ventilöffnung (%). Der periodische Report-Frame (0x0E) und die Ereignis-/Alarm-Frames haben eine variable Struktur, die vom konfigurierten Regelmodus abhängt (automatische Temperatur, Ventilöffnung oder integriert), daher ist dieser Teil ein Framework, das wir je Deployment ausbauen. Als Class-A-Gerät nimmt das WT102 in seinen Empfangsfenstern Downlinks an, um Solltemperatur oder Ventilöffnung zu setzen.

Uplink (hex)

0064016608040606f6090707

Decoded JSON

{ "battery": 100, "temperature": 21.5, "valve_opening": 6, "target_temperature": 25.5, "target_valve_opening": 7 }
Aus der Praxis

Konfiguration & Stolpersteine

NFC-Einrichtung

Keys, Regelmodus, Heizperiode und Zeitpläne werden vor der Montage am Ventil über NFC mit der Milesight ToolBox gesetzt.

Motorkalibrierung

Nach der Montage kalibriert das Gerät den Motorhub gegen das Ventil. Auf das Kalibrierungs-Ergebnis achten; eine fehlgeschlagene Kalibrierung bedeutet keine Temperaturregelung.

Heiz- vs. Nicht-Heizperiode

Reporting-Intervall und Ventilverhalten unterscheiden sich zwischen konfigurierter Heizsaison und Nebensaison. Dashboard-Erwartungen für beide einplanen.

Regelmodus bestimmt das Payload

Automatische Temperatur, Ventilöffnung und integrierte Regelung erzeugen unterschiedliche Report-Layouts, daher den Decoder gegen den eingesetzten Modus finalisieren.

Dein Partner

So unterstützt dich merkaio beim WT102

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

Pre-Staging & Provisioning

Wir konfigurieren den WT102, 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 der Klasse A, ohne Milesight-Gateway oder -Cloud. Der Codec kommt ins Device-Profile, die Provisionierung läuft per OTAA.
Ja, umgesetzt aus der veröffentlichten Milesight-Byte-Spezifikation. Die Basis-Datenkanäle werden direkt dekodiert; die konfigurationsabhängigen Report- und Alarm-Frames bauen wir je Deployment aus.
Das WT102 nutzt ein Befehls-ID-Payload und der periodische Report ändert seine Form mit dem Regelmodus (automatische Temperatur, Ventilöffnung oder integriert), daher sind Alarm- und Report-Frames ein Framework, das wir gegen einen echten Uplink aus eurem Deployment finalisieren.
Ja. Als Class-A-Gerät nimmt das WT102 in seinen Empfangsfenstern Downlinks an, um Solltemperatur oder Ventilöffnung zu setzen, sodass eine Dashboard-Regel Sollwerte je Raum ausspielen kann.
Umgebungstemperatur vom internen NTC, die aktuelle und die Soll-Ventilöffnung, den Solltemperatur-Wert und den Batteriestand. Fenster-offen- und Auto-Away-Ereignisse werden als Alarme gemeldet.
Es läuft mit zwei AA-Batterien. Die Laufzeit hängt vom Reporting-Intervall und der Häufigkeit der Motorbewegungen ab; vor dem Entladen sendet das Gerät einen Niedrig-Batterie-Alarm.
Es ist ein Class-A-Gerät auf LoRaWAN-Port 85. Sollwerte, Zeitpläne und Regelmodus werden über NFC mit der Milesight ToolBox konfiguriert.
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.