TapHome

Shelly Door/Window 2

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 03. 2026
Shelly Door/Window 2

Der Shelly Door/Window 2 (SHDW-2) ist ein batteriebetriebener (2x CR123A) Wi-Fi Kontaktsensor. TapHome kommuniziert mit dem Gerät über MQTT — das empfohlene Protokoll für batteriebetriebene Shelly-Geräte, da der Sensor die meiste Zeit schläft und Daten nur bei Aufwachereignissen veröffentlicht (Magnetzustandsänderung, Vibration, Helligkeitsänderung oder periodischer Timer).

Die Vorlage unterstützt bis zu 5 Shelly Door/Window-Sensoren pro Modul. Jede Sensorinstanz wird durch eine sensorN_topic-Custom-Variable unterschieden, die auf die MQTT Client ID des Geräts zeigt.

Konfiguration

Device ID

Jeder Shelly Door/Window 2 Sensor hat eine eindeutige MQTT Device ID im Format shellydw2-<MAC6>, wobei <MAC6> die letzten 6 Zeichen der MAC-Adresse in hexadezimaler Kleinschreibung sind (z.B. shellydw2-A1B2C3).

Die Device ID finden Sie:

  • Auf dem Gerätelabel (MAC-Adresse)
  • In der Shelly Web-UI: SettingsDevice Info
  • Über API: GET http://<device-ip>/settings → Feld device.hostname

Dieses Gerät unterstützt mDNS-Discovery. Sie können den Hostnamen shellydw2-{MAC}.local anstelle einer IP-Adresse bei der TapHome-Konfiguration verwenden. Ersetzen Sie {MAC} durch die letzten 6 Zeichen der MAC-Adresse des Geräts in Kleinbuchstaben (z.B. shellydw2-A1B2C3.local). Die Verwendung eines Hostnamens verhindert Konnektivitätsprobleme bei IP-Adressänderungen.

Vorlageneinrichtung

Nach dem Import der Vorlage in TapHome:

  1. Öffnen Sie das Modul Shelly Door/Window MQTT
  2. Setzen Sie die MQTT Broker IP und den Port (Standard 1883)
  3. Für jede Sensorinstanz setzen Sie die sensorN_topic-Custom-Variable auf die Device ID des entsprechenden Shelly Door/Window 2 (z.B. shellydw2-A1B2C3)

Das Modul abonniert shellies/# und die Listener-Skripte filtern Nachrichten nach dem konfigurierten Topic-Präfix.

Konfigurieren Sie nur die Sensor-Slots, die Sie tatsächlich verwenden. Nicht konfigurierte Slots (mit dem Standardwert shellydw2-deviceid) zeigen eine Fehlermeldung an, die zur Einstellung des korrekten Topics auffordert.

Gerätefähigkeiten

Öffnungs-/Schließerkennung

Jede Sensorinstanz wird als Reed-Kontakt-Gerät in TapHome abgebildet. Der Tür-/Fensterzustand wird vom Topic shellies/<id>/sensor/state gelesen:

  • openAlarm (Tür/Fenster offen)
  • closeOK (Tür/Fenster geschlossen)

Der Sensor wacht auf und veröffentlicht seinen Zustand bei Magnetbewegung (Tür oder Fenster öffnet oder schließt), sowie während periodischer Meldeintervalle (Standard alle 3 Minuten).

Batterie-, Temperatur- und Beleuchtungsüberwachung

Jede Sensorinstanz stellt drei Serviceattribute bereit:

  • Batterie — prozentualer Batteriestand gelesen aus shellies/<id>/sensor/battery. Eine Warnung wird bei unter 20 % ausgelöst.
  • Temperatur — Umgebungstemperatur in °C gelesen aus shellies/<id>/sensor/temperature.
  • Beleuchtungsstärke — Umgebungslichtniveau in Lux gelesen aus shellies/<id>/sensor/lux.

Alle Attribute sind schreibgeschützt und aktualisieren sich bei jedem Aufwachen des Sensors.

Weitere Fähigkeiten (nicht implementiert)

Der Shelly Door/Window 2 veröffentlicht auch Neigungswinkel (0–180 Grad) und Vibrationserkennung über MQTT, sowie einen Online/Offline-Status über das LWT-Topic. Diese Fähigkeiten sind im MQTT-Output des Geräts verfügbar, aber nicht in der aktuellen TapHome-Vorlage abgebildet. Sie können in einer zukünftigen Aktualisierung hinzugefügt werden.

Fehlerbehebung

