TapHome

Shelly EM

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 03. 2026
Shelly EM

Shelly EM to jednofazowy licznik energii z dwoma niezależnymi kanałami pomiarowymi i wyjściem przekaźnikowym 2A do sterowania stycznikiem. Każdy kanał łączy się z zewnętrznym zaciskiem CT (przekładnikiem prądowym) — dostępnym w wariantach 50A i 120A — umożliwiając nieinwazyjne monitorowanie dwóch oddzielnych obwodów jednocześnie. TapHome integruje się z urządzeniem lokalnie przez Wi-Fi za pomocą HTTP REST API lub MQTT. Połączenie z chmurą nie jest wymagane.

Dostępne są dwa szablony TapHome: szablon HTTP odpytujący endpointy REST urządzenia oraz szablon MQTT odbierający dane przez brokera MQTT. Oba udostępniają te same trzy urządzenia — dwa liczniki energii (po jednym na kanał) i przełącznik stycznikowy.

Konfiguracja

Szablon HTTP

Szablon HTTP wymaga tylko adresu IP urządzenia (lub nazwy hosta mDNS). TapHome odpytuje trzy endpointy co 15 sekund:

  • /emeter/0/ — dane energetyczne kanału 1
  • /emeter/1/ — dane energetyczne kanału 2
  • settings/relay/0 — stan przekaźnika i sprawdzenie harmonogramu

Skrypt odczytu na poziomie modułu buforuje każdą odpowiedź w osobnej zmiennej (emeterZero, emeterOne, status), dzięki czemu skrypty poszczególnych urządzeń mogą przetwarzać dane bez nadmiarowych wywołań HTTP.

Szablon sprawdza również stan harmonogramu przekaźnika z settings/relay/0. Jeśli wewnętrzny harmonogram jest włączony na urządzeniu Shelly, szablon zgłasza błąd — wyłącz harmonogram w interfejsie webowym Shelly, aby uniknąć konfliktów z automatyzacjami TapHome.

Szablon MQTT

Szablon MQTT wymaga IP brokera, portu i Shelly Device ID (format: shellyem-XXXXXXXXXXXX, gdzie X = szesnastkowe cyfry MAC). Device ID znajdziesz w interfejsie webowym Shelly pod Settings > Device Info.

Po włączeniu MQTT na Shelly EM (Internet & Security > Advanced — MQTT), TapHome subskrybuje topici shellies/shellyem-{deviceID}/ i odbiera dane przez skrypty nasłuchujące.

Na urządzeniach Shelly Gen1 włączenie MQTT wyłącza Shelly Cloud. Oba nie mogą działać jednocześnie.

Możliwości urządzenia

Pomiar energii (na kanał)

Każdy kanał jest widoczny w TapHome jako niezależny licznik energii:

  • Moc chwilowa — moc czynna w kW (przeliczona z W przez podzielenie przez 1000)
  • Energia skumulowana — całkowita zużyta energia w kWh (HTTP: przeliczona z Wh; MQTT: używa trwałego topica total w Wh)

Szablon HTTP odczytuje pola power i total z odpowiedzi JSON /emeter/{i}/. Szablon MQTT nasłuchuje topica emeter/{i}/energy (watominuty, dzielone przez 60 000 na kWh) i topica emeter/{i}/total (watogodziny, trwałe między restartami).

Topic MQTT energy zeruje się przy restarcie urządzenia. Dla trwałego śledzenia energii szablon odczytuje również topic total, który przetrwa restarty.

Każdy kanał udostępnia również trzy atrybuty serwisowe:

AtrybutJednostkaOpis
NapięcieVSkuteczne napięcie sieciowe
Energia zwróconaWhCałkowita energia oddana do sieci — do pomiarów solarnych/dwukierunkowych
Moc biernaVARChwilowa moc bierna

Szablon MQTT udostępnia tylko napięcie jako atrybut serwisowy na kanał. Moc bierna i energia zwrócona są dostępne tylko w szablonie HTTP.

Przełącznik stycznikowy

Wyjście przekaźnikowe jest widoczne w TapHome jako przełącznik. Przekaźnik jest wymiarowany na 2A / 230 VAC — przeznaczony wyłącznie do sterowania stycznikiem, nie do bezpośredniego przełączania obciążeń.

  • HTTP: odczytuje ison z settings/relay/0 i steruje przez /relay/0?turn=on lub /relay/0?turn=off
  • MQTT: odczytuje z topica shellies/shellyem-{id}/relay/0 i publikuje on/off na shellies/shellyem-{id}/relay/0/command

