TapHome

Shelly Door/Window 2

Packet Parser → MQTT
Přidal
Poslední aktualizace: 03. 2026
Shelly Door/Window 2

Shelly Door/Window 2 (SHDW-2) je bateriový (2x CR123A) Wi-Fi kontaktní senzor. TapHome komunikuje se zařízením přes MQTT — doporučený protokol pro bateriová Shelly zařízení, protože senzor většinu času spí a publikuje data pouze při událostech probuzení (změna stavu magnetu, vibrace, změna jasu nebo periodický časovač).

Šablona podporuje až 5 Shelly Door/Window senzorů na modul. Každá instance senzoru se rozlišuje custom proměnnou sensorN_topic ukazující na MQTT Client ID zařízení.

Konfigurace

Device ID

Každý senzor Shelly Door/Window 2 má unikátní MQTT Device ID ve formátu shellydw2-<MAC6>, kde <MAC6> je posledních 6 znaků MAC adresy v hexadecimálním tvaru malými písmeny (např. shellydw2-A1B2C3).

Device ID najdete:

  • Na štítku zařízení (MAC adresa)
  • Ve webovém rozhraní Shelly: SettingsDevice Info
  • Přes API: GET http://<device-ip>/settings → pole device.hostname

Toto zařízení podporuje mDNS objevování. Můžete použít hostname shellydw2-{MAC}.local místo IP adresy při konfiguraci TapHome. Nahraďte {MAC} posledními 6 znaky MAC adresy zařízení malými písmeny (např. shellydw2-A1B2C3.local). Použití hostname předchází problémům s konektivitou při změně IP adresy zařízení.

Nastavení šablony

Po importu šablony v TapHome:

  1. Otevřete modul Shelly Door/Window MQTT
  2. Nastavte MQTT Broker IP a Port (výchozí 1883)
  3. Pro každou instanci senzoru nastavte custom proměnnou sensorN_topic na Device ID odpovídajícího Shelly Door/Window 2 (např. shellydw2-A1B2C3)

Modul se přihlásí k odběru shellies/# a listenerové skripty filtrují zprávy podle nakonfigurovaného prefixu topicu.

Konfigurujte pouze sloty senzorů, které skutečně používáte. Nenakonfigurované sloty (s výchozí hodnotou shellydw2-deviceid) zobrazí chybovou zprávu vyzývající k nastavení správného topicu.

Schopnosti zařízení

Detekce otevření/zavření

Každá instance senzoru je mapována jako zařízení Reed Contact v TapHome. Stav dveří/okna se čte z topicu shellies/<id>/sensor/state:

  • openAlarm (dveře/okno otevřené)
  • closeOK (dveře/okno zavřené)

Senzor se probudí a publikuje svůj stav při pohybu magnetu (dveře nebo okno se otevřou nebo zavřou), a také během periodických intervalů hlášení (výchozí každé 3 minuty).

Monitorování baterie, teploty a osvětlení

Každá instance senzoru poskytuje tři servisní atributy:

  • Baterie — procentuální úroveň baterie čtená z shellies/<id>/sensor/battery. Varování o nízké baterii se spustí při poklesu pod 20 %.
  • Teplota — okolní teplota v °C čtená z shellies/<id>/sensor/temperature.
  • Osvětlení — úroveň okolního světla v luxech čtená z shellies/<id>/sensor/lux.

Všechny atributy jsou pouze ke čtení a aktualizují se při každém probuzení senzoru a publikování dat.

Další schopnosti (neimplementované)

Shelly Door/Window 2 také publikuje úhel náklonu (0–180 stupňů) a detekci vibrací přes MQTT, jakož i stav online/offline přes LWT topic. Tyto schopnosti jsou dostupné ve výstupu MQTT zařízení, ale nejsou mapovány v aktuální TapHome šabloně. Mohou být přidány v budoucí aktualizaci šablony.

Řešení problémů

Senzor nehlásí data
  1. Ověřte, že Shelly Door/Window 2 je připojen k Wi-Fi a MQTT je povoleno v nastavení zařízení
  2. Zkontrolujte, že custom proměnná sensorN_topic přesně odpovídá Device ID (např. shellydw2-A1B2C3)
  3. Pokud se změnila adresa MQTT brokeru, zkuste použít mDNS hostname (shellydw2-A1B2C3.local) pro ověření, že senzor je dostupný v síti
  4. Použijte MQTT klienta (např. MQTT Explorer) pro přihlášení k odběru shellies/# a ověřte, že senzor publikuje zprávy při probuzení
