TapHome

Shelly 3EM MQTT

Packet Parser → MQTT
Pridal
Posledná aktualizácia: 05. 2026
Shelly 3EM MQTT

Shelly 3EM je 3-fázový Wi-Fi elektromer z prvej generácie zariadení Shelly (Gen1). Meria činný výkon, napätie, prúd, účinník a celkovú spotrebovanú energiu nezávisle pre každú z troch fáz pomocou troch priložených 120 A delených CT svoriek a obsahuje vstavané 10 A relé, ktoré sa typicky používa na ovládanie cievky externého výkonového stykača. TapHome komunikuje so zariadením cez MQTT — zariadenie posiela per-fázové merania na broker, modul TapHome PacketParser sa prihlasuje na strom topicov shellies/# a hodnoty smeruje do štyroch detských zariadení (3 elektromery + 1 stykačový spínač).

Toto je MQTT variant šablóny Shelly 3EM. K dispozícii je aj HTTP variant — MQTT zvoľ, ak už máš lokálny MQTT broker, chceš push-based aktualizácie namiesto pollingu, alebo potrebuješ zdieľať merač s viacerými spotrebiteľmi (TapHome plus iný systém). Povolenie MQTT na Gen1 firmware vypne Shelly Cloud — obe služby nemôžu bežať súčasne.

Konfigurácia

Povolenie MQTT v Shelly 3EM

