---
title: "Shelly 3EM MQTT"
description: "Per-fázový činný výkon, napětí, proud, účiník a obousměrná energie plus ovládání stykače přes MQTT. TapHome šablona pro Shelly 3EM Gen1."
url: "https://taphome.com/cs/compatibility/shelly-3em-gen1-mqtt/"
language: cs
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["mqtt","electric-meter","3-phase","wifi","energy-metering","bidirectional-metering","mdns"]
  questions: ["Jak integrovat Shelly 3EM s TapHome přes MQTT?","Co měří šablona Shelly 3EM MQTT TapHome na každou fázi?","Jak najít Device ID Shelly 3EM pro MQTT šablonu?","Proč je MQTT topic prefix Shelly 3EM shellyem3- a ne shelly3em-?","Podporuje šablona Shelly 3EM MQTT obousměrné měření pro solár?","Jak resetovat per-fázové čítače energie na Shelly 3EM z TapHome?"]
---

# Shelly 3EM MQTT

Komunikace: Packet Parser → MQTT

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

> Adresa v síti
> 
> U MQTT brokeru vestavěného v TapHome zadejte v TapHome jako adresu brokeru `127.0.0.1`. V zařízení zadejte IP adresu TapHome Core a jednotce Core dejte rezervaci IP v routeru.
> 
> [Příprava sítě](https://taphome.com/cs/docs/setup/network-preparation/)

## Návod na integraci

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

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

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

| Parametr | Popis | Příklad |
|----------|-------|---------|
| **IpAddress** | IP adresa MQTT brokeru | `192.168.1.10` |
| **Port** | Port MQTT brokeru | `1883` |
| **dID** | Device ID (MAC suffix) zařízení Shelly 3EM | `DC4F227649A1` |

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

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

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

> [!WARNING]
> 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 (2,4 GHz), např. přes aplikaci Shelly nebo vlastní přístupový bod zařízení
- 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

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

U vestavěného brokeru TapHome je `<broker-ip>` IP adresa TapHome Core. Dejte jednotce Core rezervaci IP v routeru, jinak zařízení ztratí broker, když router adresu změní → [Příprava sítě](https://taphome.com/cs/docs/setup/network-preparation/).

> [!TIP]
> 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 **Settings** → **Device Info** → **Device 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:** pro vestavěný broker TapHome `127.0.0.1` (jednotka se připojuje sama k sobě, adresa se nikdy nezmění); pro externí broker jeho IP adresa (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í 4

Tato zařízení se po importu zobrazí v TapHome.

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á energie | Celková 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)                                                  |
| Proud           | RMS 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ých | Vynuluje čítače total i total\_returned energie pro fázi A |

Čtení celkové spotřeby

```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");
```

Čtení odběru

```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í atributy

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í akce

Reset total

```taphome
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á energie | Celková 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)                                                  |
| Proud           | RMS 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ých | Vynuluje čítače total i total\_returned energie pro fázi B |

Čtení celkové spotřeby

```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");
```

Čtení odběru

```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í atributy

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í akce

Reset total

```taphome
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á energie | Celková 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)                                                  |
| Proud           | RMS 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ých | Vynuluje čítače total i total\_returned energie pro fázi C |

Čtení celkové spotřeby

```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");
```

Čtení odběru

```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í atributy

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í akce

reset total

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

Stykačové relé Přepínač Čtení i zápis

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

Čtení stavu přepínače

```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 přepínače

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

**Připojení:** Packet Parser → MQTT • Hostname: `shelly3em-{MAC}.local`

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.

## Parametry importu

Tyto hodnoty zadáte při importu XML.

| Ptá se v aplikaci     | Výchozí            |
|-----------------------|--------------------|
| Mqtt Broker IP adresa | `192.168.0.1`      |
| Mqtt Broker port      | `1883`             |
| Device ID             | Zadáte při importu |

## 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ýrobců jsou © jejich příslušných vlastníků. Poskytujeme je tak, jak je výrobce zveřejnil, pouze pro informaci.

## Související dokumentace

- [MQTT Integration](https://taphome.com/cs/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/cs/docs/integration/packet-parser/)
- [Funkce Packet parser](https://taphome.com/cs/docs/script/packet-parser/)
- [Funkce pro parsování](https://taphome.com/cs/docs/script/parsing-functions/)
- [Broker MQTT](https://taphome.com/cs/docs/integration/packet-parser/mqtt-broker/)
- [Listener skripty](https://taphome.com/cs/docs/script/listener-scripts/)