Stav otevření/zavření se neaktualizuje
  1. Ujistěte se, že magnet je správně zarovnán s hlavní jednotkou — když jsou dveře/okno zavřené, magnet by měl být do 15 mm od senzoru
  2. Pokud byl senzor nedávno přesunut, použijte kalibrační endpoint (GET http://<device-ip>/calibrate?opened=1) s dveřmi/oknem v otevřené poloze pro rekalibraci
  3. Zkontrolujte v TapHome stav zařízení Reed Contact — 1 = otevřené (alarm), 0 = zavřené (OK)
Baterie se rychle vybíjí
  1. Shelly Door/Window 2 používá 2x CR123A baterie (ne dobíjecí) s typickou výdrží přibližně 18 měsíců
  2. Časté probuzení (např. kvůli nestabilnímu Wi-Fi vyžadujícímu opakované připojování nebo velmi krátké periodě spánku) může baterii vybít rychleji
  3. Výchozí perioda spánku je 3 minuty — její zvýšení přes sleep_mode.period v nastavení zařízení snižuje spotřebu energie
  4. Zajistěte silný Wi-Fi signál v místě senzoru

Gen1 Shelly zařízení nepodporují MQTT přes TLS. Komunikace mezi senzorem a MQTT brokerem je nešifrovaná (plain MQTT, port 1883). Zajistěte, aby MQTT broker byl v důvěryhodné lokální síti.

Jak nainstalovat v TapHome

Předpoklady

  • Zařízení Shelly připojené k Wi-Fi (pokud ještě ne, podívejte se na návod na HTTP připojení)
  • MQTT broker běžící ve vaší lokální síti (např. Mosquitto, Home Assistant nebo vestavěný broker TapHome)
  • TapHome CCU ve stejné síti jako broker

Na zařízeních Gen1 povolení MQTT vypne Shelly Cloud. Obojí nemůže běžet současně. Na zařízeních Gen2/Plus toto omezení neplatí.

Krok 1 — Povolte MQTT na zařízení Shelly

Zařízení Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otevřete webové rozhraní Shelly: http://<device-ip>/
  2. Přejděte na Internet & SecurityAdvanced — MQTT
  3. Povolte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (např. 192.168.1.10:1883)
  5. Volitelně nastavte MQTT User a MQTT Password, pokud váš broker vyžaduje autentifikaci
  6. Klikněte na Save — zařízení se restartuje a připojí k brokeru

Zařízení Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otevřete webové rozhraní Shelly: http://<device-ip>/
  2. Přejděte na SettingsMQTT
  3. Povolte MQTT
  4. Nastavte Server: <broker-ip>:<port> (např. 192.168.1.10:1883)
  5. Client ID je předvyplněné ID zařízení (např. shellyplus1pm-AABBCCDDEE) — ponechte tak, pokud nemáte konkrétní důvod ke změně
  6. Klikněte na Save a restartujte zařízení

Pro ověření funkčnosti MQTT použijte MQTT klienta (např. MQTT Explorer) a přihlaste se k odběru shellies/# (Gen1) nebo <device-id>/# (Gen2). Měli byste vidět stavové zprávy ze zařízení.

Krok 2 — Zjistěte Device ID / MQTT Client ID

Některé šablony vyžadují parametr Device ID nebo MQTT Client ID. Jde o jedinečný identifikátor používaný v MQTT topicích.

  • Gen1: nachází se na štítku jako MAC adresa (např. AABBCCDDEE). Device ID = shelly<model>-<mac>, např. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachází se ve webovém rozhraní Shelly v části SettingsDevice InfoDevice ID, nebo na štítku zařízení

Krok 3 — Konfigurace v TapHome

  1. V TapHome přidejte nový modul Packet Parser (MQTT)
  2. IP Address: zadejte IP adresu MQTT brokeru (např. 192.168.1.10)
  3. Port: 1883 (výchozí; pro TLS použijte 8883)
  4. Device ID / MQTT Client ID: zadejte hodnotu z kroku 2 (pokud to šablona vyžaduje)
  5. Importujte šablonu — TapHome se automaticky přihlásí k odběru topiců zařízení

Dostupná zařízení

Shelly Door/Window MQTT Modul
Vlastní proměnné
sensor1_topic (string) = shellydw2-deviceidMQTT identifikátor senzoru dveří/oken 1 — formát je 'shellydw2-DEVICEID' (najdete ve webovém rozhraní Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellydw2-<last6MAC>
sensor2_topic (string) = shellydw2-deviceidMQTT identifikátor senzoru dveří/oken 2
sensor3_topic (string) = shellydw2-deviceidMQTT identifikátor senzoru dveří/oken 3
sensor4_topic (string) = shellydw2-deviceidMQTT identifikátor senzoru dveří/oken 4
sensor5_topic (string) = shellydw2-deviceidMQTT identifikátor senzoru dveří/oken 5
Senzor dveří/oken 1 Jazýčkový kontakt Pouze ke čtení

Detekce otevření/zavření přes jazýčkový spínač — hlásí alarm když jsou dveře/okno otevřené, OK když zavřené

boolean
Servisní atributy
Baterie
Teplota
Osvětlení

Senzor dveří/oken 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
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dveří/oken 2 Jazýčkový kontakt Pouze ke čtení

Detekce otevření/zavření přes jazýčkový spínač — hlásí alarm když jsou dveře/okno otevřené, OK když zavřené

boolean
Servisní atributy
Baterie
Teplota
Osvětlení

Senzor dveří/oken 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
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dveří/oken 3 Jazýčkový kontakt Pouze ke čtení

Detekce otevření/zavření přes jazýčkový spínač — hlásí alarm když jsou dveře/okno otevřené, OK když zavřené

boolean
Servisní atributy
Baterie
Teplota
Osvětlení

Senzor dveří/oken 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
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dveří/oken 4 Jazýčkový kontakt Pouze ke čtení

Detekce otevření/zavření přes jazýčkový spínač — hlásí alarm když jsou dveře/okno otevřené, OK když zavřené

boolean
Servisní atributy
Baterie
Teplota
Osvětlení

Senzor dveří/oken 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
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dveří/oken 5 Jazýčkový kontakt Pouze ke čtení

Detekce otevření/zavření přes jazýčkový spínač — hlásí alarm když jsou dveře/okno otevřené, OK když zavřené

boolean
Servisní atributy
Baterie
Teplota
Osvětlení

Senzor dveří/oken 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
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Připojení: Packet Parser → MQTT
Možná vylepšení (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.

Zdroje