TapHome

Shelly Door/Window 2

Packet Parser → MQTT
Pridal
Posledná aktualizácia: 03. 2026
Shelly Door/Window 2

Shelly Door/Window 2 (SHDW-2) je batériový (2x CR123A) Wi-Fi kontaktný senzor. TapHome komunikuje so zariadením cez MQTT — odporúčaný protokol pre batériové Shelly zariadenia, keďže senzor väčšinu času spí a publikuje dáta len pri udalostiach prebudenia (zmena stavu magnetu, vibrácia, zmena jasu alebo periodický časovač).

Šablóna podporuje až 5 Shelly Door/Window senzorov na modul. Každá inštancia senzora sa rozlišuje custom premennou sensorN_topic ukazujúcou na MQTT Client ID zariadenia.

Konfigurácia

Device ID

Každý senzor Shelly Door/Window 2 má unikátne MQTT Device ID vo formáte shellydw2-<MAC6>, kde <MAC6> je posledných 6 znakov MAC adresy v hexadecimálnom tvare malými písmenami (napr. shellydw2-A1B2C3).

Device ID nájdete:

  • Na štítku zariadenia (MAC adresa)
  • Vo webovom rozhraní Shelly: SettingsDevice Info
  • Cez API: GET http://<device-ip>/settings → pole device.hostname

Toto zariadenie podporuje mDNS objavovanie. Môžete použiť hostname shellydw2-{MAC}.local namiesto IP adresy pri konfigurácii TapHome. Nahraďte {MAC} poslednými 6 znakmi MAC adresy zariadenia malými písmenami (napr. shellydw2-A1B2C3.local). Použitie hostname predchádza problémom s konektivitou pri zmene IP adresy zariadenia.

Nastavenie šablóny

Po importe šablóny v TapHome:

  1. Otvorte modul Shelly Door/Window MQTT
  2. Nastavte MQTT Broker IP a Port (predvolene 1883)
  3. Pre každú inštanciu senzora nastavte custom premennú sensorN_topic na Device ID zodpovedajúceho Shelly Door/Window 2 (napr. shellydw2-A1B2C3)

Modul sa prihlási na odber shellies/# a listenerové skripty filtrujú správy podľa nakonfigurovaného prefixu topicu.

Konfigurujte len sloty senzorov, ktoré skutočne používate. Nenakonfigurované sloty (s predvolenou hodnotou shellydw2-deviceid) zobrazia chybovú správu vyzývajúcu na nastavenie správneho topicu.

Schopnosti zariadenia

Detekcia otvorenia/zatvorenia

Každá inštancia senzora je mapovaná ako zariadenie Reed Contact v TapHome. Stav dverí/okna sa číta z topicu shellies/<id>/sensor/state:

  • openAlarm (dvere/okno otvorené)
  • closeOK (dvere/okno zatvorené)

Senzor sa prebudí a publikuje svoj stav pri pohybe magnetu (dvere alebo okno sa otvoria alebo zatvoria), a tiež počas periodických intervalov hlásení (predvolene každé 3 minúty).

Monitorovanie batérie, teploty a osvetlenia

Každá inštancia senzora poskytuje tri servisné atribúty:

  • Batéria — percentuálna úroveň batérie čítaná z shellies/<id>/sensor/battery. Varovanie o nízkej batérii sa spustí pri poklese pod 20 %.
  • Teplota — okoliná teplota v °C čítaná z shellies/<id>/sensor/temperature.
  • Osvetlenie — úroveň okolitého svetla v luxoch čítaná z shellies/<id>/sensor/lux.

Všetky atribúty sú len na čítanie a aktualizujú sa pri každom prebudení senzora a publikovaní dát.

Ďalšie schopnosti (neimplementované)

Shelly Door/Window 2 tiež publikuje uhol náklonu (0–180 stupňov) a detekciu vibrácií cez MQTT, ako aj stav online/offline cez LWT topic. Tieto schopnosti sú dostupné vo výstupe MQTT zariadenia, ale nie sú mapované v aktuálnej TapHome šablóne. Môžu byť pridané v budúcej aktualizácii šablóny.

Riešenie problémov

Senzor nehlási dáta
  1. Overte, že Shelly Door/Window 2 je pripojený k Wi-Fi a MQTT je povolené v nastaveniach zariadenia
  2. Skontrolujte, že custom premenná sensorN_topic presne zodpovedá Device ID (napr. shellydw2-A1B2C3)
  3. Ak sa zmenila adresa MQTT brokera, skúste použiť mDNS hostname (shellydw2-A1B2C3.local) na overenie, že senzor je dostupný v sieti
  4. Použite MQTT klienta (napr. MQTT Explorer) na prihlásenie odberu shellies/# a overte, že senzor publikuje správy pri prebudení
