---
title: "Shelly Motion 2"
description: "Shelly Motion 2 (SHMOS-02) v TapHome cez MQTT broker: detekcia pohybu, osvetlenie v luxoch, teplota a batéria. Až 5 senzorov na jeden modul."
url: "https://taphome.com/sk/compatibility/shelly-motion-2-mqtt/"
language: sk
lastmod: 2026-03-30
generator: hugo
ai:
  topics: ["mqtt","sensor","wifi","motion-detection","battery-powered","pir-sensor"]
  questions: ["Ako integrovať Shelly Motion 2 s TapHome cez MQTT?","Čo detekuje šablóna Shelly Motion 2 v TapHome?","Ako nakonfigurovať viacero Shelly Motion senzorov v jednej TapHome šablóne?","Prečo Shelly Motion 2 nehlási pohybové udalosti?","Ako nájsť MQTT Device ID senzora Shelly Motion 2?","Hlási Shelly Motion 2 stav batérie, osvetlenie a teplotu v TapHome?","Dá sa nastaviť citlivosť Shelly Motion 2 z TapHome?"]
---

# Shelly Motion 2

Komunikácia: Packet Parser → MQTT

- [Shelly Motion 2 Knowledge Base](https://kb.shelly.cloud/knowledge-base/shelly-motion-2)

> Adresa v sieti
> 
> Pri MQTT brokeri vstavanom v TapHome zadajte v TapHome ako adresu brokera `127.0.0.1`. V zariadení zadajte IP adresu TapHome Core a jednotke Core dajte rezerváciu IP v routeri.
> 
> [Príprava siete](https://taphome.com/sk/docs/setup/network-preparation/)

## Návod na integráciu

Shelly Motion 2 (SHMOS-02) je batériový (Li-ion 6500 mAh, nabíjateľný cez USB-C) Wi-Fi PIR pohybový senzor. TapHome komunikuje so zariadením cez MQTT — odporúčaný protokol pre batériové Shelly zariadenia, keďže senzor väčšinu času spí a publikuje dáta len pri udalostiach prebudenia (detekcia pohybu alebo periodický časovač).

Na rozdiel od reléových Gen1 Shelly zariadení, ktoré publikujú individuálne stavové topicy, Motion 2 publikuje kompletný stav cez jeden `/info` JSON payload pri prebudení. TapHome listenerový skript parsuje tento JSON na extrakciu stavu pohybu, osvetlenia, teploty, stavu batérie a diagnostických atribútov.

Šablóna podporuje až 5 Shelly Motion 2 senzorov na modul. Každá inštancia senzora sa rozlišuje custom premennou `sensorN_topic` ukazujúcou na MQTT Client ID zariadenia.

## Konfigurácia

### Device ID

Každý Shelly Motion 2 má unikátne MQTT Device ID vo formáte `shellymotion2-<MAC>`, kde `<MAC>` je plná 12-znaková MAC adresa v hexadecimálnom tvare veľkými písmenami (napr. `shellymotion2-AABBCCDDEEFF`).

Device ID nájdete:

- Na štítku zariadenia (MAC adresa)
- Vo webovom rozhraní Shelly: **Settings** → **Device Info**
- Cez API: `GET http://<device-ip>/settings` → pole `device.hostname`

### Nastavenie šablóny

Po importe šablóny v TapHome:

1. Otvorte modul **Shelly Motion 2 MQTT**
2. Nastavte **MQTT Broker IP** a **Port** (predvolene `1883`)
3. Pre každú inštanciu senzora nastavte custom premennú `sensorN_topic` na Device ID zodpovedajúceho Shelly Motion 2 (napr. `shellymotion2-AABBCCDDEEFF`)

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

> [!TIP]
> Konfigurujte len sloty senzorov, ktoré skutočne používate. Nenakonfigurované sloty (s predvolenou hodnotou `shellymotion2-deviceid`) zobrazia chybovú správu vyzývajúcu na nastavenie správneho topicu.

### Nastavenia pohybového senzora

Shelly Motion 2 má niekoľko konfigurovateľných parametrov ovplyvňujúcich správanie detekcie. Tieto sa konfigurujú priamo na zariadení cez jeho webové rozhranie (`http://<device-ip>/`), nie cez TapHome:

| Parameter | Rozsah | Popis |
|-----------|--------|-------|
| Citlivosť | 1–256 | Citlivosť detekcie pohybu (nižšia = citlivejšia) |
| Slepý čas | 1–1440 min | Minúty ignorovania pohybu po detekcii |
| Počet impulzov | 1–4 | Počet po sebe idúcich pohybov na potvrdenie |
| Prevádzkový režim | ANY / DARK / TWILIGHT / BRIGHT | Kedy je detekcia aktívna podľa okolitého svetla |
| Čas spánku | 0–86400 s | Periodický interval prebudenia v sekundách |

> [!TIP]
> Kratšie časy spánku zvyšujú aktuálnosť dát, ale znižujú výdrž batérie. Predvolený interval prebudenia je dostatočný pre väčšinu prípadov použitia. Pohybové udalosti vždy vyvolajú okamžité prebudenie bez ohľadu na časovač spánku.

## Schopnosti zariadenia

### Detekcia pohybu

Každá inštancia senzora je mapovaná ako zariadenie Reed Contact s „security" schopnosťou v TapHome. Stav pohybu sa parsuje z topicu `shellies/<id>/info` — konkrétne pole `$.sensor.motion` v JSON payloade:

- `true` → **Alarm** (detekovaný pohyb)
- `false` → **OK** (žiadny pohyb)

Senzor sa prebudí a publikuje svoj stav pri detekcii pohybu (podľa nastavení citlivosti, slepého času a počtu impulzov) a tiež počas periodických intervalov prebudenia.

### Servisné atribúty

Každá inštancia senzora poskytuje 14 servisných atribútov na úrovni zariadenia, všetky parsované z `/info` JSON payloadu:

| Atribút | Zdrojové pole | Popis |
|---------|---------------|-------|
| IP adresa | `$.wifi_sta.ip` | Wi-Fi IP adresa senzora |
| MAC adresa | `$.mac` | Hardvérová MAC adresa |
| Batéria | `$.bat.voltage`, `$.bat.value` | Napätie a percentá batérie (napr. 3,83V (97%)) |
| Signál | `$.wifi_sta.rssi` | Sila Wi-Fi signálu v dB |
| Cloud povolený | `$.cloud.enabled` | Či je Shelly Cloud povolený |
| Pripojený ku cloudu | `$.cloud.connected` | Či je zariadenie pripojené k Shelly Cloud |
| Čas zariadenia | `$.time` | Aktuálny čas na zariadení |
| Osvetlenie | `$.lux.value` | Úroveň okolitého svetla v luxoch |
| Teplota | `$.tmp.value`, `$.tmp.units` | Interné meranie teploty |
| Doba prevádzky | `$.uptime` | Čas od posledného reštartu |
| Verzia FW | `$.fw_info.fw` | Aktuálna verzia firmvéru |
| Aktualizácia FW | `$.update.has_update` | Či je dostupná aktualizácia firmvéru |
| Voľná RAM | `$.ram_total`, `$.ram_free` | Dostupná pamäť |
| Voľné miesto FS | `$.fs_size`, `$.fs_free` | Dostupné úložisko súborového systému |

Varovanie o nízkej batérii sa automaticky spustí, keď úroveň batérie klesne pod 20 %.

### Ďalšie schopnosti (neimplementované)

Shelly Motion 2 tiež publikuje **detekciu vibrácií/neoprávnenej manipulácie** (`$.sensor.vibration`, nastaviteľná citlivosť 0–80), **kategóriu osvetlenia** (`$.lux.illumination` — dark/twilight/bright) a **stav USB nabíjačky** (`$.charger`) cez `/info` JSON payload. Stav online/offline je dostupný cez LWT topic (`shellies/<id>/online`). Tieto schopnosti sú dostupné vo výstupe MQTT zariadenia, ale nie sú mapované v aktuálnej TapHome šablóne. Môžu byť pridané v budúcej aktualizácii šablóny.

## Riešenie problémov

### Senzor nehlási dáta

1. Overte, že Shelly Motion 2 je pripojený k Wi-Fi a MQTT je povolené v nastaveniach zariadenia
2. Skontrolujte, že custom premenná `sensorN_topic` presne zodpovedá Device ID (napr. `shellymotion2-AABBCCDDEEFF`)
3. Použite MQTT klienta (napr. MQTT Explorer) na prihlásenie odberu `shellies/#` a overte, že senzor publikuje správy pri prebudení
4. Motion 2 je napájaný z batérie a publikuje dáta len pri prebudení — vyvolajte pohybovú udalosť pre vynútenie prebudenia

### Stav pohybu sa neaktualizuje

1. Skontrolujte, že šošovka PIR senzora nie je prekrytá a senzor je namontovaný v odporúčanej výške (1,8–2,5 m)
2. Ak bol senzor nedávno nainštalovaný, overte nastavenia citlivosti a slepého času vo webovom rozhraní zariadenia — vysoký slepý čas znamená, že senzor ignoruje pohyb dlhšie obdobie po každej detekcii
3. Upravte počet impulzov, ak sa senzor spúšťa príliš zriedka (nižší = menej po sebe idúcich pohybov)
4. Skontrolujte v TapHome stav zariadenia Reed Contact — 1 = detekovaný pohyb (alarm), 0 = žiadny pohyb (OK)

### Batéria sa rýchlo vybíja

1. Shelly Motion 2 používa vstavaný nabíjateľný Li-ion akumulátor (6500 mAh) nabíjaný cez USB-C, s typickou aktívnou výdržou 12–18 mesiacov
2. Časté prebúdzania kvôli vysokej pohybovej aktivite alebo krátkym intervalom spánku vybíjajú batériu rýchlejšie
3. Povolenie SSL na MQTT výrazne znižuje výdrž batérie — používajte plain MQTT (port 1883) v dôveryhodnej lokálnej sieti
4. Zabezpečte silný Wi-Fi signál na mieste senzora — slabý signál znamená dlhšie časy pripojenia pri každom prebudení

> [!WARNING]
> Gen1 Shelly zariadenia **nepodporujú** MQTT cez TLS bez výrazného dopadu na batériu. Komunikácia medzi senzorom a MQTT brokerom je typicky nešifrovaná (plain MQTT, port 1883). Zabezpečte, aby bol MQTT broker v dôveryhodnej lokálnej sieti.

> [!WARNING]
> Povolenie MQTT na Gen1 Shelly zariadeniach **zakáže Cloud konektivitu**. MQTT a Cloud nemôžu koexistovať na tom istom zariadení.

## Ako nainštalovať v TapHome

### Predpoklady

- Zariadenie Shelly pripojené k Wi-Fi (2,4 GHz), napr. cez aplikáciu Shelly alebo vlastný prístupový bod zariadenia
- MQTT broker bežiaci vo vašej lokálnej sieti (napr. Mosquitto, Home Assistant alebo vstavaný broker TapHome)
- TapHome CCU v rovnakej sieti ako broker

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

### Krok 1 — Povoľte MQTT na zariadení Shelly

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

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

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

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

Pri vstavanom brokeri TapHome je `<broker-ip>` IP adresa TapHome Core. Dajte jednotke Core rezerváciu IP v routeri, inak zariadenie stratí broker, keď router adresu zmení → [Príprava siete](https://taphome.com/sk/docs/setup/network-preparation/).

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

### Krok 2 — Zistite Device ID / MQTT Client ID

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

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

### Krok 3 — Konfigurácia v TapHome

1. V TapHome pridajte nový modul **Packet Parser (MQTT)**
2. **IP Address:** pre vstavaný broker TapHome `127.0.0.1` (jednotka sa pripája sama k sebe, adresa sa nikdy nezmení); pre externý broker jeho IP adresa (napr. `192.168.1.10`)
3. **Port:** `1883` (predvolený; pre TLS použite `8883`)
4. **Device ID / MQTT Client ID:** zadajte hodnotu z kroku 2 (ak to šablóna vyžaduje)
5. Importujte šablónu — TapHome sa automaticky prihlási na odber topicov zariadenia

## Dostupné zariadenia 5

Tieto zariadenia sa po importe zobrazia v TapHome.

Shelly Motion 2 MQTT Modul

Vlastné premenné

`sensor1_topic` (string) = shellymotion2-deviceid MQTT identifikátor pohybového senzora 1 — formát je 'shellymotion2-DEVICEID' (nájdete vo webovom rozhraní Shelly → Settings → Device Info)

Open http://shellyIpAddress → Settings → Device info → copy Device ID. Format: shellymotion2-&lt;last6MAC&gt;

`sensor2_topic` (string) = shellymotion2-deviceid MQTT identifikátor pohybového senzora 2 

`sensor3_topic` (string) = shellymotion2-deviceid MQTT identifikátor pohybového senzora 3 

`sensor4_topic` (string) = shellymotion2-deviceid MQTT identifikátor pohybového senzora 4 

`sensor5_topic` (string) = shellymotion2-deviceid MQTT identifikátor pohybového senzora 5

Detektor pohybu 1 Jazýčkový kontakt Len na čítanie

PIR detekcia pohybu — hlási alarm pri detekcii pohybu, OK bez pohybu; parsuje $.sensor.motion z /info JSON payloadu

boolean

Servisné atribúty

|                     |
|---------------------|
| IP adresa           |
| MAC adresa          |
| Batéria             |
| Signál              |
| Cloud povolený      |
| Pripojený ku cloudu |
| Čas zariadenia      |
| Osvetlenie          |
| Teplota             |
| Doba prevádzky      |
| Verzia FW           |
| Aktualizácia FW     |
| Voľná RAM           |
| Voľné miesto FS     |

Listener

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

VAR topicPrefix := "shellies/" + sensor1_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/info") = 0)
    BOOL status := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.sensor.motion", 1);
    
    IF ISNULL(status)
        Rc := NaN;
    ELSE
        Rc := status;
    END
    
    VAR battery := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.bat.value");
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
```

Servisné atribúty

IP Address

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.ip"));
END
```

MAC Address

```taphome
IF(LENGTH(infoJson) = 0, "-", PARSEJSON(infoJson, "$.mac"));

IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.mac"));
END
```

Battery

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR voltage := PARSEJSON(infoJson, "$.bat.voltage");
    VAR percentage := PARSEJSON(infoJson, "$.bat.value");

    RETURN(voltage + "V (" + percentage + "%)");
END
```

Signal

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.rssi", 1) + "db");
END
```

Cloud enabled

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.enabled"));
END
```

Cloud connected

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.connected"));
END
```

Device time

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.time"));
END
```

Luminance

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.lux.value", 1) + "lux");
END
```

Temperature

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.tmp.value", 1) + PARSEJSON(infoJson, "$.tmp.units", 1));
END
```

Uptime

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR upTimeSeconds := PARSEJSON(infoJson, "$.uptime", 1);
    VAR days := FLOOR(upTimeSeconds/86400, 1);
    uptimeSeconds := MOD(upTimeSeconds, 86400);
    var hours := FLOOR(upTimeSeconds/3600, 1);
    uptimeSeconds := MOD(upTimeSeconds, 3600);
    var minutes := FLOOR(upTimeSeconds/60, 1);
    RETURN(days + "day(s) " + hours + "h " + minutes + "m");
END
```

FW version

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.fw_info.fw"));
END
```

FW update

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.update.has_update", 1));
END
```

Free RAM

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.ram_total");
    VAR free := PARSEJSON(infoJson, "$.ram_free");
    RETURN(free + "/" + total + "(B)");
END
```

Free FS space

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.fs_size");
    VAR free := PARSEJSON(infoJson, "$.fs_free");
    RETURN(free + "/" + total + "(B)");
END
```

Detektor pohybu 2 Jazýčkový kontakt Len na čítanie

PIR detekcia pohybu — hlási alarm pri detekcii pohybu, OK bez pohybu; parsuje $.sensor.motion z /info JSON payloadu

boolean

Servisné atribúty

|                     |
|---------------------|
| IP adresa           |
| MAC adresa          |
| Batéria             |
| Signál              |
| Cloud povolený      |
| Pripojený ku cloudu |
| Čas zariadenia      |
| Osvetlenie          |
| Teplota             |
| Doba prevádzky      |
| Verzia FW           |
| Aktualizácia FW     |
| Voľná RAM           |
| Voľné miesto FS     |

Listener

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

VAR topicPrefix := "shellies/" + sensor2_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/info") = 0)
    BOOL status := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.sensor.motion", 1);
    
    IF ISNULL(status)
        Rc := NaN;
    ELSE
        Rc := status;
    END
    
    VAR battery := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.bat.value");
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
```

Servisné atribúty

IP Address

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.ip"));
END
```

MAC Address

```taphome
IF(LENGTH(infoJson) = 0, "-", PARSEJSON(infoJson, "$.mac"));

IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.mac"));
END
```

Battery

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR voltage := PARSEJSON(infoJson, "$.bat.voltage");
    VAR percentage := PARSEJSON(infoJson, "$.bat.value");

    RETURN(voltage + "V (" + percentage + "%)");
END
```

Signal

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.rssi", 1) + "db");
END
```

Cloud enabled

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.enabled"));
END
```

Cloud connected

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.connected"));
END
```

Device time

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.time"));
END
```

Luminance

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.lux.value", 1) + "lux");
END
```

Temperature

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.tmp.value", 1) + PARSEJSON(infoJson, "$.tmp.units", 1));
END
```

Uptime

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR upTimeSeconds := PARSEJSON(infoJson, "$.uptime", 1);
    VAR days := FLOOR(upTimeSeconds/86400, 1);
    uptimeSeconds := MOD(upTimeSeconds, 86400);
    var hours := FLOOR(upTimeSeconds/3600, 1);
    uptimeSeconds := MOD(upTimeSeconds, 3600);
    var minutes := FLOOR(upTimeSeconds/60, 1);
    RETURN(days + "day(s) " + hours + "h " + minutes + "m");
END
```

FW version

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.fw_info.fw"));
END
```

FW update

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.update.has_update", 1));
END
```

Free RAM

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.ram_total");
    VAR free := PARSEJSON(infoJson, "$.ram_free");
    RETURN(free + "/" + total + "(B)");
END
```

Free FS space

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.fs_size");
    VAR free := PARSEJSON(infoJson, "$.fs_free");
    RETURN(free + "/" + total + "(B)");
END
```

Detektor pohybu 3 Jazýčkový kontakt Len na čítanie

PIR detekcia pohybu — hlási alarm pri detekcii pohybu, OK bez pohybu; parsuje $.sensor.motion z /info JSON payloadu

boolean

Servisné atribúty

|                     |
|---------------------|
| IP adresa           |
| MAC adresa          |
| Batéria             |
| Signál              |
| Cloud povolený      |
| Pripojený ku cloudu |
| Čas zariadenia      |
| Osvetlenie          |
| Teplota             |
| Doba prevádzky      |
| Verzia FW           |
| Aktualizácia FW     |
| Voľná RAM           |
| Voľné miesto FS     |

Listener

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

VAR topicPrefix := "shellies/" + sensor3_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/info") = 0)
    BOOL status := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.sensor.motion", 1);
    
    IF ISNULL(status)
        Rc := NaN;
    ELSE
        Rc := status;
    END
    
    VAR battery := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.bat.value");
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
```

Servisné atribúty

IP Address

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.ip"));
END
```

MAC Address

```taphome
IF(LENGTH(infoJson) = 0, "-", PARSEJSON(infoJson, "$.mac"));

IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.mac"));
END
```

Battery

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR voltage := PARSEJSON(infoJson, "$.bat.voltage");
    VAR percentage := PARSEJSON(infoJson, "$.bat.value");

    RETURN(voltage + "V (" + percentage + "%)");
END
```

Signal

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.rssi", 1) + "db");
END
```

Cloud enabled

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.enabled"));
END
```

Cloud connected

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.connected"));
END
```

Device time

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.time"));
END
```

Luminance

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.lux.value", 1) + "lux");
END
```

Temperature

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.tmp.value", 1) + PARSEJSON(infoJson, "$.tmp.units", 1));
END
```

Uptime

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR upTimeSeconds := PARSEJSON(infoJson, "$.uptime", 1);
    VAR days := FLOOR(upTimeSeconds/86400, 1);
    uptimeSeconds := MOD(upTimeSeconds, 86400);
    var hours := FLOOR(upTimeSeconds/3600, 1);
    uptimeSeconds := MOD(upTimeSeconds, 3600);
    var minutes := FLOOR(upTimeSeconds/60, 1);
    RETURN(days + "day(s) " + hours + "h " + minutes + "m");
END
```

FW version

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.fw_info.fw"));
END
```

FW update

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.update.has_update", 1));
END
```

Free RAM

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.ram_total");
    VAR free := PARSEJSON(infoJson, "$.ram_free");
    RETURN(free + "/" + total + "(B)");
END
```

Free FS space

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.fs_size");
    VAR free := PARSEJSON(infoJson, "$.fs_free");
    RETURN(free + "/" + total + "(B)");
END
```

Detektor pohybu 4 Jazýčkový kontakt Len na čítanie

PIR detekcia pohybu — hlási alarm pri detekcii pohybu, OK bez pohybu; parsuje $.sensor.motion z /info JSON payloadu

boolean

Servisné atribúty

|                     |
|---------------------|
| IP adresa           |
| MAC adresa          |
| Batéria             |
| Signál              |
| Cloud povolený      |
| Pripojený ku cloudu |
| Čas zariadenia      |
| Osvetlenie          |
| Teplota             |
| Doba prevádzky      |
| Verzia FW           |
| Aktualizácia FW     |
| Voľná RAM           |
| Voľné miesto FS     |

Listener

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

VAR topicPrefix := "shellies/" + sensor4_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/info") = 0)
    BOOL status := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.sensor.motion", 1);
    
    IF ISNULL(status)
        Rc := NaN;
    ELSE
        Rc := status;
    END
    
    VAR battery := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.bat.value");
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
```

Servisné atribúty

IP Address

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.ip"));
END
```

MAC Address

```taphome
IF(LENGTH(infoJson) = 0, "-", PARSEJSON(infoJson, "$.mac"));

IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.mac"));
END
```

Battery

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR voltage := PARSEJSON(infoJson, "$.bat.voltage");
    VAR percentage := PARSEJSON(infoJson, "$.bat.value");

    RETURN(voltage + "V (" + percentage + "%)");
END
```

Signal

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.rssi", 1) + "db");
END
```

Cloud enabled

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.enabled"));
END
```

Cloud connected

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.connected"));
END
```

Device time

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.time"));
END
```

Luminance

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.lux.value", 1) + "lux");
END
```

Temperature

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.tmp.value", 1) + PARSEJSON(infoJson, "$.tmp.units", 1));
END
```

Uptime

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR upTimeSeconds := PARSEJSON(infoJson, "$.uptime", 1);
    VAR days := FLOOR(upTimeSeconds/86400, 1);
    uptimeSeconds := MOD(upTimeSeconds, 86400);
    var hours := FLOOR(upTimeSeconds/3600, 1);
    uptimeSeconds := MOD(upTimeSeconds, 3600);
    var minutes := FLOOR(upTimeSeconds/60, 1);
    RETURN(days + "day(s) " + hours + "h " + minutes + "m");
END
```

FW version

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.fw_info.fw"));
END
```

FW update

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.update.has_update", 1));
END
```

Free RAM

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.ram_total");
    VAR free := PARSEJSON(infoJson, "$.ram_free");
    RETURN(free + "/" + total + "(B)");
END
```

Free FS space

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.fs_size");
    VAR free := PARSEJSON(infoJson, "$.fs_free");
    RETURN(free + "/" + total + "(B)");
END
```

Detektor pohybu 5 Jazýčkový kontakt Len na čítanie

PIR detekcia pohybu — hlási alarm pri detekcii pohybu, OK bez pohybu; parsuje $.sensor.motion z /info JSON payloadu

boolean

Servisné atribúty

|                     |
|---------------------|
| IP adresa           |
| MAC adresa          |
| Batéria             |
| Signál              |
| Cloud povolený      |
| Pripojený ku cloudu |
| Čas zariadenia      |
| Osvetlenie          |
| Teplota             |
| Doba prevádzky      |
| Verzia FW           |
| Aktualizácia FW     |
| Voľná RAM           |
| Voľné miesto FS     |

Listener

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

VAR topicPrefix := "shellies/" + sensor5_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/info") = 0)
    BOOL status := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.sensor.motion", 1);
    
    IF ISNULL(status)
        Rc := NaN;
    ELSE
        Rc := status;
    END
    
    VAR battery := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.bat.value");
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
```

Servisné atribúty

IP Address

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.ip"));
END
```

MAC Address

```taphome
IF(LENGTH(infoJson) = 0, "-", PARSEJSON(infoJson, "$.mac"));

IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.mac"));
END
```

Battery

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR voltage := PARSEJSON(infoJson, "$.bat.voltage");
    VAR percentage := PARSEJSON(infoJson, "$.bat.value");

    RETURN(voltage + "V (" + percentage + "%)");
END
```

Signal

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.wifi_sta.rssi", 1) + "db");
END
```

Cloud enabled

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.enabled"));
END
```

Cloud connected

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.cloud.connected"));
END
```

Device time

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.time"));
END
```

Luminance

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.lux.value", 1) + "lux");
END
```

Temperature

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.tmp.value", 1) + PARSEJSON(infoJson, "$.tmp.units", 1));
END
```

Uptime

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR upTimeSeconds := PARSEJSON(infoJson, "$.uptime", 1);
    VAR days := FLOOR(upTimeSeconds/86400, 1);
    uptimeSeconds := MOD(upTimeSeconds, 86400);
    var hours := FLOOR(upTimeSeconds/3600, 1);
    uptimeSeconds := MOD(upTimeSeconds, 3600);
    var minutes := FLOOR(upTimeSeconds/60, 1);
    RETURN(days + "day(s) " + hours + "h " + minutes + "m");
END
```

FW version

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.fw_info.fw"));
END
```

FW update

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    RETURN(PARSEJSON(infoJson, "$.update.has_update", 1));
END
```

Free RAM

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.ram_total");
    VAR free := PARSEJSON(infoJson, "$.ram_free");
    RETURN(free + "/" + total + "(B)");
END
```

Free FS space

```taphome
IF LENGTH(infoJson) = 0
    RETURN("-");
ELSE
    VAR total := PARSEJSON(infoJson, "$.fs_size");
    VAR free := PARSEJSON(infoJson, "$.fs_free");
    RETURN(free + "/" + total + "(B)");
END
```

**Pripojenie:** Packet Parser → MQTT • Hostname: `shellymotion2-{MAC}.local`

Možné vylepšenia (4)

- Vibration / Tamper Detection — Vibration/tamper detection (bool). Available in the /info JSON but not parsed by the listener script. Configurable sensitivity 0-80.
- Illumination Category — Light category string — dark/twilight/bright. Available in /info but only numeric lux is parsed via service attributes.
- USB Charger Connected — Whether USB-C charger is plugged in. Available in /info JSON.
- Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline sensors.

## Parametre importu

Tieto hodnoty zadáte pri importe XML.

| Pýta sa v aplikácii   | Predvolené    |
|-----------------------|---------------|
| Mqtt Broker IP adresa | `192.168.0.1` |
| Mqtt Broker port      | `1883`        |

## Zdroje

- Shelly Gen1 API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/) 2026-03-12
- Home Assistant Shelly Integration
  
  [www.home-assistant.io](https://www.home-assistant.io/integrations/shelly/) 2026-03-12
- Shelly Motion 2 — Device-Specific API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-motion-2) 2026-03-30
- Shelly Motion 2 — Knowledge Base
  
  [kb.shelly.cloud](https://kb.shelly.cloud/knowledge-base/shelly-motion-2) 2026-03-30

## Súvisiaca dokumentácia

- [MQTT Integration](https://taphome.com/sk/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/sk/docs/integration/packet-parser/)
- [Funkcie Packet parsera](https://taphome.com/sk/docs/script/packet-parser/)
- [Parsovacie funkcie](https://taphome.com/sk/docs/script/parsing-functions/)
- [MQTT broker](https://taphome.com/sk/docs/integration/packet-parser/mqtt-broker/)
- [Listener skripty](https://taphome.com/sk/docs/script/listener-scripts/)

