TapHome

Shelly 3EM MQTT

Packet Parser → MQTT
Přidal
Poslední aktualizace: 06. 2026
Shelly 3EM MQTT

Shelly 3EM je 3-fázový Wi-Fi elektroměr z první generace zařízení Shelly (Gen1). Měří činný výkon, napětí, proud, účiník a celkovou spotřebovanou energii nezávisle pro každou ze tří fází pomocí tří přiložených 120 A dělených CT svorek a obsahuje vestavěné 10 A relé, které se typicky používá k ovládání cívky externího výkonového stykače. TapHome komunikuje se zařízením přes MQTT — zařízení posílá per-fázová měření na broker, modul TapHome PacketParser se přihlašuje k stromu topiců shellies/# a hodnoty směruje do čtyř dceřiných zařízení (3 elektroměry + 1 stykačový spínač).

Toto je MQTT varianta šablony Shelly 3EM. K dispozici je i HTTP varianta — MQTT zvol, pokud již provozuješ lokální MQTT broker, chceš push-based aktualizace místo pollingu nebo potřebuješ sdílet měřič s více konzumenty (TapHome plus jiný systém). Povolení MQTT na Gen1 firmware vypne Shelly Cloud — obě služby nemohou běžet současně.

Konfigurace

Povolení MQTT v Shelly 3EM