Sensor meldet keine Daten
  1. Überprüfen Sie, dass der Shelly Door/Window 2 mit Wi-Fi verbunden ist und MQTT in den Geräteeinstellungen aktiviert ist
  2. Prüfen Sie, dass die sensorN_topic-Custom-Variable exakt mit der Device ID übereinstimmt (z.B. shellydw2-A1B2C3)
  3. Bei geänderter MQTT-Broker-Adresse verwenden Sie den mDNS-Hostnamen (shellydw2-A1B2C3.local) zur Überprüfung der Netzwerkerreichbarkeit
  4. Verwenden Sie einen MQTT-Client (z.B. MQTT Explorer) zum Abonnieren von shellies/# und überprüfen Sie, ob der Sensor Nachrichten beim Aufwachen veröffentlicht
Öffnungs-/Schließzustand aktualisiert sich nicht
  1. Stellen Sie sicher, dass der Magnet korrekt zur Haupteinheit ausgerichtet ist — bei geschlossener Tür/geschlossenem Fenster sollte der Magnet innerhalb von 15 mm vom Sensor sein
  2. Wenn der Sensor kürzlich bewegt wurde, verwenden Sie den Kalibrierungsendpunkt (GET http://<device-ip>/calibrate?opened=1) mit der Tür/dem Fenster in geöffneter Position zur Neukalibrierung
  3. Prüfen Sie den Reed-Kontakt-Gerätezustand in TapHome — 1 = offen (Alarm), 0 = geschlossen (OK)
Batterie entlädt sich schnell
  1. Der Shelly Door/Window 2 verwendet 2x CR123A-Batterien (nicht wiederaufladbar) mit typischer Lebensdauer von ca. 18 Monaten
  2. Häufiges Aufwachen (z.B. durch instabiles Wi-Fi oder sehr kurze Schlafperiode) kann die Batterie schneller entladen
  3. Die Standard-Schlafperiode beträgt 3 Minuten — Erhöhung über sleep_mode.period in den Geräteeinstellungen reduziert den Stromverbrauch
  4. Sorgen Sie für starkes Wi-Fi-Signal am Sensorstandort

Gen1 Shelly-Geräte unterstützen kein MQTT über TLS. Die Kommunikation zwischen Sensor und MQTT-Broker ist unverschlüsselt (Plain MQTT, Port 1883). Stellen Sie sicher, dass der MQTT-Broker in einem vertrauenswürdigen lokalen Netzwerk ist.

Installation in TapHome

Voraussetzungen

  • Shelly-Gerät mit Wi-Fi verbunden (siehe HTTP-Verbindungsanleitung, falls noch nicht geschehen)
  • MQTT-Broker in Ihrem lokalen Netzwerk aktiv (z. B. Mosquitto, Home Assistant oder der integrierte TapHome-Broker)
  • TapHome CCU im selben Netzwerk wie der Broker

Auf Gen1-Geräten deaktiviert das Aktivieren von MQTT die Shelly Cloud. Beides kann nicht gleichzeitig betrieben werden. Auf Gen2/Plus-Geräten gilt diese Einschränkung nicht.

Schritt 1 — MQTT auf dem Shelly-Gerät aktivieren

Gen1-Geräte (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu Internet & SecurityAdvanced — MQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie MQTT Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Optional setzen Sie MQTT User und MQTT Password, falls Ihr Broker eine Authentifizierung erfordert
  6. Klicken Sie auf Save — das Gerät startet neu und verbindet sich mit dem Broker

Gen2 / Plus-Geräte (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu SettingsMQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Die Client ID ist mit der Geräte-ID vorausgefüllt (z. B. shellyplus1pm-AABBCCDDEE) — belassen Sie sie so, es sei denn, Sie haben einen bestimmten Grund zur Änderung
  6. Klicken Sie auf Save und starten Sie das Gerät neu

Um zu überprüfen, ob MQTT funktioniert, verwenden Sie einen MQTT-Client (z. B. MQTT Explorer) und abonnieren Sie shellies/# (Gen1) oder <device-id>/# (Gen2). Sie sollten Statusnachrichten vom Gerät sehen.

Schritt 2 — Device ID / MQTT Client ID ermitteln

Einige Vorlagen erfordern einen Parameter Device ID oder MQTT Client ID. Dies ist die eindeutige Kennung, die in MQTT-Topics verwendet wird.

  • Gen1: auf dem Etikett als MAC-Adresse zu finden (z. B. AABBCCDDEE). Device ID = shelly<model>-<mac>, z. B. shelly1pm-AABBCCDDEE
  • Gen2/Plus: in der Shelly-Weboberfläche unter SettingsDevice InfoDevice ID zu finden, oder auf dem Geräteetikett

Schritt 3 — Konfiguration in TapHome

  1. Fügen Sie in TapHome ein neues Modul Packet Parser (MQTT) hinzu
  2. IP Address: Geben Sie die IP-Adresse des MQTT-Brokers ein (z. B. 192.168.1.10)
  3. Port: 1883 (Standard; verwenden Sie 8883 für TLS)
  4. Device ID / MQTT Client ID: Geben Sie den Wert aus Schritt 2 ein (falls von der Vorlage benötigt)
  5. Importieren Sie die Vorlage — TapHome abonniert automatisch die Geräte-Topics

Verfügbare Geräte

Shelly Door/Window MQTT Modul
Benutzerdefinierte Variablen
sensor1_topic (string) = shellydw2-deviceidMQTT-Geräte-ID des Tür-/Fenstersensors 1 — Format: 'shellydw2-DEVICEID' (in der Shelly Web-UI → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellydw2-<last6MAC>
sensor2_topic (string) = shellydw2-deviceidMQTT-Geräte-ID des Tür-/Fenstersensors 2
sensor3_topic (string) = shellydw2-deviceidMQTT-Geräte-ID des Tür-/Fenstersensors 3
sensor4_topic (string) = shellydw2-deviceidMQTT-Geräte-ID des Tür-/Fenstersensors 4
sensor5_topic (string) = shellydw2-deviceidMQTT-Geräte-ID des Tür-/Fenstersensors 5
Tür-/Fenstersensor 1 Reed-Kontakt Nur lesen

Öffnungs-/Schließerkennung über Reed-Kontakt — meldet Alarm bei offener Tür/offenem Fenster, OK bei geschlossen

boolean
Serviceattribute
Batterie
Temperatur
Beleuchtungsstärke

Tür-/Fenstersensor 1

Listener
IF (INDEXOF(sensor1_topic, "shellydw2-deviceid") = 0)
    ADDERROR("Set correct 'sensor1_topic' value in module variables. Topic format is 'shellydw2-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR topicPrefix := "shellies/" + sensor1_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/state") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "open", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "close", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/lux") = 0)
    luminance := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Serviceattribute
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Tür-/Fenstersensor 2 Reed-Kontakt Nur lesen

Öffnungs-/Schließerkennung über Reed-Kontakt — meldet Alarm bei offener Tür/offenem Fenster, OK bei geschlossen

boolean
Serviceattribute
Batterie
Temperatur
Beleuchtungsstärke

Tür-/Fenstersensor 2

Listener
IF (INDEXOF(sensor2_topic, "shellydw2-deviceid") = 0)
    ADDERROR("Set correct 'sensor2_topic' value in module variables. Topic format is 'shellydw2-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR topicPrefix := "shellies/" + sensor2_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/state") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "open", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "close", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/lux") = 0)
    luminance := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Serviceattribute
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Tür-/Fenstersensor 3 Reed-Kontakt Nur lesen

Öffnungs-/Schließerkennung über Reed-Kontakt — meldet Alarm bei offener Tür/offenem Fenster, OK bei geschlossen

boolean
Serviceattribute
Batterie
Temperatur
Beleuchtungsstärke

Tür-/Fenstersensor 3

Listener
IF (INDEXOF(sensor3_topic, "shellydw2-deviceid") = 0)
    ADDERROR("Set correct 'sensor3_topic' value in module variables. Topic format is 'shellydw2-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR topicPrefix := "shellies/" + sensor3_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/state") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "open", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "close", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/lux") = 0)
    luminance := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Serviceattribute
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Tür-/Fenstersensor 4 Reed-Kontakt Nur lesen

Öffnungs-/Schließerkennung über Reed-Kontakt — meldet Alarm bei offener Tür/offenem Fenster, OK bei geschlossen

boolean
Serviceattribute
Batterie
Temperatur
Beleuchtungsstärke

Tür-/Fenstersensor 4

Listener
IF (INDEXOF(sensor4_topic, "shellydw2-deviceid") = 0)
    ADDERROR("Set correct 'sensor4_topic' value in module variables. Topic format is 'shellydw2-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR topicPrefix := "shellies/" + sensor4_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/state") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "open", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "close", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/lux") = 0)
    luminance := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Serviceattribute
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Tür-/Fenstersensor 5 Reed-Kontakt Nur lesen

Öffnungs-/Schließerkennung über Reed-Kontakt — meldet Alarm bei offener Tür/offenem Fenster, OK bei geschlossen

boolean
Serviceattribute
Batterie
Temperatur
Beleuchtungsstärke

Tür-/Fenstersensor 5

Listener
IF (INDEXOF(sensor5_topic, "shellydw2-deviceid") = 0)
    ADDERROR("Set correct 'sensor5_topic' value in module variables. Topic format is 'shellydw2-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR topicPrefix := "shellies/" + sensor5_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/state") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "open", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "close", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/lux") = 0)
    luminance := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Serviceattribute
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (4)
  • Tilt Angle — Tilt angle in degrees (0-180), DW2 only. Available in MQTT but not mapped in the TapHome listener script.
  • Vibration Detection — Vibration detection (0=none, 1=detected). Configurable sensitivity (high/medium/low). Available in MQTT but not mapped in the TapHome listener script.
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline sensors.
  • Full Status JSON — Complete /status as JSON (fw >=1.8.0). Could parse wifi_sta.rssi, battery, act_reasons.

Quellen