TapHome

Shelly 1PM

Packet Parser → MQTT
Pridal
Posledná aktualizácia: 04. 2026
Shelly 1PM

Shelly 1PM je kompaktný jednokanálový Wi-Fi reléový spínač so vstavaným meraním spotreby. Zmestí sa za štandardný nástenný vypínač a dokáže ovládať jeden okruh do 16 A (3500 W pri 230 V). TapHome komunikuje so zariadením cez MQTT — toto je MQTT variant šablóny Shelly 1PM, vhodný ak preferujete lokálnu MQTT komunikáciu pred HTTP pollingom.

Šablóna podporuje až 5 jednotiek Shelly 1PM na jeden modul. Každá jednotka sa rozlišuje vlastnou premennou pulgNtopic smerujúcou na MQTT Client ID zariadenia. Každá jednotka poskytuje reléový spínač a elektromer.

Konfigurácia

Device ID

Každý Shelly 1PM má unikátne MQTT Device ID vo formáte shelly1pm-<MAC6>, kde <MAC6> je posledných 6 znakov MAC adresy v hexadecimálnom formáte s malými písmenami (napr. shelly1pm-112233).

Device ID nájdete:

  • Na štítku zariadenia (MAC adresa)
  • Vo webovom rozhraní Shelly: SettingsDevice Info
  • Cez API: GET http://<device-ip>/settings → pole mqtt.id

Toto zariadenie podporuje mDNS discovery. Namiesto IP adresy môžete pri konfigurácii TapHome použiť hostname shelly1pm-{MAC}.local. Nahraďte {MAC} poslednými 6 znakmi MAC adresy zariadenia v hexadecimálnom formáte s malými písmenami (napr. shelly1pm-112233.local). Použitie hostname predchádza problémom s pripojením pri zmene IP adresy zariadenia.

Nastavenie šablóny

Po importe šablóny v TapHome:

  1. Otvorte modul Shelly 1PM MQTT
  2. Nastavte IP adresu MQTT brokera a Port (predvolene 1883)
  3. Pre každú jednotku Shelly 1PM nastavte premennú pulgNtopic na Device ID príslušného Shelly 1PM (napr. shelly1pm-112233)

Modul sa prihlási na odber shellies/# a listener skripty filtrujú správy podľa nakonfigurovaného prefixu topicu.

Nakonfigurujte len tie sloty, ktoré skutočne používate. Nenakonfigurované sloty (s predvolenou hodnotou shelly1pm-deviceidN) nebudú zodpovedať žiadnemu reálnemu zariadeniu a môžete ich ignorovať.

Funkcie zariadenia

Ovládanie relé

Každá jednotka poskytuje v TapHome spínacie zariadenie. Stav relé sa číta z topicu shellies/<id>/relay/0 a ovláda sa publikovaním on alebo off na shellies/<id>/relay/0/command.

Meranie spotreby

Každá jednotka obsahuje elektromer, ktorý číta dve hodnoty:

  • Okamžitý príkonshellies/<id>/relay/0/power hlásený vo wattoch, šablóna ho konvertuje na kW
  • Celková spotrebashellies/<id>/relay/0/energy hlásená vo watt-minútach, šablóna ju konvertuje na kWh

Elektromer je len na čítanie — aktualizuje sa automaticky pri každom publikovaní nových dát zariadením.

Tepelný a výkonový monitoring

Každé spínacie zariadenie poskytuje štyri servisné atribúty:

  • Vnútorná teplota — teplota zariadenia v °C z topicu shellies/<id>/temperature
  • Stav teploty — teplotná úroveň: Normal, High alebo Very High (shellies/<id>/temperature_status)
  • Prehriatie — príznak alarmu prehriatia (shellies/<id>/overtemperature)
  • Preťaženie — hlási výkon záťaže (W) pri detekcii preťaženia (shellies/<id>/overpower_value)
Ďalšie funkcie

