TapHome

Shelly Door/Window 2

Packet Parser → MQTT
Trimis de
Ultima actualizare: 10. 2026

Acest dispozitiv acceptă mDNS

În loc să folosiți o adresă IP, puteți accesa dispozitivul la:

shellydw2-{MAC}.local

Înlocuiți {MAC} cu adresa MAC a dispozitivului dvs. (majuscule, fără două puncte).

TapHome acceptă mDNS — folosirea unui nume de gazdă este mai fiabilă decât un IP static.

Shelly Door/Window 2

Shelly Door/Window 2 (SHDW-2) este un senzor de contact Wi-Fi alimentat cu baterii (2x CR123A). TapHome comunică cu dispozitivul prin MQTT — protocolul recomandat pentru dispozitivele Shelly cu baterii, deoarece senzorul se află în repaus cea mai mare parte a timpului și publică date doar la trezire (schimbarea stării magnetului, vibrații, schimbarea luminozității sau temporizatorul periodic).

Șablonul acceptă până la 5 senzori Shelly Door/Window per modul. Fiecare senzor este identificat prin variabila personalizată sensorN_topic, care indică ID-ul de client MQTT al dispozitivului.

Configurare

ID-ul dispozitivului

Fiecare senzor Shelly Door/Window 2 are un ID de dispozitiv MQTT unic în formatul shellydw2-<MAC6>, unde <MAC6> reprezintă ultimele 6 caractere ale adresei MAC, în hexazecimal (de ex. shellydw2-A1B2C3).

ID-ul dispozitivului se găsește:

  • Pe eticheta dispozitivului (adresa MAC)
  • În interfața web Shelly: Settings → Device Info
  • Prin API: GET http://<device-ip>/settings → câmpul device.hostname

Acest dispozitiv acceptă descoperirea mDNS. La configurarea TapHome puteți folosi numele de gazdă shellydw2-{MAC}.local în locul adresei IP. Înlocuiți {MAC} cu ultimele 6 caractere ale adresei MAC a dispozitivului, în hexazecimal cu litere mici (de ex. shellydw2-A1B2C3.local). Folosirea numelui de gazdă previne problemele de conectivitate atunci când adresa IP a dispozitivului se schimbă.

Configurarea șablonului

După importul șablonului în TapHome:

  1. Deschideți modulul Shelly Door/Window MQTT
  2. Setați MQTT Broker IP și Port (implicit 1883)
  3. Pentru fiecare senzor, setați variabila personalizată sensorN_topic la ID-ul dispozitivului Shelly Door/Window 2 corespunzător (de ex. shellydw2-A1B2C3)

Modulul se abonează la shellies/#, iar scripturile de ascultare filtrează mesajele după prefixul de topic configurat.

Configurați doar sloturile de senzori pe care le folosiți efectiv. Sloturile neconfigurate (cu valoarea implicită shellydw2-deviceid) afișează un mesaj de eroare care vă solicită să setați topicul corect.

Funcțiile dispozitivului

Detectarea deschiderii/închiderii

Fiecare senzor este mapat în TapHome ca dispozitiv de tip contact reed. Starea ușii/ferestrei se citește din topicul shellies/<id>/sensor/state:

  • open → Alarmă (ușa/fereastra este deschisă)
  • close → OK (ușa/fereastra este închisă)

Senzorul se trezește și își publică starea atunci când magnetul se deplasează (ușa sau fereastra se deschide ori se închide), precum și la intervalele periodice de raportare (implicit la fiecare 3 minute).

Monitorizarea bateriei, a temperaturii și a iluminării

Fiecare senzor oferă trei atribute de service:

  • Baterie — nivelul bateriei în procente, citit din shellies/<id>/sensor/battery. Avertizarea de baterie descărcată se declanșează când nivelul scade sub 20 %.
  • Temperatură — temperatura ambientală în °C, citită din shellies/<id>/sensor/temperature.
  • Iluminare — nivelul luminii ambientale în lucși, citit din shellies/<id>/sensor/lux.

Toate atributele sunt doar pentru citire și se actualizează ori de câte ori senzorul se trezește și publică date.

Funcții suplimentare (neimplementate)

