---
title: "Shelly Plus 2PM"
description: "Dwukanałowy przekaźnik z pomiarem mocy lub sterowaniem roletami przez HTTP RPC API. Integracja TapHome dla Shelly Plus 2PM z przełączaniem profili."
url: "https://taphome.com/pl/compatibility/shelly-plus-2-pm/"
language: pl
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["http","electric-meter","wifi","relay","power-metering","cover","shutter","mdns","profile"]
  questions: ["Jak zintegrować Shelly Plus 2PM z TapHome?","Jaka jest różnica między profilem switch a cover na Shelly Plus 2PM?","Jak sterować roletą za pomocą Shelly Plus 2PM i TapHome?","Jak przełączyć między trybem przekaźnika a trybem rolety na Shelly Plus 2PM?","Dlaczego szablon Shelly Plus 2PM wyświetla błąd profilu w TapHome?","Jak skalibrować osłonę Shelly Plus 2PM do sterowania pozycją?","Jakie diagnostyki są dostępne dla Shelly Plus 2PM w TapHome?"]
---

# Shelly Plus 2PM

Komunikacja: Packet Parser → HTTP

- [Shelly Plus 2PM strona produktu](https://www.shelly.com/en/products/shop/shelly-plus-2pm)
- [Shelly Plus 2PM dokumentacja API](https://shelly-api-docs.shelly.cloud/gen2/Devices/Gen2/ShellyPlus2PM/)

> Adres w sieci
> 
> TapHome łączy się z urządzeniem pod adresem podanym przy imporcie. Nadaj urządzeniu stały adres — rezerwację IP w routerze albo jego nazwę mDNS, jeśli ją obsługuje — inaczej integracja przestanie działać, gdy router zmieni adres.
> 
> [Przygotowanie sieci](https://taphome.com/pl/docs/setup/network-preparation/)

## Poradnik integracji

Shelly Plus 2PM to kompaktowy dwukanałowy przekaźnik Wi-Fi z wbudowanym pomiarem mocy na obu kanałach. Mieści się za standardowym włącznikiem ściennym i może sterować dwoma niezależnymi obwodami, każdy do 10 A (łącznie 16 A przy 230 V AC), lub napędzać pojedynczą zmotoryzowaną roletę. TapHome komunikuje się z urządzeniem przez HTTP za pomocą Gen2+ RPC API w sieci lokalnej — połączenie z chmurą nie jest wymagane.

Urządzenie obsługuje dwa profile operacyjne — **switch** i **cover** — wybierane przez interfejs webowy Shelly lub akcję serwisową TapHome. W profilu switch oba wyjścia przekaźnikowe (O1 i O2) działają niezależnie z pomiarem mocy na każdym kanale. W profilu cover oba wyjścia napędzają pojedynczy silnik dla rolet, żaluzji lub zasłon, ze sterowaniem pozycją i kalibracją.

> [!NOTE]
> Shelly Plus 2PM został wycofany z produkcji. Jego następca, [Shelly 2PM Gen3](https://taphome.com/pl/compatibility/shelly-2pm-gen3/), oferuje tę samą funkcjonalność podwójnego profilu z ulepszonym procesorem (8 MB flash), do 6 jednoczesnych połączeń HTTP i możliwością aktualizacji do Matter.

## Konfiguracja

Shelly Plus 2PM łączy się przez Wi-Fi. Podczas importu szablonu TapHome wprowadź adres IP urządzenia (domyślny symbol zastępczy `192.168.0.1`).

> [!WARNING]
> Uwierzytelnianie musi być **wyłączone** na urządzeniu Shelly do integracji z TapHome. TapHome nie obsługuje HTTP Digest Auth używanego przez urządzenia Gen2+. Otwórz interfejs webowy Shelly (`http://{ip-urzadzenia}`) → Settings → Authentication i upewnij się, że jest wyłączone.

> [!NOTE]
> Jeśli tryb ECO jest włączony na urządzeniu Shelly, może powodować przekroczenia czasu komunikacji z powodu szybkich interwałów odpytywania szablonu (2,5–5 sekund). Wyłącz tryb ECO w interfejsie webowym Shelly, jeśli doświadczasz sporadycznych problemów z łącznością.

### Wybór profilu

Shelly Plus 2PM działa w jednym z dwóch profili naraz. Aktywny profil określa, które urządzenia TapHome będą funkcjonalne:

- **Profil switch** — aktywuje oba przekaźniki (Switch 1 i Switch 2) oraz ich liczniki energii dla każdego kanału. Urządzenie rolety i licznik energii rolety nie będą odpowiadać.
- **Profil cover** — aktywuje urządzenie rolety i jego licznik energii. Dwa urządzenia przełączające i ich liczniki energii nie będą odpowiadać.

Aktywny profil jest widoczny jako atrybut serwisowy na poziomie modułu ("Profile") w TapHome. Aby zmienić profil, użyj akcji serwisowej **Profile** na poziomie modułu lub przełącz go w interfejsie webowym Shelly. Po zmianie profilu urządzenie restartuje się i działać będą tylko urządzenia odpowiadające nowemu profilowi.

> [!TIP]
> Szablon zawiera wszystkie sześć urządzeń (2 przełączniki + 2 liczniki energii przełączników + 1 roleta + 1 licznik energii rolety), ale działać będą tylko urządzenia odpowiadające aktywnemu profilowi. To oczekiwane zachowanie — urządzenia na niewłaściwym profilu po prostu nie odpowiadają.

### Kalibracja osłony

Podczas korzystania z profilu cover, zakresy ruchu silnika muszą być skalibrowane, zanim sterowanie pozycją zacznie działać. Do zakończenia kalibracji `current_pos` zwraca null, a atrybut serwisowy "Calibrated" pokazuje `false`. Kalibruj przez interfejs webowy Shelly lub uruchamiając akcję serwisową **Calibrate** na urządzeniu Shutter w TapHome. Podczas kalibracji osłona wykonuje wieloetapową sekwencję (pełne otwarcie → pełne zamknięcie → pełne otwarcie → zamykanie krokami → otwieranie krokami) w celu zmierzenia odległości ruchu.

## Możliwości urządzenia

### Sterowanie przekaźnikiem (profil switch)

Szablon udostępnia dwa niezależne przekaźniki. Każdy przełącznik odczytuje stan z `/rpc/Switch.GetStatus?id={0,1}` (pole `output`, boolean) i steruje przekaźnikiem przez `/rpc/Switch.Set?id={0,1}&on=true|false`.

Każdy przełącznik udostępnia siedem atrybutów serwisowych:

- **Source** — źródło ostatniego polecenia (http, UI, WS_in itp.)
- **Temperature** — temperatura wewnętrzna urządzenia w °C
- **Initial State** — zachowanie przełącznika przy włączeniu zasilania (off, on, restore_last lub match_input)
- **Input Mode** — tryb okablowania wejścia fizycznego (follow lub detached)
- **Power Limit** — maksymalny próg mocy w watach dla ochrony przed przeciążeniem
- **Voltage Limit** — maksymalny próg napięcia w woltach
- **Current Limit** — maksymalny próg prądu w amperach

Dwie akcje serwisowe są dostępne dla każdego przełącznika:

- **Set Initial State** — konfiguruje zachowanie przekaźnika po włączeniu zasilania (off, on, restore_last, match_input)
- **Set Mode** — konfiguruje tryb okablowania wejścia fizycznego (follow, detached)

### Pomiar mocy (profil switch)

Każdy kanał przełącznika ma dedykowany licznik energii odczytujący dwie wartości z `/rpc/Switch.GetStatus`:

- **Moc chwilowa** — `apower` w watach, szablon konwertuje na kW
- **Całkowite zużycie** — `aenergy.total` w watogodzinach, szablon konwertuje na kWh

Każdy licznik energii udostępnia również trzy atrybuty serwisowe:

- **Voltage** — napięcie zasilania w woltach
- **Current** — prąd obciążenia w amperach
- **Power Factor** — współczynnik mocy obciążenia

Liczniki są tylko do odczytu — aktualizują się automatycznie z każdym cyklem odpytywania.

### Sterowanie roletą (profil cover)

Urządzenie rolety steruje zmotoryzowaną roletą, zasłoną lub markizą. Pozycję odczytuje z `/rpc/Cover.GetStatus?id=0` (pole `current_pos`, 0–100%) i zapisuje przez `/rpc/Cover.GoToPosition?id=0&pos=N`.

Urządzenie rolety udostępnia 21 atrybutów serwisowych:

- **Stan** — źródło, stan (open/closed/opening/closing/stopped/calibrating), aktualna i docelowa pozycja, timeout ruchu i czas startu
- **Skalibrowany** — czy sterowanie pozycją jest włączone (`pos_control`)
- **Temperatura** — temperatura wewnętrzna urządzenia w °C
- **Zachowanie przy włączeniu** — konfiguracja stanu początkowego (open, closed, stopped)
- **Ustawienia wejść** — tryb wejścia (single, dual, detached), zamiana wejść, odwrócenie kierunków
- **Limity ochronne** — limit mocy (W), limit napięcia (V), limit prądu (A)
- **Ustawienia silnika** — próg mocy jałowej (0–50 W), okres potwierdzenia jałowego (0,25–2 s)
- **Limity ruchu** — maksymalny czas otwarcia (0,1–300 s), maksymalny czas zamknięcia (0,1–300 s)
- **Funkcje bezpieczeństwa** — stan wykrywania przeszkód, stan wyłącznika bezpieczeństwa

Sześć akcji serwisowych jest dostępnych dla rolety:

- **Open** — otwiera osłonę całkowicie
- **Close** — zamyka osłonę całkowicie
- **Stop** — zatrzymuje ruch natychmiast
- **Calibrate** — rozpoczyna procedurę kalibracji dla sterowania pozycją
- **Go to Position** — przenosi osłonę na konkretną pozycję (0–100%)
- **Reverse directions** — przełącza konfigurację `invert_directions` i restartuje urządzenie

### Pomiar mocy (profil cover)

Roleta ma dedykowany licznik energii odczytujący z `/rpc/Cover.GetStatus`:

- **Moc chwilowa** — `apower` w watach, szablon konwertuje na kW
- **Całkowite zużycie** — `aenergy.total` w watogodzinach, szablon konwertuje na kWh

Licznik energii rolety udostępnia również napięcie, prąd i współczynnik mocy jako atrybuty serwisowe.

### Diagnostyka serwisowa

Szablon udostępnia dwa atrybuty serwisowe na poziomie modułu:

- **MAC** — adres MAC urządzenia z konfiguracji systemowej
- **Profile** — aktualnie aktywny profil urządzenia (switch lub cover)

Skrypt odczytu modułu sprawdza również `restart_required` z `/rpc/Sys.GetStatus` i wyświetla ostrzeżenie w TapHome, jeśli restart jest wymagany.

### Akcje serwisowe

Dwie akcje serwisowe są dostępne na poziomie modułu:

- **Reboot** — wyzwala restart urządzenia przez `/rpc/Shelly.Reboot`
- **Profile** — przełącza między profilami operacyjnymi switch i cover przez `/rpc/Shelly.SetProfile`

### Dodatkowe możliwości

Shelly Plus 2PM udostępnia również częstotliwość sieciową (`freq`), minutowe wartości energii (`aenergy.by_minute`), stany wejść fizycznych (`input:0`, `input:1`), siłę sygnału Wi-Fi (RSSI) i endpoint przełączania w swoich odpowiedziach RPC. Liczniki energii można zresetować przez `/rpc/Switch.ResetCounters` (profil switch) lub `/rpc/Cover.ResetCounters` (profil cover). W trybie cover pozycja lameli/pochylenia dla żaluzji weneckich jest dostępna, gdy sprzęt to obsługuje. Te możliwości mogą zostać dodane w przyszłej aktualizacji szablonu.

## Rozwiązywanie problemów

### Urządzenie nie odpowiada

1. Sprawdź, czy Shelly jest połączony z Wi-Fi i ma prawidłowy adres IP
2. Spróbuj użyć nazwy hosta mDNS (`shellyplus2pm-AABBCCDDEE.local`) zamiast adresu IP — IP mógł się zmienić po odnowieniu DHCP
3. Otwórz `http://{ip-urzadzenia}/rpc/Shelly.GetDeviceInfo` w przeglądarce — jeśli odpowiada JSON, urządzenie jest osiągalne
4. Sprawdź, czy TapHome Core i Shelly są w tej samej sieci / VLAN
5. Upewnij się, że uwierzytelnianie jest wyłączone na urządzeniu Shelly

### Niezgodność profilu — urządzenia nie odpowiadają

Jeśli niektóre urządzenia nie pokazują odczytów, podczas gdy inne działają poprawnie:

1. Sprawdź, który profil jest aktualnie aktywny — atrybut serwisowy "Profile" na poziomie modułu pokazuje bieżący tryb
2. Przełącz na właściwy profil za pomocą akcji serwisowej **Profile** lub zignoruj nieużywane urządzenia
3. Po przełączeniu profilu urządzenie automatycznie się restartuje — poczekaj kilka sekund na ponowne połączenie

### Pozycja osłony nie działa

1. Sprawdź, czy urządzenie jest w profilu cover — profil switch nie udostępnia funkcji osłony
2. Uruchom akcję serwisową **Calibrate** na urządzeniu Shutter — sterowanie pozycją wymaga ukończonej kalibracji
3. Sprawdź, czy silnik jest prawidłowo podłączony do zacisków O1 i O2
4. Ręcznie odpytaj `/rpc/Cover.GetStatus?id=0` i sprawdź, czy `pos_control` ma wartość `true`

### Kalibracja osłony nie powiodła się

Kalibracja zostaje przerwana, jeśli:

- Osłona nie osiąga pozycji końcowej w czasie `maxtime_open` lub `maxtime_close`
- Funkcja bezpieczeństwa (wykrywanie przeszkód lub wyłącznik bezpieczeństwa) zostaje aktywowana podczas kalibracji
- Podczas kalibracji wydane zostaje zewnętrzne polecenie zatrzymania
- Kierunek silnika nie odpowiada oczekiwanemu sprzężeniu zwrotnemu
- Urządzenie restartuje się podczas kalibracji

Sprawdź okablowanie silnika, zwiększ `maxtime_open`/`maxtime_close` jeśli silnik jest wolny i upewnij się, że nie ma przeszkód.

### Odczyty mocy pokazują zero

1. Potwierdź, że obciążenie jest podłączone przez przekaźnik Shelly (nie jest obejście)
2. Sprawdź, czy przekaźnik jest włączony — licznik mierzy tylko gdy prąd przepływa przez przekaźnik
3. Ręcznie odpytaj `/rpc/Switch.GetStatus?id=0` (profil switch) lub `/rpc/Cover.GetStatus?id=0` (profil cover) i sprawdź, czy `apower` zwraca wartość niezerową

> [!WARNING]
> Urządzenia Shelly Gen2+ obsługują do **6 jednoczesnych połączeń HTTP**. Mimo że to poprawa w stosunku do Gen1 (2 połączenia), unikaj jednoczesnego odpytywania z zbyt wielu systemów (TapHome, Home Assistant, niestandardowe skrypty), aby zapobiec wyczerpaniu połączeń.

## Jak zainstalować w TapHome

### Wymagania wstępne

- Urządzenie Shelly zainstalowane i włączone
- Lokalna sieć Wi-Fi (2,4 GHz)
- TapHome CCU w tej samej sieci

### Krok 1 — Podłącz Shelly do Wi-Fi

**Opcja A — Aplikacja Shelly (zalecana):**

1. Pobierz [aplikację Shelly](https://www.shelly.com/en/support/shelly-app) (iOS / Android)
2. Dotknij **+** → **Add Device** i postępuj zgodnie z kreatorem parowania Bluetooth
3. Wprowadź dane logowania Wi-Fi, gdy zostaniesz o to poproszony

**Opcja B — Tryb AP (bez aplikacji):**

1. Przy pierwszym uruchomieniu urządzenie tworzy hotspot: `ShellyXXX-AABBCCDDEE`
2. Połącz telefon/PC z tym hotspotem
3. Otwórz `http://192.168.33.1` → **Internet & Security** → **Wi-Fi Mode - Client**
4. Wprowadź SSID i hasło → **Save**

> [!NOTE]
> Shelly obsługuje tylko sieci **2,4 GHz**. Sieci 5 GHz nie pojawią się podczas skanowania.

### Krok 2 — Znajdź adres IP

Po połączeniu z Wi-Fi znajdź przypisany adres IP za pomocą jednej z poniższych metod:

- **Aplikacja Shelly:** Szczegóły urządzenia → **Device info** → Adres IP
- **Interfejs webowy Shelly:** Połącz się z AP urządzenia przed konfiguracją Wi-Fi — IP zostanie wyświetlone po zapisaniu
- **Tabela DHCP routera:** Szukaj nazwy hosta takiej jak `shelly1pm-AABBCCDDEE`
- **mDNS:** Pinguj `shelly<model>-<mac>.local` (np. `shelly1pm-AABBCCDDEE.local`) z tej samej sieci

> [!TIP]
> Przypisz urządzeniu Shelly **statyczny IP** (rezerwację DHCP) w routerze, aby adres nie zmieniał się po ponownym uruchomieniu routera.

### Krok 3 — Konfiguracja w TapHome

1. W TapHome dodaj nowy moduł **Packet Parser (HTTP)**
2. **IP Address:** wprowadź IP z kroku 2 (np. `192.168.1.50`)
3. **Port:** `80` (domyślny, nie wymaga zmiany)
4. Zaimportuj szablon — TapHome będzie okresowo odpytywać `/status` w celu odczytu stanu urządzenia

> [!NOTE]
> Uwierzytelnianie HTTP jest domyślnie wyłączone na urządzeniach Shelly. Jeśli włączyłeś ochronę logowaniem, TapHome obecnie nie obsługuje HTTP Basic Auth — pozostaw uwierzytelnianie wyłączone dla integracji z TapHome.

## Dostępne urządzenia 6

Te urządzenia pojawią się w TapHome po imporcie.

Shelly Plus 2PM Moduł

Atrybuty serwisowe

|        |                                                |
|--------|------------------------------------------------|
| MAC    | Adres MAC urządzenia z konfiguracji systemowej |
| Profil | Aktywny profil urządzenia — switch lub cover   |

Akcje serwisowe

|         |                                                                           |
|---------|---------------------------------------------------------------------------|
| Restart | Restartuje urządzenie                                                     |
| Profil  | Przełączanie między profilami switch i cover — wymaga restartu urządzenia |

Zmienne niestandardowe

Odczyt (moduł)

```taphome
VAR response := SENDHTTPREQUEST("/rpc/Sys.GetConfig");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  SysConfig := response.Content;
END;
 
response := SENDHTTPREQUEST("/rpc/Sys.GetStatus");
IF response.IsSuccess
  content := response.Content;
  responseHeaders := response.Headers;
  if(PARSEJSON(response.Content, "$.restart_required") = true, ADDERROR("Restart required"));
END
```

Atrybuty serwisowe

MAC

```taphome
PARSEJSON(SysConfig, "$.device.mac");
```

Profile

```taphome
PARSEJSON(SysConfig, "$.device.profile");
```

Akcje serwisowe

Reboot

```taphome
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  Return("OK");
END;
```

Profile

Parametry: Profile

```taphome
var profile := SWITCH(pr, 1, "cover", "switch");
VAR response := SENDHTTPREQUEST("/rpc/Shelly.SetProfile?name=\""+profile+"\"");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  Return("OK");
END;
```

Miernik mocy (Roleta) Licznik energii Tylko do odczytu

Pomiar energii w trybie cover — moc chwilowa (kW) i energia skumulowana (kWh)

numeric Jednostka: kW / kWh json\_path

Atrybuty serwisowe

|                   |                              |
|-------------------|------------------------------|
| Napięcie          | Napięcie zasilania w Voltach |
| Prąd              | Prąd obciążenia w Amperach   |
| Współczynnik mocy | Współczynnik mocy obciążenia |

Odczyt całkowitego zużycia

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    return(PARSEJSON(CoverStatus, "$.aenergy.total") / 1000);
end
```

Odczyt zapotrzebowania

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    return(PARSEJSON(CoverStatus, "$.apower", true) / 1000);
end
```

Odczyt (moduł)

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    var response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        CoverStatus := response.Content;
    END
end
```

Atrybuty serwisowe

Voltage \[V]

```taphome
PARSEJSON(CoverStatus, "$.voltage", true);
```

Current \[A]

```taphome
PARSEJSON(CoverStatus, "$.current", true);
```

Power Factor

```taphome
PARSEJSON(CoverStatus, "$.pf", true);
```

Miernik mocy (Przełącznik 1) Licznik energii Tylko do odczytu

Pomiar energii dla kanału przełącznika 1 — moc chwilowa (kW) i energia skumulowana (kWh)

numeric Jednostka: kW / kWh json\_path

Atrybuty serwisowe

|                   |                              |
|-------------------|------------------------------|
| Napięcie          | Napięcie zasilania w Voltach |
| Prąd              | Prąd obciążenia w Amperach   |
| Współczynnik mocy | Współczynnik mocy obciążenia |

Odczyt całkowitego zużycia

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
```

Odczyt zapotrzebowania

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
```

Odczyt (moduł)

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
end
```

Atrybuty serwisowe

Voltage \[V]

```taphome
PARSEJSON(SwitchStatus, "$.voltage", true);
```

Current \[A]

```taphome
PARSEJSON(SwitchStatus, "$.current", true);
```

Power Factor

```taphome
PARSEJSON(SwitchStatus, "$.pf", true);
```

Miernik mocy (Przełącznik 2) Licznik energii Tylko do odczytu

Pomiar energii dla kanału przełącznika 2 — moc chwilowa (kW) i energia skumulowana (kWh)

numeric Jednostka: kW / kWh json\_path

Atrybuty serwisowe

|                   |                              |
|-------------------|------------------------------|
| Napięcie          | Napięcie zasilania w Voltach |
| Prąd              | Prąd obciążenia w Amperach   |
| Współczynnik mocy | Współczynnik mocy obciążenia |

Odczyt całkowitego zużycia

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
```

Odczyt zapotrzebowania

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
```

Odczyt (moduł)

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
end
```

Atrybuty serwisowe

Voltage \[V]

```taphome
PARSEJSON(SwitchStatus, "$.voltage", true);
```

Current \[A]

```taphome
PARSEJSON(SwitchStatus, "$.current", true);
```

Power Factor

```taphome
PARSEJSON(SwitchStatus, "$.pf", true);
```

Roleta Suwak Odczyt i zapis

Zmotoryzowane sterowanie roletą ze śledzeniem pozycji — wymaga kalibracji do sterowania pozycją

numeric Jednostka: % json\_path

Atrybuty serwisowe

|                                          |                                                                                                           |
|------------------------------------------|-----------------------------------------------------------------------------------------------------------|
| Źródło                                   | Źródło ostatniego polecenia rolety                                                                        |
| Stan                                     | Aktualny stan rolety — open, closed, opening, closing, stopped, calibrating                               |
| Aktualna pozycja                         | Aktualna pozycja rolety w procentach (0–100), null jeśli nieskalibrowana                                  |
| Pozycja docelowa                         | Pozycja docelowa podczas ruchu rolety                                                                     |
| Limit czasu ruchu                        | Sekundy do automatycznego zatrzymania podczas ruchu                                                       |
| Ruch rozpoczęty o                        | Znacznik czasu rozpoczęcia bieżącego ruchu                                                                |
| Skalibrowany                             | Czy sterowanie pozycją jest włączone (true po udanej kalibracji)                                          |
| Temperatura                              | Temperatura wewnętrzna urządzenia w stopniach Celsjusza                                                   |
| Stan początkowy                          | Zachowanie rolety po włączeniu — open, closed lub stopped                                                 |
| Tryb wejścia                             | Tryb okablowania wejścia fizycznego — single, dual lub detached                                           |
| Limit mocy                               | Maksymalny próg mocy w Watach dla ochrony przed przeciążeniem                                             |
| Limit napięcia                           | Maksymalny próg napięcia w Voltach dla ochrony przed przepięciem                                          |
| Limit prądu                              | Maksymalny próg prądu w Amperach dla ochrony przed nadprądem                                              |
| Próg mocy jałowej silnika                | Próg mocy, poniżej którego silnik jest uznawany za bezczynny (0–50 W)                                     |
| Okres potwierdzenia bezczynności silnika | Czas, przez który silnik musi pozostać poniżej progu bezczynności, aby potwierdzić zatrzymanie (0,25–2 s) |
| Maksymalny czas otwarcia                 | Maksymalny czas otwarcia przed automatycznym zatrzymaniem (0,1–300 s)                                     |
| Maksymalny czas zamknięcia               | Maksymalny czas zamknięcia przed automatycznym zatrzymaniem (0,1–300 s)                                   |
| Zamień wejścia                           | Czy przypisanie wejść S1/S2 jest zamienione                                                               |
| Odwróć kierunki                          | Czy kierunki otwarcia/zamknięcia są odwrócone                                                             |
| Wykrywanie przeszkód                     | Czy wykrywanie przeszkód jest włączone                                                                    |
| Wyłącznik bezpieczeństwa                 | Czy funkcja wyłącznika bezpieczeństwa jest włączona                                                       |

Akcje serwisowe

|                    |                                                                   |
|--------------------|-------------------------------------------------------------------|
| Otwórz             | Całkowicie otwiera roletę                                         |
| Zamknij            | Całkowicie zamyka roletę                                          |
| Zatrzymaj          | Natychmiast zatrzymuje ruch rolety                                |
| Kalibracja         | Uruchamia kalibrację rolety — wymagana do sterowania pozycją      |
| Przejdź do pozycji | Przesuwa roletę do określonej pozycji (0–100 %)                   |
| Odwróć kierunki    | Przełącza konfigurację invert\_directions i restartuje urządzenie |

Odczyt (moduł)

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    var response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        CoverStatus := response.Content;
    END
    
    response := SENDHTTPREQUEST("/rpc/Cover.GetConfig?id=" + Id);
    IF response.IsSuccess
        content := response.Content;
        responseHeaders := response.Headers;
        CoverConfig := response.Content;
    END
end
```

Odczyt poziomu rolety

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    var response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + Id);
    IF response.IsSuccess
        CoverStatus := response.Content;
    END
    if PARSEJSON(CoverStatus, "$.pos_control", true) = true
        var pos := -1;
        var curpos := PARSEJSON(CoverStatus, "$.current_pos", true);
        if ISNULL(curpos)
            adderror("Device lost its position. Open or close the cover completely to enable back position control.");
            return(0);
        end
        var target := PARSEJSON(CoverStatus, "$.target_pos", true);
        if(ISNULL(target), pos := curpos, pos := target);
        if PARSEJSON(CoverConfig, "$.invert_directions", true)
            return(linear(pos, 0, 0, 100, 1));
        else
            return(linear(pos, 0, 1, 100, 0));
        end
    else
        adderror("Device is not calibrated");
    end
end
```

Zapis poziomu rolety

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    var pos := 0;
    if PARSEJSON(CoverConfig, "$.invert_directions", true)
        pos := linear(Bl, 0, 0, 1, 100);
    else
        pos := linear(Bl, 0, 100, 1, 0);
    end
    VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=" + Id + "&pos=" + pos);
    IF response.IsSuccess
      VAR content := response.Content;
      Return("OK");
    else
      return(parsejson(response.Content,"$.message"));
    END
end
```

Atrybuty serwisowe

Source

```taphome
PARSEJSON(CoverStatus, "$.source", true);
```

State

```taphome
PARSEJSON(CoverStatus, "$.state", true);
```

Current Position

```taphome
PARSEJSON(CoverStatus, "$.current_pos", true);
```

Target Position

```taphome
PARSEJSON(CoverStatus, "$.target_pos", true);
```

Move Timeout

```taphome
PARSEJSON(CoverStatus, "$.move_timeout", true);
```

Move Started at

```taphome
PARSEJSON(CoverStatus, "$.move_started_at", true);
```

Calibrated

```taphome
PARSEJSON(CoverStatus, "$.pos_control", true);
```

Temperature \[°C]

```taphome
PARSEJSON(CoverStatus, "$.temperature.tC", true);
```

Initial State

```taphome
PARSEJSON(CoverConfig, "$.initial_state", true);
```

Input Mode

```taphome
PARSEJSON(CoverConfig, "$.in_mode", true);
```

Power Limit \[W]

```taphome
PARSEJSON(CoverConfig, "$.power_limit", true);
```

Voltage Limit \[V]

```taphome
PARSEJSON(CoverConfig, "$.voltage_limit", true);
```

Current Limit \[A]

```taphome
PARSEJSON(CoverConfig, "$.current_limit", true);
```

Motor Idle Power Threshold \[W]

```taphome
PARSEJSON(CoverConfig, "$.motor.idle_power_thr", true);
```

Motor Idle Confirm Period \[s]

```taphome
PARSEJSON(CoverConfig, "$.motor.idle_confirm_period", true);
```

Max Time Open \[s]

```taphome
PARSEJSON(CoverConfig, "$.maxtime_open", true);
```

Max Time Close \[s]

```taphome
PARSEJSON(CoverConfig, "$.maxtime_close", true);
```

Swap Inputs

```taphome
PARSEJSON(CoverConfig, "$.swap_inputs", true);
```

Invert Directions

```taphome
PARSEJSON(CoverConfig, "$.invert_directions", true);
```

Obstruction Detection

```taphome
PARSEJSON(CoverConfig, "$.obstruction_detection", true);
```

Safety Switch

```taphome
PARSEJSON(CoverConfig, "$.safety_switch", true);
```

Akcje serwisowe

Open

```taphome
VAR response := SENDHTTPREQUEST("rpc/Cover.Open?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Close

```taphome
VAR response := SENDHTTPREQUEST("rpc/Cover.Close?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Stop

```taphome
VAR response := SENDHTTPREQUEST("rpc/Cover.Stop?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Calibrate

```taphome
VAR response := SENDHTTPREQUEST("rpc/Cover.Calibrate?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Go to Position

Parametry: Position (0–100 pos)

```taphome
VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=" + Id + "&pos=" + pos);
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Reverse directions

```taphome
var reverse := "false";
if(PARSEJSON(CoverConfig, "$.invert_directions"), reverse := "false", reverse := "true");
VAR response := SENDHTTPREQUEST("rpc/Cover.SetConfig?id=0&config={\"invert_directions\":" + reverse + "}");
IF response.IsSuccess
  SENDHTTPREQUEST("rpc/Shelly.Reboot");
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Przełącznik 1 Przełącznik Odczyt i zapis

Wyjście przekaźnikowe kanał 1 — sterowanie włączaniem/wyłączaniem z konfiguracją zachowania po włączeniu i trybu wejścia

boolean json\_path

Wartości / Stany: ON · OFF

Akcje serwisowe

|                       |                                                  |
|-----------------------|--------------------------------------------------|
| Ustaw stan początkowy | Konfiguruje zachowanie przełącznika po włączeniu |
| Ustaw tryb            | Konfiguruje tryb okablowania wejścia fizycznego  |

Odczyt stanu przełącznika

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
```

Zapis stanu przełącznika

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + Id + "&on=" + if(St,"true","false"));
    IF response.IsSuccess = false
      ADDERROR(response.StatusCode);
    END
end
```

Odczyt (moduł)

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
    
    response := SENDHTTPREQUEST("/rpc/Switch.GetConfig?id=" + Id);
    IF response.IsSuccess
        content := response.Content;
        responseHeaders := response.Headers;
        SwitchConfig := response.Content;
    END
end
```

Atrybuty serwisowe

Source

```taphome
PARSEJSON(SwitchStatus, "$.source", true);
```

Temprature \[°C]

```taphome
PARSEJSON(SwitchStatus, "$.temperature.tC", true);
```

Initial State

```taphome
PARSEJSON(SwitchConfig, "$.initial_state", true);
```

Input Mode

```taphome
PARSEJSON(SwitchConfig, "$.in_mode", true);
```

Power Limit \[W]

```taphome
PARSEJSON(SwitchConfig, "$.power_limit", true);
```

Voltage Limit \[V]

```taphome
PARSEJSON(SwitchConfig, "$.voltage_limit", true);
```

Current Limit \[A]

```taphome
PARSEJSON(SwitchConfig, "$.current_limit", true);
```

Akcje serwisowe

Set Initial State

Parametry: Mode

```taphome
var mode := SWITCH(md, 1, "on", 2, "restore_last", 3, "match_input", "off");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"initial_state\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Set Mode

Parametry: Mode

```taphome
var mode := SWITCH(md, 1, "detached", "follow");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"in_mode\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Przełącznik 2 Przełącznik Odczyt i zapis

Wyjście przekaźnikowe kanał 2 — sterowanie włączaniem/wyłączaniem z konfiguracją zachowania po włączeniu i trybu wejścia

boolean json\_path

Wartości / Stany: ON · OFF

Akcje serwisowe

|                       |                                                  |
|-----------------------|--------------------------------------------------|
| Ustaw stan początkowy | Konfiguruje zachowanie przełącznika po włączeniu |
| Ustaw tryb            | Konfiguruje tryb okablowania wejścia fizycznego  |

Odczyt stanu przełącznika

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
```

Zapis stanu przełącznika

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + Id + "&on=" + if(St,"true","false"));
    IF response.IsSuccess = false
      ADDERROR(response.StatusCode);
    END
end
```

Odczyt (moduł)

```taphome
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
    
    response := SENDHTTPREQUEST("/rpc/Switch.GetConfig?id=" + Id);
    IF response.IsSuccess
        content := response.Content;
        responseHeaders := response.Headers;
        SwitchConfig := response.Content;
    END
end
```

Atrybuty serwisowe

Source

```taphome
PARSEJSON(SwitchStatus, "$.source", true);
```

Temprature \[°C]

```taphome
PARSEJSON(SwitchStatus, "$.temperature.tC", true);
```

Initial State

```taphome
PARSEJSON(SwitchConfig, "$.initial_state", true);
```

Input Mode

```taphome
PARSEJSON(SwitchConfig, "$.in_mode", true);
```

Power Limit \[W]

```taphome
PARSEJSON(SwitchConfig, "$.power_limit", true);
```

Voltage Limit \[V]

```taphome
PARSEJSON(SwitchConfig, "$.voltage_limit", true);
```

Current Limit \[A]

```taphome
PARSEJSON(SwitchConfig, "$.current_limit", true);
```

Akcje serwisowe

Set Initial State

Parametry: Mode

```taphome
var mode := SWITCH(md, 1, "on", 2, "restore_last", 3, "match_input", "off");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"initial_state\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

Set Mode

Parametry: Mode

```taphome
var mode := SWITCH(md, 1, "detached", "follow");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"in_mode\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
```

**Połączenie:** Packet Parser → HTTP • Hostname: `shellyplus2pm-{MAC}.local`

Możliwe ulepszenia (8)

- Frequency — Network frequency in Hz, available in both Switch and Cover status responses
- Energy per Minute — Last 3 minute energy values in Wh, available but not exposed as separate device
- Input 1 State — Physical input state (input:0), available in both profiles
- Input 2 State — Physical input state (input:1), available in both profiles
- Switch Toggle — Toggle switch without knowing current state — could be added as service action
- Reset Energy Counters — Resets energy measurement counters — could be added as service action
- Slat Position — Slat/tilt position for venetian blinds, if hardware supports it
- WiFi Signal Strength — RSSI in dBm, available via WiFi component

## Parametry importu

Te wartości podajesz podczas importu pliku XML.

| Pytanie w aplikacji | Domyślnie     |
|---------------------|---------------|
| Adres IP            | `192.168.0.1` |

## Źródła

- Shelly Gen2+ RPC API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/) 2026-03-27
- Switch Component API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Switch/) 2026-03-27
- System (Sys) Component API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Sys/) 2026-03-27
- WiFi Component API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Wifi/) 2026-03-27
- MQTT Component API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/MQTT/) 2026-03-27
- HA Shelly Integration (Gen2+)
  
  [www.home-assistant.io](https://www.home-assistant.io/integrations/shelly/) 2026-03-27
- Shelly Plus 2PM Knowledge Base
  
  [kb.shelly.cloud](https://kb.shelly.cloud/knowledge-base/shelly-plus-2pm) 2026-03-29
- Cover Component API (Gen2+)
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Cover/) 2026-03-29
- Shelly Plus 2PM Device API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen2/Devices/Gen2/ShellyPlus2PM/) 2026-03-29

## Powiązana dokumentacja

- [Integracja Packet Parser](https://taphome.com/pl/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/pl/docs/integration/packet-parser/)
- [Funkcje Packet parser](https://taphome.com/pl/docs/script/packet-parser/)
- [Funkcje parsowania](https://taphome.com/pl/docs/script/parsing-functions/)

