---
title: "Shelly 3EM MQTT"
description: "Moc, napięcie, prąd, współczynnik mocy i energia dwukierunkowa per faza plus sterowanie stycznikiem przez MQTT. Szablon TapHome dla Shelly 3EM Gen1."
url: "https://taphome.com/pl/compatibility/shelly-3em-gen1-mqtt/"
language: pl
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["mqtt","electric-meter","3-phase","wifi","energy-metering","bidirectional-metering","mdns"]
  questions: ["Jak zintegrować Shelly 3EM z TapHome przez MQTT?","Co mierzy szablon Shelly 3EM MQTT TapHome dla każdej fazy?","Jak znaleźć Device ID Shelly 3EM dla szablonu MQTT?","Dlaczego prefiks topic MQTT Shelly 3EM to shellyem3- a nie shelly3em-?","Czy szablon Shelly 3EM MQTT obsługuje pomiar dwukierunkowy dla fotowoltaiki?","Jak zresetować liczniki energii per faza w Shelly 3EM z TapHome?"]
---

# Shelly 3EM MQTT

Komunikacja: Packet Parser → MQTT

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

> Adres w sieci
> 
> Przy brokerze MQTT wbudowanym w TapHome wpisz w TapHome jako adres brokera `127.0.0.1`. W urządzeniu wpisz adres IP TapHome Core i nadaj jednostce Core rezerwację IP w routerze.
> 
> [Przygotowanie sieci](https://taphome.com/pl/docs/setup/network-preparation/)

## Poradnik integracji

Shelly 3EM to 3-fazowy licznik energii Wi-Fi z pierwszej generacji urządzeń Shelly (Gen1). Mierzy moc czynną, napięcie, prąd, współczynnik mocy oraz energię łączną niezależnie dla każdej z trzech faz przy użyciu trzech dołączonych dzielonych przekładników 120 A i zawiera wbudowany przekaźnik 10 A, zwykle używany do sterowania cewką zewnętrznego stycznika mocy. TapHome komunikuje się z urządzeniem przez MQTT — urządzenie wysyła pomiary per faza do brokera, moduł TapHome PacketParser subskrybuje drzewo topiców `shellies/#` i kieruje wartości do czterech urządzeń podrzędnych (3 liczniki energii + 1 przełącznik stycznika).

To jest **wariant MQTT** szablonu Shelly 3EM. Dostępny jest również wariant HTTP — wybierz MQTT, jeśli już uruchamiasz lokalnego brokera MQTT, chcesz aktualizacji push zamiast pollingu lub musisz dzielić licznik z wieloma odbiorcami (TapHome plus inny system). Włączenie MQTT na firmware Gen1 **wyłącza Shelly Cloud** — oba nie mogą działać równocześnie.

## Konfiguracja

### Włączenie MQTT w Shelly 3EM

Otwórz interfejs webowy Shelly 3EM (`http://{device-ip}` lub `http://shelly3em-{MAC}.local`) i skonfiguruj klienta MQTT:

1. Przejdź do **Internet & Security** → **Advanced - Developer Settings**
2. Zaznacz **Enable action execution via MQTT**
3. Wypełnij **Server** wartością `{adres IP brokera MQTT}:{port}` — zwykle `192.168.1.10:1883`
4. (Opcjonalnie) Ustaw **Username** i **Password**, jeśli broker wymaga uwierzytelnienia
5. Kliknij **SAVE** — urządzenie zrestartuje się i połączy z brokerem

> [!WARNING]
> Urządzenia Shelly Gen1 **nie obsługują** MQTT przez TLS. Komunikacja między urządzeniem a brokerem to nieszyfrowany plain TCP na porcie 1883. Nazwa użytkownika i hasło są wysyłane w postaci jawnej. Używaj brokera MQTT tylko w zaufanej sieci lokalnej.

> [!NOTE]
> Włączenie MQTT automatycznie **wyłącza Shelly Cloud** na firmware Gen1. Aby przywrócić, odznacz opcję MQTT i ponownie włącz Cloud w Internet & Security.

### Znalezienie Device ID

Szablon TapHome subskrybuje `shellies/shellyem3-{dID}/#`, gdzie `{dID}` to sufiks MAC urządzenia używany jako prefiks topic MQTT.

Aby znaleźć go w interfejsie webowym Shelly 3EM:

1. Otwórz interfejs webowy urządzenia w przeglądarce
2. Przejdź do **Settings** → **Device Info**
3. Skopiuj **pierwszy ciąg Device ID** (NIE wartość w nawiasach) — odpowiada to adresowi MAC interfejsu WiFi (np. `DC4F227649A1`)

Alternatywnie wywołaj `GET http://{device-ip}/settings` i odczytaj pole `mqtt.id`.

### Konfiguracja szablonu

Po zaimportowaniu szablonu w TapHome ustaw trzy parametry importu:

| Parametr | Opis | Przykład |
|----------|------|----------|
| **IpAddress** | Adres IP brokera MQTT | `192.168.1.10` |
| **Port** | Port brokera MQTT | `1883` |
| **dID** | Device ID (sufiks MAC) urządzenia Shelly 3EM | `DC4F227649A1` |

Moduł następnie subskrybuje `shellies/#` (QoS 0), a skrypty listener kierują wiadomości emeter i relay per faza do odpowiednich urządzeń podrzędnych. Domyślny okres aktualizacji MQTT urządzenia to 30 sekund — można go zmniejszyć przez `GET http://{device-ip}/settings?mqtt_update_period=N` (wartość `0` publikuje tylko przy zmianie).

> [!NOTE]
> Prefiks topic MQTT na linii to `shellyem3-{MAC}`, podczas gdy nazwa hosta mDNS urządzenia to `shelly3em-{MAC}.local` — Shelly używa dwóch różnych form dla tego samego urządzenia. Szablon podąża za rzeczywistym prefiksem topic MQTT (`shellyem3-`). Jeśli wiadomości MQTT nie docierają, zasubskrybuj `shellies/#` klientem MQTT, aby sprawdzić, jakiego prefiksu firmware faktycznie używa.

## Możliwości urządzenia

### Moc czynna i energia łączna per faza

Szablon tworzy trzy urządzenia liczników energii — po jednym dla każdej fazy (przekładnik 1 → faza A, przekładnik 2 → faza B, przekładnik 3 → faza C). Każdy licznik odczytuje dwie wartości:

- **Moc czynna** — moc chwilowa z `shellies/shellyem3-{dID}/emeter/{i}/power` (W), dzielona przez 1000 i zapisywana jako kW
- **Łączna zużyta energia** — kumulatywna energia za cały okres z `.../emeter/{i}/total` (Wh), dzielona przez 1000 i zapisywana jako kWh

Każdy przekładnik jest dimensjonowany na **120 A** i jest nieinwazyjny (zacisk clip-on, bez konieczności rozcinania przewodu). Dołączone 3 przekładniki są indywidualnie oznakowane i kalibrowane — NIE są wymienne między kanałami.

### Parametry elektryczne per faza

Każdy licznik udostępnia cztery atrybuty service do zaawansowanego monitoringu:

- **Napięcie** (V) — napięcie skuteczne (RMS) faza-zero na danej fazie (`.../emeter/{i}/voltage`)
- **Prąd** (A) — prąd skuteczny (RMS) mierzony przez odpowiedni przekładnik (`.../emeter/{i}/current`)
- **Współczynnik mocy** — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00 (`.../emeter/{i}/pf`)
- **Energia oddana** (Wh) — łączna energia oddana **do** sieci na danej fazie (`.../emeter/{i}/total_returned`), użyteczna dla PV / pomiaru dwukierunkowego

Kombinacja `total` (zużyta) i `total_returned` (eksportowana) per faza czyni szablon odpowiednim dla instalacji solarnych / oddających energię do sieci.

### Reset liczników energii

Każda faza ma akcję service **Reset Total**, która publikuje `reset_totals` na `shellies/shellyem3-{dID}/emeter/{i}/command`. Zeruje to liczniki `total` i `total_returned` dla konkretnej fazy — przydatne przy zmianie zastosowania licznika lub rozpoczęciu nowego okresu pomiaru.

### Przekaźnik stycznikowy

Wbudowany przekaźnik 10 A jest udostępniony jako urządzenie przełącznikowe. Stan jest odczytywany z `shellies/shellyem3-{dID}/relay/0` (`on` → 1, cokolwiek innego → 0) i sterowany poprzez publikację `on` lub `off` na `.../relay/0/command`. Przekaźnik jest dimensjonowany na 10 A / 240 V AC i zwykle podłączany przez zaciski `I` (wejście fazy) i `O` (wyjście przekaźnika) do sterowania cewką zewnętrznego stycznika mocy do przełączania większych obciążeń.

> [!TIP]
> Szablon MQTT nie publikuje 3-fazowej sumy mocy (`total_power` na Gen1 jest dostępne tylko przez HTTP). Utwórz w TapHome wirtualne urządzenie sumujące trzy wartości mocy per faza, jeśli potrzebujesz pojedynczej wartości mocy domowej.

## Rozwiązywanie problemów

### Brak odbieranych wiadomości MQTT

1. Potwierdź, że MQTT jest włączony w Shelly web UI (**Internet & Security** → **Advanced - Developer Settings** → **Enable action execution via MQTT**) i urządzenie zrestartowało się po zapisaniu
2. Sprawdź, że IP i port brokera w urządzeniu odpowiadają parametrom importu `IpAddress`/`Port` w TapHome
3. Zasubskrybuj `shellies/#` klientem MQTT (np. MQTT Explorer, `mosquitto_sub`) i sprawdź, czy urządzenie cokolwiek publikuje — zweryfikuj, że rzeczywisty prefiks topic (`shellyem3-{dID}`) odpowiada `dID` wprowadzonemu w TapHome
4. Upewnij się, że broker MQTT działa i jest osiągalny zarówno z Shelly 3EM, jak i z TapHome Core
5. Jeśli IP urządzenia ostatnio się zmienił, spróbuj połączyć się przez nazwę hosta mDNS `shelly3em-{MAC}.local`, aby zweryfikować dostępność urządzenia w sieci

### Wartości energii pokazują zero lub nieprawdopodobne wartości

1. Potwierdź, że każdy przekładnik jest podłączony do **właściwego** wejścia — przekładnik oznaczony `IA` musi być podłączony do zacisków `IA-/IA+`, `IB` do `IB-/IB+`, `IC` do `IC-/IC+`. Przekładniki są kalibrowane per kanał i nie są wymienne.
2. Sprawdź, że **strzałka na obudowie przekładnika** wskazuje kierunek przepływu prądu (od źródła do obciążenia). Odwrócony przekładnik daje ujemny współczynnik mocy i odwraca klasyfikację zużycia / oddania.
3. Sprawdź, że wejścia napięciowe `VA`, `VB`, `VC` są podłączone do tych samych faz, które mierzą przekładniki — błędne sparowanie napięcie / prąd daje błędne wartości mocy i współczynnika mocy.
4. Jeśli pojedyncza faza pokazuje zero, podczas gdy pozostałe są poprawne, wymień ten przekładnik na sprawdzony i zlokalizuj problem między przekładnikiem a obwodem.

### Nie można włączyć MQTT — Cloud jest aktywny

Na firmware Gen1 MQTT i Shelly Cloud są wzajemnie wykluczające się. Jeśli pole **Enable action execution via MQTT** jest wyszarzone, najpierw wyłącz Shelly Cloud w **Internet & Security** → **Cloud**, a potem ponownie otwórz ustawienia MQTT.

### Historia Shelly Cloud zniknęła po włączeniu MQTT

To zachowanie oczekiwane — włączenie MQTT wyłącza Cloud wraz z jego 365-dniową historią. Jeśli potrzebujesz zarówno sterowania MQTT w czasie rzeczywistym w TapHome, jak i długoterminowej historii, kieruj wiadomości MQTT przez własnego brokera i przechowuj dane historyczne w TapHome (lub osobnym systemie logowania).

> [!WARNING]
> Każdy przekładnik musi być **zawsze** podłączony do zacisków Shelly 3EM **zanim** zostanie zacisnięty wokół przewodu pod napięciem. Napięcie indukowane na otwartym uzwojeniu wtórnym przekładnika może osiągać niebezpieczne wartości i uszkodzić przekładnik.

## Jak zainstalować w TapHome

### Wymagania wstępne

- Urządzenie Shelly połączone z Wi-Fi (2,4 GHz), np. przez aplikację Shelly lub własny punkt dostępowy urządzenia
- Broker MQTT działający w sieci lokalnej (np. Mosquitto, Home Assistant lub wbudowany broker TapHome)
- TapHome CCU w tej samej sieci co broker

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

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

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

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

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

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

Przy wbudowanym brokerze TapHome `<broker-ip>` to adres IP TapHome Core. Nadaj jednostce Core rezerwację IP w routerze, w przeciwnym razie urządzenie straci brokera, gdy router zmieni adres → [Przygotowanie sieci](https://taphome.com/pl/docs/setup/network-preparation/).

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

### Krok 2 — Znajdź Device ID / MQTT Client ID

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

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

### Krok 3 — Konfiguracja w TapHome

1. W TapHome dodaj nowy moduł **Packet Parser (MQTT)**
2. **IP Address:** dla wbudowanego brokera TapHome `127.0.0.1` (jednostka łączy się sama ze sobą, adres nigdy się nie zmienia); dla zewnętrznego brokera jego adres IP (np. `192.168.1.10`)
3. **Port:** `1883` (domyślny; użyj `8883` dla TLS)
4. **Device ID / MQTT Client ID:** wprowadź wartość z kroku 2 (jeśli wymagane przez szablon)
5. Zaimportuj szablon — TapHome automatycznie zasubskrybuje topiki urządzenia

## Dostępne urządzenia 4

Te urządzenia pojawią się w TapHome po imporcie.

Shelly 3EM MQTT Moduł

Zmienne niestandardowe

`dID` (string) Sufiks MAC Shelly 3EM tworzący prefiks topic MQTT shellies/shellyem3-{dID}/... — znajdziesz go w Shelly web UI → Settings → Device Info (pierwszy ciąg, NIE wartość w nawiasach)

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)

Licznik energii (Faza 1) Licznik energii Tylko do odczytu

Moc czynna (kW) i energia łączna (kWh) na fazie A — odczytywane z przekładnika 1, z konwersją W→kW i Wh→kWh

numeric Jednostka: kW / kWh

Atrybuty serwisowe

|                   |                                                                                             |
|-------------------|---------------------------------------------------------------------------------------------|
| Energia oddana    | Łączna energia oddana do sieci na fazie A (Wh) — użyteczna dla PV / pomiaru dwukierunkowego |
| Napięcie          | Napięcie skuteczne (RMS) faza-zero na fazie A (V)                                           |
| Prąd              | Prąd skuteczny (RMS) mierzony przez przekładnik 1 (A)                                       |
| Współczynnik mocy | Współczynnik mocy na fazie A — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00      |

Akcje serwisowe

|                   |                                                            |
|-------------------|------------------------------------------------------------|
| Reset całkowitych | Zeruje liczniki total i total\_returned energii dla fazy A |

Odczyt całkowitego zużycia

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

Odczyt zapotrzebowania

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

Nasłuchiwanie

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

Atrybuty serwisowe

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

Akcje serwisowe

Reset total

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

Licznik energii (Faza 2) Licznik energii Tylko do odczytu

Moc czynna (kW) i energia łączna (kWh) na fazie B — odczytywane z przekładnika 2, z konwersją W→kW i Wh→kWh

numeric Jednostka: kW / kWh

Atrybuty serwisowe

|                   |                                                                                             |
|-------------------|---------------------------------------------------------------------------------------------|
| Energia oddana    | Łączna energia oddana do sieci na fazie B (Wh) — użyteczna dla PV / pomiaru dwukierunkowego |
| Napięcie          | Napięcie skuteczne (RMS) faza-zero na fazie B (V)                                           |
| Prąd              | Prąd skuteczny (RMS) mierzony przez przekładnik 2 (A)                                       |
| Współczynnik mocy | Współczynnik mocy na fazie B — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00      |

Akcje serwisowe

|                   |                                                            |
|-------------------|------------------------------------------------------------|
| Reset całkowitych | Zeruje liczniki total i total\_returned energii dla fazy B |

Odczyt całkowitego zużycia

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

Odczyt zapotrzebowania

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

Nasłuchiwanie

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

Atrybuty serwisowe

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

Akcje serwisowe

Reset total

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

Licznik energii (Faza 3) Licznik energii Tylko do odczytu

Moc czynna (kW) i energia łączna (kWh) na fazie C — odczytywane z przekładnika 3, z konwersją W→kW i Wh→kWh

numeric Jednostka: kW / kWh

Atrybuty serwisowe

|                   |                                                                                             |
|-------------------|---------------------------------------------------------------------------------------------|
| Energia oddana    | Łączna energia oddana do sieci na fazie C (Wh) — użyteczna dla PV / pomiaru dwukierunkowego |
| Napięcie          | Napięcie skuteczne (RMS) faza-zero na fazie C (V)                                           |
| Prąd              | Prąd skuteczny (RMS) mierzony przez przekładnik 3 (A)                                       |
| Współczynnik mocy | Współczynnik mocy na fazie C — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00      |

Akcje serwisowe

|                   |                                                            |
|-------------------|------------------------------------------------------------|
| Reset całkowitych | Zeruje liczniki total i total\_returned energii dla fazy C |

Odczyt całkowitego zużycia

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

Odczyt zapotrzebowania

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

Nasłuchiwanie

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

Atrybuty serwisowe

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

Akcje serwisowe

reset total

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

Przekaźnik stycznikowy Przełącznik Odczyt i zapis

Wbudowany przekaźnik 10 A — zwykle podłączony do sterowania cewką zewnętrznego stycznika mocy przez zaciski I/O

boolean

Wartości / Stany: ON · OFF

Odczyt stanu przełącznika

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

Zapis stanu przełącznika

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

Nasłuchiwanie

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

**Połączenie:** Packet Parser → MQTT • Hostname: `shelly3em-{MAC}.local`

Możliwe ulepszenia (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

Te wartości podajesz podczas importu pliku XML.

| Pytanie w aplikacji  | Domyślnie           |
|----------------------|---------------------|
| Mqtt Broker Adres IP | `192.168.0.1`       |
| Mqtt Broker port     | `1883`              |
| Device ID            | Podaj przy imporcie |

## Źródła

- 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 producentów są © ich właścicieli. Udostępniamy je w formie opublikowanej przez producenta, wyłącznie w celach informacyjnych.

## Powiązana dokumentacja

- [MQTT Integration](https://taphome.com/pl/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/pl/docs/integration/packet-parser/)
- [Funkcje Packet parser](https://taphome.com/pl/docs/script/packet-parser/)
- [Funkcje parsowania](https://taphome.com/pl/docs/script/parsing-functions/)
- [Broker MQTT](https://taphome.com/pl/docs/integration/packet-parser/mqtt-broker/)
- [Skrypty listener](https://taphome.com/pl/docs/script/listener-scripts/)

