TapHome

Shelly Door/Window 2

Packet Parser → MQTT
Přidal
Poslední aktualizace: 06. 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

Našli jste problém s touto šablonou zařízení?

Napište nám, co nefunguje, co chybí, nebo jak by se měla šablona chovat. Vaše zpětná vazba nám pomáhá udržet katalog přesný.

Ověřeno TapHome

Chcete to použít ve svém TapHome jádře?

Otevřete tuto šablonu v zákaznickém portálu a použijte ji ve svém domově, nebo navrhněte úpravu a odešlete ji zpět do katalogu.

Otevřít v portálu