Otvor webové rozhranie Shelly 3EM (http://{device-ip} alebo http://shelly3em-{MAC}.local) a nakonfiguruj MQTT klienta:

  1. Prejdi do Internet & SecurityAdvanced - Developer Settings
  2. Zaškrtni Enable action execution via MQTT
  3. Vyplň Server hodnotou {IP adresa MQTT brokera}:{port} — typicky 192.168.1.10:1883
  4. (Voliteľné) Nastav Username a Password, ak broker vyžaduje autentifikáciu
  5. Klikni SAVE — zariadenie sa reštartuje a pripojí na broker

Gen1 zariadenia Shelly nepodporujú MQTT cez TLS. Komunikácia medzi zariadením a brokerom je nešifrovaný plain TCP na porte 1883. Používateľské meno a heslo sa posielajú v plaintexte. MQTT broker používaj len v dôveryhodnej lokálnej sieti.

Povolenie MQTT automaticky vypne Shelly Cloud na Gen1 firmware. Zmenu vrátiš odškrtnutím MQTT a opätovným zapnutím Cloud v Internet & Security.

Zistenie Device ID

Šablóna TapHome sa prihlasuje na shellies/shellyem3-{dID}/#, kde {dID} je MAC suffix zariadenia použitý ako MQTT topic prefix.

Ako ho nájsť vo webovom rozhraní Shelly 3EM:

  1. Otvor webové rozhranie zariadenia v prehliadači
  2. Prejdi do SettingsDevice Info
  3. Skopíruj prvý reťazec Device ID (NIE hodnotu v zátvorkách) — zodpovedá MAC adrese WiFi rozhrania (napr. DC4F227649A1)

Alternatívne zavolaj GET http://{device-ip}/settings a prečítaj pole mqtt.id.

Nastavenie šablóny

Po importe šablóny v TapHome nastav tri import parametre:

ParameterPopisPríklad
IpAddressIP adresa MQTT brokera192.168.1.10
PortPort MQTT brokera1883
dIDDevice ID (MAC suffix) zariadenia Shelly 3EMDC4F227649A1

Modul sa následne prihlási na shellies/# (QoS 0) a listener skripty smerujú per-fázové emeter a relay správy do zodpovedajúcich detských zariadení. Predvolená MQTT perióda aktualizácie zariadenia je 30 sekúnd — dá sa znížiť cez GET http://{device-ip}/settings?mqtt_update_period=N (hodnota 0 znamená publikovať len pri zmene).

MQTT topic prefix v komunikácii je shellyem3-{MAC}, zatiaľ čo mDNS hostname zariadenia je shelly3em-{MAC}.local — Shelly používa pre to isté zariadenie dva rôzne formáty. Šablóna sleduje skutočný MQTT topic prefix (shellyem3-). Ak MQTT správy neprichádzajú, prihlás sa na shellies/# cez MQTT klienta a over, aký prefix firmware skutočne používa.

Schopnosti zariadenia

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

Šablóna vytvára tri elektromery — jeden pre každú fázu (CT svorka 1 → fáza A, svorka 2 → fáza B, svorka 3 → fáza C). Každý elektromer číta dve hodnoty:

  • Činný výkon — okamžitý výkon z shellies/shellyem3-{dID}/emeter/{i}/power (W), delený 1000 a uložený ako kW
  • Celková spotrebovaná energia — kumulatívna energia za celú dobu z .../emeter/{i}/total (Wh), delená 1000 a uložená ako kWh

Každá CT svorka je dimenzovaná na 120 A a je neinvazívna (clip-on, bez prerušenia vodiča). Priložené 3 CT svorky sú individuálne označené a kalibrované — medzi kanálmi NIE sú zameniteľné.

Per-fázové elektrické parametre

Každý elektromer má štyri service atribúty pre pokročilé monitorovanie:

  • Napätie [V] — RMS napätie fáza-neutrál na danej fáze (.../emeter/{i}/voltage)
  • Prúd [A] — RMS prúd meraný príslušnou CT svorkou (.../emeter/{i}/current)
  • Účinník — pomer činného a zdanlivého výkonu, rozsah −1.00 až 1.00 (.../emeter/{i}/pf)
  • Vrátená energia [Wh] — celková energia vrátená do siete na danej fáze (.../emeter/{i}/total_returned), užitočné pre PV / obojsmerné meranie

Kombinácia total (spotrebovaná) a total_returned (exportovaná) per fázu robí šablónu vhodnou pre solárne / grid-feed inštalácie.

Reset počítadiel energie

Každá fáza má service akciu Reset Total, ktorá publikuje reset_totals na shellies/shellyem3-{dID}/emeter/{i}/command. Vynuluje to počítadlá total aj total_returned pre konkrétnu fázu — užitočné pri zmene použitia merača alebo začatí novej meracej periódy.

Stykačové relé

Vstavané 10 A relé je sprístupnené ako spínacie zariadenie. Stav sa číta z shellies/shellyem3-{dID}/relay/0 (on → 1, čokoľvek iné → 0) a ovláda sa publikovaním on alebo off na .../relay/0/command. Relé je dimenzované na 10 A / 240 V AC a typicky sa zapája cez svorky I (vstup fázy) a O (výstup relé) na ovládanie cievky externého výkonového stykača pre spínanie väčších záťaží.

MQTT šablóna nepublikuje 3-fázový súčet výkonu (total_power je na Gen1 dostupné len cez HTTP). Ak potrebuješ jednu hodnotu výkonu domácnosti, vytvor v TapHome virtuálne zariadenie, ktoré spočíta tri per-fázové výkony.

Riešenie problémov

Žiadne MQTT správy neprichádzajú
  1. Over, že MQTT je povolené v Shelly web UI (Internet & SecurityAdvanced - Developer SettingsEnable action execution via MQTT) a zariadenie sa po uložení reštartovalo
  2. Skontroluj, že IP a port brokera v zariadení sa zhodujú s import parametrami IpAddress/Port v TapHome
  3. Prihlás sa na shellies/# cez MQTT klienta (napr. MQTT Explorer, mosquitto_sub) a skontroluj, či zariadenie niečo publikuje — over, že skutočný topic prefix (shellyem3-{dID}) sa zhoduje s dID, ktoré si zadal v TapHome
  4. Uisti sa, že MQTT broker beží a je dostupný zo Shelly 3EM aj z TapHome Core
  5. Ak sa IP zariadenia nedávno zmenilo, skús sa pripojiť cez mDNS hostname shelly3em-{MAC}.local a over dostupnosť zariadenia v sieti
Hodnoty energie sú nulové alebo nereálne
  1. Over, že každá CT svorka je pripojená na správny vstup — svorka označená IA musí byť pripojená do svoriek IA-/IA+, IB do IB-/IB+, IC do IC-/IC+. Svorky sú kalibrované per kanál a nie sú zameniteľné.
  2. Skontroluj, že šípka na tele CT svorky ukazuje v smere toku prúdu (od zdroja k záťaži). Otočená svorka produkuje záporný účinník a invertuje klasifikáciu spotreby / vrátenia.
  3. Over, že napäťové vstupy VA, VB, VC sú zapojené na rovnaké fázy, ktoré merajú CT svorky — nesprávne párovanie napätie / prúd produkuje chybné hodnoty výkonu a účinníka.
  4. Ak jedna fáza ukazuje nulu, kým ostatné sú správne, vymeň danú CT svorku za známu funkčnú a izoluj problém medzi svorkou a obvodom.
MQTT sa nedá povoliť — je aktívny Cloud

Na Gen1 firmware sú MQTT a Shelly Cloud vzájomne výlučné. Ak je checkbox Enable action execution via MQTT vyšedený, najprv vypni Shelly Cloud v Internet & SecurityCloud a potom znova otvor MQTT nastavenia.

Po povolení MQTT zmizla história Shelly Cloud

To je očakávané správanie — povolenie MQTT vypne Cloud vrátane jeho 365-dňovej histórie. Ak potrebuješ zároveň real-time MQTT ovládanie v TapHome aj dlhodobú históriu, smeruj MQTT správy cez vlastný broker a historické dáta si uchovávaj v TapHome (alebo samostatnom logovacom systéme).

Každá CT svorka musí byť vždy zapojená do svoriek Shelly 3EM predtým, než ju zacvakneš okolo živého vodiča. Napätie indukované na rozopnutom sekundárnom vinutí CT môže dosiahnuť nebezpečné hodnoty a poškodiť svorku.

Ako nainštalovať v TapHome

Predpoklady

  • Zariadenie Shelly pripojené k Wi-Fi (ak ešte nie, pozrite návod na HTTP pripojenie)
  • MQTT broker bežiaci vo vašej lokálnej sieti (napr. Mosquitto, Home Assistant alebo vstavaný broker TapHome)
  • TapHome CCU v rovnakej sieti ako broker

Na zariadeniach Gen1 povolenie MQTT vypne Shelly Cloud. Oboje nemôže bežať súčasne. Na zariadeniach Gen2/Plus toto obmedzenie neplatí.

Krok 1 — Povoľte MQTT na zariadení Shelly

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

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na Internet & SecurityAdvanced — MQTT
  3. Povoľte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Voliteľne nastavte MQTT User a MQTT Password, ak váš broker vyžaduje autentifikáciu
  6. Kliknite na Save — zariadenie sa reštartuje a pripojí k brokeru

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

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na SettingsMQTT
  3. Povoľte MQTT
  4. Nastavte Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Client ID je predvyplnené ID zariadenia (napr. shellyplus1pm-AABBCCDDEE) — ponechajte tak, pokiaľ nemáte konkrétny dôvod na zmenu
  6. Kliknite na Save a reštartujte zariadenie

Na overenie funkčnosti MQTT použite MQTT klienta (napr. MQTT Explorer) a prihláste sa na odber shellies/# (Gen1) alebo <device-id>/# (Gen2). Mali by ste vidieť stavové správy zo zariadenia.

Krok 2 — Zistite Device ID / MQTT Client ID

Niektoré šablóny vyžadujú parameter Device ID alebo MQTT Client ID. Ide o jedinečný identifikátor používaný v MQTT topicoch.

  • Gen1: nachádza sa na štítku ako MAC adresa (napr. AABBCCDDEE). Device ID = shelly<model>-<mac>, napr. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachádza sa vo webovom rozhraní Shelly v časti SettingsDevice InfoDevice ID, alebo na štítku zariadenia

Krok 3 — Konfigurácia v TapHome

  1. V TapHome pridajte nový modul Packet Parser (MQTT)
  2. IP Address: zadajte IP adresu MQTT brokera (napr. 192.168.1.10)
  3. Port: 1883 (predvolený; pre TLS použite 8883)
  4. Device ID / MQTT Client ID: zadajte hodnotu z kroku 2 (ak to šablóna vyžaduje)
  5. Importujte šablónu — TapHome sa automaticky prihlási na odber topicov zariadenia

Dostupné zariadenia

Shelly 3EM MQTT Modul
Vlastné premenné
dID (string)MAC suffix Shelly 3EM, ktorý tvorí MQTT topic prefix shellies/shellyem3-{dID}/... — nájdeš ho v Shelly web UI → Settings → Device Info (prvý reťazec, NIE hodnota v zátvorká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)
Elektromer (Fáza 1) Elektromer Len na čítanie

Činný výkon (kW) a celková energia (kWh) na fáze A — čítané z CT svorky 1, s konverziou W→kW a Wh→kWh

numeric Jednotka: kW / kWh
Servisné atribúty
Vrátená energiaCelková energia vrátená do siete na fáze A (Wh) — užitočné pre PV / obojsmerné meranie
NapätieRMS napätie fáza-neutrál na fáze A (V)
PrúdRMS prúd meraný CT svorkou 1 (A)
ÚčinníkÚčinník na fáze A — pomer činného a zdanlivého výkonu, rozsah −1.00 až 1.00
Servisné akcie
Reset celkovýchVynuluje počítadlá total aj total_returned energie pre fázu A

Elektromer (Fáza 1)

Čítanie celkovej spotreby
# 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");
Čítanie odberu
# 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é atribúty
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é akcie
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/0/command", "reset_totals");
Elektromer (Fáza 2) Elektromer Len na čítanie

Činný výkon (kW) a celková energia (kWh) na fáze B — čítané z CT svorky 2, s konverziou W→kW a Wh→kWh

numeric Jednotka: kW / kWh
Servisné atribúty
Vrátená energiaCelková energia vrátená do siete na fáze B (Wh) — užitočné pre PV / obojsmerné meranie
NapätieRMS napätie fáza-neutrál na fáze B (V)
PrúdRMS prúd meraný CT svorkou 2 (A)
ÚčinníkÚčinník na fáze B — pomer činného a zdanlivého výkonu, rozsah −1.00 až 1.00
Servisné akcie
Reset celkovýchVynuluje počítadlá total aj total_returned energie pre fázu B

Elektromer (Fáza 2)

Čítanie celkovej spotreby
# 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");
Čítanie odberu
# 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é atribúty
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é akcie
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/1/command", "reset_totals");
Elektromer (Fáza 3) Elektromer Len na čítanie

Činný výkon (kW) a celková energia (kWh) na fáze C — čítané z CT svorky 3, s konverziou W→kW a Wh→kWh

numeric Jednotka: kW / kWh
Servisné atribúty
Vrátená energiaCelková energia vrátená do siete na fáze C (Wh) — užitočné pre PV / obojsmerné meranie
NapätieRMS napätie fáza-neutrál na fáze C (V)
PrúdRMS prúd meraný CT svorkou 3 (A)
ÚčinníkÚčinník na fáze C — pomer činného a zdanlivého výkonu, rozsah −1.00 až 1.00
Servisné akcie
Reset celkovýchVynuluje počítadlá total aj total_returned energie pre fázu C

Elektromer (Fáza 3)

Čítanie celkovej spotreby
# 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");
Čítanie odberu
# 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é atribúty
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é akcie
reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/2/command", "reset_totals");
Stykačové relé Prepínač

Vstavané 10 A relé — typicky zapojené na ovládanie cievky externého výkonového stykača cez svorky I/O

boolean
Hodnoty / Stavy: ON · OFF

Stykačové relé

Čítanie stavu prepínača
# 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 prepínača
# 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
Pripojenie: Packet Parser → MQTT
Možné vylepšenia (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 ste problém s touto šablónou zariadenia?

Napíšte nám, čo nefunguje, čo chýba, alebo ako by sa mala šablóna správať. Vaša spätná väzba nám pomáha udržiavať katalóg presný.

Overené TapHomom

Chcete to použiť vo svojom TapHome jadre?

Otvorte túto šablónu v Customer Portali a aplikujte ju na svoj domov, alebo navrhnite zmenu a odošlite ju späť do katalógu.

Otvoriť v portáli