TapHome

Shelly DUO MQTT

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 06. 2026
Shelly DUO MQTT

Shelly DUO (model SHBDUO-1) to inteligentna żarówka LED Wi-Fi Gen1 dostępna w wersjach E27 i GU10. Standardowa DUO jest wyłącznie biała z regulowaną temperaturą barwową i ściemnialną jasnością — nie ma kanałów RGB (wariant z RGB to DUO RGBW / shellycolorbulb- i używa osobnego szablonu). To jest wariant MQTT integracji z TapHome; dla pojedynczej żarówki dostępny jest również wariant HTTP.

Szablon obsługuje do 5 żarówek DUO na moduł poprzez wspólnego brokera MQTT w sieci lokalnej. Każda żarówka jest identyfikowana zmienną modułu bulbNtopic wskazującą na MQTT Device ID żarówki i udostępnia zarówno urządzenie białego światła, jak i licznik energii — łącznie 10 urządzeń.

Konfiguracja

Broker MQTT

Szablon wymaga brokera MQTT dostępnego w sieci lokalnej — działa dowolny standardowy broker (Mosquitto, EMQX lub broker wbudowany w Home Assistant). Broker działa na porcie 1883 bez TLS (sprzęt Gen1 Shelly nie obsługuje MQTT przez TLS), dlatego trzymaj go w zaufanym segmencie.

Po zaimportowaniu szablonu skonfiguruj połączenie z brokerem w parametrach importu modułu:

ParametrDomyślneOpis
MQTT Broker IP (IpAddress)192.168.0.1Adres brokera w sieci lokalnej
MQTT Broker port (Port)1883Standardowy port MQTT (bez TLS)
Transition time (TransitionTime)300Domyślny czas przejścia jasności/CCT każdej żarówki w milisekundach
Włączanie MQTT na żarówce

Każda Shelly DUO musi być wskazana na brokera, zanim zacznie publikować lub przyjmować polecenia:

  1. Otwórz interfejs webowy żarówki pod http://<bulb-ip> (IP znajdziesz w tabeli DHCP routera lub w aplikacji Shelly)
  2. Przejdź do Internet & SecurityAdvanced — MQTT i włącz MQTT
  3. Wpisz server brokera (IP i port, np. 192.168.0.10:1883) i pozostaw username / password puste (szablon TapHome nie udostępnia uwierzytelniania brokera)
  4. Opcjonalnie zmień MQTT prefix, jeśli nie chcesz domyślnego shellies/ShellyBulbDuo-<MAC6>
  5. Zapisz i zrestartuj żarówkę — po ponownym połączeniu zacznie publikować na shellies/ShellyBulbDuo-<id>/light/0/status
Device ID (bulbNtopic)

Każda Shelly DUO ma unikalne MQTT Device ID w formacie ShellyBulbDuo-<MAC6>, gdzie <MAC6> to ostatnie 6 znaków szesnastkowych adresu MAC (np. ShellyBulbDuo-B929CC). Ta sama wartość jest również nazwą hosta mDNS żarówki (ShellyBulbDuo-<MAC6>.local).

Device ID można znaleźć:

  • W Shelly web UI: SettingsDevice Info → pole mqtt.id
  • Przez HTTP: GET http://<bulb-ip>/settingsmqtt.id
  • Na etykiecie urządzenia / opakowaniu (ostatnie 6 znaków MAC, małe hex)
  • Jako nazwa hosta mDNS, np. ShellyBulbDuo-b929cc.local

Otwórz moduł Shelly DUO MQTT w TapHome i wypełnij zmienne topicu dla każdej żarówki, której chcesz używać:

ZmiennaDomyślneOpis
bulb1topicShellyBulbDuo-deviceid1MQTT Device ID pierwszej żarówki DUO
bulb2topicShellyBulbDuo-deviceid2MQTT Device ID drugiej żarówki DUO
bulb3topicShellyBulbDuo-deviceid3MQTT Device ID trzeciej żarówki DUO
bulb4topicShellyBulbDuo-deviceid4MQTT Device ID czwartej żarówki DUO
bulb5topicShellyBulbDuo-deviceid5MQTT Device ID piątej żarówki DUO

