---
title: "Shelly DUO MQTT"
description: "Controlla fino a 5 lampadine bianche Shelly DUO via MQTT — luminosità, CCT 3000-6500 K con transizioni dolci e misurazione kW/kWh per lampadina. TapHome Gen1."
url: "https://taphome.com/it/compatibility/shelly-duo-mqtt/"
language: it
lastmod: 2026-04-25
generator: hugo
ai:
  topics: ["mqtt","lighting","wifi","tunable-white","cct","power-metering","led-bulb","gen1","mdns"]
  questions: ["Come integrare Shelly DUO con TapHome via MQTT?","Come trovare il Device ID MQTT della Shelly DUO?","Come controllare più lampadine Shelly DUO da un singolo template TapHome?","Perché Shelly DUO mostra consumi a zero in TapHome?","Perché la temperatura colore più calda arriva solo a 3000 K invece di 2700 K?","L'attivazione di MQTT su Shelly DUO disabilita Shelly Cloud?"]
---

# Shelly DUO MQTT

Comunicazione: Packet Parser → MQTT

- [Pagina prodotto Shelly DUO](https://www.shelly.com/en/products/shop/shelly-bulb-duo)
- [Documentazione Shelly Gen1 MQTT API](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo-mqtt)

> 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

La Shelly DUO (modello **SHBDUO-1**) è una lampadina LED smart Wi-Fi Gen1 disponibile in formato **E27** e **GU10**. La DUO standard è **solo bianca** con temperatura colore regolabile e luminosità dimmerabile — non ha canali RGB (la versione RGB è la *DUO RGBW* / `shellycolorbulb-` e usa un template separato). Questa è la **variante MQTT** dell'integrazione TapHome; per installazioni a singola lampadina è disponibile anche una [variante HTTP](https://taphome.com/it/compatibility/shelly-duo/).

Il template supporta fino a **5 lampadine DUO** per modulo tramite un broker MQTT condiviso sulla rete locale. Ogni lampadina è identificata da una variabile di modulo `bulbNtopic` che punta al Device ID MQTT della lampadina, ed espone sia un dispositivo di luce bianca che un misuratore elettrico — 10 dispositivi in totale.

## Configurazione

### Broker MQTT

Il template richiede un broker MQTT raggiungibile sulla rete locale — funziona qualsiasi broker standard (Mosquitto, EMQX o il broker integrato in Home Assistant). Il broker gira sulla **porta 1883** senza TLS (l'hardware Gen1 Shelly non supporta MQTT su TLS), quindi mantienilo in un segmento attendibile.

Dopo aver importato il template, configura la connessione al broker nei parametri di import del modulo:

| Parametro | Predefinito | Descrizione |
|-----------|-------------|-------------|
| **MQTT Broker IP** (`IpAddress`) | `192.168.0.1` | Indirizzo del broker sulla rete locale |
| **MQTT Broker port** (`Port`) | `1883` | Porta MQTT standard (senza TLS) |
| **Transition time** (`TransitionTime`) | `300` | Durata di transizione predefinita per lampadina in millisecondi |

### Abilitazione MQTT sulla lampadina

Ogni Shelly DUO deve essere puntata al broker prima di pubblicare o accettare comandi:

1. Apri l'interfaccia web della lampadina su `http://<bulb-ip>` (trova l'IP nella tabella DHCP del router o nell'app Shelly)
2. Vai a **Internet & Security** → **Advanced — MQTT** e abilita **MQTT**
3. Inserisci il **server** del broker (IP e porta, es. `192.168.0.10:1883`) e lascia **username** / **password** vuoti (il template TapHome non espone l'autenticazione del broker)
4. Opzionalmente regola il **MQTT prefix** se non vuoi il predefinito `shellies/ShellyBulbDuo-<MAC6>`
5. Salva e riavvia la lampadina — una volta riconnessa inizia a pubblicare su `shellies/ShellyBulbDuo-<id>/light/0/status`

### Device ID (`bulbNtopic`)

Ogni Shelly DUO ha un Device ID MQTT univoco nel formato **`ShellyBulbDuo-<MAC6>`**, dove `<MAC6>` sono gli ultimi 6 caratteri esadecimali del MAC address (es. `ShellyBulbDuo-B929CC`). Lo stesso valore è anche l'hostname mDNS della lampadina (`ShellyBulbDuo-<MAC6>.local`).

Il Device ID si trova:

- Nella web UI Shelly: **Settings** → **Device Info** → campo `mqtt.id`
- Via HTTP: `GET http://<bulb-ip>/settings` → `mqtt.id`
- Sull'etichetta del dispositivo / sulla confezione (ultimi 6 caratteri del MAC, esadecimale minuscolo)
- Come hostname mDNS, es. `ShellyBulbDuo-b929cc.local`

Apri il modulo **Shelly DUO MQTT** in TapHome e compila le variabili topic per ogni lampadina che vuoi usare:

| Variabile | Predefinito | Descrizione |
|-----------|-------------|-------------|
| `bulb1topic` | `ShellyBulbDuo-deviceid1` | Device ID MQTT della prima lampadina DUO |
| `bulb2topic` | `ShellyBulbDuo-deviceid2` | Device ID MQTT della seconda lampadina DUO |
| `bulb3topic` | `ShellyBulbDuo-deviceid3` | Device ID MQTT della terza lampadina DUO |
| `bulb4topic` | `ShellyBulbDuo-deviceid4` | Device ID MQTT della quarta lampadina DUO |
| `bulb5topic` | `ShellyBulbDuo-deviceid5` | Device ID MQTT della quinta lampadina DUO |

Sostituisci il placeholder con il Device ID reale di ogni lampadina che vuoi controllare (es. `ShellyBulbDuo-B929CC`). Il modulo si sottoscrive a `shellies/#` e gli script listener per lampadina filtrano i messaggi per prefisso del topic. Gli slot lasciati al valore placeholder generano un errore in TapHome finché non vengono configurati o rimossi dal template.

### Tempo di transizione per lampadina

Ogni dispositivo Light espone una variabile `transitionTime` (in millisecondi, intervallo 0-5000 ms) che per default eredita il parametro di import `TransitionTime` a livello di modulo. Sovrascrivila sulle singole lampadine se vuoi durate di transizione diverse — il valore viene inviato a ogni cambio di luminosità o CCT come campo `transition` nel payload JSON di `/light/0/set`.

> [!WARNING]
> L'attivazione di MQTT su un dispositivo Shelly Gen1 **disabilita Shelly Cloud** — i due non possono coesistere. HTTP REST e CoIoT rimangono disponibili, quindi la lampadina resta raggiungibile dalla rete locale.

## Funzionalità del dispositivo

Il template espone 10 dispositivi per modulo — 5 luci bianche regolabili e 5 misuratori elettrici, una coppia per lampadina fisica. Tutte e 5 le coppie sono funzionalmente identiche, distinte solo dal `bulbNtopic` su cui ascoltano.

### Controllo luce

Ogni dispositivo Light è mappato in TapHome come **White Light** con due proprietà di controllo:

- **Luminosità** — letta dal campo `$.brightness` (0-100) del JSON `light/0/status`, scalata sull'intervallo TapHome 0.0-1.0; scritta tramite `light/0/set` con `"turn":"on", "brightness":N, "transition":<ms>`
- **Temperatura colore** — letta da `$.temp` (3000-6500 K), scritta tramite `light/0/set` con `"temp":K, "transition":<ms>`

Lo spegnimento della luce usa un topic separato `light/0/command` con payload `off`, che è più veloce della costruzione di un messaggio JSON `set`. Gli aggiornamenti di luminosità e CCT includono sempre il campo `transition`, così la lampadina sfuma dolcemente invece di saltare.

### Misurazione consumi

Ogni Electric Meter si sottoscrive a due topic scalari pubblicati dalla lampadina circa una volta al secondo:

| Valore TapHome | Topic sorgente | Unità sorgente | Conversione | Unità visualizzata |
|----------------|----------------|----------------|-------------|---------------------|
| Potenza istantanea | `shellies/ShellyBulbDuo-<id>/light/0/power` | W | `÷ 1000` | kW |
| Consumo totale | `shellies/ShellyBulbDuo-<id>/light/0/energy` | watt-minuti | `÷ 60000` | kWh |

La conversione watt-minuti → kWh è necessaria perché il firmware Shelly Gen1 riporta l'energia cumulativa in W·min anziché in W·h.

> [!TIP]
> La misurazione dei consumi resta silenziosamente a zero finché **Settings → Device Model** (E27 o GU10) non è configurato nell'app Shelly o nella web UI. Il listener TapHome alla prima lettura mostra un banner informativo che lo ricorda. Una volta impostato il modello, la lampadina inizia immediatamente a riportare valori `power`/`energy` non nulli.

## Risoluzione problemi

### La lampadina non risponde

1. Verifica che la lampadina sia connessa al Wi-Fi e raggiungibile sulla LAN — apri `http://<bulb-ip>/shelly`. Una risposta contenente `"type":"SHBDUO-1"` conferma il dispositivo.
2. Prova l'hostname mDNS (`ShellyBulbDuo-<MAC6>.local`) invece dell'indirizzo IP — i rinnovi DHCP o i riavvii del router possono cambiare l'IP.
3. Conferma che MQTT sia abilitato nelle impostazioni **Internet & Security → Advanced — MQTT** della lampadina e che IP/porta del broker corrispondano ai parametri di import TapHome.
4. Usa un client MQTT (es. **MQTT Explorer** o `mosquitto_sub -h <broker> -t 'shellies/#' -v`) per verificare che la lampadina pubblichi su `shellies/ShellyBulbDuo-<id>/...`.

### Errore "Set correct 'bulbNtopic' value"

Lo script listener genera questo errore quando un `bulbNtopic` è ancora impostato sul placeholder predefinito (`ShellyBulbDuo-deviceid`). Inserisci il Device ID reale per quello slot oppure rimuovi i dispositivi inutilizzati dal template se hai solo poche lampadine.

### Potenza ed energia restano a zero

1. Apri l'app Shelly (o la web UI) → **Settings** → **Device Model** e seleziona il sub-modello corrispondente (**Shelly Bulb DUO E27** o **Shelly Bulb DUO GU10**). La lampadina calcola `power`/`energy` solo dopo che il modello è noto.
2. Conferma che la lampadina sia effettivamente accesa — il misuratore si aggiorna solo mentre scorre corrente.
3. Sottoscriviti direttamente a `shellies/ShellyBulbDuo-<id>/light/0/power` con un client MQTT per verificare che la lampadina pubblichi un valore non nullo.

### La CCT più calda scende solo a 3000 K

L'XML TapHome limita la CCT a **3000-6500 K** per allinearsi all'intervallo E27 commercializzato. L'hardware in sé supporta **2700-6500 K** sul sub-modello GU10 e tramite l'API grezza `/light/0/set`, quindi i 300 K più caldi del GU10 non sono raggiungibili tramite il template TapHome.

### Le transizioni della luce sembrano a scatti

Aumenta la variabile `transitionTime` sulla lampadina specifica (o il default di modulo `TransitionTime`). 300 ms vanno bene per piccoli passi di dimming, ma su grandi salti di luminosità o CCT possono apparire a gradini — prova 800-1500 ms per una sfumatura più morbida.

> [!WARNING]
> I dispositivi Shelly Gen1 usano **MQTT in chiaro** sulla porta 1883 — TLS non è supportato. Il template TapHome inoltre non espone `username` / `password` del broker, quindi usa un broker non autenticato su una rete locale o VLAN attendibile.

## 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 10

Questi dispositivi compaiono in TapHome dopo l'importazione.

Shelly DUO MQTT Modulo

Variabili personalizzate

`bulb1topic` (string) = ShellyBulbDuo-deviceid1 Device ID MQTT della prima lampadina Shelly DUO — formato 'ShellyBulbDuo-DEVICEID'

Open http://shellyIpAddress in a browser → Settings → Device Info → copy the mqtt.id (or Device ID) field. Default mDNS hostname matches the MQTT id (ShellyBulbDuo-{MAC6}.local).

`bulb2topic` (string) = ShellyBulbDuo-deviceid2 Device ID MQTT della seconda lampadina Shelly DUO 

`bulb3topic` (string) = ShellyBulbDuo-deviceid3 Device ID MQTT della terza lampadina Shelly DUO 

`bulb4topic` (string) = ShellyBulbDuo-deviceid4 Device ID MQTT della quarta lampadina Shelly DUO 

`bulb5topic` (string) = ShellyBulbDuo-deviceid5 Device ID MQTT della quinta lampadina Shelly DUO

Contatore elettrico 1 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) della lampadina 1 — richiede l'impostazione di Settings → Device Model nell'app Shelly, altrimenti entrambi i valori restano a 0

numeric Unità: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb1topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb1topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb1topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb1topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

Luce 1 Luce bianca Lettura e scrittura

Lampadina 1 a bianco regolabile — on/off, luminosità 0-100 % e temperatura colore 3000-6500 K con transizioni dolci

json Unità: % / K json\_path

Variabile: `transitionTime` — Tempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Listener

```taphome
IF(INDEXOF(bulb1topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb1topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb1topic + "/light/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

IF ison
    Hb := bright / 100.0;
    St := isOn;
ELSE 
    Hb := 0;
    St := 0;
END
```

Scrittura luminosità

```taphome
IF St > 0.5
    VAR topic := "shellies/" + bulb1topic + "/light/0/set";    
    MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
ELSE
    MQTTPUBLISH("shellies/" + bulb1topic + "/light/0/command", "off");
END
```

Scrittura temperatura colore

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb1topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Contatore elettrico 2 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) della lampadina 2 — richiede l'impostazione di Settings → Device Model nell'app Shelly, altrimenti entrambi i valori restano a 0

numeric Unità: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb2topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb2topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb2topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb2topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

Luce 2 Luce bianca Lettura e scrittura

Lampadina 2 a bianco regolabile — on/off, luminosità 0-100 % e temperatura colore 3000-6500 K con transizioni dolci

json Unità: % / K json\_path

Variabile: `transitionTime` — Tempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Listener

```taphome
IF(INDEXOF(bulb2topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb2topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb2topic + "/light/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

IF ison
    Hb := bright / 100.0;
    St := isOn;
ELSE 
    Hb := 0;
    St := 0;
END
```

Scrittura luminosità

```taphome
IF St > 0.5
    VAR topic := "shellies/" + bulb2topic + "/light/0/set";    
    MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
ELSE
    MQTTPUBLISH("shellies/" + bulb2topic + "/light/0/command", "off");
END
```

Scrittura temperatura colore

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb2topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Contatore elettrico 3 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) della lampadina 3 — richiede l'impostazione di Settings → Device Model nell'app Shelly, altrimenti entrambi i valori restano a 0