Stav otvorenia/zatvorenia sa neaktualizuje
  1. Uistite sa, že magnet je správne zarovnaný s hlavnou jednotkou — keď sú dvere/okno zatvorené, magnet by mal byť do 15 mm od senzora
  2. Ak bol senzor nedávno presunutý, použite kalibračný endpoint (GET http://<device-ip>/calibrate?opened=1) s dverami/oknom v otvorenej polohe na rekalibráciu
  3. Skontrolujte v TapHome stav zariadenia Reed Contact — 1 = otvorené (alarm), 0 = zatvorené (OK)
Batéria sa rýchlo vybíja
  1. Shelly Door/Window 2 používa 2x CR123A batérie (nie nabíjateľné) s typickou výdržou približne 18 mesiacov
  2. Časté prebúdzania (napr. kvôli nestabilnému Wi-Fi vyžadujúcemu opakované pripájanie alebo veľmi krátkej perióde spánku) môžu batériu vybiť rýchlejšie
  3. Predvolená perióda spánku je 3 minúty — jej zvýšenie cez sleep_mode.period v nastaveniach zariadenia znižuje spotrebu energie
  4. Zabezpečte silný Wi-Fi signál na mieste senzora

Gen1 Shelly zariadenia nepodporujú MQTT cez TLS. Komunikácia medzi senzorom a MQTT brokerom je nešifrovaná (plain MQTT, port 1883). Zabezpečte, aby bol MQTT broker v dôveryhodnej lokálnej sieti.

Ako nainštalovať v TapHome

Predpoklady

  • Zariadenie Shelly pripojené k Wi-Fi (ak ešte nie, pozrite návod na HTTP pripojenie)
  • MQTT broker bežiaci vo vašej lokálnej sieti (napr. Mosquitto, Home Assistant alebo vstavaný broker TapHome)
  • TapHome CCU v rovnakej sieti ako broker

Na zariadeniach Gen1 povolenie MQTT vypne Shelly Cloud. Oboje nemôže bežať súčasne. Na zariadeniach Gen2/Plus toto obmedzenie neplatí.

Krok 1 — Povoľte MQTT na zariadení Shelly

Zariadenia Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na Internet & SecurityAdvanced — MQTT
  3. Povoľte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Voliteľne nastavte MQTT User a MQTT Password, ak váš broker vyžaduje autentifikáciu
  6. Kliknite na Save — zariadenie sa reštartuje a pripojí k brokeru

Zariadenia Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na SettingsMQTT
  3. Povoľte MQTT
  4. Nastavte Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Client ID je predvyplnené ID zariadenia (napr. shellyplus1pm-AABBCCDDEE) — ponechajte tak, pokiaľ nemáte konkrétny dôvod na zmenu
  6. Kliknite na Save a reštartujte zariadenie

Na overenie funkčnosti MQTT použite MQTT klienta (napr. MQTT Explorer) a prihláste sa na odber shellies/# (Gen1) alebo <device-id>/# (Gen2). Mali by ste vidieť stavové správy zo zariadenia.

Krok 2 — Zistite Device ID / MQTT Client ID

Niektoré šablóny vyžadujú parameter Device ID alebo MQTT Client ID. Ide o jedinečný identifikátor používaný v MQTT topicoch.

  • Gen1: nachádza sa na štítku ako MAC adresa (napr. AABBCCDDEE). Device ID = shelly<model>-<mac>, napr. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachádza sa vo webovom rozhraní Shelly v časti SettingsDevice InfoDevice ID, alebo na štítku zariadenia

Krok 3 — Konfigurácia v TapHome

  1. V TapHome pridajte nový modul Packet Parser (MQTT)
  2. IP Address: zadajte IP adresu MQTT brokera (napr. 192.168.1.10)
  3. Port: 1883 (predvolený; pre TLS použite 8883)
  4. Device ID / MQTT Client ID: zadajte hodnotu z kroku 2 (ak to šablóna vyžaduje)
  5. Importujte šablónu — TapHome sa automaticky prihlási na odber topicov zariadenia

Dostupné zariadenia

Shelly Door/Window MQTT Modul
Vlastné premenné
sensor1_topic (string) = shellydw2-deviceidMQTT identifikátor senzora dverí/okien 1 — formát je 'shellydw2-DEVICEID' (nájdete vo webovom rozhraní Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellydw2-<last6MAC>
sensor2_topic (string) = shellydw2-deviceidMQTT identifikátor senzora dverí/okien 2
sensor3_topic (string) = shellydw2-deviceidMQTT identifikátor senzora dverí/okien 3
sensor4_topic (string) = shellydw2-deviceidMQTT identifikátor senzora dverí/okien 4
sensor5_topic (string) = shellydw2-deviceidMQTT identifikátor senzora dverí/okien 5
Senzor dverí/okien 1 Jazýčkový kontakt Len na čítanie

Detekcia otvorenia/zatvorenia cez jazýčkový spínač — hlási alarm keď sú dvere/okno otvorené, OK keď zatvorené

boolean
Servisné atribúty
Batéria
Teplota
Osvetlenie

Senzor dverí/okien 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é atribúty
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dverí/okien 2 Jazýčkový kontakt Len na čítanie

Detekcia otvorenia/zatvorenia cez jazýčkový spínač — hlási alarm keď sú dvere/okno otvorené, OK keď zatvorené

boolean
Servisné atribúty
Batéria
Teplota
Osvetlenie

Senzor dverí/okien 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é atribúty
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dverí/okien 3 Jazýčkový kontakt Len na čítanie

Detekcia otvorenia/zatvorenia cez jazýčkový spínač — hlási alarm keď sú dvere/okno otvorené, OK keď zatvorené

boolean
Servisné atribúty
Batéria
Teplota
Osvetlenie

Senzor dverí/okien 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é atribúty
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dverí/okien 4 Jazýčkový kontakt Len na čítanie

Detekcia otvorenia/zatvorenia cez jazýčkový spínač — hlási alarm keď sú dvere/okno otvorené, OK keď zatvorené

boolean
Servisné atribúty
Batéria
Teplota
Osvetlenie

Senzor dverí/okien 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é atribúty
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor dverí/okien 5 Jazýčkový kontakt Len na čítanie

Detekcia otvorenia/zatvorenia cez jazýčkový spínač — hlási alarm keď sú dvere/okno otvorené, OK keď zatvorené

boolean
Servisné atribúty
Batéria
Teplota
Osvetlenie

Senzor dverí/okien 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é atribúty
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Pripojenie: Packet Parser → MQTT
Možné vylepšenia (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