Zastąp placeholder rzeczywistym Device ID dla każdej żarówki, którą chcesz sterować (np. ShellyBulbDuo-B929CC). Moduł subskrybuje shellies/#, a skrypty listenerów dla poszczególnych żarówek filtrują wiadomości po prefiksie topicu. Sloty pozostawione na wartości placeholder generują błąd w TapHome, dopóki nie zostaną skonfigurowane lub usunięte z szablonu.

Czas przejścia każdej żarówki

Każde urządzenie Light udostępnia zmienną transitionTime (w milisekundach, zakres 0-5000 ms), która domyślnie dziedziczy parametr importu TransitionTime z poziomu modułu. Nadpisz ją na poszczególnych żarówkach, jeśli chcesz różne czasy przejścia — wartość jest wysyłana przy każdej zmianie jasności lub CCT jako pole transition w payloadzie JSON /light/0/set.

Włączenie MQTT na urządzeniu Gen1 Shelly wyłącza Shelly Cloud — oba nie mogą działać jednocześnie. HTTP REST i CoIoT pozostają dostępne, więc żarówka jest nadal osiągalna z sieci lokalnej.

Funkcje urządzenia

Szablon udostępnia 10 urządzeń na moduł — 5 świateł białych z regulacją barwy i 5 liczników energii, jedną parę na fizyczną żarówkę. Wszystkie 5 par są funkcjonalnie identyczne, różnią się tylko bulbNtopic, na który nasłuchują.

Sterowanie światłem

Każde urządzenie Light jest mapowane w TapHome jako White Light z dwoma właściwościami sterowania:

  • Jasność — odczytywana z pola $.brightness (0-100) JSON-a light/0/status, skalowana do zakresu TapHome 0.0-1.0; zapisywana przez light/0/set z "turn":"on", "brightness":N, "transition":<ms>
  • Temperatura barwowa — odczytywana z $.temp (3000-6500 K), zapisywana przez light/0/set z "temp":K, "transition":<ms>

Wyłączanie światła używa osobnego topicu light/0/command z payloadem off, co jest szybsze niż konstruowanie wiadomości JSON set. Aktualizacje jasności i CCT zawsze zawierają pole transition, dzięki czemu żarówka płynnie przechodzi zamiast skakać.

Pomiar zużycia

Każdy Electric Meter subskrybuje dwa skalarne topicy publikowane przez żarówkę mniej więcej raz na sekundę:

Wartość TapHomeTopic źródłowyJednostka źródłowaKonwersjaJednostka wyświetlania
Moc chwilowashellies/ShellyBulbDuo-<id>/light/0/powerW÷ 1000kW
Zużycie całkowiteshellies/ShellyBulbDuo-<id>/light/0/energywatominuty÷ 60000kWh

Konwersja watominut → kWh jest potrzebna, ponieważ firmware Shelly Gen1 raportuje energię skumulowaną w W·min, a nie w W·h.

Pomiar zużycia po cichu zwraca zero, dopóki Settings → Device Model (E27 lub GU10) nie zostanie skonfigurowane w aplikacji Shelly lub web UI. Listener TapHome przy pierwszym odczycie wyświetla baner informacyjny przypominający o tym. Po ustawieniu modelu żarówka natychmiast zaczyna raportować niezerowe wartości power/energy.

Rozwiązywanie problemów

Żarówka nie reaguje
  1. Sprawdź, że żarówka jest podłączona do Wi-Fi i osiągalna w LAN — otwórz http://<bulb-ip>/shelly. Odpowiedź zawierająca "type":"SHBDUO-1" potwierdza urządzenie.
  2. Spróbuj nazwy hosta mDNS (ShellyBulbDuo-<MAC6>.local) zamiast adresu IP — odnowienia DHCP lub restarty routera mogą zmienić IP.
  3. Potwierdź, że MQTT jest włączone w ustawieniach Internet & Security → Advanced — MQTT żarówki i że IP/port brokera zgadzają się z parametrami importu TapHome.
  4. Użyj klienta MQTT (np. MQTT Explorer lub mosquitto_sub -h <broker> -t 'shellies/#' -v), aby zweryfikować, że żarówka publikuje na shellies/ShellyBulbDuo-<id>/....