Przekaźnik jest wymiarowany tylko na 2A. Dla obciążeń przekraczających tę wartość znamionową zawsze używaj zewnętrznego stycznika. Bezpośrednie podłączenie obciążeń dużej mocy uszkodzi przekaźnik.

Dodatkowe możliwości

Shelly EM dostarcza również współczynnik mocy (0,00–1,00) i flagę ważności pomiaru na kanał, konfigurację kanałów (stosunek CT, limit maksymalnej mocy), reset licznika energii, timer automatycznego wyłączenia na przekaźniku oraz siłę sygnału Wi-Fi. Przez MQTT dostępne są również dodatkowe topici dla mocy w czasie rzeczywistym, mocy biernej i energii zwróconej na kanał. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Urządzenie nie odpowiada (HTTP)
  1. Sprawdź, czy Shelly EM jest podłączony do Wi-Fi i ma prawidłowy adres IP
  2. Otwórz http://{device-ip}/shelly w przeglądarce — jeśli odpowiada JSON zawierający "type":"SHEM", urządzenie jest osiągalne
  3. Upewnij się, że TapHome CCU i Shelly EM są w tej samej sieci / VLAN
Brak danych na jednym kanale
  1. Sprawdź, czy zacisk CT jest podłączony do prawidłowego gniazda 3,5 mm (kanał 0 lub kanał 1)
  2. Upewnij się, że prąd płynie przez monitorowany przewód — zacisk CT musi otaczać pojedynczy przewód, nie cały kabel
  3. Ręcznie odpytaj /emeter/0/ i /emeter/1/ i potwierdź niezerowe wartości power
Wiadomości MQTT nie docierają
  1. Potwierdź, że MQTT jest włączone w interfejsie webowym Shelly (Internet & Security > Advanced — MQTT)
  2. Sprawdź, czy adres i port brokera są poprawne zarówno w urządzeniu Shelly, jak i w ustawieniach modułu TapHome
  3. Zweryfikuj, że zmienna deviceID dokładnie odpowiada Shelly Device ID (np. B929CC)
  4. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji shellies/# i weryfikacji, czy urządzenie publikuje wiadomości
Błąd konfliktu harmonogramu

Szablon HTTP sprawdza pole schedule w settings/relay/0. Jeśli urządzenie Shelly ma włączony wewnętrzny harmonogram, szablon zgłasza błąd. Wyłącz harmonogram w interfejsie webowym Shelly (Settings > Relay > Schedule) — zamiast tego użyj automatyzacji TapHome.

Urządzenia Shelly Gen1 obsługują tylko 2 równoczesne połączenia HTTP. Jeśli TapHome i inny system (np. Home Assistant) jednocześnie odpytują to samo urządzenie, komunikacja może stać się zawodna. Rozważ przejście na szablon MQTT w środowiskach z wieloma systemami.

Jak zainstalować w TapHome

Wymagania wstępne

  • Urządzenie Shelly zainstalowane i włączone
  • Lokalna sieć Wi-Fi (2,4 GHz)
  • TapHome CCU w tej samej sieci

Krok 1 — Podłącz Shelly do Wi-Fi

Opcja A — Aplikacja Shelly (zalecana):

  1. Pobierz aplikację Shelly (iOS / Android)
  2. Dotknij +Add Device i postępuj zgodnie z kreatorem parowania Bluetooth
  3. Wprowadź dane logowania Wi-Fi, gdy zostaniesz o to poproszony

Opcja B — Tryb AP (bez aplikacji):

  1. Przy pierwszym uruchomieniu urządzenie tworzy hotspot: ShellyXXX-AABBCCDDEE
  2. Połącz telefon/PC z tym hotspotem
  3. Otwórz http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Wprowadź SSID i hasło → Save

Shelly obsługuje tylko sieci 2,4 GHz. Sieci 5 GHz nie pojawią się podczas skanowania.

Krok 2 — Znajdź adres IP

Po połączeniu z Wi-Fi znajdź przypisany adres IP za pomocą jednej z poniższych metod:

  • Aplikacja Shelly: Szczegóły urządzenia → Device info → Adres IP
  • Interfejs webowy Shelly: Połącz się z AP urządzenia przed konfiguracją Wi-Fi — IP zostanie wyświetlone po zapisaniu
  • Tabela DHCP routera: Szukaj nazwy hosta takiej jak shelly1pm-AABBCCDDEE
  • mDNS: Pinguj shelly<model>-<mac>.local (np. shelly1pm-AABBCCDDEE.local) z tej samej sieci

Przypisz urządzeniu Shelly statyczny IP (rezerwację DHCP) w routerze, aby adres nie zmieniał się po ponownym uruchomieniu routera.

