---
title: "Shelly Plus 2PM"
description: "Shelly Plus 2PM přes lokální HTTP RPC API: dva okruhy s měřením výkonu, nebo v profilu cover motor rolety s polohou a kalibrací. Bez cloudu."
url: "https://taphome.com/cs/compatibility/shelly-plus-2-pm/"
language: cs
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["http","electric-meter","wifi","relay","power-metering","cover","shutter","mdns","profile"]
  questions: ["Jak integrovat Shelly Plus 2PM s TapHome?","Jaký je rozdíl mezi profilem switch a cover na Shelly Plus 2PM?","Jak ovládat roletový motor se Shelly Plus 2PM a TapHome?","Jak přepnout mezi režimem relé a režimem rolety na Shelly Plus 2PM?","Proč šablona Shelly Plus 2PM zobrazuje chybu profilu v TapHome?","Jak kalibrovat kryt Shelly Plus 2PM pro ovládání pozice?","Jaké diagnostiky jsou dostupné pro Shelly Plus 2PM v TapHome?"]
---

# Shelly Plus 2PM

Komunikace: Packet Parser → HTTP

- [Shelly Plus 2PM produktová stránka](https://www.shelly.com/en/products/shop/shelly-plus-2pm)
- [Shelly Plus 2PM API dokumentace](https://shelly-api-docs.shelly.cloud/gen2/Devices/Gen2/ShellyPlus2PM/)

> Adresa v síti
> 
> TapHome komunikuje se zařízením na adrese zadané při importu. Dejte zařízení stálou adresu — rezervaci IP v routeru, nebo jeho mDNS jméno, pokud ho podporuje —, jinak integrace přestane fungovat, když router adresu změní.
> 
> [Příprava sítě](https://taphome.com/cs/docs/setup/network-preparation/)

## Návod na integraci

Shelly Plus 2PM je kompaktní dvoukanálové Wi-Fi relé s vestavěným měřením výkonu na obou kanálech. Vejde se za standardní nástěnný vypínač a dokáže ovládat dva nezávislé okruhy, každý do 10 A (celkem 16 A při 230 V AC), nebo pohon jedné motorizované rolety. TapHome komunikuje se zařízením přes HTTP pomocí Gen2+ RPC API v lokální síti — cloudové připojení není potřeba.

Zařízení podporuje dva provozní profily — **switch** a **cover** — volitelné přes webové rozhraní Shelly nebo servisní akci v TapHome. V profilu switch oba reléové výstupy (O1 a O2) pracují nezávisle s měřením výkonu na každém kanálu. V profilu cover oba výstupy pohánějí jeden motor pro rolety, žaluzie nebo závěsy s ovládáním pozice a kalibrací.

> [!NOTE]
> Shelly Plus 2PM byl ukončen. Jeho nástupce, [Shelly 2PM Gen3](https://taphome.com/cs/compatibility/shelly-2pm-gen3/), nabízí stejnou funkci dvojitého profilu s vylepšeným procesorem (8 MB flash), až 6 současnými HTTP připojeními a možností aktualizace na Matter.

## Konfigurace

Shelly Plus 2PM se připojuje přes Wi-Fi. Během importu šablony TapHome zadejte IP adresu zařízení (výchozí hodnota `192.168.0.1`).

> [!WARNING]
> Autentifikace musí být na zařízení Shelly **vypnutá** pro integraci s TapHome. TapHome nepodporuje HTTP Digest Auth používaný zařízeními Gen2+. Otevřete webové rozhraní Shelly (`http://{ip-zarizeni}`) → Settings → Authentication a ujistěte se, že je vypnutá.

> [!NOTE]
> Pokud je na zařízení Shelly povolen režim ECO, může způsobovat výpadky komunikace kvůli rychlým intervalům dotazování šablony (2,5–5 sekund). Vypněte režim ECO ve webovém rozhraní Shelly, pokud zaznamenáte občasné problémy s připojením.

### Výběr profilu

Shelly Plus 2PM pracuje v jednom ze dvou profilů. Aktivní profil určuje, která zařízení TapHome budou funkční:

- **Profil switch** — aktivuje oba reléové spínače (Switch 1 a Switch 2) a jejich měřiče energie pro každý kanál. Zařízení rolety a měřič energie rolety nebudou reagovat.
- **Profil cover** — aktivuje zařízení rolety a jeho měřič energie. Obě spínací zařízení a jejich měřiče energie nebudou reagovat.

Aktivní profil je viditelný jako servisní atribut na úrovni modulu („Profile") v TapHome. Pro změnu profilu použijte servisní akci **Profile** na úrovni modulu nebo ho přepněte ve webovém rozhraní Shelly. Po změně profilu se zařízení restartuje a fungovat budou pouze zařízení odpovídající novému profilu.

> [!TIP]
> Šablona obsahuje všech šest zařízení (2 spínače + 2 měřiče energie spínačů + 1 roleta + 1 měřič energie rolety), ale fungovat budou pouze zařízení odpovídající aktivnímu profilu. Toto je očekávané chování — zařízení na nesprávném profilu jednoduše nereagují.

### Kalibrace krytu

Při použití profilu cover musí být před fungováním ovládání pozice nakalibrovány koncové polohy motoru. Dokud není kalibrace dokončena, `current_pos` vrací null a servisní atribut „Calibrated" zobrazuje `false`. Kalibrujte buď přes webové rozhraní Shelly, nebo spuštěním servisní akce **Calibrate** na zařízení Shutter v TapHome. Během kalibrace kryt provede vícestupňovou sekvenci (plné otevření → plné zavření → plné otevření → zavření po krocích → otevření po krocích) pro změření vzdáleností pohybu.

## Možnosti zařízení

### Ovládání relé (profil switch)

Šablona zpřístupňuje dva nezávislé reléové spínače. Každý spínač čte svůj stav z `/rpc/Switch.GetStatus?id={0,1}` (pole `output`, boolean) a ovládá relé přes `/rpc/Switch.Set?id={0,1}&on=true|false`.

Každý spínač zpřístupňuje sedm servisních atributů:

- **Source** — zdroj posledního příkazu (http, UI, WS_in, atd.)
- **Temperature** — vnitřní teplota zařízení v °C
- **Initial State** — chování spínače při zapnutí napájení (off, on, restore_last nebo match_input)
- **Input Mode** — režim zapojení fyzického vstupu (follow nebo detached)
- **Power Limit** — maximální práh výkonu ve wattech pro ochranu před přetížením
- **Voltage Limit** — maximální práh napětí ve voltech
- **Current Limit** — maximální práh proudu v ampérech

Pro každý spínač jsou dostupné dvě servisní akce:

- **Set Initial State** — konfiguruje chování relé po zapnutí napájení (off, on, restore_last, match_input)
- **Set Mode** — konfiguruje režim zapojení fyzického vstupu (follow, detached)

### Měření výkonu (profil switch)

Každý kanál spínače má vlastní měřič energie, který čte dvě hodnoty z `/rpc/Switch.GetStatus`:

- **Okamžitý výkon** — `apower` ve wattech, šablona konvertuje na kW
- **Celková spotřeba** — `aenergy.total` ve watthodinách, šablona konvertuje na kWh

Každý měřič energie zpřístupňuje také tři servisní atributy:

- **Voltage** — napájecí napětí ve voltech
- **Current** — proud zátěže v ampérech
- **Power Factor** — účiník zátěže

Měřiče jsou pouze ke čtení — aktualizují se automaticky s každým cyklem dotazování.

### Ovládání rolety (profil cover)

Zařízení rolety ovládá motorizovanou roletu, závěs nebo markýzu. Pozici čte z `/rpc/Cover.GetStatus?id=0` (pole `current_pos`, 0–100 %) a zapisuje přes `/rpc/Cover.GoToPosition?id=0&pos=N`.

Zařízení rolety zpřístupňuje 21 servisních atributů:

- **Stav** — zdroj, stav (open/closed/opening/closing/stopped/calibrating), aktuální a cílová pozice, časový limit pohybu a čas spuštění
- **Kalibrovaný** — zda je ovládání pozice zapnuto (`pos_control`)
- **Teplota** — vnitřní teplota zařízení v °C
- **Chování při zapnutí** — konfigurace počátečního stavu (open, closed, stopped)
- **Nastavení vstupu** — režim vstupu (single, dual, detached), výměna vstupů, invertování směrů
- **Ochranné limity** — limit výkonu (W), limit napětí (V), limit proudu (A)
- **Nastavení motoru** — práh výkonu v klidu (0–50 W), potvrzovací období klidu (0,25–2 s)
- **Limity pohybu** — maximální čas otevření (0,1–300 s), maximální čas zavření (0,1–300 s)
- **Bezpečnostní funkce** — stav detekce překážky, stav bezpečnostního spínače

Pro roletu je dostupných šest servisních akcí:

- **Open** — úplně otevře kryt
- **Close** — úplně zavře kryt
- **Stop** — okamžitě zastaví pohyb
- **Calibrate** — spustí kalibrační postup pro ovládání pozice
- **Go to Position** — přesune kryt na konkrétní pozici (0–100 %)
- **Reverse directions** — přepne konfiguraci `invert_directions` a restartuje zařízení

### Měření výkonu (profil cover)

Roleta má vlastní měřič energie, který čte z `/rpc/Cover.GetStatus`:

- **Okamžitý výkon** — `apower` ve wattech, šablona konvertuje na kW
- **Celková spotřeba** — `aenergy.total` ve watthodinách, šablona konvertuje na kWh

Měřič energie rolety zpřístupňuje také napětí, proud a účiník jako servisní atributy.

### Servisní diagnostika

Šablona zpřístupňuje dva servisní atributy na úrovni modulu:

- **MAC** — MAC adresa zařízení ze systémové konfigurace
- **Profile** — aktuálně aktivní profil zařízení (switch nebo cover)

Čtecí skript modulu kontroluje také `restart_required` z `/rpc/Sys.GetStatus` a zobrazí upozornění v TapHome, pokud je potřeba restart.

### Servisní akce

Na úrovni modulu jsou dostupné dvě servisní akce:

- **Reboot** — spustí restart zařízení přes `/rpc/Shelly.Reboot`
- **Profile** — přepne mezi provozními profily switch a cover přes `/rpc/Shelly.SetProfile`

### Další možnosti

Shelly Plus 2PM také zpřístupňuje síťovou frekvenci (`freq`), minutové hodnoty energie (`aenergy.by_minute`), stavy fyzických vstupů (`input:0`, `input:1`), sílu Wi-Fi signálu (RSSI) a koncový bod přepínání spínače ve svých RPC odpovědích. Počítadla energie lze resetovat přes `/rpc/Switch.ResetCounters` (profil switch) nebo `/rpc/Cover.ResetCounters` (profil cover). V režimu cover je pozice lamel/natočení pro benátské žaluzie dostupná, pokud to hardware podporuje. Tyto možnosti mohou být doplněny v budoucí aktualizaci šablony.

## Řešení problémů

### Zařízení neodpovídá

1. Ověřte, že Shelly je připojen k Wi-Fi a má platnou IP adresu
2. Zkuste použít mDNS hostname (`shellyplus2pm-AABBCCDDEE.local`) místo IP adresy — IP se mohla změnit po obnovení DHCP
3. Otevřete `http://{ip-zarizeni}/rpc/Shelly.GetDeviceInfo` v prohlížeči — pokud odpoví JSON, zařízení je dostupné
4. Zkontrolujte, že TapHome Core a Shelly jsou ve stejné síti / VLAN
5. Ujistěte se, že autentifikace je na zařízení Shelly vypnutá

### Nesoulad profilu — zařízení nereagují

Pokud některá zařízení neukazují žádné údaje, zatímco jiná fungují správně:

1. Zkontrolujte, který profil je aktuálně aktivní — servisní atribut „Profile" na úrovni modulu zobrazuje aktuální režim
2. Přepněte na správný profil pomocí servisní akce **Profile** nebo ignorujte nepoužívaná zařízení
3. Po přepnutí profilu se zařízení automaticky restartuje — vyčkejte několik sekund na opětovné připojení

### Pozice krytu nefunguje

1. Ověřte, že zařízení je v profilu cover — profil switch nezpřístupňuje funkce krytu
2. Spusťte servisní akci **Calibrate** na zařízení Shutter — ovládání pozice vyžaduje dokončenou kalibraci
3. Zkontrolujte, že motor je správně připojen na svorky O1 a O2
4. Manuálně zavolejte `/rpc/Cover.GetStatus?id=0` a ověřte, že `pos_control` je `true`

### Kalibrace krytu selže

Kalibrace se přeruší, pokud:

- Kryt nedosáhne koncové polohy v rámci `maxtime_open` nebo `maxtime_close`
- Během kalibrace se aktivuje bezpečnostní funkce (detekce překážky nebo bezpečnostní spínač)
- Během kalibrace je vydán externí příkaz k zastavení
- Směr motoru neodpovídá očekávané zpětné vazbě
- Zařízení se během kalibrace restartuje

Zkontrolujte zapojení motoru, zvyšte `maxtime_open`/`maxtime_close` pokud je motor pomalý a ujistěte se, že nejsou přítomné žádné překážky.

### Hodnoty výkonu ukazují nulu

1. Potvrďte, že zátěž je připojena přes relé Shelly (ne obejitá)
2. Zkontrolujte, že relé je zapnuté — měřič měří pouze když přes relé protéká proud
3. Manuálně zavolejte `/rpc/Switch.GetStatus?id=0` (profil switch) nebo `/rpc/Cover.GetStatus?id=0` (profil cover) a ověřte, že `apower` vrací nenulovou hodnotu

> [!WARNING]
> Zařízení Shelly Gen2+ podporují až **6 současných HTTP připojení**. I když je to zlepšení oproti Gen1 (2 připojení), vyhněte se současnému dotazování z příliš mnoha systémů (TapHome, Home Assistant, vlastní skripty), abyste zabránili vyčerpání připojení.

## Jak nainstalovat v TapHome

### Předpoklady

- Zařízení Shelly nainstalované a zapnuté
- Lokální Wi-Fi síť (2,4 GHz)
- TapHome CCU ve stejné síti

### Krok 1 — Připojte Shelly k Wi-Fi

**Možnost A — Aplikace Shelly (doporučeno):**

1. Stáhněte si [aplikaci Shelly](https://www.shelly.com/en/support/shelly-app) (iOS / Android)
2. Klepněte na **+** → **Add Device** a postupujte podle průvodce Bluetooth párováním
3. Po výzvě zadejte své Wi-Fi přihlašovací údaje

**Možnost B — AP režim (bez aplikace):**

1. Při prvním zapnutí zařízení vytvoří hotspot: `ShellyXXX-AABBCCDDEE`
2. Připojte telefon/PC k tomuto hotspotu
3. Otevřete `http://192.168.33.1` → **Internet & Security** → **Wi-Fi Mode - Client**
4. Zadejte SSID a heslo → **Save**

> [!NOTE]
> Shelly podporuje pouze **2,4 GHz** sítě. 5 GHz sítě se při skenování nezobrazí.

### Krok 2 — Zjistěte IP adresu

Po připojení k Wi-Fi zjistěte přiřazenou IP adresu jedním z následujících způsobů:

- **Aplikace Shelly:** Detail zařízení → **Device info** → IP adresa
- **Webové rozhraní Shelly:** Připojte se k AP zařízení před nastavením Wi-Fi — IP se zobrazí po uložení
- **DHCP tabulka routeru:** Hledejte hostname jako `shelly1pm-AABBCCDDEE`
- **mDNS:** Pingněte `shelly<model>-<mac>.local` (např. `shelly1pm-AABBCCDDEE.local`) ze stejné sítě

> [!TIP]
> Přiřaďte zařízení Shelly **statickou IP** (DHCP rezervaci) ve vašem routeru, aby se adresa nezměnila po restartu routeru.

### Krok 3 — Konfigurace v TapHome

1. V TapHome přidejte nový modul **Packet Parser (HTTP)**
2. **IP Address:** zadejte IP z kroku 2 (např. `192.168.1.50`)
3. **Port:** `80` (výchozí, není potřeba měnit)
4. Importujte šablonu — TapHome bude pravidelně číst `/status` pro zjištění stavu zařízení

> [!NOTE]
> HTTP autentifikace je na zařízeních Shelly standardně vypnutá. Pokud jste povolili ochranu přihlášením, TapHome momentálně nepodporuje HTTP Basic Auth — pro integraci s TapHome ponechte autentifikaci vypnutou.

## Dostupná zařízení 6

Tato zařízení se po importu zobrazí v TapHome.

Shelly Plus 2PM Modul

Servisní atributy

|        |                                              |
|--------|----------------------------------------------|
| MAC    | MAC adresa zařízení ze systémové konfigurace |
| Profil | Aktivní profil zařízení — switch nebo cover  |

Servisní akce

|         |                                                                  |
|---------|------------------------------------------------------------------|
| Restart | Restartuje zařízení                                              |
| Profil  | Přepnutí mezi profily switch a cover — vyžaduje restart zařízení |

Vlastní proměnné

Čtení (modul)

```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
```

Servisní atributy

MAC

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

Profile

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

Servisní akce

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;
```

Měřič výkonu (Roleta) Elektroměr Pouze ke čtení

Měření energie v režimu cover — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh json\_path

Servisní atributy

|        |                            |
|--------|----------------------------|
| Napětí | Napájecí napětí ve Voltech |
| Proud  | Proud zátěže v Ampérech    |
| Účiník | Účiník zátěže              |

Čtení celkové spotřeby

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

Čtení odběru

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

Čtení (modul)

```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
```

Servisní atributy

Voltage \[V]

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

Current \[A]

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

Power Factor

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

Měřič výkonu (Spínač 1) Elektroměr Pouze ke čtení

Měření energie pro kanál spínače 1 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh json\_path

Servisní atributy

|        |                            |
|--------|----------------------------|
| Napětí | Napájecí napětí ve Voltech |
| Proud  | Proud zátěže v Ampérech    |
| Účiník | Účiník zátěže              |

Čtení celkové spotřeby

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

Čtení odběru

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

Čtení (modul)

```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
```

Servisní atributy

Voltage \[V]

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

Current \[A]

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

Power Factor

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

Měřič výkonu (Spínač 2) Elektroměr Pouze ke čtení

Měření energie pro kanál spínače 2 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh json\_path

Servisní atributy

|        |                            |
|--------|----------------------------|
| Napětí | Napájecí napětí ve Voltech |
| Proud  | Proud zátěže v Ampérech    |
| Účiník | Účiník zátěže              |

Čtení celkové spotřeby

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

Čtení odběru

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

Čtení (modul)

```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
```

Servisní atributy

Voltage \[V]

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

Current \[A]

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

Power Factor

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

Roleta Posuvný Čtení i zápis

Motorizované ovládání rolety se sledováním polohy — vyžaduje kalibraci pro ovládání polohy

numeric Jednotka: % json\_path

Servisní atributy

|                             |                                                                                            |
|-----------------------------|--------------------------------------------------------------------------------------------|
| Zdroj                       | Zdroj posledního příkazu rolety                                                            |
| Stav                        | Aktuální stav rolety — open, closed, opening, closing, stopped, calibrating                |
| Aktuální poloha             | Aktuální poloha rolety v procentech (0–100), null pokud není kalibrována                   |
| Cílová poloha               | Cílová poloha během pohybu rolety                                                          |
| Časový limit pohybu         | Sekundy do automatického zastavení během pohybu                                            |
| Pohyb začal v               | Časová značka začátku aktuálního pohybu                                                    |
| Kalibrovaný                 | Zda je ovládání polohy povoleno (true po úspěšné kalibraci)                                |
| Teplota                     | Vnitřní teplota zařízení ve stupních Celsia                                                |
| Počáteční stav              | Chování rolety po zapnutí — open, closed nebo stopped                                      |
| Režim vstupu                | Režim zapojení fyzického vstupu — single, dual nebo detached                               |
| Limit výkonu                | Maximální práh výkonu ve Wattech pro ochranu proti přetížení                               |
| Limit napětí                | Maximální práh napětí ve Voltech pro ochranu proti přepětí                                 |
| Limit proudu                | Maximální práh proudu v Ampérech pro ochranu proti nadproudu                               |
| Práh nečinnosti motoru      | Práh výkonu, pod kterým se motor považuje za nečinný (0–50 W)                              |
| Potvrzení nečinnosti motoru | Doba, po kterou musí motor zůstat pod prahem nečinnosti pro potvrzení zastavení (0,25–2 s) |
| Maximální čas otevření      | Maximální čas otevření před automatickým zastavením (0,1–300 s)                            |
| Maximální čas zavření       | Maximální čas zavření před automatickým zastavením (0,1–300 s)                             |
| Prohodit vstupy             | Zda je přiřazení vstupů S1/S2 prohozeno                                                    |
| Invertovat směry            | Zda jsou směry otevření/zavření invertovány                                                |
| Detekce překážky            | Zda je detekce překážky povolena                                                           |
| Bezpečnostní spínač         | Zda je funkce bezpečnostního spínače povolena                                              |

Servisní akce

|                  |                                                             |
|------------------|-------------------------------------------------------------|
| Otevřít          | Úplně otevře roletu                                         |
| Zavřít           | Úplně zavře roletu                                          |
| Zastavit         | Okamžitě zastaví pohyb rolety                               |
| Kalibrovat       | Spustí kalibraci rolety — vyžadována pro ovládání polohy    |
| Přejít na pozici | Přesune roletu na určenou polohu (0–100 %)                  |
| Obrátit směry    | Přepne konfiguraci invert\_directions a restartuje zařízení |

Čtení (modul)

```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
```

Čtení úrovně žaluzie

```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
```

Zápis úrovně žaluzie

```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
```

Servisní atributy

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);
```

Servisní akce

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;
```

Spínač 1 Přepínač Čtení i zápis

Reléový výstup kanál 1 — ovládání zapnutí/vypnutí s konfigurací chování po zapnutí a režimu vstupu

boolean json\_path

Hodnoty / Stavy: ON · OFF

Servisní akce

|                         |                                             |
|-------------------------|---------------------------------------------|
| Nastavit počáteční stav | Konfiguruje chování spínače po zapnutí      |
| Nastavit režim          | Konfiguruje režim zapojení fyzického vstupu |

Čtení stavu přepínače

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

Zápis stavu přepínače

```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
```

Čtení (modul)

```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
```

Servisní atributy

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);
```

Servisní akce

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;
```

Spínač 2 Přepínač Čtení i zápis

Reléový výstup kanál 2 — ovládání zapnutí/vypnutí s konfigurací chování po zapnutí a režimu vstupu

boolean json\_path

Hodnoty / Stavy: ON · OFF

Servisní akce

|                         |                                             |
|-------------------------|---------------------------------------------|
| Nastavit počáteční stav | Konfiguruje chování spínače po zapnutí      |
| Nastavit režim          | Konfiguruje režim zapojení fyzického vstupu |

Čtení stavu přepínače

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

Zápis stavu přepínače

```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
```

Čtení (modul)

```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
```

Servisní atributy

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);
```

Servisní akce

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;
```

**Připojení:** Packet Parser → HTTP • Hostname: `shellyplus2pm-{MAC}.local`

Možná vylepšení (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

Tyto hodnoty zadáte při importu XML.

| Ptá se v aplikaci | Výchozí       |
|-------------------|---------------|
| IP adresa         | `192.168.0.1` |

## Zdroje

- 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

## Související dokumentace

- [Integrace Packet Parser](https://taphome.com/cs/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/cs/docs/integration/packet-parser/)
- [Funkce Packet parser](https://taphome.com/cs/docs/script/packet-parser/)
- [Funkce pro parsování](https://taphome.com/cs/docs/script/parsing-functions/)