Błąd “Set correct ‘bulbNtopic’ value”

Skrypt listenera zgłasza ten błąd, gdy bulbNtopic nadal jest ustawiony na domyślny placeholder (ShellyBulbDuo-deviceid). Wpisz prawdziwe Device ID dla danego slotu lub usuń nieużywane urządzenia z szablonu, jeśli masz tylko kilka żarówek.

Moc i energia pozostają na zero
  1. Otwórz aplikację Shelly (lub web UI) → SettingsDevice Model i wybierz odpowiedni sub-model (Shelly Bulb DUO E27 lub Shelly Bulb DUO GU10). Żarówka zaczyna obliczać power/energy dopiero po rozpoznaniu modelu.
  2. Potwierdź, że żarówka faktycznie świeci — licznik aktualizuje się tylko podczas przepływu prądu.
  3. Subskrybuj bezpośrednio shellies/ShellyBulbDuo-<id>/light/0/power klientem MQTT i sprawdź, czy żarówka publikuje wartość niezerową.
Najcieplejsza CCT schodzi tylko do 3000 K

XML TapHome ogranicza CCT do 3000-6500 K, aby pasować do reklamowanego zakresu E27. Sam sprzęt obsługuje 2700-6500 K w sub-modelu GU10 oraz przez surowe API /light/0/set, więc najcieplejsze 300 K zakresu GU10 jest nieosiągalne przez szablon TapHome.

Przejścia światła wyglądają na szarpane

Zwiększ zmienną transitionTime na danej żarówce (lub domyślną wartość modułu TransitionTime). 300 ms wystarcza dla małych kroków ściemniania, ale przy dużych zmianach jasności lub CCT może wyglądać schodkowo — wypróbuj 800-1500 ms dla płynniejszego przejścia.

Urządzenia Shelly Gen1 używają zwykłego MQTT na porcie 1883 — TLS nie jest obsługiwany. Szablon TapHome również nie udostępnia username / password brokera, dlatego użyj brokera bez uwierzytelniania w zaufanej sieci lokalnej lub VLAN.

Jak zainstalować w TapHome

Wymagania wstępne

  • Urządzenie Shelly połączone z Wi-Fi (jeśli jeszcze nie, zobacz przewodnik po połączeniu HTTP)
  • Broker MQTT działający w sieci lokalnej (np. Mosquitto, Home Assistant lub wbudowany broker TapHome)
  • TapHome CCU w tej samej sieci co broker

Na urządzeniach Gen1 włączenie MQTT wyłącza Shelly Cloud. Oba nie mogą działać jednocześnie. Na urządzeniach Gen2/Plus to ograniczenie nie obowiązuje.

Krok 1 — Włącz MQTT na urządzeniu Shelly

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

  1. Otwórz interfejs webowy Shelly: http://<device-ip>/
  2. Przejdź do Internet & SecurityAdvanced — MQTT
  3. Włącz MQTT
  4. Ustaw MQTT Server: <broker-ip>:<port> (np. 192.168.1.10:1883)
  5. Opcjonalnie ustaw MQTT User i MQTT Password, jeśli broker wymaga uwierzytelniania
  6. Kliknij Save — urządzenie zrestartuje się i połączy z brokerem

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

  1. Otwórz interfejs webowy Shelly: http://<device-ip>/
  2. Przejdź do SettingsMQTT
  3. Włącz MQTT
  4. Ustaw Server: <broker-ip>:<port> (np. 192.168.1.10:1883)
  5. Client ID jest wstępnie wypełnione identyfikatorem urządzenia (np. shellyplus1pm-AABBCCDDEE) — pozostaw bez zmian, chyba że masz konkretny powód do zmiany
  6. Kliknij Save i zrestartuj urządzenie