Krok 3 — Konfiguracja w TapHome

  1. W TapHome dodaj nowy moduł Packet Parser (HTTP)
  2. IP Address: wprowadź IP z kroku 2 (np. 192.168.1.50)
  3. Port: 80 (domyślny, nie wymaga zmiany)
  4. Zaimportuj szablon — TapHome będzie okresowo odpytywać /status w celu odczytu stanu urządzenia

Uwierzytelnianie HTTP jest domyślnie wyłączone na urządzeniach Shelly. Jeśli włączyłeś ochronę logowaniem, TapHome obecnie nie obsługuje HTTP Basic Auth — pozostaw uwierzytelnianie wyłączone dla integracji z TapHome.

Dostępne urządzenia

Shelly EM Moduł
Zmienne niestandardowe

Shelly EM

Odczyt (moduł)
VAR response := SENDHTTPREQUEST("settings/relay/0");
IF response.IsSuccess
 status := response.Content;
 IF PARSEJSON(status, "schedule")
  ADDERROR("Internal scheduling on");
 END
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
response := SENDHTTPREQUEST("/emeter/0/");
IF response.IsSuccess
 emeterZero := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
response := SENDHTTPREQUEST("/emeter/1/");
IF response.IsSuccess
 emeterOne := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Licznik energii — Kanał 1 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) z zacisku CT na kanale 1

numeric Jednostka: kW / kWh json_path
Atrybuty serwisowe
Napięcie
Energia zwróconaCałkowita energia oddana do sieci na kanale 1 — do zestawów solarnych i pomiarów dwukierunkowych
Moc bierna

Licznik energii — Kanał 1

Odczyt całkowitego zużycia
RETURN(PARSEJSON(emeterZero, "total")/1000);
Odczyt zapotrzebowania
RETURN(PARSEJSON(emeterZero, "power")/1000);
Atrybuty serwisowe
Voltage [V]
RETURN(PARSEJSON(emeterZero, "voltage"));
backward [Wh]
RETURN(PARSEJSON(emeterZero, "total_returned"));
reactive [W]
RETURN(PARSEJSON(emeterZero, "reactive"));
Licznik energii — Kanał 2 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) z zacisku CT na kanale 2

numeric Jednostka: kW / kWh json_path
Atrybuty serwisowe
Napięcie
Energia zwróconaCałkowita energia oddana do sieci na kanale 2 — do zestawów solarnych i pomiarów dwukierunkowych
Moc bierna

Licznik energii — Kanał 2

Odczyt całkowitego zużycia
RETURN(PARSEJSON(emeterOne, "total")/1000);
Odczyt zapotrzebowania
RETURN(PARSEJSON(emeterOne, "power")/1000);
Atrybuty serwisowe
Voltage [V]
RETURN(PARSEJSON(emeterOne, "voltage"));
backward [Wh]
RETURN(PARSEJSON(emeterOne, "total_returned"));
reactive [W]
RETURN(PARSEJSON(emeterOne, "reactive"));
Przełącznik stycznikowy Przełącznik

Wyjście przekaźnikowe 2A do sterowania stycznikiem — nie przeznaczone do bezpośredniego przełączania obciążeń

boolean
Wartości / Stany: ON · OFF

Przełącznik stycznikowy

Odczyt stanu przełącznika
RETURN(PARSEJSON(status, "ison"));
Zapis stanu przełącznika
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + St);
VAR response := SENDHTTPREQUEST("/relay/0?turn="+ if(St = 1, "on","off"));
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
Połączenie: Packet Parser → HTTP
Możliwe ulepszenia (9)
  • Power Factor — Power factor (0.00–1.00) per channel, available in /emeter/{i} and /status response. Not available via MQTT.
  • Measurement Validity — Boolean flag indicating if the measurement is valid. Available per channel in /emeter/{i}.
  • Per-Channel Configuration — CT ratio (ctrafos: 50/120), max_power limit, appliance_type. Could be exposed as service actions.
  • Reset Energy Counters — Resets accumulated energy data for both channels. Available via HTTP GET and MQTT command topic.
  • Auto-off Timer — Auto-off timer in seconds on relay endpoint. Could be added as service action parameter.
  • WiFi Signal Strength — WiFi RSSI in dBm, available in /status response
  • MQTT Real-time Power — Instantaneous power via MQTT (W). MQTT template uses energy+total topics instead.
  • MQTT Reactive Power — Reactive power via MQTT (VAR). HTTP template has it as service attribute, MQTT template does not.
  • MQTT Energy Returned — Energy returned to grid via MQTT (Wh). HTTP template has it as service attribute (backward), MQTT template does not.

Źródła