TapHome

Shelly Plug S

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 04. 2026
Shelly Plug S

Shelly Plug S to kompaktowa inteligentna wtyczka Wi-Fi z wbudowanym pomiarem energii, o obciążalności 12A / 2500W. TapHome komunikuje z urządzeniem przez MQTT — wtyczka łączy się z brokerem i publikuje stan przekaźnika, zużycie energii, licznik energii oraz dane o temperaturze wewnętrznej.

Szablon udostępnia dwa urządzenia: Licznik energii do monitorowania energii i Przełącznik do sterowania przekaźnikiem. Atrybut serwisowy na poziomie modułu raportuje temperaturę wewnętrzną urządzenia.

Konfiguracja

Device ID

Każdy Shelly Plug S ma unikalny MQTT Device ID w formacie shellyplug-s-<MAC6>, gdzie <MAC6> to ostatnie 6 znaków adresu MAC w szesnastkowym formacie małymi literami (np. shellyplug-s-112233).

Device ID można znaleźć:

  • W interfejsie webowym Shelly: SettingsDevice InfoDevice ID (użyj pierwszego ciągu znaków, nie tego w nawiasach)
  • Przez API: GET http://<device-ip>/settings → pole mqtt.id
Włączenie MQTT

Aby włączyć MQTT na Shelly Plug S:

  1. Otwórz interfejs webowy urządzenia w przeglądarce (przejdź pod adres IP urządzenia)
  2. Przejdź do Internet and SecurityAdvanced - Developer Settings
  3. Zaznacz „Enable action execution via MQTT"
  4. W polu „Server" wpisz {IP brokera MQTT}:{port} (domyślny port 1883)
  5. Naciśnij SAVE
Konfiguracja szablonu

Po zaimportowaniu szablonu w TapHome:

  1. Otwórz moduł Shelly Plug S MQTT
  2. Ustaw MQTT Broker IP i Port (domyślnie 1883)
  3. Ustaw zmienną deviceID na Device ID urządzenia Shelly Plug S (np. 112233 — tylko ostatnie 6 znaków szesnastkowych adresu MAC)

Moduł subskrybuje shellies/#, a skrypty listener filtrują wiadomości według skonfigurowanego prefiksu Device ID shellyplug-s-{deviceID}.

Możliwości urządzenia

Monitorowanie energii

Urządzenie Licznik energii odczytuje dwie wartości z wtyczki:

  • Całkowite zużycie — kumulatywna energia z topicu relay/0/energy. Urządzenie raportuje energię w watominutach; szablon konwertuje na kWh dzieląc przez 60000.
  • Moc chwilowa — aktualny pobór mocy z topicu relay/0/power. Urządzenie raportuje moc w watach; szablon konwertuje na kW dzieląc przez 1000.

Obie wartości aktualizują się zgodnie z interwałem raportowania MQTT (domyślnie 30 sekund, konfigurowalne w interfejsie webowym Shelly przez mqtt_update_period).

Licznik energii resetuje się przy ponownym uruchomieniu urządzenia. Dla trwałego śledzenia energii użyj wbudowanego logowania energii w TapHome, które przechowuje wartości kumulatywne niezależnie od licznika urządzenia.

Sterowanie przekaźnikiem

Urządzenie Przełącznik steruje przekaźnikiem wtyczki:

  • Odczyt stanu — nasłuchuje topicu shellies/shellyplug-s-{deviceID}/relay/0 i mapuje on → 1, off → 0
  • Zapis stanu — publikuje na topic shellies/shellyplug-s-{deviceID}/relay/0/command wartość on lub off

Przekaźnik obsługuje obciążenie do 2500W / 12A.

Monitorowanie temperatury

Atrybut serwisowy na poziomie modułu raportuje temperaturę wewnętrzną urządzenia w °C, odczytaną z topicu shellies/shellyplug-s-{deviceID}/temperature. Jest to temperatura elektroniki wtyczki, nie temperatura otoczenia.

Dodatkowe możliwości

Shelly Plug S publikuje również status online/offline przez MQTT LWT topic, alerty o przegrzaniu (gdy urządzenie przekroczy bezpieczną temperaturę roboczą), czytelną klasyfikację stanu temperatury (Normal/High/Very High) oraz zdarzenia przycisku (krótkie naciśnięcie, długie naciśnięcie, podwójne naciśnięcie). Te możliwości mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Brak danych z wtyczki
  1. Sprawdź, czy Shelly Plug S jest połączony z Wi-Fi i MQTT jest włączone w ustawieniach urządzenia (Internet and SecurityAdvanced - Developer Settings)
  2. Sprawdź, czy zmienna deviceID dokładnie odpowiada Device ID (np. 112233)
  3. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji shellies/# i sprawdź, czy wtyczka publikuje wiadomości
