---
title: "Shelly 3EM MQTT"
description: "Per-fázový činný výkon, napätie, prúd, účinník a obojsmerná energia plus ovládanie stykača cez MQTT. TapHome šablóna pre Shelly 3EM Gen1."
url: "https://taphome.com/sk/compatibility/shelly-3em-gen1-mqtt/"
language: sk
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["mqtt","electric-meter","3-phase","wifi","energy-metering","bidirectional-metering","mdns"]
  questions: ["Ako integrovať Shelly 3EM s TapHome cez MQTT?","Čo meria šablóna Shelly 3EM MQTT TapHome na každú fázu?","Ako nájsť Device ID Shelly 3EM pre MQTT šablónu?","Prečo je MQTT topic prefix Shelly 3EM shellyem3- a nie shelly3em-?","Podporuje šablóna Shelly 3EM MQTT obojsmerné meranie pre solár?","Ako resetovať per-fázové počítadlá energie na Shelly 3EM z TapHome?"]
---

# Shelly 3EM MQTT

Komunikácia: Packet Parser → MQTT

- [Stránka produktu Shelly 3EM](https://www.shelly.com/en/products/shop/shelly-3em)

> Adresa v sieti
> 
> Pri MQTT brokeri vstavanom v TapHome zadajte v TapHome ako adresu brokera `127.0.0.1`. V zariadení zadajte IP adresu TapHome Core a jednotke Core dajte rezerváciu IP v routeri.
> 
> [Príprava siete](https://taphome.com/sk/docs/setup/network-preparation/)

## Návod na integráciu

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 & Security** → **Advanced - 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

> [!WARNING]
> 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.

> [!NOTE]
> 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 **Settings** → **Device 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:

| Parameter | Popis | Príklad |
|-----------|-------|---------|
| **IpAddress** | IP adresa MQTT brokera | `192.168.1.10` |
| **Port** | Port MQTT brokera | `1883` |
| **dID** | Device ID (MAC suffix) zariadenia Shelly 3EM | `DC4F227649A1` |

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

> [!NOTE]
> 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ží.

> [!TIP]
> 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 & Security** → **Advanced - Developer Settings** → **Enable 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 & Security** → **Cloud** 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).

> [!WARNING]
> 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 (2,4 GHz), napr. cez aplikáciu Shelly alebo vlastný prístupový bod zariadenia
- 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

> [!WARNING]
> 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 & Security** → **Advanced — 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 **Settings** → **MQTT**
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

Pri vstavanom brokeri TapHome je `<broker-ip>` IP adresa TapHome Core. Dajte jednotke Core rezerváciu IP v routeri, inak zariadenie stratí broker, keď router adresu zmení → [Príprava siete](https://taphome.com/sk/docs/setup/network-preparation/).

> [!TIP]
> 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 **Settings** → **Device Info** → **Device ID**, alebo na štítku zariadenia

### Krok 3 — Konfigurácia v TapHome

1. V TapHome pridajte nový modul **Packet Parser (MQTT)**
2. **IP Address:** pre vstavaný broker TapHome `127.0.0.1` (jednotka sa pripája sama k sebe, adresa sa nikdy nezmení); pre externý broker jeho IP adresa (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 4

Tieto zariadenia sa po importe zobrazia v TapHome.

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á energia | Celková energia vrátená do siete na fáze A (Wh) — užitočné pre PV / obojsmerné meranie |
| Napätie         | RMS napätie fáza-neutrál na fáze A (V)                                                 |
| Prúd            | RMS 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ých | Vynuluje počítadlá total aj total\_returned energie pre fázu A |

Čítanie celkovej spotreby

```taphome
# 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

```taphome
# 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

```taphome
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]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/total_returned")
 return(parsejson(x, "Payload"));
END
```

voltage \[V]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/voltage")
 return(todouble(parsejson(x, "Payload")));
END
```

current \[A]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/current")
 return(todouble(parsejson(x, "Payload")));
END
```

power factor

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/pf")
 return(todouble(parsejson(x, "Payload")));
END
```

Servisné akcie

Reset total

```taphome
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á energia | Celková energia vrátená do siete na fáze B (Wh) — užitočné pre PV / obojsmerné meranie |
| Napätie         | RMS napätie fáza-neutrál na fáze B (V)                                                 |
| Prúd            | RMS 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ých | Vynuluje počítadlá total aj total\_returned energie pre fázu B |

Čítanie celkovej spotreby

```taphome
# 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

```taphome
# 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

```taphome
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]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
```

voltage \[V]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/voltage")
 return(todouble(parsejson(x, "Payload")));
END
```

current \[A]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/current")
 return(todouble(parsejson(x, "Payload")));
END
```

power factor

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/pf")
 return(todouble(parsejson(x, "Payload")));
END
```

Servisné akcie

Reset total

```taphome
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á energia | Celková energia vrátená do siete na fáze C (Wh) — užitočné pre PV / obojsmerné meranie |
| Napätie         | RMS napätie fáza-neutrál na fáze C (V)                                                 |
| Prúd            | RMS 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ých | Vynuluje počítadlá total aj total\_returned energie pre fázu C |

Čítanie celkovej spotreby

```taphome
# 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

```taphome
# 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

```taphome
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]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
```

voltage \[V]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/voltage")
 return(todouble(parsejson(x, "Payload")));
END
```

current \[A]

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/current")
 return(todouble(parsejson(x, "Payload")));
END
```

Power Factor

```taphome
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/pf")
 return(todouble(parsejson(x, "Payload")));
END
```

Servisné akcie

reset total

```taphome
mqttpublish("shellies/shellyem3-"+dID+"/emeter/2/command", "reset_totals");
```

Stykačové relé Prepínač Čítanie aj zápis

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

Čítanie stavu prepínača

```taphome
# 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

```taphome
# 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

```taphome
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/relay/0")
 St := switch(TOSTRING(RECEIVEDMSG.PAYLOAD),"on",1,0);
END
```

**Pripojenie:** Packet Parser → MQTT • Hostname: `shelly3em-{MAC}.local`

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.

## Parametre importu

Tieto hodnoty zadáte pri importe XML.

| Pýta sa v aplikácii   | Predvolené         |
|-----------------------|--------------------|
| Mqtt Broker IP adresa | `192.168.0.1`      |
| Mqtt Broker port      | `1883`             |
| Device ID             | Zadáte pri importe |

## Zdroje

- Shelly Gen1 API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/) 2026-03-12
- Home Assistant Shelly Integration
  
  [www.home-assistant.io](https://www.home-assistant.io/integrations/shelly/) 2026-03-12
- Shelly 3EM MQTT API — device-specific topics
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-3em-mqtt) 2026-04-25
- Shelly 3EM Knowledge Base — specs & wiring
  
  [kb.shelly.cloud](https://kb.shelly.cloud/knowledge-base/shelly-3em) 2026-04-25
- Shelly 3EM — User & Safety Guide
  
  [www.netxl.com](https://www.netxl.com/shelly/docs/shelly-3em-user-manual.pdf) 2026-04-25
  
  [PDF](https://taphome.com/compatibility/devices/shelly-3em-gen1-mqtt/manufacturer/shelly-3em-user-safety-guide.pdf)

Dokumenty výrobcov sú © ich príslušných vlastníkov. Poskytujeme ich tak, ako ich zverejnil výrobca, len na informačné účely.

## Súvisiaca dokumentácia

- [MQTT Integration](https://taphome.com/sk/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/sk/docs/integration/packet-parser/)
- [Funkcie Packet parsera](https://taphome.com/sk/docs/script/packet-parser/)
- [Parsovacie funkcie](https://taphome.com/sk/docs/script/parsing-functions/)
- [MQTT broker](https://taphome.com/sk/docs/integration/packet-parser/mqtt-broker/)
- [Listener skripty](https://taphome.com/sk/docs/script/listener-scripts/)

