TapHome

Shelly 1PM

Packet Parser → MQTT
Přidal
Poslední aktualizace: 04. 2026
Shelly 1PM

Shelly 1PM je kompaktní jednokanálový Wi-Fi reléový spínač s vestavěným měřením spotřeby. Vejde se za standardní nástěnný vypínač a dokáže ovládat jeden okruh do 16 A (3500 W při 230 V). TapHome komunikuje se zařízením přes MQTT — toto je MQTT varianta šablony Shelly 1PM, vhodná pokud preferujete lokální MQTT komunikaci před HTTP pollingem.

Šablona podporuje až 5 jednotek Shelly 1PM na jeden modul. Každá jednotka se rozlišuje vlastní proměnnou pulgNtopic odkazující na MQTT Client ID zařízení. Každá jednotka poskytuje reléový spínač a elektroměr.

Konfigurace

Device ID

Každý Shelly 1PM má unikátní MQTT Device ID ve formátu shelly1pm-<MAC6>, kde <MAC6> je posledních 6 znaků MAC adresy v hexadecimálním formátu s malými písmeny (např. shelly1pm-112233).

Device ID najdete:

  • Na štítku zařízení (MAC adresa)
  • Ve webovém rozhraní Shelly: SettingsDevice Info
  • Přes API: GET http://<device-ip>/settings → pole mqtt.id

Toto zařízení podporuje mDNS discovery. Místo IP adresy můžete při konfiguraci TapHome použít hostname shelly1pm-{MAC}.local. Nahraďte {MAC} posledními 6 znaky MAC adresy zařízení v hexadecimálním formátu s malými písmeny (např. shelly1pm-112233.local). Použití hostname předchází problémům s připojením při změně IP adresy zařízení.

Nastavení šablony

Po importu šablony v TapHome:

  1. Otevřete modul Shelly 1PM MQTT
  2. Nastavte IP adresu MQTT brokera a Port (výchozí 1883)
  3. Pro každou jednotku Shelly 1PM nastavte proměnnou pulgNtopic na Device ID příslušného Shelly 1PM (např. shelly1pm-112233)

Modul se přihlásí k odběru shellies/# a listener skripty filtrují zprávy podle nakonfigurovaného prefixu topicu.

Nakonfigurujte pouze sloty, které skutečně používáte. Nenakonfigurované sloty (s výchozí hodnotou shelly1pm-deviceidN) nebudou odpovídat žádnému reálnému zařízení a můžete je ignorovat.

Funkce zařízení

Ovládání relé

Každá jednotka poskytuje v TapHome spínací zařízení. Stav relé se čte z topicu shellies/<id>/relay/0 a ovládá se publikováním on nebo off na shellies/<id>/relay/0/command.

Měření spotřeby

Každá jednotka obsahuje elektroměr, který čte dvě hodnoty:

  • Okamžitý příkonshellies/<id>/relay/0/power hlášený ve wattech, šablona ho konvertuje na kW
  • Celková spotřebashellies/<id>/relay/0/energy hlášená ve watt-minutách, šablona ji konvertuje na kWh

Elektroměr je pouze pro čtení — aktualizuje se automaticky při každém publikování nových dat zařízením.

Tepelný a výkonový monitoring

Každé spínací zařízení poskytuje čtyři servisní atributy:

  • Vnitřní teplota — teplota zařízení ve °C z topicu shellies/<id>/temperature
  • Stav teploty — teplotní úroveň: Normal, High nebo Very High (shellies/<id>/temperature_status)
  • Přehřátí — příznak alarmu přehřátí (shellies/<id>/overtemperature)
  • Přetížení — hlásí výkon zátěže (W) při detekci přetížení (shellies/<id>/overpower_value)
Další funkce

Shelly 1PM také publikuje stav online/offline přes MQTT Last Will and Testament (LWT) topic, kompletní JSON status (firmware ≥1.8.0), stav fyzického vstupu a vstupní události (krátké/dvojité/trojité/dlouhé stisknutí). Tyto funkce je možné přidat v budoucí aktualizaci šablony.

Řešení problémů

Zařízení nehlásí data
  1. Ověřte, že Shelly 1PM je připojený k Wi-Fi a MQTT je povolené v nastavení zařízení
  2. Zkontrolujte, že proměnná pulgNtopic přesně odpovídá Device ID (např. shelly1pm-112233)
  3. Potvrďte správnost IP adresy a portu MQTT brokera v nastavení modulu
  4. Použijte MQTT klienta (např. MQTT Explorer) k odběru shellies/# a ověřte, že zařízení publikuje zprávy
Měření spotřeby ukazuje nulu
  1. Potvrďte, že zátěž je připojená přes relé Shelly (ne obejitá)
  2. Zkontrolujte, že relé je zapnuté — elektroměr měří pouze když přes relé protéká proud
  3. Přihlaste se k odběru shellies/<id>/relay/0/power přes MQTT klienta a ověřte, že zařízení hlásí nenulovou hodnotu
Varování před přehřátím

Shelly 1PM má vestavěnou tepelnou ochranu. Pokud teplota zařízení překročí bezpečné limity, temperature_status se změní na “High” nebo “Very High” a overtemperature se nastaví na true. Zajistěte dostatečné větrání kolem zařízení, zejména při spínání velkých zátěží.