Shelly 1PM tiež publikuje stav online/offline cez MQTT Last Will and Testament (LWT) topic, kompletný JSON status (firmware ≥1.8.0), stav fyzického vstupu a vstupné udalosti (krátke/dvojité/trojité/dlhé stlačenie). Tieto funkcie je možné pridať v budúcej aktualizácii šablóny.

Riešenie problémov

Zariadenie nehlási dáta
  1. Overte, že Shelly 1PM je pripojený k Wi-Fi a MQTT je povolené v nastaveniach zariadenia
  2. Skontrolujte, že premenná pulgNtopic presne zodpovedá Device ID (napr. shelly1pm-112233)
  3. Potvrďte správnosť IP adresy a portu MQTT brokera v nastaveniach modulu
  4. Použite MQTT klienta (napr. MQTT Explorer) na prihlásenie na odber shellies/# a overte, že zariadenie publikuje správy
Meranie spotreby ukazuje nulu
  1. Potvrďte, že záťaž je pripojená cez relé Shelly (nie obídená)
  2. Skontrolujte, že relé je zapnuté — elektromer meria len keď cez relé preteká prúd
  3. Prihláste sa na odber shellies/<id>/relay/0/power cez MQTT klienta a overte, že zariadenie hlási nenulovú hodnotu
Varovanie pred prehriatím

Shelly 1PM má vstavanú tepelnú ochranu. Ak teplota zariadenia prekročí bezpečné limity, temperature_status sa zmení na “High” alebo “Very High” a overtemperature sa nastaví na true. Zabezpečte dostatočné vetranie okolo zariadenia, najmä pri spínaní veľkých záťaží.

Zariadenia Shelly Gen1 nepodporujú MQTT cez TLS. Komunikácia medzi zariadením a MQTT brokerom je nešifrovaná (plain MQTT, port 1883). Uistite sa, že MQTT broker je v dôveryhodnej lokálnej sieti.

Ako nainštalovať v TapHome

Predpoklady

  • Zariadenie Shelly pripojené k Wi-Fi (ak ešte nie, pozrite návod na HTTP pripojenie)
  • MQTT broker bežiaci vo vašej lokálnej sieti (napr. Mosquitto, Home Assistant alebo vstavaný broker TapHome)
  • TapHome CCU v rovnakej sieti ako broker

Na zariadeniach Gen1 povolenie MQTT vypne Shelly Cloud. Oboje nemôže bežať súčasne. Na zariadeniach Gen2/Plus toto obmedzenie neplatí.

Krok 1 — Povoľte MQTT na zariadení Shelly

Zariadenia Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na Internet & SecurityAdvanced — MQTT
  3. Povoľte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Voliteľne nastavte MQTT User a MQTT Password, ak váš broker vyžaduje autentifikáciu
  6. Kliknite na Save — zariadenie sa reštartuje a pripojí k brokeru

Zariadenia Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na SettingsMQTT
  3. Povoľte MQTT
  4. Nastavte Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Client ID je predvyplnené ID zariadenia (napr. shellyplus1pm-AABBCCDDEE) — ponechajte tak, pokiaľ nemáte konkrétny dôvod na zmenu
  6. Kliknite na Save a reštartujte zariadenie

Na overenie funkčnosti MQTT použite MQTT klienta (napr. MQTT Explorer) a prihláste sa na odber shellies/# (Gen1) alebo <device-id>/# (Gen2). Mali by ste vidieť stavové správy zo zariadenia.

Krok 2 — Zistite Device ID / MQTT Client ID

Niektoré šablóny vyžadujú parameter Device ID alebo MQTT Client ID. Ide o jedinečný identifikátor používaný v MQTT topicoch.

  • Gen1: nachádza sa na štítku ako MAC adresa (napr. AABBCCDDEE). Device ID = shelly<model>-<mac>, napr. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachádza sa vo webovom rozhraní Shelly v časti SettingsDevice InfoDevice ID, alebo na štítku zariadenia

