MQTT az okosotthonok svájci bicskája a Z-Wave és Zigbee eszközök adatainak integrációjához

Az okosotthonok világában egyre inkább előtérbe kerülnek azok a protokollok és technológiák, amelyek egyszerűsítik a különböző eszközök közötti kommunikációt és integrációt. Az MQTT (Message Queuing Telemetry Transport) egy ilyen protokoll, amelyet kifejezetten alacsony sávszélességű és erőforrásigényű eszközök számára terveztek. Az MQTT rugalmas, könnyen implementálható, és ideális megoldást kínál a különféle okosotthon eszközök összekapcsolására. Ebben a cikkben áttekintjük, miért tekinthető az MQTT az okosotthonok svájci bicskájának, és hogyan viszonyul a Z-Wave és Zigbee technológiákhoz.

Mi az MQTT és hogyan működik?

Az MQTT egy üzenetközvetítő protokoll, amely a “publish/subscribe” (publikálás/feliratkozás) modellt használja. Ez azt jelenti, hogy az eszközök (kliensek) nem közvetlenül kommunikálnak egymással, hanem egy központi szerveren (broker) keresztül. Az eszközök publikálhatnak üzeneteket bizonyos témákra (topics), és feliratkozhatnak az őket érdeklő témákra. A broker felelős az üzenetek továbbításáért a megfelelő klienseknek.

A professional and photorealistic infographic illustrating MQTT pub_sub logic in a Smarthome IoT environment. The diagram should include the following

MQTT Előnyei

  • Alacsony sávszélesség és erőforrásigény: Az MQTT minimális adatforgalmat generál, így ideális alacsony sávszélességű hálózatokhoz és erőforrás-korlátozott eszközökhöz.
  • Rugalmas architektúra: A publish/subscribe modell lehetővé teszi a könnyű bővítést és a dinamikus eszközcsatlakozást.
  • Egyszerű implementáció: Számos programozási nyelvben elérhető MQTT kliensek és szerverek, így könnyen integrálható különböző rendszerekbe.
Bővebben az MQTT-ről: https://mqtt.org

Az MQTT helye az okosotthonokban

Az MQTT előnyei különösen akkor nyilvánvalóak, amikor sokféle, különböző protokollokat használó eszközt kell integrálni egyetlen rendszerbe, és a kommunikáció egyszerűsége és hatékonysága kiemelt fontosságú.

Míg a Z-Wave és a Zigbee IoT eszközök egy-egy csoportjára jellemző kommunikációs mód és nem ad átjárhatóságot más kommunikációs módok felé és kifejezetten eszköz szinthez közeli réteg, addig az MQTT egy magasabb szintű megoldás üzenetek fogadására és továbbítására. Ezen a ponton érnek össze a technológiák. Az eszközök a gyűjtött adatokat eg yközvetítő rétegen keresztül el tudnják juttatni az MQTT brokerhez, és onnan adatokat képesek lekérdezni a közvetítő rétegen keresztül igény esetén.

Mivel az MQTT egy általános célú üzenet fogadó és továbbító megoldás így használható különböző kommunikációs módokat használó IOT, okosotthon eszközök okosotthon központ alkalmazásokba történő egységes bekötésére. Azonban az MQTT általánosabb megközelítést kínál, amely széles körben alkalmazható különféle IoT projektekben is.

Összegzésképpen, az MQTT rugalmas, alacsony erőforrásigényű, és könnyen integrálható megoldást nyújt az okosotthon eszközök összekapcsolására és menedzselésére egy közvetítő rétegen használatával.

Z-Wave és Zigbee eszközök bekötése MQTT rendszer alá

Annak bemutatásaként, hogy miként kell különböző eszközöket bekötni az MQTT rendszerekbe alább olvasható.
A mintamegoldást Docker alapokon készítettem elő, hozzá tartozó konfigurációs file-ok alább láthatók.

Rabbit MQ

MQTT központnak most a RabbitMQ-t választottam. Miért RabbitMQ? Egyszerűen szubjektív szimpátia alapján…
Számos egyéb Open Source megvalósítás létezik MQTT broker funkcionlitásra. Bármelyik használható tetszőlegesen…
 
RabittMQ docker-compose.yaml file:
				
					version: '3'