Shelly Door/Window 2 publică prin MQTT și unghiul de înclinare (0–180 de grade) și detectarea vibrațiilor, precum și starea online/offline prin topicul LWT. Aceste funcții sunt disponibile în datele MQTT ale dispozitivului, dar nu sunt mapate în șablonul TapHome actual. Pot fi adăugate într-o actualizare viitoare a șablonului.

Rezolvarea problemelor

Senzorul nu raportează date
  1. Verificați dacă Shelly Door/Window 2 este conectat la Wi-Fi și dacă MQTT este activat în setările dispozitivului
  2. Verificați dacă variabila personalizată sensorN_topic corespunde exact ID-ului dispozitivului (de ex. shellydw2-A1B2C3)
  3. Dacă adresa brokerului MQTT s-a schimbat, actualizați adresa brokerului în setările MQTT ale senzorului (mai întâi treziți senzorul, pentru ca interfața sa web să fie accesibilă)
  4. Folosiți un client MQTT (de ex. MQTT Explorer) pentru a vă abona la shellies/# și verificați dacă senzorul publică mesaje la trezire
Starea deschis/închis nu se actualizează
  1. Asigurați-vă că magnetul este aliniat corect cu unitatea principală — când ușa/fereastra este închisă, magnetul trebuie să fie la cel mult 15 mm de senzor
  2. Dacă senzorul a fost mutat recent, recalibrați-l prin endpointul de calibrare (GET http://<device-ip>/calibrate?opened=1), cu ușa/fereastra în poziția deschisă
  3. Verificați în TapHome starea dispozitivului de tip contact reed — 1 = deschis (alarmă), 0 = închis (OK)
Bateria se descarcă rapid
  1. Shelly Door/Window 2 folosește 2 baterii CR123A (nereîncărcabile), cu o durată de viață tipică de aproximativ 18 luni
  2. Trezirile frecvente (de ex. din cauza unui semnal Wi-Fi instabil, care necesită reconectări repetate, sau a unei perioade de repaus foarte scurte) pot descărca bateria mai repede
  3. Perioada de repaus implicită este de 3 minute — mărirea ei prin sleep_mode.period în setările dispozitivului reduce consumul de energie
  4. Asigurați un semnal Wi-Fi puternic în locul în care este montat senzorul

Dispozitivele Shelly Gen1 nu acceptă MQTT prin TLS. Comunicația dintre senzor și brokerul MQTT nu este criptată (MQTT simplu, portul 1883). Asigurați-vă că brokerul MQTT se află într-o rețea locală de încredere.

Cum se instalează în TapHome

Cerințe preliminare

  • Dispozitiv Shelly conectat la Wi-Fi (2,4 GHz), de ex. prin aplicația Shelly sau prin punctul de acces propriu al dispozitivului
  • Broker MQTT care rulează în rețeaua dvs. locală (de ex. Mosquitto, Home Assistant sau brokerul integrat TapHome)
  • TapHome CCU în aceeași rețea cu brokerul

La dispozitivele Gen1, activarea MQTT dezactivează Shelly Cloud. Cele două nu pot funcționa simultan. La dispozitivele Gen2/Plus această limitare nu se aplică.

Pasul 1 — Activați MQTT pe dispozitivul Shelly

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

  1. Deschideți interfața web Shelly: http://<device-ip>/
  2. Accesați Internet & Security → Advanced — MQTT
  3. Activați MQTT
  4. Setați MQTT Server: <broker-ip>:<port> (de ex. 192.168.1.10:1883)
  5. Opțional, setați MQTT User și MQTT Password, dacă brokerul dvs. necesită autentificare
  6. Faceți clic pe Save — dispozitivul repornește și se conectează la broker

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

  1. Deschideți interfața web Shelly: http://<device-ip>/
  2. Accesați Settings → MQTT
  3. Activați MQTT
  4. Setați Server: <broker-ip>:<port> (de ex. 192.168.1.10:1883)
  5. Câmpul Client ID este precompletat cu ID-ul dispozitivului (de ex. shellyplus1pm-AABBCCDDEE) — lăsați-l neschimbat, dacă nu aveți un motiv anume să îl modificați
  6. Faceți clic pe Save și reporniți dispozitivul

Pentru a verifica funcționarea MQTT, folosiți un client MQTT (de ex. MQTT Explorer) și abonați-vă la shellies/# (Gen1) sau <device-id>/# (Gen2). Ar trebui să vedeți mesajele de stare trimise de dispozitiv.

Pasul 2 — Aflați Device ID / MQTT Client ID

Unele șabloane necesită parametrul Device ID sau MQTT Client ID. Acesta este identificatorul unic folosit în topicurile MQTT.

  • Gen1: se găsește pe etichetă, ca adresă MAC (de ex. AABBCCDDEE). Device ID = shelly<model>-<mac>, de ex. shelly1pm-AABBCCDDEE
  • Gen2/Plus: se găsește în interfața web Shelly, la Settings → Device Info → Device ID, sau pe eticheta dispozitivului

Pasul 3 — Configurați dispozitivul în TapHome

  1. În TapHome adăugați un nou modul Packet Parser (MQTT)
  2. IP Address: introduceți adresa IP a brokerului MQTT (de ex. 192.168.1.10)
  3. Port: 1883 (implicit; pentru TLS folosiți 8883)
  4. Device ID / MQTT Client ID: introduceți valoarea de la pasul 2 (dacă șablonul o necesită)
  5. Importați șablonul — TapHome se abonează automat la topicurile dispozitivului

Dispozitive disponibile

Shelly Door/Window MQTT Modul
Variabile personalizate
sensor1_topic (string) = shellydw2-deviceidID-ul de dispozitiv MQTT al senzorului de ușă/fereastră 1 — formatul este 'shellydw2-DEVICEID' (ID-ul dispozitivului se găsește în interfața web Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellydw2-<last6MAC>
sensor2_topic (string) = shellydw2-deviceidID-ul de dispozitiv MQTT al senzorului de ușă/fereastră 2
sensor3_topic (string) = shellydw2-deviceidID-ul de dispozitiv MQTT al senzorului de ușă/fereastră 3
sensor4_topic (string) = shellydw2-deviceidID-ul de dispozitiv MQTT al senzorului de ușă/fereastră 4
sensor5_topic (string) = shellydw2-deviceidID-ul de dispozitiv MQTT al senzorului de ușă/fereastră 5
Senzor ușă/fereastră 1 Contact reed Doar citire

Detectarea deschiderii/închiderii prin contact reed — raportează alarmă când ușa/fereastra este deschisă și OK când este închisă

boolean
Atribute de service
Baterie
Temperatură
Iluminare

Senzor ușă/fereastră 1

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor ușă/fereastră 2 Contact reed Doar citire

Detectarea deschiderii/închiderii prin contact reed — raportează alarmă când ușa/fereastra este deschisă și OK când este închisă

boolean
Atribute de service
Baterie
Temperatură
Iluminare

Senzor ușă/fereastră 2

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor ușă/fereastră 3 Contact reed Doar citire

Detectarea deschiderii/închiderii prin contact reed — raportează alarmă când ușa/fereastra este deschisă și OK când este închisă

boolean
Atribute de service
Baterie
Temperatură
Iluminare

Senzor ușă/fereastră 3

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor ușă/fereastră 4 Contact reed Doar citire

Detectarea deschiderii/închiderii prin contact reed — raportează alarmă când ușa/fereastra este deschisă și OK când este închisă

boolean
Atribute de service
Baterie
Temperatură
Iluminare

Senzor ușă/fereastră 4

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Senzor ușă/fereastră 5 Contact reed Doar citire

Detectarea deschiderii/închiderii prin contact reed — raportează alarmă când ușa/fereastra este deschisă și OK când este închisă

boolean
Atribute de service
Baterie
Temperatură
Iluminare

Senzor ușă/fereastră 5

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Luminance
luminance + " lux"
Conexiune: Packet Parser → MQTT • Nume gazdă: shellydw2-{MAC}.local
Îmbunătățiri posibile (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.

Surse

Ați găsit o problemă la acest șablon de dispozitiv?

Spuneți-ne ce nu funcționează, ce lipsește sau cum ar trebui să se comporte șablonul. Feedbackul dvs. ne ajută să păstrăm catalogul corect.

Verificat de TapHome

Doriți să folosiți acest șablon în TapHome Core?

Deschideți acest șablon în Customer Portal pentru a-l aplica într-una dintre locuințele dvs. sau pentru a propune o îmbunătățire și a o trimite înapoi în catalog.

Deschideți în portal