TapHome

Shelly DUO MQTT

Packet Parser → MQTT
Inviato da
Ultimo aggiornamento: 06. 2026
Shelly DUO MQTT

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.

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:

ParametroPredefinitoDescrizione
MQTT Broker IP (IpAddress)192.168.0.1Indirizzo del broker sulla rete locale
MQTT Broker port (Port)1883Porta MQTT standard (senza TLS)
Transition time (TransitionTime)300Durata 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 & SecurityAdvanced — 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: SettingsDevice Info → campo mqtt.id
  • Via HTTP: GET http://<bulb-ip>/settingsmqtt.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:

VariabilePredefinitoDescrizione
bulb1topicShellyBulbDuo-deviceid1Device ID MQTT della prima lampadina DUO
bulb2topicShellyBulbDuo-deviceid2Device ID MQTT della seconda lampadina DUO
bulb3topicShellyBulbDuo-deviceid3Device ID MQTT della terza lampadina DUO
bulb4topicShellyBulbDuo-deviceid4Device ID MQTT della quarta lampadina DUO
bulb5topicShellyBulbDuo-deviceid5Device 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.

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 TapHomeTopic sorgenteUnità sorgenteConversioneUnità visualizzata
Potenza istantaneashellies/ShellyBulbDuo-<id>/light/0/powerW÷ 1000kW
Consumo totaleshellies/ShellyBulbDuo-<id>/light/0/energywatt-minuti÷ 60000kWh

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

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) → SettingsDevice 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.

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 (vedi la guida alla connessione HTTP se non ancora fatto)
  • Broker MQTT attivo sulla rete locale (es. Mosquitto, Home Assistant o il broker integrato di TapHome)
  • TapHome CCU sulla stessa rete del broker

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 & SecurityAdvanced — 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 SettingsMQTT
  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

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 SettingsDevice InfoDevice ID, oppure sull’etichetta del dispositivo

Passaggio 3 — Configurazione in TapHome

  1. In TapHome, aggiungi un nuovo modulo Packet Parser (MQTT)
  2. IP Address: inserisci l’IP del broker MQTT (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

Shelly DUO MQTT Modulo
Variabili personalizzate
bulb1topic (string) = ShellyBulbDuo-deviceid1Device 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-deviceid2Device ID MQTT della seconda lampadina Shelly DUO
bulb3topic (string) = ShellyBulbDuo-deviceid3Device ID MQTT della terza lampadina Shelly DUO
bulb4topic (string) = ShellyBulbDuo-deviceid4Device ID MQTT della quarta lampadina Shelly DUO
bulb5topic (string) = ShellyBulbDuo-deviceid5Device 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

Contatore elettrico 1

Listener
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

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: transitionTimeTempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Luce 1

Listener
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à
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
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

Contatore elettrico 2

Listener
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

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: transitionTimeTempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Luce 2

Listener
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à
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
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

Contatore elettrico 3

Listener
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

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: transitionTimeTempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Luce 3

Listener
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à
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
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

Contatore elettrico 4

Listener
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

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: transitionTimeTempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Luce 4

Listener
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à
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
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

Contatore elettrico 5

Listener
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

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: transitionTimeTempo di transizione per lampadina in millisecondi (0-5000 ms), ereditato dal parametro di import TransitionTime

Luce 5

Listener
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à
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
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb5topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
Connessione: Packet Parser → MQTT
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.

Fonti

Hai trovato un problema con questo template?

Dicci cosa non funziona, cosa manca o come dovrebbe comportarsi il template. Il tuo feedback ci aiuta a mantenere il catalogo accurato.

Verificato da TapHome

Vuoi usarlo nel tuo TapHome Core?

Apri questo template nel Customer Portal per applicarlo a una delle tue case, o crea una proposta di modifica e inviala al catalogo.

Apri nel portale