Otevři webové rozhraní Shelly 3EM (http://{device-ip} nebo http://shelly3em-{MAC}.local) a nakonfiguruj MQTT klienta:

  1. Přejdi do Internet & SecurityAdvanced - Developer Settings
  2. Zaškrtni Enable action execution via MQTT
  3. Vyplň Server hodnotou {IP adresa MQTT brokeru}:{port} — typicky 192.168.1.10:1883
  4. (Volitelné) Nastav Username a Password, pokud broker vyžaduje autentizaci
  5. Klikni SAVE — zařízení se restartuje a připojí k brokeru

Gen1 zařízení Shelly nepodporují MQTT přes TLS. Komunikace mezi zařízením a brokerem je nešifrovaný plain TCP na portu 1883. Uživatelské jméno a heslo se posílají v plaintextu. MQTT broker používej pouze v důvěryhodné lokální síti.

Povolení MQTT automaticky vypne Shelly Cloud na Gen1 firmware. Změnu vrátíš odškrtnutím MQTT a opětovným zapnutím Cloud v Internet & Security.

Zjištění Device ID

Šablona TapHome se přihlašuje na shellies/shellyem3-{dID}/#, kde {dID} je MAC suffix zařízení použitý jako MQTT topic prefix.

Jak ho najít ve webovém rozhraní Shelly 3EM:

  1. Otevři webové rozhraní zařízení v prohlížeči
  2. Přejdi do SettingsDevice Info
  3. Zkopíruj první řetězec Device ID (NIKOLI hodnotu v závorkách) — odpovídá MAC adrese WiFi rozhraní (např. DC4F227649A1)

Alternativně zavolej GET http://{device-ip}/settings a přečti pole mqtt.id.

Nastavení šablony

Po importu šablony v TapHome nastav tři import parametry:

ParametrPopisPříklad
IpAddressIP adresa MQTT brokeru192.168.1.10
PortPort MQTT brokeru1883
dIDDevice ID (MAC suffix) zařízení Shelly 3EMDC4F227649A1

Modul se následně přihlásí k shellies/# (QoS 0) a listener skripty směrují per-fázové emeter a relay zprávy do odpovídajících dceřiných zařízení. Výchozí MQTT perioda aktualizace zařízení je 30 sekund — lze ji snížit přes GET http://{device-ip}/settings?mqtt_update_period=N (hodnota 0 znamená publikovat pouze při změně).

MQTT topic prefix v komunikaci je shellyem3-{MAC}, zatímco mDNS hostname zařízení je shelly3em-{MAC}.local — Shelly používá pro stejné zařízení dva různé formáty. Šablona sleduje skutečný MQTT topic prefix (shellyem3-). Pokud MQTT zprávy nepřicházejí, přihlas se k shellies/# přes MQTT klienta a ověř, jaký prefix firmware skutečně používá.

Schopnosti zařízení

Per-fázový činný výkon a celková energie

Šablona vytváří tři elektroměry — jeden pro každou fázi (CT svorka 1 → fáze A, svorka 2 → fáze B, svorka 3 → fáze C). Každý elektroměr čte dvě hodnoty:

  • Činný výkon — okamžitý výkon z shellies/shellyem3-{dID}/emeter/{i}/power (W), dělený 1000 a uložený jako kW
  • Celková spotřebovaná energie — kumulativní energie za celou dobu z .../emeter/{i}/total (Wh), dělená 1000 a uložená jako kWh

Každá CT svorka je dimenzovaná na 120 A a je neinvazivní (clip-on, bez přerušení vodiče). Přiložené 3 CT svorky jsou individuálně označené a kalibrované — mezi kanály NEJSOU zaměnitelné.

Per-fázové elektrické parametry

Každý elektroměr má čtyři service atributy pro pokročilé monitorování:

  • Napětí [V] — RMS napětí fáze-nulák na dané fázi (.../emeter/{i}/voltage)
  • Proud [A] — RMS proud měřený příslušnou CT svorkou (.../emeter/{i}/current)
  • Účiník — poměr činného a zdánlivého výkonu, rozsah −1.00 až 1.00 (.../emeter/{i}/pf)
  • Vrácená energie [Wh] — celková energie vrácená do sítě na dané fázi (.../emeter/{i}/total_returned), užitečné pro PV / obousměrné měření

Kombinace total (spotřebovaná) a total_returned (exportovaná) per fáze činí šablonu vhodnou pro solární / grid-feed instalace.

Reset čítačů energie

Každá fáze má service akci Reset Total, která publikuje reset_totals na shellies/shellyem3-{dID}/emeter/{i}/command. Vynuluje to čítače total i total_returned pro konkrétní fázi — užitečné při změně účelu měřiče nebo při zahájení nové měřicí periody.

Stykačové relé

Vestavěné 10 A relé je zpřístupněno jako spínací zařízení. Stav se čte z shellies/shellyem3-{dID}/relay/0 (on → 1, cokoli jiného → 0) a ovládá se publikováním on nebo off na .../relay/0/command. Relé je dimenzováno na 10 A / 240 V AC a typicky se zapojuje přes svorky I (vstup fáze) a O (výstup relé) k ovládání cívky externího výkonového stykače pro spínání větších zátěží.

MQTT šablona nepublikuje 3-fázový součet výkonu (total_power je na Gen1 dostupné pouze přes HTTP). Pokud potřebuješ jednu hodnotu výkonu domácnosti, vytvoř v TapHome virtuální zařízení, které sečte tři per-fázové výkony.

Řešení problémů

Žádné MQTT zprávy nepřicházejí
  1. Ověř, že MQTT je povoleno v Shelly web UI (Internet & SecurityAdvanced - Developer SettingsEnable action execution via MQTT) a zařízení se po uložení restartovalo
  2. Zkontroluj, že IP a port brokeru v zařízení odpovídají import parametrům IpAddress/Port v TapHome
  3. Přihlas se k shellies/# přes MQTT klienta (např. MQTT Explorer, mosquitto_sub) a zkontroluj, zda zařízení něco publikuje — ověř, že skutečný topic prefix (shellyem3-{dID}) odpovídá dID, které jsi zadal v TapHome
  4. Ujisti se, že MQTT broker běží a je dostupný ze Shelly 3EM i z TapHome Core
  5. Pokud se IP zařízení nedávno změnila, zkus se připojit přes mDNS hostname shelly3em-{MAC}.local a ověř dostupnost zařízení v síti
Hodnoty energie jsou nulové nebo nereálné
  1. Ověř, že každá CT svorka je připojena na správný vstup — svorka označená IA musí být připojena do svorek IA-/IA+, IB do IB-/IB+, IC do IC-/IC+. Svorky jsou kalibrovány per kanál a nejsou zaměnitelné.
  2. Zkontroluj, že šipka na těle CT svorky ukazuje ve směru toku proudu (od zdroje k zátěži). Otočená svorka produkuje záporný účiník a invertuje klasifikaci spotřeby / vrácení.
  3. Ověř, že napěťové vstupy VA, VB, VC jsou zapojeny na stejné fáze, které měří CT svorky — nesprávné párování napětí / proud produkuje chybné hodnoty výkonu a účiníku.
  4. Pokud jedna fáze ukazuje nulu, zatímco ostatní jsou správné, vyměň danou CT svorku za známou funkční a izoluj problém mezi svorkou a obvodem.
MQTT nelze povolit — je aktivní Cloud

Na Gen1 firmware jsou MQTT a Shelly Cloud vzájemně výlučné. Pokud je checkbox Enable action execution via MQTT zašedlý, nejprve vypni Shelly Cloud v Internet & SecurityCloud a poté znovu otevři MQTT nastavení.

Po povolení MQTT zmizela historie Shelly Cloud

To je očekávané chování — povolení MQTT vypne Cloud včetně jeho 365denní historie. Pokud potřebuješ zároveň real-time MQTT ovládání v TapHome i dlouhodobou historii, směruj MQTT zprávy přes vlastní broker a historická data si uchovávej v TapHome (nebo samostatném logovacím systému).

Každá CT svorka musí být vždy zapojena do svorek Shelly 3EM dříve, než ji zacvakneš kolem živého vodiče. Napětí indukované na rozpojeném sekundárním vinutí CT může dosáhnout nebezpečných hodnot a poškodit svorku.

Jak nainstalovat v TapHome

Předpoklady

  • Zařízení Shelly připojené k Wi-Fi (pokud ještě ne, podívejte se na návod na HTTP připojení)
  • MQTT broker běžící ve vaší lokální síti (např. Mosquitto, Home Assistant nebo vestavěný broker TapHome)
  • TapHome CCU ve stejné síti jako broker

Na zařízeních Gen1 povolení MQTT vypne Shelly Cloud. Obojí nemůže běžet současně. Na zařízeních Gen2/Plus toto omezení neplatí.

Krok 1 — Povolte MQTT na zařízení Shelly

Zařízení Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otevřete webové rozhraní Shelly: http://<device-ip>/
  2. Přejděte na Internet & SecurityAdvanced — MQTT
  3. Povolte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (např. 192.168.1.10:1883)
  5. Volitelně nastavte MQTT User a MQTT Password, pokud váš broker vyžaduje autentifikaci
  6. Klikněte na Save — zařízení se restartuje a připojí k brokeru

Zařízení Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otevřete webové rozhraní Shelly: http://<device-ip>/
  2. Přejděte na SettingsMQTT
  3. Povolte MQTT
  4. Nastavte Server: <broker-ip>:<port> (např. 192.168.1.10:1883)
  5. Client ID je předvyplněné ID zařízení (např. shellyplus1pm-AABBCCDDEE) — ponechte tak, pokud nemáte konkrétní důvod ke změně
  6. Klikněte na Save a restartujte zařízení

Pro ověření funkčnosti MQTT použijte MQTT klienta (např. MQTT Explorer) a přihlaste se k odběru shellies/# (Gen1) nebo <device-id>/# (Gen2). Měli byste vidět stavové zprávy ze zařízení.

Krok 2 — Zjistěte Device ID / MQTT Client ID

Některé šablony vyžadují parametr Device ID nebo MQTT Client ID. Jde o jedinečný identifikátor používaný v MQTT topicích.

  • Gen1: nachází se na štítku jako MAC adresa (např. AABBCCDDEE). Device ID = shelly<model>-<mac>, např. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachází se ve webovém rozhraní Shelly v části SettingsDevice InfoDevice ID, nebo na štítku zařízení

Krok 3 — Konfigurace v TapHome

  1. V TapHome přidejte nový modul Packet Parser (MQTT)
  2. IP Address: zadejte IP adresu MQTT brokeru (např. 192.168.1.10)
  3. Port: 1883 (výchozí; pro TLS použijte 8883)
  4. Device ID / MQTT Client ID: zadejte hodnotu z kroku 2 (pokud to šablona vyžaduje)
  5. Importujte šablonu — TapHome se automaticky přihlásí k odběru topiců zařízení

Dostupná zařízení

Shelly 3EM MQTT Modul
Vlastní proměnné
dID (string)MAC suffix Shelly 3EM, který tvoří MQTT topic prefix shellies/shellyem3-{dID}/... — najdeš ho v Shelly web UI → Settings → Device Info (první řetězec, NIKOLI hodnotu v závorkách)
Open Shelly 3EM web UI → Settings → Device Info → copy the first Device ID string (NOT the value in brackets); equals the WiFi MAC address (e.g. DC4F227649A1)
Elektroměr (Fáze 1) Elektroměr Pouze ke čtení

Činný výkon (kW) a celková energie (kWh) na fázi A — čteno z CT svorky 1, s konverzí W→kW a Wh→kWh

numeric Jednotka: kW / kWh
Servisní atributy
Vrácená energieCelková energie vrácená do sítě na fázi A (Wh) — užitečné pro PV / obousměrné měření
NapětíRMS napětí fáze-nulák na fázi A (V)
ProudRMS proud měřený CT svorkou 1 (A)
ÚčiníkÚčiník na fázi A — poměr činného a zdánlivého výkonu, rozsah −1.00 až 1.00
Servisní akce
Reset celkovýchVynuluje čítače total i total_returned energie pro fázi A

Elektroměr (Fáze 1)

Čtení celkové spotřeby
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Čtení odběru
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Listener
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/0/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/0/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Servisní atributy
returned energy [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/total_returned")
 return(parsejson(x, "Payload"));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/current")
 return(todouble(parsejson(x, "Payload")));
END
power factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/pf")
 return(todouble(parsejson(x, "Payload")));
END
Servisní akce
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/0/command", "reset_totals");
Elektroměr (Fáze 2) Elektroměr Pouze ke čtení

Činný výkon (kW) a celková energie (kWh) na fázi B — čteno z CT svorky 2, s konverzí W→kW a Wh→kWh

numeric Jednotka: kW / kWh
Servisní atributy
Vrácená energieCelková energie vrácená do sítě na fázi B (Wh) — užitečné pro PV / obousměrné měření
NapětíRMS napětí fáze-nulák na fázi B (V)
ProudRMS proud měřený CT svorkou 2 (A)
ÚčiníkÚčiník na fázi B — poměr činného a zdánlivého výkonu, rozsah −1.00 až 1.00
Servisní akce
Reset celkovýchVynuluje čítače total i total_returned energie pro fázi B

Elektroměr (Fáze 2)

Čtení celkové spotřeby
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Čtení odběru
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Listener
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/1/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
 elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/1/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Servisní atributy
total returned [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/current")
 return(todouble(parsejson(x, "Payload")));
END
power factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/pf")
 return(todouble(parsejson(x, "Payload")));
END
Servisní akce
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/1/command", "reset_totals");
Elektroměr (Fáze 3) Elektroměr Pouze ke čtení

Činný výkon (kW) a celková energie (kWh) na fázi C — čteno z CT svorky 3, s konverzí W→kW a Wh→kWh

numeric Jednotka: kW / kWh
Servisní atributy
Vrácená energieCelková energie vrácená do sítě na fázi C (Wh) — užitečné pro PV / obousměrné měření
NapětíRMS napětí fáze-nulák na fázi C (V)
ProudRMS proud měřený CT svorkou 3 (A)
ÚčiníkÚčiník na fázi C — poměr činného a zdánlivého výkonu, rozsah −1.00 až 1.00
Servisní akce
Reset celkovýchVynuluje čítače total i total_returned energie pro fázi C

Elektroměr (Fáze 3)

Čtení celkové spotřeby
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Čtení odběru
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Listener
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/2/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
 elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/2/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Servisní atributy
total returned [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/current")
 return(todouble(parsejson(x, "Payload")));
END
Power Factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/pf")
 return(todouble(parsejson(x, "Payload")));
END
Servisní akce
reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/2/command", "reset_totals");
Stykačové relé Přepínač

Vestavěné 10 A relé — typicky zapojené pro ovládání cívky externího výkonového stykače přes svorky I/O

boolean
Hodnoty / Stavy: ON · OFF

Stykačové relé

Čtení stavu přepínače
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Zápis stavu přepínače
# Simple HTTP Request:
MQTTPUBLISH("shellies/shellyem3-"+dID+"/relay/0/command", switch(St,1,"on","off"));
# VAR response := SENDHTTPREQUEST("/example/set/value=" + St);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + St, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + St + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + St + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + St, "write"); # use "append" mode to append data to existing file
Listener
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/relay/0")
 St := switch(TOSTRING(RECEIVEDMSG.PAYLOAD),"on",1,0);
END
Připojení: Packet Parser → MQTT
Možná vylepšení (10)
  • Reactive Power (per phase) — Instantaneous reactive power in VAR per phase — useful for power-quality diagnostics.
  • Short-term Energy Counter — Watt-minute counter since boot (volatile). Template uses lifetime 'total' instead.
  • Short-term Returned Energy — Watt-minute returned counter since boot (volatile).
  • Contactor Coil Power — Power draw through the on-board relay (small — coil only).
  • Contactor Coil Energy — Energy through the on-board relay (Wm).
  • Connection Status (LWT) — Last-Will-and-Testament topic — true on connect, false retained on disconnect. Could detect offline 3EM.
  • Device Announcement (JSON) — Periodic JSON announce containing id, mac, ip, fw_ver, new_fw, model.
  • Full Status JSON — Complete /status payload as JSON — could expose Wi-Fi RSSI, internal temperature, all 4 emeter channels.
  • 4th CT — Theft / Leakage Detection — Optional 4th split-core CT on IN+/IN- terminal for neutral leakage / energy-theft detection. NOT published over MQTT — only HTTP.
  • Total Active Power — 3EM does not publish total_power over MQTT (only HTTP). Sum the three phase Ed values in a TapHome virtual device.

Zdroje

Našli jste problém s touto šablonou zařízení?

Napište nám, co nefunguje, co chybí, nebo jak by se měla šablona chovat. Vaše zpětná vazba nám pomáhá udržet katalog přesný.

Ověřeno TapHome

Chcete to použít ve svém TapHome jádře?

Otevřete tuto šablonu v zákaznickém portálu a použijte ji ve svém domově, nebo navrhněte úpravu a odešlete ji zpět do katalogu.

Otevřít v portálu