TapHome

Shelly Door/Window 2

Packet Parser → MQTT
Beküldő
Utoljára frissítve: 03. 2026
Shelly Door/Window 2

A Shelly Door/Window 2 (SHDW-2) egy elemes (2x CR123A) Wi-Fi kontaktérzékelő. A TapHome MQTT-n keresztül kommunikál az eszközzel — ez az ajánlott protokoll az elemes Shelly eszközökhöz, mivel az érzékelő az idő nagy részében alvó módban van, és csak ébredési eseményekkor publikál adatokat (mágnes állapotváltozás, rezgés, fényerő változás vagy periodikus időzítő).

A sablon modulonként legfeljebb 5 Shelly Door/Window érzékelőt támogat. Minden érzékelő példányt egy sensorN_topic egyéni változó különböztet meg, amely az eszköz MQTT Client ID-jére mutat.

Konfiguráció

Device ID

Minden Shelly Door/Window 2 érzékelő egyedi MQTT Device ID-vel rendelkezik shellydw2-<MAC6> formátumban, ahol a <MAC6> a MAC-cím utolsó 6 karaktere kisbetűs hexadecimális formában (pl. shellydw2-A1B2C3).

A Device ID megtalálható:

  • Az eszköz címkéjén (MAC-cím)
  • A Shelly webes felületen: SettingsDevice Info
  • API-n keresztül: GET http://<device-ip>/settingsdevice.hostname mező

Ez az eszköz támogatja az mDNS felfedezést. Használhatod a shellydw2-{MAC}.local hostnevet IP-cím helyett a TapHome konfigurálásakor. Cseréld ki a {MAC}-ot az eszköz MAC-címének utolsó 6 karakterére kisbetűs hexadecimálisan (pl. shellydw2-A1B2C3.local). A hostname használata megelőzi a csatlakozási problémákat az eszköz IP-címének változásakor.

Sablon beállítása

A sablon TapHome-ba importálása után:

  1. Nyisd meg a Shelly Door/Window MQTT modult
  2. Állítsd be az MQTT Broker IP-t és a Port-ot (alapértelmezett 1883)
  3. Minden érzékelő példányhoz állítsd be a sensorN_topic egyéni változót a megfelelő Shelly Door/Window 2 Device ID-jére (pl. shellydw2-A1B2C3)

A modul feliratkozik a shellies/# topicra, és a listener szkriptek a konfigurált topic előtag alapján szűrik az üzeneteket.

Csak azokat az érzékelő helyeket konfiguráld, amelyeket ténylegesen használsz. A nem konfigurált helyek (az alapértelmezett shellydw2-deviceid értékkel) hibaüzenetet mutatnak, amely a helyes topic beállítására szólít fel.

Eszközképességek

Nyitás/zárás érzékelés

Minden érzékelő példány Reed Contact eszközként van leképezve a TapHome-ban. Az ajtó/ablak állapot a shellies/<id>/sensor/state topicról olvasható:

  • openRiasztás (ajtó/ablak nyitva)
  • closeOK (ajtó/ablak zárva)

Az érzékelő felébred és publikálja állapotát a mágnes mozgásakor (ajtó vagy ablak nyílik vagy záródik), valamint periodikus jelentési időközönként (alapértelmezetten 3 percenként).

Akkumulátor, hőmérséklet és megvilágítás monitorozás

Minden érzékelő példány három szervizattribútumot biztosít:

  • Akkumulátor — akkumulátor százalékos szint a shellies/<id>/sensor/battery topicról. Alacsony akkumulátor figyelmeztetés 20% alatt.
  • Hőmérséklet — környezeti hőmérséklet °C-ban a shellies/<id>/sensor/temperature topicról.
  • Megvilágítás — környezeti fényszint luxban a shellies/<id>/sensor/lux topicról.

Minden attribútum csak olvasható, és az érzékelő minden felébredésekor frissül.

További képességek (nem implementált)

A Shelly Door/Window 2 dőlésszöget (0–180 fok) és rezgésérzékelést is publikál MQTT-n keresztül, valamint online/offline állapotot az LWT topicon. Ezek a képességek elérhetők az eszköz MQTT kimenetében, de nincsenek leképezve az aktuális TapHome sablonban. Egy jövőbeli sablon frissítésben adhatók hozzá.

