TapHome

Shelly 1PM

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 04. 2026
Shelly 1PM

Shelly 1PM to kompaktowy jednokanałowy przekaźnik Wi-Fi z wbudowanym pomiarem mocy. Mieści się za standardowym włącznikiem ściennym i może sterować jednym obwodem do 16 A (3500 W przy 230 V). TapHome komunikuje się z urządzeniem przez MQTT — to jest wariant MQTT szablonu Shelly 1PM, odpowiedni gdy preferujesz lokalną komunikację MQTT zamiast HTTP pollingu.

Szablon obsługuje do 5 jednostek Shelly 1PM na moduł. Każda jednostka jest rozróżniana przez zmienną pulgNtopic wskazującą na MQTT Client ID urządzenia. Każda jednostka udostępnia przełącznik przekaźnikowy i licznik energii.

Konfiguracja

Device ID

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

Device ID można znaleźć:

  • Na etykiecie urządzenia (adres MAC)
  • W interfejsie webowym Shelly: SettingsDevice Info
  • Przez API: GET http://<device-ip>/settings → pole mqtt.id

To urządzenie obsługuje mDNS discovery. Zamiast adresu IP możesz użyć hostname shelly1pm-{MAC}.local podczas konfiguracji TapHome. Zastąp {MAC} ostatnimi 6 znakami adresu MAC urządzenia w szesnastkowym formacie małymi literami (np. shelly1pm-112233.local). Użycie hostname zapobiega problemom z połączeniem przy zmianie adresu IP urządzenia.

Konfiguracja szablonu

Po zaimportowaniu szablonu w TapHome:

  1. Otwórz moduł Shelly 1PM MQTT
  2. Ustaw IP brokera MQTT i Port (domyślnie 1883)
  3. Dla każdej jednostki Shelly 1PM ustaw zmienną pulgNtopic na Device ID odpowiedniego Shelly 1PM (np. shelly1pm-112233)

Moduł subskrybuje shellies/#, a skrypty listener filtrują wiadomości według skonfigurowanego prefiksu topiku.

Skonfiguruj tylko sloty, których faktycznie używasz. Nieskonfigurowane sloty (z domyślną wartością shelly1pm-deviceidN) nie będą pasować do żadnego rzeczywistego urządzenia i można je zignorować.

Funkcje urządzenia

Sterowanie przekaźnikiem

Każda jednostka udostępnia urządzenie przełączające w TapHome. Stan przekaźnika jest odczytywany z topiku shellies/<id>/relay/0 i sterowany przez publikowanie on lub off na shellies/<id>/relay/0/command.

Pomiar mocy

Każda jednostka zawiera licznik energii odczytujący dwie wartości:

  • Moc w czasie rzeczywistymshellies/<id>/relay/0/power raportowana w watach, konwertowana na kW przez szablon
  • Całkowite zużycieshellies/<id>/relay/0/energy raportowane w wat-minutach, konwertowane na kWh przez szablon

Licznik jest tylko do odczytu — aktualizuje się automatycznie, gdy urządzenie publikuje nowe dane.

Monitoring termiczny i przeciążeniowy

Każde urządzenie przełączające udostępnia cztery atrybuty serwisowe:

  • Temperatura wewnętrzna — temperatura urządzenia w °C z topiku shellies/<id>/temperature
  • Status temperatury — poziom termiczny: Normal, High lub Very High (shellies/<id>/temperature_status)
  • Przegrzanie — flaga alarmu przegrzania (shellies/<id>/overtemperature)
  • Przeciążenie — raportuje moc obciążenia (W) po wykryciu przeciążenia (shellies/<id>/overpower_value)
Dodatkowe funkcje

Shelly 1PM publikuje również status online/offline przez MQTT Last Will and Testament (LWT) topik, kompletną wiadomość statusu JSON (firmware ≥1.8.0), stan fizycznego wejścia i zdarzenia wejściowe (krótkie/podwójne/potrójne/długie naciśnięcie). Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Urządzenie nie raportuje danych
  1. Sprawdź, czy Shelly 1PM jest połączony z Wi-Fi i MQTT jest włączone w ustawieniach urządzenia
  2. Sprawdź, czy zmienna pulgNtopic dokładnie odpowiada Device ID (np. shelly1pm-112233)
  3. Potwierdź poprawność adresu IP i portu brokera MQTT w ustawieniach modułu
  4. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji shellies/# i sprawdź, czy urządzenie publikuje wiadomości
Pomiar mocy pokazuje zero
  1. Potwierdź, że obciążenie jest podłączone przez przekaźnik Shelly (nie ominięte)
  2. Sprawdź, czy przekaźnik jest włączony — licznik mierzy tylko gdy prąd płynie przez przekaźnik
  3. Subskrybuj shellies/<id>/relay/0/power za pomocą klienta MQTT i sprawdź, czy urządzenie raportuje wartość niezerową
