---
title: "Shelly Door/Window 2"
description: "Sensore di contatto Shelly Door/Window 2 tramite MQTT. Rileva apertura/chiusura e riporta temperatura, luminanza e livello batteria in TapHome."
url: "https://taphome.com/it/compatibility/shelly-door-window-mqtt/"
language: it
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["mqtt","sensor","wifi","door-window-detection","battery-powered","contact-sensor"]
  questions: ["Come integrare Shelly Door/Window 2 con TapHome tramite MQTT?","Cosa rileva il template Shelly Door/Window 2 in TapHome?","Come configurare più sensori Shelly Door/Window in un template TapHome?","Perché il mio sensore Shelly Door/Window non segnala dati?","Come trovare l'MQTT Device ID dello Shelly Door/Window 2?","Shelly Door/Window 2 riporta livello batteria, temperatura e luminanza in TapHome?","Shelly Door/Window 2 può rilevare inclinazione e vibrazione in TapHome?"]
---

# Shelly Door/Window 2

Comunicazione: Packet Parser → MQTT

- [Pagina prodotto Shelly Door/Window 2](https://www.shelly.com/en/products/shop/shelly-door-window-2)

> Indirizzo di rete
> 
> Con il broker MQTT integrato in TapHome, inserisci `127.0.0.1` come indirizzo del broker in TapHome. Nel dispositivo inserisci l’indirizzo IP del TapHome Core e assegna al Core una prenotazione IP nel router.
> 
> [Preparazione della rete](https://taphome.com/it/docs/setup/network-preparation/)

## Guida all'integrazione

Lo Shelly Door/Window 2 (SHDW-2) è un sensore di contatto Wi-Fi alimentato a batteria (2x CR123A). TapHome comunica con il dispositivo tramite MQTT — il protocollo consigliato per dispositivi Shelly a batteria, poiché il sensore è in modalità sleep la maggior parte del tempo e pubblica dati solo al risveglio (cambio stato magnete, vibrazione, cambio luminosità o timer periodico).

Il template supporta fino a 5 sensori Shelly Door/Window per modulo. Ogni istanza del sensore è distinta da una variabile personalizzata `sensorN_topic` che punta al MQTT Client ID del dispositivo.

## Configurazione

### Device ID

Ogni sensore Shelly Door/Window 2 ha un MQTT Device ID univoco nel formato `shellydw2-<MAC6>`, dove `<MAC6>` sono gli ultimi 6 caratteri dell'indirizzo MAC in esadecimale (es. `shellydw2-A1B2C3`).

Il Device ID si trova:

- Sull'etichetta del dispositivo (indirizzo MAC)
- Nell'interfaccia web Shelly: **Settings** → **Device Info**
- Tramite API: `GET http://<device-ip>/settings` → campo `device.hostname`

> [!TIP]
> Questo dispositivo supporta la **scoperta mDNS**. Puoi usare l'hostname `shellydw2-{MAC}.local` invece dell'indirizzo IP nella configurazione TapHome. Sostituisci `{MAC}` con gli ultimi 6 caratteri dell'indirizzo MAC in minuscolo (es. `shellydw2-A1B2C3.local`). L'uso dell'hostname previene problemi di connettività al cambio dell'indirizzo IP.

### Configurazione del template

Dopo l'importazione del template in TapHome:

1. Apri il modulo **Shelly Door/Window MQTT**
2. Imposta l'**MQTT Broker IP** e la **Port** (predefinita `1883`)
3. Per ogni istanza del sensore, imposta la variabile `sensorN_topic` sul Device ID dello Shelly Door/Window 2 corrispondente (es. `shellydw2-A1B2C3`)

Il modulo si iscrive a `shellies/#` e gli script listener filtrano i messaggi in base al prefisso topic configurato.

> [!TIP]
> Configura solo gli slot sensore che utilizzi effettivamente. Gli slot non configurati (con il valore predefinito `shellydw2-deviceid`) mostreranno un messaggio di errore che invita a impostare il topic corretto.

## Capacità del dispositivo

### Rilevamento apertura/chiusura

Ogni istanza del sensore è mappata come dispositivo Reed Contact in TapHome. Lo stato porta/finestra viene letto dal topic `shellies/<id>/sensor/state`:

- `open` → **Allarme** (porta/finestra aperta)
- `close` → **OK** (porta/finestra chiusa)

Il sensore si sveglia e pubblica il suo stato al movimento del magnete (porta o finestra si apre o chiude), e anche durante gli intervalli di segnalazione periodici (predefinito ogni 3 minuti).

### Monitoraggio batteria, temperatura e luminanza

Ogni istanza espone tre attributi di servizio:

- **Batteria** — livello percentuale batteria da `shellies/<id>/sensor/battery`. Avviso batteria scarica sotto il 20%.
- **Temperatura** — temperatura ambiente in °C da `shellies/<id>/sensor/temperature`.
- **Luminanza** — livello luce ambiente in lux da `shellies/<id>/sensor/lux`.

Tutti gli attributi sono in sola lettura e si aggiornano ad ogni risveglio del sensore.

### Capacità aggiuntive (non implementate)

Lo Shelly Door/Window 2 pubblica anche **angolo di inclinazione** (0–180 gradi) e **rilevamento vibrazioni** tramite MQTT, nonché stato online/offline tramite il topic LWT. Queste capacità sono disponibili nell'output MQTT del dispositivo ma non sono mappate nel template TapHome attuale. Possono essere aggiunte in un futuro aggiornamento.

## Risoluzione dei problemi

### Il sensore non segnala dati

1. Verifica che lo Shelly Door/Window 2 sia connesso al Wi-Fi e MQTT sia abilitato nelle impostazioni
2. Controlla che la variabile `sensorN_topic` corrisponda esattamente al Device ID (es. `shellydw2-A1B2C3`)
3. Se l'indirizzo del broker MQTT è cambiato, aggiorna l'indirizzo del broker nelle impostazioni MQTT del sensore (prima risveglia il sensore, così che la sua interfaccia web sia raggiungibile)
4. Usa un client MQTT (es. MQTT Explorer) per iscriverti a `shellies/#` e verifica che il sensore pubblichi messaggi al risveglio

### Lo stato apertura/chiusura non si aggiorna

1. Assicurati che il magnete sia allineato correttamente con l'unità principale — a porta/finestra chiusa, il magnete deve essere entro 15 mm dal sensore
2. Se il sensore è stato spostato recentemente, usa l'endpoint di calibrazione (`GET http://<device-ip>/calibrate?opened=1`) con porta/finestra in posizione aperta
3. Controlla lo stato del dispositivo Reed Contact in TapHome — 1 = aperto (allarme), 0 = chiuso (OK)

### La batteria si scarica rapidamente

1. Shelly Door/Window 2 usa 2x CR123A (non ricaricabili), durata tipica circa 18 mesi
2. Risvegli frequenti (Wi-Fi instabile o periodo di sleep molto breve) possono scaricare la batteria più velocemente
3. Il periodo di sleep predefinito è 3 minuti — aumentarlo tramite `sleep_mode.period` riduce il consumo
4. Assicura un segnale Wi-Fi forte nella posizione del sensore

> [!WARNING]
> I dispositivi Shelly Gen1 **non supportano** MQTT su TLS. La comunicazione tra sensore e broker MQTT non è crittografata (plain MQTT, porta 1883). Assicurati che il broker MQTT sia su una rete locale affidabile.

## Come installare in TapHome

### Prerequisiti

- Dispositivo Shelly connesso al Wi-Fi (2,4 GHz), ad es. tramite l'app Shelly o l'access point del dispositivo stesso
- Broker MQTT attivo sulla rete locale (es. Mosquitto, Home Assistant o il broker integrato di TapHome)
- TapHome CCU sulla stessa rete del broker

> [!WARNING]
> Sui dispositivi **Gen1**, l'attivazione di MQTT **disabilita Shelly Cloud**. Entrambi non possono funzionare contemporaneamente. Sui dispositivi Gen2/Plus questa limitazione non si applica.

### Passaggio 1 — Abilitare MQTT sul dispositivo Shelly

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

1. Apri l'interfaccia web Shelly: `http://<device-ip>/`
2. Vai su **Internet & Security** → **Advanced — MQTT**
3. Abilita **MQTT**
4. Imposta **MQTT Server**: `<broker-ip>:<port>` (es. `192.168.1.10:1883`)
5. Opzionalmente imposta **MQTT User** e **MQTT Password** se il broker richiede l'autenticazione
6. Clicca su **Save** — il dispositivo si riavvierà e si connetterà al broker

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

1. Apri l'interfaccia web Shelly: `http://<device-ip>/`
2. Vai su **Settings** → **MQTT**
3. Abilita **MQTT**
4. Imposta **Server**: `<broker-ip>:<port>` (es. `192.168.1.10:1883`)
5. Il **Client ID** è precompilato con l'ID del dispositivo (es. `shellyplus1pm-AABBCCDDEE`) — lascialo così a meno che tu non abbia un motivo specifico per cambiarlo
6. Clicca su **Save** e riavvia il dispositivo

Con il broker integrato di TapHome, `<broker-ip>` è l'indirizzo IP del TapHome Core. Assegna al Core una prenotazione IP nel router, altrimenti il dispositivo perde il broker quando il router cambia l'indirizzo → [Preparazione della rete](https://taphome.com/it/docs/setup/network-preparation/).

> [!TIP]
> Per verificare che MQTT funzioni, usa un client MQTT (es. MQTT Explorer) e sottoscrivi `shellies/#` (Gen1) o `<device-id>/#` (Gen2). Dovresti vedere i messaggi di stato dal dispositivo.

### Passaggio 2 — Trovare il Device ID / MQTT Client ID

Alcuni template richiedono un parametro **Device ID** o **MQTT Client ID**. Questo è l'identificatore univoco utilizzato nei topic MQTT.

- **Gen1:** si trova sull'etichetta come indirizzo MAC (es. `AABBCCDDEE`). Device ID = `shelly<model>-<mac>`, es. `shelly1pm-AABBCCDDEE`
- **Gen2/Plus:** si trova nell'interfaccia web Shelly sotto **Settings** → **Device Info** → **Device ID**, oppure sull'etichetta del dispositivo

### Passaggio 3 — Configurazione in TapHome

1. In TapHome, aggiungi un nuovo modulo **Packet Parser (MQTT)**
2. **IP Address:** `127.0.0.1` per il broker integrato di TapHome (l'unità di controllo si connette a sé stessa, l'indirizzo non cambia mai); per un broker esterno il suo indirizzo IP (es. `192.168.1.10`)
3. **Port:** `1883` (predefinito; usa `8883` per TLS)
4. **Device ID / MQTT Client ID:** inserisci il valore dal passaggio 2 (se richiesto dal template)
5. Importa il template — TapHome si sottoscriverà automaticamente ai topic del dispositivo

## Dispositivi disponibili 5

Questi dispositivi compaiono in TapHome dopo l'importazione.

Shelly Door/Window MQTT Modulo

Variabili personalizzate

`sensor1_topic` (string) = shellydw2-deviceid ID dispositivo MQTT del sensore porta/finestra 1 — formato: 'shellydw2-DEVICEID' (nell'interfaccia web Shelly → Settings → Device Info)

Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellydw2-&lt;last6MAC&gt;

`sensor2_topic` (string) = shellydw2-deviceid ID dispositivo MQTT del sensore porta/finestra 2 

`sensor3_topic` (string) = shellydw2-deviceid ID dispositivo MQTT del sensore porta/finestra 3 

`sensor4_topic` (string) = shellydw2-deviceid ID dispositivo MQTT del sensore porta/finestra 4 

`sensor5_topic` (string) = shellydw2-deviceid ID dispositivo MQTT del sensore porta/finestra 5

Sensore porta/finestra 1 Contatto reed Solo lettura

Rilevamento apertura/chiusura tramite contatto reed — segnala allarme quando porta/finestra aperta, OK quando chiusa

boolean

Attributi di servizio

|             |
|-------------|
| Batteria    |
| Temperatura |
| Luminanza   |

Listener

```taphome
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
```

Attributi di servizio

Battery

```taphome
battery + "%"
```

Temperature

```taphome
temp + "°C"
```

Luminance

```taphome
luminance + " lux"
```

Sensore porta/finestra 2 Contatto reed Solo lettura

Rilevamento apertura/chiusura tramite contatto reed — segnala allarme quando porta/finestra aperta, OK quando chiusa

boolean

Attributi di servizio

|             |
|-------------|
| Batteria    |
| Temperatura |
| Luminanza   |

Listener

```taphome
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
```

Attributi di servizio

Battery

```taphome
battery + "%"
```

Temperature

```taphome
temp + "°C"
```

Luminance

```taphome
luminance + " lux"
```

Sensore porta/finestra 3 Contatto reed Solo lettura

Rilevamento apertura/chiusura tramite contatto reed — segnala allarme quando porta/finestra aperta, OK quando chiusa

boolean

Attributi di servizio

|             |
|-------------|
| Batteria    |
| Temperatura |
| Luminanza   |

Listener

```taphome
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
```

Attributi di servizio

Battery

```taphome
battery + "%"
```

Temperature

```taphome
temp + "°C"
```

Luminance

```taphome
luminance + " lux"
```

Sensore porta/finestra 4 Contatto reed Solo lettura

Rilevamento apertura/chiusura tramite contatto reed — segnala allarme quando porta/finestra aperta, OK quando chiusa

boolean

Attributi di servizio

|             |
|-------------|
| Batteria    |
| Temperatura |
| Luminanza   |

Listener

```taphome
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
```

Attributi di servizio

Battery

```taphome
battery + "%"
```

Temperature

```taphome
temp + "°C"
```

Luminance

```taphome
luminance + " lux"
```

Sensore porta/finestra 5 Contatto reed Solo lettura

Rilevamento apertura/chiusura tramite contatto reed — segnala allarme quando porta/finestra aperta, OK quando chiusa

boolean

Attributi di servizio

|             |
|-------------|
| Batteria    |
| Temperatura |
| Luminanza   |

Listener

```taphome
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
```

Attributi di servizio

Battery

```taphome
battery + "%"
```

Temperature

```taphome
temp + "°C"
```

Luminance

```taphome
luminance + " lux"
```

**Connessione:** Packet Parser → MQTT • Hostname: `shellydw2-{MAC}.local`

Possibili miglioramenti (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 &gt;=1.8.0). Could parse wifi\_sta.rssi, battery, act\_reasons.

## Parametri di importazione

Inserisci questi valori quando importi l'XML.

| Richiesto nell'app       | Predefinito   |
|--------------------------|---------------|
| Mqtt Broker Indirizzo IP | `192.168.0.1` |
| Mqtt Broker port         | `1883`        |

## Fonti

- Shelly Gen1 API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/) 2026-03-12
- Home Assistant Shelly Integration
  
  [www.home-assistant.io](https://www.home-assistant.io/integrations/shelly/) 2026-03-12
- Shelly Door/Window 2 — Device-Specific API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-door-window-1-2) 2026-03-30
- Shelly Door/Window 2 — Knowledge Base
  
  [kb.shelly.cloud](https://kb.shelly.cloud/knowledge-base/shelly-door-window-2) 2026-03-30

## Documentazione correlata

- [MQTT Integration](https://taphome.com/it/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/it/docs/integration/packet-parser/)
- [Funzioni Packet parser](https://taphome.com/it/docs/script/packet-parser/)
- [Funzioni di parsing](https://taphome.com/it/docs/script/parsing-functions/)
- [Broker MQTT](https://taphome.com/it/docs/integration/packet-parser/mqtt-broker/)
- [Script listener](https://taphome.com/it/docs/script/listener-scripts/)