Hibaelhárítás

Az érzékelő nem jelent adatokat
  1. Ellenőrizd, hogy a Shelly Door/Window 2 csatlakozik a Wi-Fi-hez és az MQTT engedélyezve van az eszközbeállításokban
  2. Ellenőrizd, hogy a sensorN_topic egyéni változó pontosan megegyezik a Device ID-vel (pl. shellydw2-A1B2C3)
  3. Ha az MQTT broker címe megváltozott, próbáld az mDNS hostnevet (shellydw2-A1B2C3.local) használni az érzékelő hálózati elérhetőségének ellenőrzésére
  4. Használj MQTT klienst (pl. MQTT Explorer) a shellies/# topicra való feliratkozáshoz, és ellenőrizd, hogy az érzékelő üzeneteket publikál felébredéskor
A nyitás/zárás állapot nem frissül
  1. Győződj meg róla, hogy a mágnes megfelelően illeszkedik a fő egységhez — zárt ajtó/ablak esetén a mágnesnek 15 mm-en belül kell lennie az érzékelőtől
  2. Ha az érzékelőt nemrég helyezték át, használd a kalibrációs endpointot (GET http://<device-ip>/calibrate?opened=1) az ajtó/ablak nyitott állapotában az újrakalibráláshoz
  3. Ellenőrizd a TapHome-ban a Reed Contact eszköz állapotát — 1 = nyitva (riasztás), 0 = zárva (OK)
Az elem gyorsan lemerül
  1. A Shelly Door/Window 2 2x CR123A elemet használ (nem újratölthető), tipikus élettartam kb. 18 hónap
  2. Gyakori ébredések (pl. instabil Wi-Fi miatti ismételt csatlakozás vagy nagyon rövid alvási periódus) gyorsabban meríthetik az elemet
  3. Az alapértelmezett alvási periódus 3 perc — növelése a sleep_mode.period beállításon keresztül csökkenti az energiafogyasztást
  4. Biztosíts erős Wi-Fi jelet az érzékelő helyén

A Gen1 Shelly eszközök nem támogatják az MQTT-t TLS-en keresztül. Az érzékelő és az MQTT broker közötti kommunikáció titkosítatlan (plain MQTT, port 1883). Győződj meg róla, hogy az MQTT broker megbízható helyi hálózaton van.

Telepítés a TapHome-ban

Előfeltételek

  • Shelly eszköz csatlakoztatva a Wi-Fi-hez (ha még nem, lásd a HTTP kapcsolódási útmutatót)
  • MQTT broker fut a helyi hálózaton (pl. Mosquitto, Home Assistant vagy a TapHome beépített brokere)
  • TapHome CCU ugyanazon a hálózaton, mint a broker

A Gen1 eszközökön az MQTT engedélyezése letiltja a Shelly Cloudot. A kettő nem futhat egyszerre. A Gen2/Plus eszközökön ez a korlátozás nem érvényes.

1. lépés — MQTT engedélyezése a Shelly eszközön

Gen1 eszközök (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Nyissa meg a Shelly webes felületet: http://<device-ip>/
  2. Navigáljon az Internet & SecurityAdvanced — MQTT menüpontra
  3. Engedélyezze az MQTT-t
  4. Állítsa be az MQTT Server-t: <broker-ip>:<port> (pl. 192.168.1.10:1883)
  5. Opcionálisan állítsa be az MQTT User és MQTT Password mezőket, ha a broker hitelesítést igényel
  6. Kattintson a Save gombra — az eszköz újraindul és csatlakozik a brokerhez

Gen2 / Plus eszközök (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Nyissa meg a Shelly webes felületet: http://<device-ip>/
  2. Navigáljon a SettingsMQTT menüpontra
  3. Engedélyezze az MQTT-t
  4. Állítsa be a Server-t: <broker-ip>:<port> (pl. 192.168.1.10:1883)
  5. A Client ID előre ki van töltve az eszköz azonosítójával (pl. shellyplus1pm-AABBCCDDEE) — hagyja így, hacsak nincs konkrét oka a változtatásra
  6. Kattintson a Save gombra és indítsa újra az eszközt

Az MQTT működésének ellenőrzéséhez használjon egy MQTT klienst (pl. MQTT Explorer), és iratkozzon fel a shellies/# (Gen1) vagy <device-id>/# (Gen2) topikra. Látnia kell az eszköz állapotüzeneteit.

2. lépés — Device ID / MQTT Client ID megkeresése

Egyes sablonok Device ID vagy MQTT Client ID paramétert igényelnek. Ez az egyedi azonosító, amelyet az MQTT topikokban használnak.

  • Gen1: a címkén MAC-címként található (pl. AABBCCDDEE). Device ID = shelly<model>-<mac>, pl. shelly1pm-AABBCCDDEE
  • Gen2/Plus: a Shelly webes felületén a SettingsDevice InfoDevice ID alatt található, vagy az eszköz címkéjén

3. lépés — Konfigurálás a TapHome-ban

  1. A TapHome-ban adjon hozzá egy új Packet Parser (MQTT) modult
  2. IP Address: adja meg az MQTT broker IP-címét (pl. 192.168.1.10)
  3. Port: 1883 (alapértelmezett; TLS esetén használjon 8883-at)
  4. Device ID / MQTT Client ID: adja meg a 2. lépésben kapott értéket (ha a sablon megköveteli)
  5. Importálja a sablont — a TapHome automatikusan feliratkozik az eszköz topikjaira

Elérhető eszközök

Shelly Door/Window MQTT Modul
Egyéni változók
sensor1_topic (string) = shellydw2-deviceidAjtó/ablak érzékelő 1 MQTT eszközazonosítója — formátum: 'shellydw2-DEVICEID' (Shelly webes felület → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellydw2-<last6MAC>
sensor2_topic (string) = shellydw2-deviceidAjtó/ablak érzékelő 2 MQTT eszközazonosítója
sensor3_topic (string) = shellydw2-deviceidAjtó/ablak érzékelő 3 MQTT eszközazonosítója
sensor4_topic (string) = shellydw2-deviceidAjtó/ablak érzékelő 4 MQTT eszközazonosítója
sensor5_topic (string) = shellydw2-deviceidAjtó/ablak érzékelő 5 MQTT eszközazonosítója
Ajtó/ablak érzékelő 1 Reed kontaktus Csak olvasható

Nyitás/zárás érzékelés reed kapcsolóval — riasztást jelez nyitott ajtó/ablak esetén, OK zárva

boolean
Szerviz attribútumok
Akkumulátor
Hőmérséklet
Megvilágítás

Ajtó/ablak érzékelő 1

Figyelő
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
Szerviz attribútumok
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Ajtó/ablak érzékelő 2 Reed kontaktus Csak olvasható

Nyitás/zárás érzékelés reed kapcsolóval — riasztást jelez nyitott ajtó/ablak esetén, OK zárva

boolean
Szerviz attribútumok
Akkumulátor
Hőmérséklet
Megvilágítás

Ajtó/ablak érzékelő 2

Figyelő
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
Szerviz attribútumok
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Ajtó/ablak érzékelő 3 Reed kontaktus Csak olvasható

Nyitás/zárás érzékelés reed kapcsolóval — riasztást jelez nyitott ajtó/ablak esetén, OK zárva

boolean
Szerviz attribútumok
Akkumulátor
Hőmérséklet
Megvilágítás

Ajtó/ablak érzékelő 3

Figyelő
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
Szerviz attribútumok
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Ajtó/ablak érzékelő 4 Reed kontaktus Csak olvasható

Nyitás/zárás érzékelés reed kapcsolóval — riasztást jelez nyitott ajtó/ablak esetén, OK zárva

boolean
Szerviz attribútumok
Akkumulátor
Hőmérséklet
Megvilágítás

Ajtó/ablak érzékelő 4

Figyelő
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
Szerviz attribútumok
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Ajtó/ablak érzékelő 5 Reed kontaktus Csak olvasható

Nyitás/zárás érzékelés reed kapcsolóval — riasztást jelez nyitott ajtó/ablak esetén, OK zárva

boolean
Szerviz attribútumok
Akkumulátor
Hőmérséklet
Megvilágítás

Ajtó/ablak érzékelő 5

Figyelő
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
Szerviz attribútumok
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Kapcsolat: Packet Parser → MQTT
Lehetséges fejlesztések (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.

Források