services:
  rabbitmq:
    image: 'rabbitmq:3-management'
    container_name: rabbitmq
    restart: unless-stopped
    environment:
      - HOSTNAME=rabbitmq-host
    networks:
      - rabbitmq-network
    ports:
      - "1883:1883"
      - "5683:5683/udp" # CoAP port
      - "5684:5684/udp" # CoAPS port (ha szükséges lenne)
      - "5672:5672"
      - "25672:25672"
      - "15672:15672"
      - "15692:15692"
    volumes:
      - "/opt/docker/rabbitmq/config:/etc/rabbitmq"
      - "/opt/docker/rabbitmq/var:/var/lib/rabbitmq"
      - "$PWD/rabbitmq_lvc_exchange-3.12.0.ez:/plugins/rabbitmq_lvc_exchange-3.12.0.ez"

networks:
  rabbitmq-network:
    driver: bridge
				
			

Az alábbi könyvtár struktúra tartozik a docker alapú megvalósításhoz az /opt/docker/rabbitmq/config könyvtár alatt.
(a docker-compose és docker megoldások ismertetése, használatának bemutatása nem volt cél)

				
					.
├── conf.d
│   └── 10-defaults.conf
├── definitions.json
├── enabled_plugins
└── rabbitmq.conf

				
			

a könyvtárakban a file-ok tartalma:

				
					root@mqtt-bridge:/opt/docker/rabbitmq/config# cat rabbitmq.conf
deprecated_features.permit.management_metrics_collection = true
mqtt.allow_anonymous  = true
mqtt.vhost            = rabbitmq_vhost
mqtt.exchange         = amq.topic
mqtt.prefetch         = 10
management.load_definitions = /etc/rabbitmq/definitions.json

root@mqtt-bridge:/opt/docker/rabbitmq/config# cat enabled_plugins
[rabbitmq_management,rabbitmq_prometheus,rabbitmq_mqtt,rabbitmq_lvc_exchange].

root@mqtt-bridge:/opt/docker/rabbitmq/config# cat definitions.json
{
  "vhosts": [
    {
      "name": "rabbitmq_vhost"
    }
  ],
  "users": [
    {
      "name": "admin",
      "password": "*****",
      "tags": "administrator"
    },
    {
      "name": "guest",
      "password": "*****",
      "tags": ""
    }
  ],
  "permissions": [
    {
      "user": "guest",
      "vhost": "rabbitmq_vhost",
      "configure": "amq.topic|mqtt-subscription-.*",
      "write": ".*",
      "read": ".*"
    },
    {
      "user": "admin",
      "vhost": "rabbitmq_vhost",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    }
  ],
  "parameters": [],
  "policies": [],
  "queues": [],
  "exchanges": [],
  "bindings": []
}

root@mqtt-bridge:/opt/docker/rabbitmq/config# cat conf.d/10-defaults.conf
## DEFAULT SETTINGS ARE NOT MEANT TO BE TAKEN STRAIGHT INTO PRODUCTION
## see https://www.rabbitmq.com/configure.html for further information
## on configuring RabbitMQ

## allow access to the guest user from anywhere on the network
## https://www.rabbitmq.com/access-control.html#loopback-users
## https://www.rabbitmq.com/production-checklist.html#users
loopback_users.guest = false

## Send all logs to stdout/TTY. Necessary to see logs when running via
## a container
log.console = true

				
			
Indítása pedig docker-compose parancs segítségével lehetséges.

Ha minden sikeres volt az indítás, akkor meg kell jellenie a docker container-ek közt a rabbitmq konténernek.
				
					 rabbitmq:3-management        "docker-entrypoint.s…"   12 days ago   Up 5 hours   4369/tcp, 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp, 0.0.0.0:15692->15692/tcp, :::15692->15692/tcp, 0.0.0.0:25672->25672/tcp, :::25672->25672/tcp, 15691/tcp, 0.0.0.0:5683-5684->5683-5684/udp, :::5683-5684->5683-5684/udp   rabbitmq
				
			

és a hozzá tartozó WEB-es felület bejelentkezve a definitions.json file-ban megadott jelszóval az alábbihoz hasonló felület érhető el.

Ezzel az MQTT broker elő i s van készítve a következő lépésekhez…

Zigbee2MQTT