numeric Unità: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb3topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb3topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb3topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb3topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

Luce 3 Luce bianca Lettura e scrittura

Lampadina 3 a bianco regolabile — on/off, luminosità 0-100 % e temperatura colore 3000-6500 K con transizioni dolci

json Unità: % / K json\_path

Variabile: `transitionTime` — Tempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Listener

```taphome
IF(INDEXOF(bulb3topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb3topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb3topic + "/light/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

IF ison
    Hb := bright / 100.0;
    St := isOn;
ELSE 
    Hb := 0;
    St := 0;
END
```

Scrittura luminosità

```taphome
IF St > 0.5
    VAR topic := "shellies/" + bulb3topic + "/light/0/set";    
    MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
ELSE
    MQTTPUBLISH("shellies/" + bulb3topic + "/light/0/command", "off");
END
```

Scrittura temperatura colore

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb3topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Contatore elettrico 4 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) della lampadina 4 — richiede l'impostazione di Settings → Device Model nell'app Shelly, altrimenti entrambi i valori restano a 0

numeric Unità: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb4topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb4topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb4topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb4topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

Luce 4 Luce bianca Lettura e scrittura

Lampadina 4 a bianco regolabile — on/off, luminosità 0-100 % e temperatura colore 3000-6500 K con transizioni dolci