Zařízení Shelly Gen1 nepodporují MQTT přes TLS. Komunikace mezi zařízením a MQTT brokerem je nešifrovaná (plain MQTT, port 1883). Ujistěte se, že MQTT broker je 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 1PM MQTT Modul
Vlastní proměnné
pulg1topic (string) = shelly1pm-deviceid1MQTT device ID první jednotky Shelly 1PM — formát je 'shelly1pm-DEVICEID' (Device ID najdete ve webovém rozhraní Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID
pulg2topic (string) = shelly1pm-deviceid2MQTT device ID druhé jednotky Shelly 1PM
pulg3topic (string) = shelly1pm-deviceid3MQTT device ID třetí jednotky Shelly 1PM
pulg4topic (string) = shelly1pm-deviceid4MQTT device ID čtvrté jednotky Shelly 1PM
pulg5topic (string) = shelly1pm-deviceid5MQTT device ID páté jednotky Shelly 1PM
Elektroměr 1 Elektroměr Pouze ke čtení

Okamžitý příkon (kW) a kumulativní energie (kWh) pro jednotku Shelly 1PM 1

numeric Jednotka: kW / kWh

Elektroměr 1

Listener
IF(INDEXOF(pulg1topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg1topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg1topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
Spínač 1 Přepínač

Ovládání relé pro jednotku Shelly 1PM 1 — spínání on/off s tepelným a výkonovým monitoringem

boolean
Hodnoty / Stavy: ON · OFF

Spínač 1

Zápis stavu přepínače
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg1topic + "/relay/0/command", value);
Listener
IF(INDEXOF(pulg1topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg1topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg1topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Servisní atributy
Internal temperature
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
Elektroměr 2 Elektroměr Pouze ke čtení

Okamžitý příkon (kW) a kumulativní energie (kWh) pro jednotku Shelly 1PM 2

numeric Jednotka: kW / kWh

Elektroměr 2

Listener
IF(INDEXOF(pulg2topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg2topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg2topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
Spínač 2 Přepínač

Ovládání relé pro jednotku Shelly 1PM 2 — spínání on/off s tepelným a výkonovým monitoringem

boolean
Hodnoty / Stavy: ON · OFF

Spínač 2

Zápis stavu přepínače
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg2topic + "/relay/0/command", value);
Listener
IF(INDEXOF(pulg2topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg2topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg2topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Servisní atributy
Internal temperature
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
Elektroměr 3 Elektroměr Pouze ke čtení

Okamžitý příkon (kW) a kumulativní energie (kWh) pro jednotku Shelly 1PM 3

numeric Jednotka: kW / kWh

Elektroměr 3

Listener
IF(INDEXOF(pulg3topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg3topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg3topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
Spínač 3 Přepínač

Ovládání relé pro jednotku Shelly 1PM 3 — spínání on/off s tepelným a výkonovým monitoringem

boolean
Hodnoty / Stavy: ON · OFF

Spínač 3

Zápis stavu přepínače
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg3topic + "/relay/0/command", value);
Listener
IF(INDEXOF(pulg3topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg3topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg3topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Servisní atributy
Internal temperature
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
Elektroměr 4 Elektroměr Pouze ke čtení

Okamžitý příkon (kW) a kumulativní energie (kWh) pro jednotku Shelly 1PM 4

numeric Jednotka: kW / kWh

Elektroměr 4

Listener
IF(INDEXOF(pulg4topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg4topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg4topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
Spínač 4 Přepínač

Ovládání relé pro jednotku Shelly 1PM 4 — spínání on/off s tepelným a výkonovým monitoringem

boolean
Hodnoty / Stavy: ON · OFF

Spínač 4

Zápis stavu přepínače
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg4topic + "/relay/0/command", value);
Listener
IF(INDEXOF(pulg4topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg4topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg4topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Servisní atributy
Internal temperature
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
Elektroměr 5 Elektroměr Pouze ke čtení

Okamžitý příkon (kW) a kumulativní energie (kWh) pro jednotku Shelly 1PM 5

numeric Jednotka: kW / kWh

Elektroměr 5

Listener
IF(INDEXOF(pulg5topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg5topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg5topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
Spínač 5 Přepínač

Ovládání relé pro jednotku Shelly 1PM 5 — spínání on/off s tepelným a výkonovým monitoringem

boolean
Hodnoty / Stavy: ON · OFF

Spínač 5

Zápis stavu přepínače
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg5topic + "/relay/0/command", value);
Listener
IF(INDEXOF(pulg5topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg5topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg5topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Servisní atributy
Internal temperature
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
Připojení: Packet Parser → MQTT
Možná vylepšení (5)
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline units.
  • Full Status JSON — Complete /status as JSON (fw ≥1.8.0). Could parse wifi_sta.rssi, uptime, has_update.
  • Input State — Physical input state (0/1). Shelly 1PM has one input — could be used for detached switch scenarios.
  • Input Event — JSON with event type (S=short, SS=double, SSS=triple, L=long) and event_cnt. Useful for button automation.
  • Internal Temperature (Fahrenheit) — Same as temperature topic but in Fahrenheit. Redundant — Celsius already implemented via service attribute.

Zdroje