---
title: "Shelly Motion 2"
description: "PIR mozgásérzékelés fényerősség-, hőmérséklet- és akkumulátor-figyeléssel MQTT-n keresztül. TapHome sablon a Shelly Motion 2-höz (SHMOS-02)."
url: "https://taphome.com/hu/compatibility/shelly-motion-2-mqtt/"
language: hu
lastmod: 2026-03-30
generator: hugo
ai:
  topics: ["mqtt","sensor","wifi","motion-detection","battery-powered","pir-sensor"]
  questions: ["Hogyan integrálható a Shelly Motion 2 a TapHome-mal MQTT-n keresztül?","Mit érzékel a Shelly Motion 2 TapHome sablon?","Hogyan konfigurálható több Shelly Motion érzékelő egy TapHome sablonban?","Miért nem jelez mozgáseseményeket a Shelly Motion 2?","Hogyan találod meg a Shelly Motion 2 MQTT Device ID-ját?","Jelzi a Shelly Motion 2 az akkumulátorszintet, fényerősséget és hőmérsékletet a TapHome-ban?","Beállítható a Shelly Motion 2 érzékenysége a TapHome-ból?"]
---

# Shelly Motion 2

Kommunikáció: Packet Parser → MQTT

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

> Hálózati cím
> 
> A TapHome-ba épített MQTT bróker esetén a TapHome-ban brókercímként adja meg a `127.0.0.1` címet. Az eszközben a TapHome Core IP-címét adja meg, és a Core-nak állítson be IP-foglalást a routerben.
> 
> [A hálózat előkészítése](https://taphome.com/hu/docs/setup/network-preparation/)

## Integrációs útmutató

A Shelly Motion 2 (SHMOS-02) egy elemes (Li-ion 6500 mAh, USB-C-vel tölthető) Wi-Fi PIR mozgásérzékelő. A TapHome MQTT-n keresztül kommunikál az eszközzel — ez a javasolt protokoll az elemes Shelly eszközökhöz, mivel az érzékelő az idő nagy részében alszik, és csak ébredési események (mozgásérzékelés vagy periodikus időzítő) alkalmával küld adatokat.

A relétípusú Gen1 Shelly eszközöktől eltérően, amelyek egyedi állapot-topicokat publikálnak, a Motion 2 a teljes állapotát egyetlen `/info` JSON payloadban publikálja ébredéskor. A TapHome listener szkript elemzi ezt a JSON-t a mozgásállapot, fényerősség, hőmérséklet, akkumulátorszint és diagnosztikai attribútumok kinyeréséhez.

A sablon modulonként legfeljebb 5 Shelly Motion 2 érzékelőt támogat. Minden érzékelőpéldány a `sensorN_topic` egyéni változóval különböztethető meg, amely az eszköz MQTT Client ID-jára mutat.

## Konfiguráció

### Device ID

Minden Shelly Motion 2 egyedi MQTT Device ID-val rendelkezik `shellymotion2-<MAC>` formátumban, ahol a `<MAC>` a teljes 12 karakteres MAC-cím nagybetűs hexadecimális formában (pl. `shellymotion2-AABBCCDDEEFF`).

A Device ID megtalálható:

- Az eszköz címkéjén (MAC-cím)
- A Shelly webes felületén: **Settings** → **Device Info**
- API-n keresztül: `GET http://<device-ip>/settings` → `device.hostname` mező

### Sablon beállítása

A sablon TapHome-ba történő importálása után:

1. Nyisd meg a **Shelly Motion 2 MQTT** modult
2. Állítsd be az **MQTT Broker IP**-t és a **Port**-ot (alapértelmezett `1883`)
3. Minden érzékelőpéldányhoz állítsd be a `sensorN_topic` egyéni változót a megfelelő Shelly Motion 2 Device ID-jára (pl. `shellymotion2-AABBCCDDEEFF`)

A modul feliratkozik a `shellies/#` topicra, és a listener szkriptek a konfigurált topic-előtag alapján szűrik az üzeneteket.

> [!TIP]
> Csak azokat az érzékelőhelyeket konfiguráld, amelyeket ténylegesen használsz. A nem konfigurált helyek (az alapértelmezett `shellymotion2-deviceid` értékkel) hibaüzenetet jelenítenek meg, amely a helyes topic beállítására szólít fel.

### Mozgásérzékelő beállításai

A Shelly Motion 2 több konfigurálható paraméterrel rendelkezik, amelyek befolyásolják az érzékelési viselkedést. Ezeket közvetlenül az eszközön kell konfigurálni a webes felületén (`http://<device-ip>/`) keresztül, nem a TapHome-on:

| Paraméter | Tartomány | Leírás |
|-----------|-----------|--------|
| Érzékenység | 1–256 | Mozgásérzékelési érzékenység (alacsonyabb = érzékenyebb) |
| Vakidő | 1–1440 perc | Percek, amíg az érzékelés után a mozgás figyelmen kívül marad |
| Impulzusszám | 1–4 | Egymás utáni mozgások száma a megerősítéshez |
| Működési mód | ANY / DARK / TWILIGHT / BRIGHT | Mikor aktív az érzékelés a környezeti fény alapján |
| Alvási idő | 0–86400 mp | Periodikus ébredési intervallum másodpercben |

> [!TIP]
> A rövidebb alvási idők növelik az adatok frissességét, de csökkentik az akkumulátor élettartamát. Az alapértelmezett ébredési intervallum a legtöbb felhasználási esethez elegendő. A mozgáseseményeket mindig azonnali ébredés kíséri, az alvási időzítőtől függetlenül.

## Eszközképességek

### Mozgásérzékelés

Minden érzékelőpéldány Reed Contact eszközként van leképezve „security" képességgel a TapHome-ban. A mozgásállapot a `shellies/<id>/info` topicból kerül kiolvasásra — konkrétan a JSON payload `$.sensor.motion` mezőjéből:

- `true` → **Riasztás** (mozgás érzékelve)
- `false` → **OK** (nincs mozgás)

Az érzékelő felébred és közzéteszi állapotát mozgásérzékeléskor (az érzékenységi, vakidő- és impulzusszám-beállítások szerint), valamint a periodikus ébredési intervallumoknál.

### Szervizattribútumok

Minden érzékelőpéldány 14 eszközszintű szervizattribútumot biztosít, amelyek mind az `/info` JSON payloadból kerülnek kiolvasásra:

| Attribútum | Forrásmező | Leírás |
|------------|------------|--------|
| IP-cím | `$.wifi_sta.ip` | Az érzékelő Wi-Fi IP-címe |
| MAC-cím | `$.mac` | Hardveres MAC-cím |
| Akkumulátor | `$.bat.voltage`, `$.bat.value` | Akkumulátorfeszültség és százalék (pl. 3,83V (97%)) |
| Jel | `$.wifi_sta.rssi` | Wi-Fi jelerősség dB-ben |
| Cloud engedélyezve | `$.cloud.enabled` | Engedélyezve van-e a Shelly Cloud |
| Cloudhoz csatlakozva | `$.cloud.connected` | Csatlakozik-e az eszköz a Shelly Cloudhoz |
| Eszközidő | `$.time` | Az eszköz aktuális ideje |
| Fényerősség | `$.lux.value` | Környezeti fényszint luxban |
| Hőmérséklet | `$.tmp.value`, `$.tmp.units` | Belső hőmérsékletmérés |
| Üzemidő | `$.uptime` | Az utolsó újraindítás óta eltelt idő |
| FW verzió | `$.fw_info.fw` | Aktuális firmware verzió |
| FW frissítés | `$.update.has_update` | Elérhető-e firmware frissítés |
| Szabad RAM | `$.ram_total`, `$.ram_free` | Szabad memória |
| Szabad FS terület | `$.fs_size`, `$.fs_free` | Szabad fájlrendszer-tárterület |

Alacsony akkumulátorszint figyelmeztetés automatikusan aktiválódik, ha az akkumulátorszint 20 % alá esik.

### További képességek (nem implementált)

A Shelly Motion 2 emellett közzéteszi a **rezgés/illetéktelen beavatkozás érzékelését** (`$.sensor.vibration`, beállítható érzékenység 0–80), a **megvilágítási kategóriát** (`$.lux.illumination` — dark/twilight/bright) és az **USB töltő állapotát** (`$.charger`) az `/info` JSON payloadon keresztül. Az online/offline állapot az LWT topicon (`shellies/<id>/online`) keresztül érhető el. Ezek a képességek elérhetők az eszköz MQTT kimenetében, de az aktuális TapHome sablonban nincsenek leképezve. Egy jövőbeli sablonfrissítésben hozzáadhatók.

## Hibaelhárítás

### Az érzékelő nem jelez adatokat

1. Ellenőrizd, hogy a Shelly Motion 2 csatlakozik a Wi-Fi-hez, és az MQTT engedélyezve van az eszközbeállításokban
2. Ellenőrizd, hogy a `sensorN_topic` egyéni változó pontosan megegyezik a Device ID-val (pl. `shellymotion2-AABBCCDDEEFF`)
3. Használj MQTT klienst (pl. MQTT Explorer) a `shellies/#` topicra való feliratkozáshoz, és ellenőrizd, hogy az érzékelő ébredéskor üzeneteket küld
4. A Motion 2 elemről üzemel, és csak ébredéskor küld adatokat — válts ki mozgáseseményt az ébredés kényszerítéséhez

### A mozgásállapot nem frissül

1. Ellenőrizd, hogy a PIR érzékelő lencséje nincs eltakarva, és az érzékelő az ajánlott magasságban (1,8–2,5 m) van felszerelve
2. Ha az érzékelő nemrég lett telepítve, ellenőrizd az érzékenységi és vakidő-beállításokat az eszköz webes felületén — a magas vakidő azt jelenti, hogy az érzékelő minden érzékelés után hosszabb ideig figyelmen kívül hagyja a mozgást
3. Állítsd be az impulzusszámot, ha az érzékelő túl ritkán aktiválódik (alacsonyabb = kevesebb egymást követő mozgás szükséges)
4. Ellenőrizd a TapHome-ban a Reed Contact eszköz állapotát — 1 = mozgás érzékelve (riasztás), 0 = nincs mozgás (OK)

### Az akkumulátor gyorsan merül

1. A Shelly Motion 2 beépített újratölthető Li-ion akkumulátort használ (6500 mAh), USB-C-vel töltve, 12–18 hónapos tipikus aktív élettartammal
2. A magas mozgásaktivitás vagy a rövid alvási intervallumok miatti gyakori ébredések gyorsabban merítik az akkumulátort
3. Az SSL engedélyezése az MQTT-n jelentősen csökkenti az akkumulátor élettartamát — használj sima MQTT-t (1883-as port) megbízható helyi hálózaton
4. Biztosíts erős Wi-Fi jelet az érzékelő helyén — a gyenge jel hosszabb csatlakozási időt jelent minden ébredésnél

> [!WARNING]
> A Gen1 Shelly eszközök **nem támogatják** az MQTT-t TLS-en keresztül jelentős akkumulátor-hatás nélkül. Az érzékelő és az MQTT broker közötti kommunikáció jellemzően titkosítatlan (sima MQTT, 1883-as port). Győződj meg róla, hogy az MQTT broker megbízható helyi hálózaton működik.

> [!WARNING]
> Az MQTT engedélyezése Gen1 Shelly eszközökön **letiltja a Cloud-kapcsolatot**. Az MQTT és a Cloud nem létezhet együtt ugyanazon az eszközön.

## Telepítés a TapHome-ban

### Előfeltételek

- Shelly eszköz csatlakoztatva a Wi-Fi-hez (2,4 GHz), pl. a Shelly alkalmazással vagy az eszköz saját hozzáférési pontján keresztül
- MQTT broker fut a helyi hálózaton (pl. Mosquitto, Home Assistant vagy a TapHome beépített brokere)
- TapHome CCU ugyanazon a hálózaton, mint a broker

> [!WARNING]
> A **Gen1** eszközökön az MQTT engedélyezése **letiltja a Shelly Cloudot**. A kettő nem futhat egyszerre. A Gen2/Plus eszközökön ez a korlátozás nem érvényes.

### 1. lépés — MQTT engedélyezése a Shelly eszközön

#### Gen1 eszközök (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

1. Nyissa meg a Shelly webes felületet: `http://<device-ip>/`
2. Navigáljon az **Internet & Security** → **Advanced — MQTT** menüpontra
3. Engedélyezze az **MQTT**-t
4. Állítsa be az **MQTT Server**-t: `<broker-ip>:<port>` (pl. `192.168.1.10:1883`)
5. Opcionálisan állítsa be az **MQTT User** és **MQTT Password** mezőket, ha a broker hitelesítést igényel
6. Kattintson a **Save** gombra — az eszköz újraindul és csatlakozik a brokerhez

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

1. Nyissa meg a Shelly webes felületet: `http://<device-ip>/`
2. Navigáljon a **Settings** → **MQTT** menüpontra
3. Engedélyezze az **MQTT**-t
4. Állítsa be a **Server**-t: `<broker-ip>:<port>` (pl. `192.168.1.10:1883`)
5. A **Client ID** előre ki van töltve az eszköz azonosítójával (pl. `shellyplus1pm-AABBCCDDEE`) — hagyja így, hacsak nincs konkrét oka a változtatásra
6. Kattintson a **Save** gombra és indítsa újra az eszközt

A beépített TapHome broker esetén a `<broker-ip>` a TapHome Core IP-címe. Adjon a Core-nak IP-foglalást a routerben, különben az eszköz elveszíti a brokert, amikor a router megváltoztatja a címet → [A hálózat előkészítése](https://taphome.com/hu/docs/setup/network-preparation/).

> [!TIP]
> Az MQTT működésének ellenőrzéséhez használjon egy MQTT klienst (pl. MQTT Explorer), és iratkozzon fel a `shellies/#` (Gen1) vagy `<device-id>/#` (Gen2) topikra. Látnia kell az eszköz állapotüzeneteit.

### 2. lépés — Device ID / MQTT Client ID megkeresése

Egyes sablonok **Device ID** vagy **MQTT Client ID** paramétert igényelnek. Ez az egyedi azonosító, amelyet az MQTT topikokban használnak.

- **Gen1:** a címkén MAC-címként található (pl. `AABBCCDDEE`). Device ID = `shelly<model>-<mac>`, pl. `shelly1pm-AABBCCDDEE`
- **Gen2/Plus:** a Shelly webes felületén a **Settings** → **Device Info** → **Device ID** alatt található, vagy az eszköz címkéjén

### 3. lépés — Konfigurálás a TapHome-ban

1. A TapHome-ban adjon hozzá egy új **Packet Parser (MQTT)** modult
2. **IP Address:** a beépített TapHome brokerhez `127.0.0.1` (a vezérlőegység saját magához csatlakozik, a cím soha nem változik); külső broker esetén annak IP-címe (pl. `192.168.1.10`)
3. **Port:** `1883` (alapértelmezett; TLS esetén használjon `8883`-at)
4. **Device ID / MQTT Client ID:** adja meg a 2. lépésben kapott értéket (ha a sablon megköveteli)
5. Importálja a sablont — a TapHome automatikusan feliratkozik az eszköz topikjaira

## Elérhető eszközök 5

Ezek az eszközök az importálás után jelennek meg a TapHome-ban.

Shelly Motion 2 MQTT Modul

Egyéni változók

`sensor1_topic` (string) = shellymotion2-deviceid Mozgásérzékelő 1 MQTT eszközazonosítója — formátum: 'shellymotion2-DEVICEID' (Shelly webes felület → Settings → Device Info)

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

`sensor2_topic` (string) = shellymotion2-deviceid Mozgásérzékelő 2 MQTT eszközazonosítója 

`sensor3_topic` (string) = shellymotion2-deviceid Mozgásérzékelő 3 MQTT eszközazonosítója 

`sensor4_topic` (string) = shellymotion2-deviceid Mozgásérzékelő 4 MQTT eszközazonosítója 

`sensor5_topic` (string) = shellymotion2-deviceid Mozgásérzékelő 5 MQTT eszközazonosítója

Mozgásérzékelő 1 Reed kontaktus Csak olvasható

PIR mozgásérzékelés — riasztást jelez mozgás érzékelésekor, OK mozgás nélkül; $.sensor.motion feldolgozása az /info JSON payloadból

boolean

Szerviz attribútumok

|                      |
|----------------------|
| IP-cím               |
| MAC-cím              |
| Akkumulátor          |
| Jel                  |
| Felhő engedélyezve   |
| Felhő csatlakoztatva |
| Eszköz idő           |
| Megvilágítás         |
| Hőmérséklet          |
| Üzemidő              |
| FW verzió            |
| FW frissítés         |
| Szabad RAM           |
| Szabad FS terület    |

Figyelő

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

Szerviz attribútumok

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

Mozgásérzékelő 2 Reed kontaktus Csak olvasható

PIR mozgásérzékelés — riasztást jelez mozgás érzékelésekor, OK mozgás nélkül; $.sensor.motion feldolgozása az /info JSON payloadból

boolean

Szerviz attribútumok

|                      |
|----------------------|
| IP-cím               |
| MAC-cím              |
| Akkumulátor          |
| Jel                  |
| Felhő engedélyezve   |
| Felhő csatlakoztatva |
| Eszköz idő           |
| Megvilágítás         |
| Hőmérséklet          |
| Üzemidő              |
| FW verzió            |
| FW frissítés         |
| Szabad RAM           |
| Szabad FS terület    |

Figyelő

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

Szerviz attribútumok

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

Mozgásérzékelő 3 Reed kontaktus Csak olvasható

PIR mozgásérzékelés — riasztást jelez mozgás érzékelésekor, OK mozgás nélkül; $.sensor.motion feldolgozása az /info JSON payloadból

boolean

Szerviz attribútumok

|                      |
|----------------------|
| IP-cím               |
| MAC-cím              |
| Akkumulátor          |
| Jel                  |
| Felhő engedélyezve   |
| Felhő csatlakoztatva |
| Eszköz idő           |
| Megvilágítás         |
| Hőmérséklet          |
| Üzemidő              |
| FW verzió            |
| FW frissítés         |
| Szabad RAM           |
| Szabad FS terület    |

Figyelő

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

Szerviz attribútumok

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

Mozgásérzékelő 4 Reed kontaktus Csak olvasható

PIR mozgásérzékelés — riasztást jelez mozgás érzékelésekor, OK mozgás nélkül; $.sensor.motion feldolgozása az /info JSON payloadból

boolean

Szerviz attribútumok

|                      |
|----------------------|
| IP-cím               |
| MAC-cím              |
| Akkumulátor          |
| Jel                  |
| Felhő engedélyezve   |
| Felhő csatlakoztatva |
| Eszköz idő           |
| Megvilágítás         |
| Hőmérséklet          |
| Üzemidő              |
| FW verzió            |
| FW frissítés         |
| Szabad RAM           |
| Szabad FS terület    |

Figyelő

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

Szerviz attribútumok

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

Mozgásérzékelő 5 Reed kontaktus Csak olvasható

PIR mozgásérzékelés — riasztást jelez mozgás érzékelésekor, OK mozgás nélkül; $.sensor.motion feldolgozása az /info JSON payloadból

boolean

Szerviz attribútumok

|                      |
|----------------------|
| IP-cím               |
| MAC-cím              |
| Akkumulátor          |
| Jel                  |
| Felhő engedélyezve   |
| Felhő csatlakoztatva |
| Eszköz idő           |
| Megvilágítás         |
| Hőmérséklet          |
| Üzemidő              |
| FW verzió            |
| FW frissítés         |
| Szabad RAM           |
| Szabad FS terület    |

Figyelő

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

Szerviz attribútumok

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

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

Lehetséges fejlesztések (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.

## Importálási paraméterek

Ezeket az értékeket az XML importálásakor adja meg.

| Az alkalmazás kéri | Alapérték     |
|--------------------|---------------|
| Mqtt Broker IP-cím | `192.168.0.1` |
| Mqtt Broker port   | `1883`        |

## Források

- 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

## Kapcsolódó dokumentáció

- [MQTT Integration](https://taphome.com/hu/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/hu/docs/integration/packet-parser/)
- [Packet parser függvények](https://taphome.com/hu/docs/script/packet-parser/)
- [Elemző függvények](https://taphome.com/hu/docs/script/parsing-functions/)
- [MQTT bróker](https://taphome.com/hu/docs/integration/packet-parser/mqtt-broker/)
- [Listener szkriptek](https://taphome.com/hu/docs/script/listener-scripts/)