Aby sprawdzić, czy MQTT działa, użyj klienta MQTT (np. MQTT Explorer) i zasubskrybuj shellies/# (Gen1) lub <device-id>/# (Gen2). Powinieneś zobaczyć komunikaty o stanie z urządzenia.

Krok 2 — Znajdź Device ID / MQTT Client ID

Niektóre szablony wymagają parametru Device ID lub MQTT Client ID. Jest to unikalny identyfikator używany w topikach MQTT.

  • Gen1: znajduje się na etykiecie jako adres MAC (np. AABBCCDDEE). Device ID = shelly<model>-<mac>, np. shelly1pm-AABBCCDDEE
  • Gen2/Plus: znajduje się w interfejsie webowym Shelly w sekcji SettingsDevice InfoDevice ID lub na etykiecie urządzenia

Krok 3 — Konfiguracja w TapHome

  1. W TapHome dodaj nowy moduł Packet Parser (MQTT)
  2. IP Address: wprowadź adres IP brokera MQTT (np. 192.168.1.10)
  3. Port: 1883 (domyślny; użyj 8883 dla TLS)
  4. Device ID / MQTT Client ID: wprowadź wartość z kroku 2 (jeśli wymagane przez szablon)
  5. Zaimportuj szablon — TapHome automatycznie zasubskrybuje topiki urządzenia

Dostępne urządzenia

Shelly DUO MQTT Moduł
Zmienne niestandardowe
bulb1topic (string) = ShellyBulbDuo-deviceid1MQTT Device ID pierwszej żarówki Shelly DUO — format '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-deviceid2MQTT Device ID drugiej żarówki Shelly DUO
bulb3topic (string) = ShellyBulbDuo-deviceid3MQTT Device ID trzeciej żarówki Shelly DUO
bulb4topic (string) = ShellyBulbDuo-deviceid4MQTT Device ID czwartej żarówki Shelly DUO
bulb5topic (string) = ShellyBulbDuo-deviceid5MQTT Device ID piątej żarówki Shelly DUO
Licznik energii 1 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 1 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Licznik energii 1

Nasłuchiwanie
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
Światło 1 Białe światło

Żarówka 1 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json_path
Zmienna: transitionTimeCzas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Światło 1

Nasłuchiwanie
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
Zapis jasności
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
Zapis temperatury barwowej
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb1topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
Licznik energii 2 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 2 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Licznik energii 2

Nasłuchiwanie
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
Światło 2 Białe światło

Żarówka 2 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json_path
Zmienna: transitionTimeCzas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Światło 2

Nasłuchiwanie
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
Zapis jasności
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
Zapis temperatury barwowej
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb2topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
Licznik energii 3 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 3 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Licznik energii 3

Nasłuchiwanie
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
Światło 3 Białe światło

Żarówka 3 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json_path
Zmienna: transitionTimeCzas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Światło 3

Nasłuchiwanie
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
Zapis jasności
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
Zapis temperatury barwowej
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb3topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
Licznik energii 4 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 4 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Licznik energii 4

Nasłuchiwanie
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
Światło 4 Białe światło

Żarówka 4 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json_path
Zmienna: transitionTimeCzas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Światło 4

Nasłuchiwanie
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
Zapis jasności
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
Zapis temperatury barwowej
IF ISNAN(Ct)
    RETURN(0);
END

VAR topic := "shellies/" + bulb4topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
Licznik energii 5 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 5 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Licznik energii 5

Nasłuchiwanie
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
Światło 5 Białe światło

Żarówka 5 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json_path
Zmienna: transitionTimeCzas przejścia każdej żarówki w milisekundách (0-5000 ms), dziedziczony z parametru importu TransitionTime

Światło 5

Nasłuchiwanie
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
Zapis jasności
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
Zapis temperatury barwowej
IF ISNAN(Ct)
    RETURN(0);
END

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

Źródła

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Zweryfikowane przez TapHome

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu