TapHome

Shelly Plug S

Packet Parser → HTTP
Submitted by
Last updated: 03. 2026
Shelly Plug S

Shelly Plug S to kompaktowa inteligentna wtyczka Wi-Fi z wbudowanym miernikiem mocy. Podłącza się bezpośrednio do gniazdka i obsługuje obciążenia do 10 A (2300 W przy 230 V). TapHome komunikuje się z urządzeniem przez HTTP w sieci lokalnej — połączenie z chmurą nie jest wymagane.

Szablon zapewnia sterowanie przekaźnikiem (włącz/wyłącz), licznik energii odczytujący chwilowe zużycie mocy i skumulowane zużycie energii oraz monitorowanie temperatury wewnętrznej.

Możliwości urządzenia

Sterowanie przekaźnikiem

Szablon udostępnia przekaźnik wtyczki jako przełącznik. Stan przekaźnika jest odczytywany z /settings/relay/0 (pole ison) i sterowany przez endpoint /relay/0 z parametrem turn=on lub turn=off. Interwał pollingu dla przełącznika wynosi 1 sekundę.

Szablon odczytuje stan przełącznika z /settings/relay/0 (konfiguracja trwała), a nie z /status (stan na żywo). W normalnych warunkach oba zwracają tę samą wartość, ale /settings może zawierać nieznacznie przestarzałe dane po szybkim przełączaniu.

Pomiar mocy

Wbudowany licznik energii odczytuje dwie wartości z endpointu /meter/0:

  • Moc chwilowa — pole power w watach, konwertowane przez szablon na kW
  • Całkowite zużycie — pole total w watominutach, konwertowane przez szablon na kWh

Licznik jest tylko do odczytu i aktualizuje się co 15 sekund (konfigurowalny interwał pollingu).

Monitorowanie temperatury

Urządzenie przełącznika zawiera atrybut serwisowy, który odczytuje temperaturę wewnętrzną wtyczki z endpointu /status. Umożliwia to monitorowanie temperatury urządzenia bezpośrednio w TapHome bez dodatkowej konfiguracji.

Niezaimplementowane funkcje

API Shelly Plug S udostępnia dodatkowe możliwości, które nie są zawarte w bieżącym szablonie:

  • Flaga przegrzania — automatyczne wyłączenie przekaźnika przy ~95 °C (overtemperature w /status)
  • Sterowanie LED — włączanie/wyłączanie diody LED statusu przez /settings
  • Próg ochrony przed przeciążeniem — konfigurowalny limit maksymalnej mocy (domyślnie 2300 W)
  • Czasomierz automatycznego wyłączenia — automatyczne wyłączenie przekaźnika po upływie ustawionego czasu
  • Siła sygnału Wi-Fi — wartość RSSI w dBm z /status
  • Restart — ponowne uruchomienie urządzenia przez endpoint /reboot

Funkcje te można dodać w przyszłej aktualizacji szablonu jako atrybuty serwisowe lub akcje serwisowe.

Rozwiązywanie problemów

Urządzenie nie odpowiada
  1. Sprawdź, czy Shelly jest połączony z Wi-Fi i ma prawidłowy adres IP
  2. Otwórz http://{device-ip}/shelly w przeglądarce — jeśli odpowie, urządzenie jest dostępne
  3. Sprawdź, czy TapHome CCU i Shelly są w tej samej sieci / VLAN
Pomiar mocy pokazuje zero
  1. Upewnij się, że urządzenie podłączone do Shelly Plug S jest włączone
  2. Sprawdź, czy przekaźnik jest włączony — licznik mierzy tylko przy przepływie prądu
  3. Ręcznie odpytaj /meter/0 i sprawdź, czy pole power zwraca wartość różną od zera
Wyłączenie z powodu przegrzania

Shelly Plug S posiada wewnętrzną ochronę termiczną. Jeśli temperatura urządzenia przekroczy ~95 °C, przekaźnik automatycznie się wyłączy. Zapewnij odpowiednią wentylację wokół wtyczki, szczególnie przy podłączaniu urządzeń o wysokim poborze mocy.

Urządzenia Shelly Gen1 obsługują tylko 2 jednoczesne połączenia HTTP. Jeśli TapHome i inny system (np. Home Assistant) odpytują to samo urządzenie jednocześnie, komunikacja może stać się zawodna. Używaj interwału pollingu 10–30 sekund, aby zmniejszyć rywalizację o połączenia.

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 Plug S Moduł
Licznik energii Licznik energii Tylko do odczytu

Pomiar zużycia energii — moc chwilowa (kW) i energia skumulowana (kWh)

numeric Jednostka: kW / kWh

Licznik energii

Odczyt całkowitego zużycia
# Simple HTTP Request:
VAR response := SENDHTTPREQUEST("/meter/0");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 return(PARSEJSON(content,"total")/60000);
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
VAR response := SENDHTTPREQUEST("/meter/0");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 RETURN(PARSEJSON(content, "power")/1000);
END;


# 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");
Przełącznik Przełącznik
boolean
Atrybuty serwisowe
Temperatura

Przełącznik

Odczyt stanu przełącznika
VAR response := SENDHTTPREQUEST("/settings/relay/0");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 return(PARSEJSON(content,"ison"));
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
# Simple HTTP Request:
#VAR response := SENDHTTPREQUEST("/relay/0?turn=toggle");
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
Atrybuty serwisowe
Temperature
VAR response := SENDHTTPREQUEST("/status");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 RETURN(PARSEJSON(content, "temperature"));
END;
Połączenie: Packet Parser → HTTP
Możliwe ulepszenia (7)
  • Live relay state — Template reads from /settings/relay/0 instead of /status — /status has real-time state
  • Overtemperature flag — Boolean flag in /status, triggers automatic relay shutdown at ~95°C
  • LED control — Enable/disable status LED via settings endpoint
  • Overpower protection threshold — Configurable maximum power limit (default 2300W), could be a service action
  • Auto-off timer — Auto-off timer in seconds, could be added as switch parameter
  • WiFi signal strength — WiFi RSSI in dBm, available in /status response
  • Reboot — Device reboot endpoint, could be added as service action

Źródła