json Unità: % / K json\_path

Variabile: `transitionTime` — Tempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Listener

```taphome
IF(INDEXOF(bulb4topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb4topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb4topic + "/light/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

IF ison
    Hb := bright / 100.0;
    St := isOn;
ELSE 
    Hb := 0;
    St := 0;
END
```

Scrittura luminosità

```taphome
IF St > 0.5
    VAR topic := "shellies/" + bulb4topic + "/light/0/set";    
    MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
ELSE
    MQTTPUBLISH("shellies/" + bulb4topic + "/light/0/command", "off");
END
```

Scrittura temperatura colore

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb4topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Contatore elettrico 5 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) della lampadina 5 — richiede l'impostazione di Settings → Device Model nell'app Shelly, altrimenti entrambi i valori restano a 0

numeric Unità: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb5topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb5topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb5topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb5topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

Luce 5 Luce bianca Lettura e scrittura

Lampadina 5 a bianco regolabile — on/off, luminosità 0-100 % e temperatura colore 3000-6500 K con transizioni dolci

json Unità: % / K json\_path

Variabile: `transitionTime` — Tempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Listener

```taphome
IF(INDEXOF(bulb5topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb5topic' value in module variables. Topic format is 'ShellyBulbDuo-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb5topic + "/light/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

IF ison
    Hb := bright / 100.0;
    St := isOn;
ELSE 
    Hb := 0;
    St := 0;
END
```