Krok 3 — Konfigurácia v TapHome

  1. V TapHome pridajte nový modul Packet Parser (MQTT)
  2. IP Address: zadajte IP adresu MQTT brokera (napr. 192.168.1.10)
  3. Port: 1883 (predvolený; pre TLS použite 8883)
  4. Device ID / MQTT Client ID: zadajte hodnotu z kroku 2 (ak to šablóna vyžaduje)
  5. Importujte šablónu — TapHome sa automaticky prihlási na odber topicov zariadenia

Dostupné zariadenia

Shelly 1PM MQTT Modul
Vlastné premenné
pulg1topic (string) = shelly1pm-deviceid1MQTT device ID prvej jednotky Shelly 1PM — formát je 'shelly1pm-DEVICEID' (Device ID nájdete vo webovom rozhraní Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID
pulg2topic (string) = shelly1pm-deviceid2MQTT device ID druhej jednotky Shelly 1PM
pulg3topic (string) = shelly1pm-deviceid3MQTT device ID tretej jednotky Shelly 1PM
pulg4topic (string) = shelly1pm-deviceid4MQTT device ID štvrtej jednotky Shelly 1PM
pulg5topic (string) = shelly1pm-deviceid5MQTT device ID piatej jednotky Shelly 1PM
Elektromer 1 Elektromer Len na čítanie

Okamžitý príkon (kW) a kumulatívna energia (kWh) pre jednotku Shelly 1PM 1

numeric Jednotka: kW / kWh

Elektromer 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 Prepínač

Ovládanie relé pre jednotku Shelly 1PM 1 — spínanie on/off s tepelným a výkonovým monitoringom

boolean
Hodnoty / Stavy: ON · OFF

Spínač 1

Zápis stavu prepínača
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é atribúty
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");
Elektromer 2 Elektromer Len na čítanie

Okamžitý príkon (kW) a kumulatívna energia (kWh) pre jednotku Shelly 1PM 2

numeric Jednotka: kW / kWh

Elektromer 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 Prepínač

Ovládanie relé pre jednotku Shelly 1PM 2 — spínanie on/off s tepelným a výkonovým monitoringom

boolean
Hodnoty / Stavy: ON · OFF

Spínač 2

Zápis stavu prepínača
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é atribúty
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");
Elektromer 3 Elektromer Len na čítanie

Okamžitý príkon (kW) a kumulatívna energia (kWh) pre jednotku Shelly 1PM 3

numeric Jednotka: kW / kWh

Elektromer 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 Prepínač

Ovládanie relé pre jednotku Shelly 1PM 3 — spínanie on/off s tepelným a výkonovým monitoringom

boolean
Hodnoty / Stavy: ON · OFF

Spínač 3

Zápis stavu prepínača
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é atribúty
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");
Elektromer 4 Elektromer Len na čítanie

Okamžitý príkon (kW) a kumulatívna energia (kWh) pre jednotku Shelly 1PM 4

numeric Jednotka: kW / kWh

Elektromer 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 Prepínač

Ovládanie relé pre jednotku Shelly 1PM 4 — spínanie on/off s tepelným a výkonovým monitoringom

boolean
Hodnoty / Stavy: ON · OFF

Spínač 4

Zápis stavu prepínača
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é atribúty
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");
Elektromer 5 Elektromer Len na čítanie

Okamžitý príkon (kW) a kumulatívna energia (kWh) pre jednotku Shelly 1PM 5

numeric Jednotka: kW / kWh

Elektromer 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 Prepínač

Ovládanie relé pre jednotku Shelly 1PM 5 — spínanie on/off s tepelným a výkonovým monitoringom

boolean
Hodnoty / Stavy: ON · OFF

Spínač 5

Zápis stavu prepínača
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é atribúty
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");
Pripojenie: Packet Parser → MQTT
Možné vylepšenia (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