TapHome

Shelly DUO MQTT

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

Acest dispozitiv acceptă mDNS

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

ShellyBulbDuo-{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 DUO MQTT

Shelly DUO (model SHBDUO-1) este un bec LED inteligent Wi-Fi Gen1, disponibil în variantele E27 și GU10. Varianta de bază DUO emite doar lumină albă, cu temperatură de culoare și luminozitate reglabile — nu are canale RGB (varianta cu RGB este DUO RGBW / shellycolorbulb- și folosește un șablon separat). Aceasta este varianta MQTT a integrării TapHome; pentru instalațiile cu un singur bec este disponibilă și o variantă HTTP.

Șablonul acceptă până la 5 becuri DUO per modul, printr-un broker MQTT comun în rețeaua locală. Fiecare bec este identificat prin variabila de modul bulbNtopic, care indică ID-ul de dispozitiv MQTT al becului, și oferă un dispozitiv de lumină albă și un contor electric — în total 10 dispozitive.

Configurare

Brokerul MQTT

Șablonul are nevoie de un broker MQTT accesibil în rețeaua locală — funcționează orice broker standard (Mosquitto, EMQX sau brokerul integrat în Home Assistant). Brokerul rulează pe portul 1883 fără TLS (hardware-ul Shelly Gen1 nu acceptă MQTT prin TLS), de aceea păstrați-l într-un segment de rețea de încredere.

După importul șablonului, setați conexiunea la broker în parametrii de import ai modulului:

ParametruImplicitDescriere
MQTT Broker IP (IpAddress)192.168.0.1Adresa brokerului în rețeaua locală
MQTT Broker port (Port)1883Portul MQTT standard (fără TLS)
Transition time (TransitionTime)300Durata implicită a tranziției pentru fiecare bec, în milisecunde
Activarea MQTT pe bec

Fiecare Shelly DUO trebuie configurat să se conecteze la broker înainte să publice date sau să accepte comenzi:

  1. Deschideți interfața web a becului la http://<bulb-ip> (adresa IP o găsiți în tabelul DHCP al routerului sau în aplicația Shelly)
  2. Accesați Internet & Security → Advanced — MQTT și activați MQTT
  3. Introduceți serverul brokerului (IP și port, de ex. 192.168.0.10:1883) și lăsați goale câmpurile username / password (șablonul TapHome nu oferă autentificare la broker)
  4. Opțional, modificați MQTT prefix dacă nu doriți valoarea implicită shellies/ShellyBulbDuo-<MAC6>
  5. Salvați și reporniți becul — după reconectare începe să publice pe shellies/ShellyBulbDuo-<id>/light/0/status
ID-ul dispozitivului (bulbNtopic)

Fiecare Shelly DUO are un ID de dispozitiv MQTT unic în formatul ShellyBulbDuo-<MAC6>, unde <MAC6> reprezintă ultimele 6 caractere hexazecimale ale adresei MAC (de ex. ShellyBulbDuo-B929CC). Aceeași valoare este și numele de gazdă mDNS al becului (ShellyBulbDuo-<MAC6>.local).

ID-ul dispozitivului se găsește:

  • În interfața web Shelly: Settings → Device Info → câmpul mqtt.id
  • Prin HTTP: GET http://<bulb-ip>/settings → mqtt.id
  • Pe eticheta dispozitivului / pe ambalaj (ultimele 6 caractere ale adresei MAC, în hexazecimal cu litere mici)
  • Ca nume de gazdă mDNS, de ex. ShellyBulbDuo-b929cc.local

Deschideți modulul Shelly DUO MQTT în TapHome și completați variabilele de topic pentru fiecare bec pe care doriți să-l folosiți:

VariabilăImplicitDescriere
bulb1topicShellyBulbDuo-deviceid1ID-ul de dispozitiv MQTT al primului bec DUO
bulb2topicShellyBulbDuo-deviceid2ID-ul de dispozitiv MQTT al celui de-al doilea bec DUO
bulb3topicShellyBulbDuo-deviceid3ID-ul de dispozitiv MQTT al celui de-al treilea bec DUO
bulb4topicShellyBulbDuo-deviceid4ID-ul de dispozitiv MQTT al celui de-al patrulea bec DUO
bulb5topicShellyBulbDuo-deviceid5ID-ul de dispozitiv MQTT al celui de-al cincilea bec DUO

Înlocuiți valoarea implicită cu ID-ul real al dispozitivului pentru fiecare bec pe care doriți să-l comandați (de ex. ShellyBulbDuo-B929CC). Modulul se abonează la shellies/#, iar scripturile de ascultare ale fiecărui bec filtrează mesajele după prefixul de topic. Sloturile care au rămas la valoarea implicită generează o eroare în TapHome până când sunt configurate sau eliminate din șablon.

Timpul de tranziție pentru fiecare bec

Fiecare dispozitiv de lumină oferă variabila personalizată transitionTime (în milisecunde, interval 0–5000 ms), care preia implicit valoarea parametrului de import TransitionTime de la nivelul modulului. Dacă doriți durate diferite ale tranziției, suprascrieți-o la becurile individuale — valoarea se trimite la fiecare modificare a luminozității sau a CCT, în câmpul transition din payloadul JSON /light/0/set.

Activarea MQTT pe un dispozitiv Shelly Gen1 dezactivează Shelly Cloud — cele două nu pot funcționa simultan. HTTP REST și CoIoT rămân disponibile, așa că becul rămâne accesibil din rețeaua locală.

Funcțiile dispozitivului

Șablonul oferă 10 dispozitive per modul — 5 lumini cu alb reglabil și 5 contoare electrice, câte o pereche pentru fiecare bec fizic. Toate cele 5 perechi sunt identice din punct de vedere funcțional și se deosebesc doar prin bulbNtopic pe care îl ascultă.

Comanda luminii

Fiecare dispozitiv de lumină este mapat în TapHome ca lumină albă cu două proprietăți comandabile:

  • Luminozitate — citită din câmpul $.brightness (0–100) al JSON-ului light/0/status, scalată la intervalul TapHome 0,0–1,0; scrisă prin light/0/set cu "turn":"on", "brightness":N, "transition":<ms>
  • Temperatura de culoare — citită din $.temp (3000–6500 K), scrisă prin light/0/set cu "temp":K, "transition":<ms>

Stingerea luminii folosește un topic separat, light/0/command, cu payloadul off, ceea ce este mai rapid decât construirea unui mesaj JSON set. Actualizările luminozității și ale CCT conțin întotdeauna câmpul transition, astfel încât becul trece gradual la noua valoare, nu brusc.

Măsurarea puterii

Fiecare dispozitiv de tip contor electric se abonează la două topicuri scalare, pe care becul le publică aproximativ o dată pe secundă:

Valoare TapHomeTopic sursăUnitate sursăConversieUnitate afișată
Putere în timp realshellies/ShellyBulbDuo-<id>/light/0/powerW÷ 1000kW
Consum totalshellies/ShellyBulbDuo-<id>/light/0/energywați-minut÷ 60000kWh

Conversia din wați-minut în kWh este necesară deoarece firmware-ul Shelly Gen1 raportează energia cumulată în W·min, nu în W·h.

Monitorizarea puterii raportează zero, fără niciun avertisment, până când în aplicația Shelly sau în interfața web nu este configurat Settings → Device Model (E27 sau GU10). La prima citire, scriptul de ascultare TapHome afișează un mesaj informativ care vă reamintește acest lucru. După setarea modelului, becul începe imediat să raporteze valori power/energy diferite de zero.

Rezolvarea problemelor

Becul nu răspunde
  1. Verificați dacă becul este conectat la Wi-Fi și accesibil în rețeaua locală — deschideți http://<bulb-ip>/shelly. Un răspuns care conține "type":"SHBDUO-1" confirmă dispozitivul.
  2. Încercați numele de gazdă mDNS (ShellyBulbDuo-<MAC6>.local) în locul adresei IP — reînnoirea DHCP sau repornirea routerului pot schimba adresa IP.
  3. Verificați dacă MQTT este activat în setările becului, la Internet & Security → Advanced — MQTT, și dacă adresa IP și portul brokerului corespund parametrilor de import din TapHome.
  4. Folosiți un client MQTT (de ex. MQTT Explorer sau mosquitto_sub -h <broker> -t 'shellies/#' -v) pentru a verifica dacă becul publică pe shellies/ShellyBulbDuo-<id>/....
Eroarea „Set correct ‘bulbNtopic’ value”

Scriptul de ascultare generează această eroare atunci când un bulbNtopic este încă setat la valoarea implicită (ShellyBulbDuo-deviceid). Completați ID-ul real al dispozitivului pentru slotul respectiv sau, dacă aveți doar câteva becuri, eliminați din șablon dispozitivele nefolosite.

Puterea și energia rămân la zero
  1. Deschideți aplicația Shelly (sau interfața web) → Settings → Device Model și selectați submodelul corespunzător (Shelly Bulb DUO E27 sau Shelly Bulb DUO GU10). Becul calculează power/energy doar după ce modelul este cunoscut.
  2. Verificați dacă becul este într-adevăr aprins — contorul se actualizează doar cât timp trece curent.
  3. Abonați-vă direct cu un client MQTT la shellies/ShellyBulbDuo-<id>/light/0/power și verificați dacă becul publică o valoare diferită de zero.
Cea mai caldă temperatură de culoare coboară doar până la 3000 K

XML-ul TapHome limitează CCT la 3000–6500 K, pentru a corespunde intervalului declarat comercial pentru E27. Hardware-ul în sine acceptă 2700–6500 K la submodelul GU10 și prin API-ul direct /light/0/set, așa că intervalul 2700–3000 K al variantei GU10 nu este accesibil prin șablonul TapHome.

Tranzițiile luminii par sacadate

Măriți variabila personalizată transitionTime a becului (sau valoarea implicită TransitionTime de la nivelul modulului). 300 ms sunt suficiente pentru pași mici de reglare a luminozității, dar la schimbări mari ale luminozității sau ale CCT tranziția poate părea în trepte — încercați 800–1500 ms pentru o tranziție mai lină.

Dispozitivele Shelly Gen1 folosesc MQTT simplu pe portul 1883 — nu există suport TLS. Nici șablonul TapHome nu oferă username / password pentru broker, așa că folosiți un broker fără autentificare într-o rețea locală sau VLAN 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 DUO MQTT Modul
Variabile personalizate
bulb1topic (string) = ShellyBulbDuo-deviceid1ID-ul de dispozitiv MQTT al primului bec Shelly DUO — formatul este '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-deviceid2ID-ul de dispozitiv MQTT al celui de-al doilea bec Shelly DUO
bulb3topic (string) = ShellyBulbDuo-deviceid3ID-ul de dispozitiv MQTT al celui de-al treilea bec Shelly DUO
bulb4topic (string) = ShellyBulbDuo-deviceid4ID-ul de dispozitiv MQTT al celui de-al patrulea bec Shelly DUO
bulb5topic (string) = ShellyBulbDuo-deviceid5ID-ul de dispozitiv MQTT al celui de-al cincilea bec Shelly DUO
Contor electric 1 Contor electric Doar citire

Putere în timp real (kW) și energie cumulată (kWh) a becului 1 — necesită configurarea Settings → Device Model în aplicația Shelly, altfel ambele valori rămân 0

numeric Unitate: kW / kWh

Contor electric 1

Ascultător
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
Lumină 1 Lumină albă

Bec 1 cu alb reglabil — pornire/oprire, luminozitate 0–100 % și temperatură de culoare 3000–6500 K cu tranziții graduale

json Unitate: % / K json_path
Variabilă: transitionTime — Timpul de tranziție al becului în milisecunde (0–5000 ms), preluat din parametrul de import TransitionTime

Lumină 1

Ascultător
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
Scrierea luminozității
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
Scrierea temperaturii de culoare
IF ISNAN(Ct)
    RETURN(0);
END

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

Putere în timp real (kW) și energie cumulată (kWh) a becului 2 — necesită configurarea Settings → Device Model în aplicația Shelly, altfel ambele valori rămân 0

numeric Unitate: kW / kWh

Contor electric 2

Ascultător
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
Lumină 2 Lumină albă

Bec 2 cu alb reglabil — pornire/oprire, luminozitate 0–100 % și temperatură de culoare 3000–6500 K cu tranziții graduale

json Unitate: % / K json_path
Variabilă: transitionTime — Timpul de tranziție al becului în milisecunde (0–5000 ms), preluat din parametrul de import TransitionTime

Lumină 2

Ascultător
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
Scrierea luminozității
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
Scrierea temperaturii de culoare
IF ISNAN(Ct)
    RETURN(0);
END

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

Putere în timp real (kW) și energie cumulată (kWh) a becului 3 — necesită configurarea Settings → Device Model în aplicația Shelly, altfel ambele valori rămân 0

numeric Unitate: kW / kWh

Contor electric 3

Ascultător
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
Lumină 3 Lumină albă

Bec 3 cu alb reglabil — pornire/oprire, luminozitate 0–100 % și temperatură de culoare 3000–6500 K cu tranziții graduale

json Unitate: % / K json_path
Variabilă: transitionTime — Timpul de tranziție al becului în milisecunde (0–5000 ms), preluat din parametrul de import TransitionTime

Lumină 3

Ascultător
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
Scrierea luminozității
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
Scrierea temperaturii de culoare
IF ISNAN(Ct)
    RETURN(0);
END

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

Putere în timp real (kW) și energie cumulată (kWh) a becului 4 — necesită configurarea Settings → Device Model în aplicația Shelly, altfel ambele valori rămân 0

numeric Unitate: kW / kWh

Contor electric 4

Ascultător
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
Lumină 4 Lumină albă

Bec 4 cu alb reglabil — pornire/oprire, luminozitate 0–100 % și temperatură de culoare 3000–6500 K cu tranziții graduale

json Unitate: % / K json_path
Variabilă: transitionTime — Timpul de tranziție al becului în milisecunde (0–5000 ms), preluat din parametrul de import TransitionTime

Lumină 4

Ascultător
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
Scrierea luminozității
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
Scrierea temperaturii de culoare
IF ISNAN(Ct)
    RETURN(0);
END

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

Putere în timp real (kW) și energie cumulată (kWh) a becului 5 — necesită configurarea Settings → Device Model în aplicația Shelly, altfel ambele valori rămân 0

numeric Unitate: kW / kWh

Contor electric 5

Ascultător
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
Lumină 5 Lumină albă

Bec 5 cu alb reglabil — pornire/oprire, luminozitate 0–100 % și temperatură de culoare 3000–6500 K cu tranziții graduale

json Unitate: % / K json_path
Variabilă: transitionTime — Timpul de tranziție al becului în milisecunde (0–5000 ms), preluat din parametrul de import TransitionTime

Lumină 5

Ascultător
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
Scrierea luminozității
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
Scrierea temperaturii de culoare
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb5topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
Conexiune: Packet Parser → MQTT • Nume gazdă: ShellyBulbDuo-{MAC}.local
Îmbunătățiri posibile (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.

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