Wartości mocy pokazują zero
  1. Upewnij się, że obciążenie jest podłączone i przekaźnik jest włączony
  2. Sprawdź topic relay/0/power klientem MQTT — wartość powinna być niezerowa, gdy obciążenie pobiera energię
  3. Sprawdź, czy urządzenie Licznik energii wyświetla wartości w TapHome — całkowite zużycie w kWh, moc w kW
Przekaźnik nie reaguje na polecenia
  1. Sprawdź, czy MQTT jest włączone i adres brokera jest poprawny w interfejsie webowym Shelly
  2. Sprawdź, czy TapHome może połączyć się z brokerem MQTT (poprawny IP i port w ustawieniach modułu)
  3. Przetestuj publikując on lub off na topic shellies/shellyplug-s-{deviceID}/relay/0/command przez klienta MQTT

Urządzenia Shelly Gen1 nie obsługują MQTT przez TLS. Komunikacja między wtyczką a brokerem MQTT jest nieszyfrowana (plain MQTT, port 1883). Upewnij się, że broker MQTT znajduje się w zaufanej sieci lokalnej.

Jak zainstalować w TapHome

Wymagania wstępne

  • Urządzenie Shelly połączone z Wi-Fi (jeśli jeszcze nie, zobacz przewodnik po połączeniu HTTP)
  • Broker MQTT działający w sieci lokalnej (np. Mosquitto, Home Assistant lub wbudowany broker TapHome)
  • TapHome CCU w tej samej sieci co broker

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 & SecurityAdvanced — 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 SettingsMQTT
  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

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 SettingsDevice InfoDevice ID lub na etykiecie urządzenia

Krok 3 — Konfiguracja w TapHome

  1. W TapHome dodaj nowy moduł Packet Parser (MQTT)
  2. IP Address: wprowadź adres IP brokera MQTT (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

Shelly Plug S MQTT Moduł
Atrybuty serwisowe
TemperaturaTemperatura wewnętrzna urządzenia — nie temperatura otoczenia
Zmienne niestandardowe
deviceID (string)MQTT Device ID urządzenia Shelly Plug S — ostatnie 6 znaków adresu MAC w szesnastkowym formacie małymi literami (do znalezienia w interfejsie webowym Shelly → Settings → Device Info)

Shelly plug S MQTT

Nasłuchiwanie
VAR whatT := "shellies/shellyplug-s-"+deviceID+"/temperature";
IF (whatT = RECEIVEDMSG.TOPIC)
 temperatureC := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Atrybuty serwisowe
Temperature [°C ]
temperatureC
Licznik energii Licznik energii Tylko do odczytu

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

numeric Jednostka: kWh (total), kW (demand) energy: Watt-minutes /60000 = kWh; demand: Watts /1000 = kW

Licznik energii

Odczyt całkowitego zużycia
# 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
# 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
VAR whatTo := "shellies/shellyplug-s-"+deviceID+"/relay/0/energy";
IF (whatTo = RECEIVEDMSG.TOPIC)
 To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD))/60000;
END
VAR whatEd := "shellies/shellyplug-s-"+deviceID+"/relay/0/power";
IF (whatEd = RECEIVEDMSG.TOPIC)
 Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Przełącznik Przełącznik
string on→1, off→0 (read); 1→on, 0→off (write)
Wartości / Stany: ON · OFF

Przełącznik

Odczyt stanu przełącznika
# 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
# Simple HTTP Request:
MQTTPUBLISH("shellies/shellyplug-s-"+deviceID+ "/relay/0/command",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






#MQTTPUBLISH(topic + "/relay/0/command",if());
Nasłuchiwanie
VAR whatSt := "shellies/shellyplug-s-"+deviceID+"/relay/0";
IF (whatSt = RECEIVEDMSG.TOPIC)
 IF (TOSTRING(RECEIVEDMSG.PAYLOAD) = "on")
  St := 1;
 ELSE
  St := 0;
 END
END
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (6)
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline device.
  • Overtemperature Alert — 1 = overheated, 0 = normal. Could trigger safety alarm when device exceeds safe operating temperature.
  • Temperature Status — String: Normal, High, or Very High. Human-readable temperature classification.
  • Button Input State — 0 or 1 — physical button state on the device.
  • Button Input Event — JSON payload with event type (S=short, L=long, SS=double, SSS=triple) and event counter.
  • Overpower State — Relay topic can report 'overpower' payload when load exceeds rating. Not parsed in listener script.

Źródła