TapHome

Shelly Plug S

Packet Parser → MQTT
Přidal
Poslední aktualizace: 04. 2026
Shelly Plug S

Shelly Plug S je kompaktní Wi-Fi chytrá zásuvka s vestavěným měřením spotřeby energie s jmenovitým zatížením 12A / 2500W. TapHome komunikuje se zařízením přes MQTT — zásuvka se připojuje k brokeru a publikuje stav relé, spotřebu energie, počítadlo energie a údaje o vnitřní teplotě.

Šablona obsahuje dvě zařízení: Elektroměr pro monitorování energie a Spínač pro ovládání relé. Servisní atribut na úrovni modulu hlásí vnitřní teplotu zařízení.

Konfigurace

Device ID

Každý Shelly Plug S má jedinečné MQTT Device ID ve formátu shellyplug-s-<MAC6>, kde <MAC6> je posledních 6 znaků MAC adresy v hexadecimálním formátu s malými písmeny (např. shellyplug-s-112233).

Device ID najdete:

  • Ve webovém rozhraní Shelly: SettingsDevice InfoDevice ID (použijte první řetězec znaků, ne v závorkách)
  • Přes API: GET http://<device-ip>/settings → pole mqtt.id
Povolení MQTT

Povolení MQTT na Shelly Plug S:

  1. Otevřete webové rozhraní zařízení v prohlížeči (zadejte IP adresu zařízení)
  2. Přejděte na Internet and SecurityAdvanced - Developer Settings
  3. Zaškrtněte „Enable action execution via MQTT"
  4. Do pole „Server" zadejte {IP MQTT brokeru}:{port} (výchozí port 1883)
  5. Stiskněte SAVE
Nastavení šablony

Po importu šablony v TapHome:

  1. Otevřete modul Shelly Plug S MQTT
  2. Nastavte MQTT Broker IP a Port (výchozí 1883)
  3. Nastavte proměnnou deviceID na Device ID zařízení Shelly Plug S (např. 112233 — jen posledních 6 hexadecimálních znaků MAC adresy)

Modul se přihlásí k odběru shellies/# a listener skripty filtrují zprávy podle nakonfigurovaného prefixu Device ID shellyplug-s-{deviceID}.

Schopnosti zařízení

Monitorování energie

Zařízení Elektroměr čte dvě hodnoty ze zásuvky:

  • Celková spotřeba — kumulativní energie z topicu relay/0/energy. Zařízení hlásí energii ve watt-minutách; šablona konvertuje na kWh dělením 60000.
  • Okamžitý příkon — aktuální odběr z topicu relay/0/power. Zařízení hlásí příkon ve wattech; šablona konvertuje na kW dělením 1000.

Obě hodnoty se aktualizují podle intervalu MQTT hlášení (výchozí 30 sekund, nastavitelné ve webovém rozhraní Shelly přes mqtt_update_period).

Počítadlo energie se resetuje při restartu zařízení. Pro trvalé sledování energie použijte vestavěné logování energie v TapHome, které ukládá kumulativní hodnoty nezávisle na počítadle zařízení.

Ovládání relé

Zařízení Spínač ovládá relé zásuvky:

  • Čtení stavu — naslouchá topicu shellies/shellyplug-s-{deviceID}/relay/0 a mapuje on → 1, off → 0
  • Zápis stavu — publikuje na topic shellies/shellyplug-s-{deviceID}/relay/0/command hodnotu on nebo off

Relé podporuje zátěž do 2500W / 12A.

Monitorování teploty

Servisní atribut na úrovni modulu hlásí vnitřní teplotu zařízení v °C, čtenou z topicu shellies/shellyplug-s-{deviceID}/temperature. Jde o teplotu elektroniky zásuvky, ne o teplotu okolního prostředí.

Další schopnosti

Shelly Plug S také publikuje stav online/offline přes MQTT LWT topic, upozornění na přehřívání (když zařízení překročí bezpečnou provozní teplotu), čitelnou klasifikaci stavu teploty (Normal/High/Very High) a události tlačítka (krátké stisknutí, dlouhé stisknutí, dvojité stisknutí). Tyto schopnosti mohou být přidány v budoucí aktualizaci šablony.

Řešení problémů

Žádná data ze zásuvky
  1. Ověřte, že Shelly Plug S je připojen k Wi-Fi a MQTT je povoleno v nastavení zařízení (Internet and SecurityAdvanced - Developer Settings)
  2. Zkontrolujte, že proměnná deviceID přesně odpovídá Device ID (např. 112233)
  3. Použijte MQTT klienta (např. MQTT Explorer) pro odběr shellies/# a ověřte, zda zásuvka publikuje zprávy
Hodnoty příkonu ukazují nulu
  1. Potvrďte, že zátěž je připojena a relé je zapnuto
  2. Zkontrolujte topic relay/0/power přes MQTT klienta — hodnota by měla být nenulová, když zátěž odebírá energii
  3. Ověřte, že zařízení Elektroměr zobrazuje hodnoty v TapHome — celková spotřeba v kWh, příkon v kW
Relé nereaguje na příkazy
  1. Ověřte, že MQTT je povoleno a adresa brokeru je správná ve webovém rozhraní Shelly
  2. Zkontrolujte, že TapHome se může připojit k MQTT brokeru (správná IP a port v nastavení modulu)
  3. Otestujte publikováním on nebo off na topic shellies/shellyplug-s-{deviceID}/relay/0/command přes MQTT klienta

Zařízení Shelly Gen1 nepodporují MQTT přes TLS. Komunikace mezi zásuvkou a MQTT brokerem je nešifrovaná (plain MQTT, port 1883). Zajistěte, aby MQTT broker byl v důvěryhodné lokální síti.

Jak nainstalovat v TapHome

Předpoklady

  • Zařízení Shelly připojené k Wi-Fi (pokud ještě ne, podívejte se na návod na HTTP připojení)
  • 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

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

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 SettingsDevice InfoDevice 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: zadejte IP adresu MQTT brokeru (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í

Shelly Plug S MQTT Modul
Servisní atributy
TeplotaVnitřní teplota zařízení — ne teplota okolního prostředí
Vlastní proměnné
deviceID (string)MQTT Device ID zařízení Shelly Plug S — posledních 6 znaků MAC adresy v hexadecimálním formátu s malými písmeny (najdete ve webovém rozhraní Shelly → Settings → Device Info)

Shelly plug S MQTT

Listener
VAR whatT := "shellies/shellyplug-s-"+deviceID+"/temperature";
IF (whatT = RECEIVEDMSG.TOPIC)
 temperatureC := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Servisní atributy
Temperature [°C ]
temperatureC
Elektroměr Elektroměr Pouze ke čtení

Měření spotřeby energie — okamžitý příkon (kW) a kumulativní energie (kWh)

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

Elektroměr

Čtení celkové spotřeby
# 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
# 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
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
Spínač Přepínač
string on→1, off→0 (read); 1→on, 0→off (write)
Hodnoty / Stavy: ON · OFF

Spínač

Čtení stavu přepínače
# 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
# 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());
Listener
VAR whatSt := "shellies/shellyplug-s-"+deviceID+"/relay/0";
IF (whatSt = RECEIVEDMSG.TOPIC)
 IF (TOSTRING(RECEIVEDMSG.PAYLOAD) = "on")
  St := 1;
 ELSE
  St := 0;
 END
END
Připojení: Packet Parser → MQTT
Možná vylepšení (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.

Zdroje