Zigbee2MQTT egy olyan opensource alkalmazás ami kapcsolatot biztosít a Zigbee-s eszközök és az MQTT message queue kezelő rendszer közt mint köztes réteg. Jelenleg több mint 400(!) gyártó több ezer termékét támogatja

Bővebben a Zigbee2MQTT-ről: https://www.zigbee2mqtt.io

hozzá tartozó docker-compose.yaml file:
				
					version: '3.8'
services:
  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt
    restart: unless-stopped
    privileged: true
    # group_add:
    #   - dialout
    # user: 1000:1000
    volumes:
      - /opt/docker/zigbee2mqtt/data:/app/data
      - /run/udev:/run/udev:ro
    ports:
      # Frontend port
      - 8080:8080
    environment:
      - TZ=Europe/Budapest
    devices:
      # Make sure this matched your adapter location
      - /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:/dev/zigbee

				
			
sikeres indítás után a WEB felület elérhető a 8080-as porton.
 

Természetesen az üresen telepített Zigbee2MQTT rendszer nem tartalmazza a környezetében lévő Zigbee-s eszközöket és további konfigurációt igényel.

Ahhoz hogy miképp kell beállítani, hogy kell a Zigbee-s eszközöket párosítani a használt Zigbee adapterrel, részletesen megtalálható a készítői oldalakon: https://www.zigbee2mqtt.io/guide/getting-started

Z-Wave2MQTT

A Z-Wave2MQTT egy az előzőhőz hasonló eszköz, csak Zigbee eszközök helyett Z-Wave eszközök kezelésére szolgál. Itt is majd 400 gyártó több mint 2000 terméke támogatott
 
 
a docker konténert az alábbi docker-compose.yaml definiciós file-al használhatjuk:
				
					version: '3.7'
services:
  zwave-js-ui:
    container_name: zwave-js-ui
    image: zwavejs/zwave-js-ui:latest
    restart: unless-stopped
    tty: true
    stop_signal: SIGINT
    environment:
      - SESSION_SECRET=*****************
      - ZWAVEJS_EXTERNAL_CONFIG=/usr/src/app/store/.config-db
      - TZ=Europe/Budapest
    networks:
      - zwave-lan
    devices:
      - '/dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_90cf85ed4985ed11bd5dc69f9d1cc348-if00-port0:/dev/zwave'
    volumes:
      - /opt/docker/zwave2mqtt:/usr/src/app/store
    ports:
      - '8091:8091' # port for web interface
      - '3000:3000' # port for Z-Wave JS websocket server
networks:
  zwave-lan:
    driver: bridge

				
			

Ebben az esetben a sikeres indítás után a WEB-es felület a 8091-es porton érhető el, és az alábbihoz hasonló képet mutat:

Az ismerettőnek ebben a részében sem tértem ki a részletes konfigurálásra, beüzemelésre, mivel az alkalmazás WEB oldalán részletes, naprakész leírás található róla: https://zwave-js.github.io/zwave-js-ui/#/usage/setup

És valóban működik?

Annak ellenőrzésére, hogy valóban működik-e a konfigurált rendszerünk és a Zigbee-s é sZ-Wave-es eszközök milyen payload-al küldik be az üzeneteiket egy MQTT kliens-re lesz szükségünk.
 
Például én erre az MQTTX nevő alkalmazást szeretem használni: https://mqttx.app

Következő lépésként “már csak” az okosotthon vezérlő központokban kell bekonfigurálni, hogy használják az adott MQTT központot az adatok eléréséhez és felhasználásához…

Többekben felmerülhet a kérdés, hogy mi értelme ennek mikor pl. egy HomeAssistant alapú rendszer a fentiekből sok mindent megold és “nem kell vele foglakozni”…

Hirtelen két indok miért is célszerű a fentieket ismerni és kipróbálni:

  • Megismerhetők a HA-s megoldás alapját adó technológiák részleteit.
    Vigyázat! Nagyon mély a nyúl ürege…
  • Ha nem HomeAssistant-ot használ valaki központnak akkor nem szükséges még a HA-t is telepíteni-e, megismernie amennyiben a központja nem támogatja valamelyik típusú eszközöket, de az igény az meg lenne rá.
    (persze az soha nem árt a szélesebb látókör)

és biztos számtalan további indokot fel lehetne még felsorolni…

hu_HUMagyar