Ostrzeżenie o przegrzaniu

Shelly 1PM posiada wbudowaną ochronę termiczną. Gdy temperatura urządzenia przekroczy bezpieczne limity, temperature_status zmienia się na “High” lub “Very High”, a overtemperature ustawia się na true. Zapewnij odpowiednią wentylację wokół urządzenia, szczególnie przy przełączaniu dużych obciążeń.

Urządzenia Shelly Gen1 nie obsługują MQTT przez TLS. Komunikacja między urządzeniem 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 1PM MQTT Moduł
Zmienne niestandardowe
pulg1topic (string) = shelly1pm-deviceid1MQTT device ID pierwszej jednostki Shelly 1PM — format to 'shelly1pm-DEVICEID' (Device ID do znalezienia w interfejsie webowym Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID
pulg2topic (string) = shelly1pm-deviceid2MQTT device ID drugiej jednostki Shelly 1PM
pulg3topic (string) = shelly1pm-deviceid3MQTT device ID trzeciej jednostki Shelly 1PM
pulg4topic (string) = shelly1pm-deviceid4MQTT device ID czwartej jednostki Shelly 1PM
pulg5topic (string) = shelly1pm-deviceid5MQTT device ID piątej jednostki Shelly 1PM
Licznik energii 1 Licznik energii Tylko do odczytu

Moc w czasie rzeczywistym (kW) i energia kumulatywna (kWh) dla jednostki Shelly 1PM 1

numeric Jednostka: kW / kWh

Licznik energii 1

Nasłuchiwanie
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
Przełącznik 1 Przełącznik

Sterowanie przekaźnikiem dla jednostki Shelly 1PM 1 — przełączanie on/off z monitoringiem termicznym i przeciążeniowym

boolean
Wartości / Stany: ON · OFF

Przełącznik 1

Zapis stanu przełącznika
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg1topic + "/relay/0/command", value);
Nasłuchiwanie
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
Atrybuty serwisowe
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");
Licznik energii 2 Licznik energii Tylko do odczytu

Moc w czasie rzeczywistym (kW) i energia kumulatywna (kWh) dla jednostki Shelly 1PM 2

numeric Jednostka: kW / kWh

Licznik energii 2

Nasłuchiwanie
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
Przełącznik 2 Przełącznik

Sterowanie przekaźnikiem dla jednostki Shelly 1PM 2 — przełączanie on/off z monitoringiem termicznym i przeciążeniowym

boolean
Wartości / Stany: ON · OFF

Przełącznik 2

Zapis stanu przełącznika
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg2topic + "/relay/0/command", value);
Nasłuchiwanie
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
Atrybuty serwisowe
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");
Licznik energii 3 Licznik energii Tylko do odczytu

Moc w czasie rzeczywistym (kW) i energia kumulatywna (kWh) dla jednostki Shelly 1PM 3

numeric Jednostka: kW / kWh

Licznik energii 3

Nasłuchiwanie
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
Przełącznik 3 Przełącznik

Sterowanie przekaźnikiem dla jednostki Shelly 1PM 3 — przełączanie on/off z monitoringiem termicznym i przeciążeniowym

boolean
Wartości / Stany: ON · OFF

Przełącznik 3

Zapis stanu przełącznika
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg3topic + "/relay/0/command", value);
Nasłuchiwanie
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
Atrybuty serwisowe
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");
Licznik energii 4 Licznik energii Tylko do odczytu

Moc w czasie rzeczywistym (kW) i energia kumulatywna (kWh) dla jednostki Shelly 1PM 4

numeric Jednostka: kW / kWh

Licznik energii 4

Nasłuchiwanie
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
Przełącznik 4 Przełącznik

Sterowanie przekaźnikiem dla jednostki Shelly 1PM 4 — przełączanie on/off z monitoringiem termicznym i przeciążeniowym

boolean
Wartości / Stany: ON · OFF

Przełącznik 4

Zapis stanu przełącznika
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg4topic + "/relay/0/command", value);
Nasłuchiwanie
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
Atrybuty serwisowe
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");
Licznik energii 5 Licznik energii Tylko do odczytu

Moc w czasie rzeczywistym (kW) i energia kumulatywna (kWh) dla jednostki Shelly 1PM 5

numeric Jednostka: kW / kWh

Licznik energii 5

Nasłuchiwanie
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
Przełącznik 5 Przełącznik

Sterowanie przekaźnikiem dla jednostki Shelly 1PM 5 — przełączanie on/off z monitoringiem termicznym i przeciążeniowym

boolean
Wartości / Stany: ON · OFF

Przełącznik 5

Zapis stanu przełącznika
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg5topic + "/relay/0/command", value);
Nasłuchiwanie
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
Atrybuty serwisowe
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");
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (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.

Źródła