Scrittura luminosità

```taphome
IF St > 0.5
    VAR topic := "shellies/" + bulb5topic + "/light/0/set";    
    MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
ELSE
    MQTTPUBLISH("shellies/" + bulb5topic + "/light/0/command", "off");
END
```

Scrittura temperatura colore

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb5topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

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

Possibili miglioramenti (7)

- Connection Status (LWT) — Last Will and Testament — true on connect, false on disconnect. Could detect offline bulbs.
- Full Status JSON — Complete /status as JSON. Could expose wifi\_sta.rssi, has\_update, uptime, source of last command.
- Device Announce — Emitted on boot/announce — payload {id, model, mac, ip, fw\_ver, new\_fw}. Useful for auto-discovery.
- White channel (0-100 %) — Separate 'white' parameter (0-100) on the set JSON; template only writes brightness/temp.
- Timer (auto on/off) — Auto-off timer in seconds via set JSON. Not surfaced as TapHome capability.
- Warm-white below 3000 K — TapHome XML clamps MinColorTemperature to 3000 K; the bulb hardware can go down to 2700 K (GU10). E27 marketed range starts at 3000 K — clamp matches E27 spec but loses 300 K of GU10 range.
- MQTT broker authentication — Shelly device side supports MQTT username/password, but TapHome import parameters do not expose them. Workaround: open broker without auth on a trusted segment.

## 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`        |
| Transition time (ms)     | `300`         |

## 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 DUO — MQTT Bulb API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo-mqtt) 2026-04-25
- Shelly DUO — Product Datasheet
  
  [shellystore.co.uk](https://shellystore.co.uk/wp-content/uploads/2021/05/Duo-specs.pdf) 2026-04-25
  
  [PDF](https://taphome.com/compatibility/devices/shelly-duo-mqtt/manufacturer/duo-specs.pdf)

I documenti del produttore sono © dei rispettivi proprietari. Sono forniti così come pubblicati dal produttore, solo a titolo informativo.

## 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/)

