Zariadenie IoT Gateway

vytvorenie vlastného zariadenia IoT Gateway pomocou kompozície kontajnerov

Video pre cvičenie

Motivácia

Doteraz sme na naše experimenty používali MQTT broker nachádzajúci sa na serveri Mother, na ktorý sme sa pripájali priamo. Podstatou architektúry Smart Department je však distribuované riešenie pomocou viacerých MQTT brokerov, ktoré sa nachádzajú v jednotlivých miestnostiach na zariadeniach označených ako IoT Gateway. Na tomto cvičení si teda základ takého zariadenia vytvoríme pomocou kompozície kontajnerov na vlastnom počítači a vo výsledku ho pripojíme do samotnej architektúry.

Smart Department: Architektúra

Ciele

  • naučiť sa základy práce s nástrojom docker compose

  • naučiť sa základy tvorby kompozície kontajnerov

  • naučiť sa základy konfigurácie režimu MQTT bridge

Postup

The MQTT Broker

Keďže je srdcom celej architektúry Smart Department komunikačný protokol MQTT, tak v prvom kroku vytvoríme základ kompozície práve so zameraním na tento protokol. Do kompozície totiž vložíme MQTT broker Mosquitto a klienta MQTT Explorer.

Task

Vytvorte si samostatný priečinok gateway/, v ktorej sa bude nachádzať kompozícia pre lokálne zariadenie IoT Gateway.

Vytvorte nasledovnú štruktúru priečinkov:

gateway/
├── configs/
│   ├── mosquitto/
│   │   └── config/
│   │       └── mosquitto.conf
│   └── mqtt-explorer/
└── docker-compose.yaml

Task

V priečinku gateway/configs/mosquitto/config/ vytvorte súbor mosquitto.conf, ktorý bude obsahovať počiatočnú konfiguráciu pre službu Mosquitto.

MQTT broker Mosquitto nakonfigurujeme tak, aby sa naň bolo možné pripájať anonymne. To zabezpečíme pomocou nasledujúceho konfiguračného súboru:

# allow annonymous connections
allow_anonymous true

# open listener port
listener 1883

# don't include timestamp in log messages
log_timestamp false

Task

Vytvorte súbor pre kompozíciu docker-compose.yaml a podľa pokynov do neho pridajte službu mosquitto a mqtt-explorer.

Súbor s kompozíciou bude vyzerať nasledovne:

services:

  mosquitto:
    image: eclipse-mosquitto
    ports:
    - 1883:1883
    volumes:
    - ./configs/mosquitto:/mosquitto

  mqtt-explorer:
    image: smeagolworms4/mqtt-explorer
    ports:
    - 4000:4000
    volumes:
    - ./configs/mqtt-explorer:/mqtt-explorer/config

  chrony:
    image: cturra/ntp
    ports:
      - 123:123/udp
    environment:
      NTP_SERVERS: "pool.ntp.org"

Task

Spustite vytvorenú kompozíciu.

Súbor s kompozíciou je možné spustiť príkazom:

$ docker compose up

Task

Pomocou klienta MQTT Explorer sa pripojte na MQTT broker Mosquitto.

MQTT Explorer je spustený na lokálnom porte 4000. Ak teda otvoríte prehliadač na adrese http://localhost:4000, v prehliadači sa zobrazí jeho používateľské rozhranie. Pre pripojenie sa k lokálnemu MQTT brokeru spustenému v kompozícii stačí, ak do poľa Host zadáte názov služby mosquitto tak, ako je uvedený v súbore s kompozíciou.

Pripojenie chytrého senzora

Všetky chytré veci je možné do architektúry Smart Department pripájať prostredníctvom zariadenia IoT Gateway. To pracuje ako WiFi prístupový bod, ale okrem možnosti pripojenia cez WiFi je možné pripájať aj zariadenia prostredníctvom komunikačných protokolov Zigbee a BLE.

Dnes vytvoríme IoT Gateway pomocou kompozície a pripojíme k nemu vytvorený chytrý senzor pomocou protokolu MQTT. V aktuálnej konfigurácii však váš počítač ako prístupový bod nepracuje. Miesto toho využijeme prístupový bod v miestnosti, cez ktorý prepojenie zabezpečíme.

Task

Upravte konfiguráciu chytrého senzora tak, aby sa mohol pripojiť na MQTT broker spustený v kompozícii.

V konfigurácii chytrého senzora je potrebné overiť a upraviť nasledovné nastavenia:

  • konfigurácia pripojenia na WiFi - váš počítač aj chytrý senzor musia byť pripojení na rovnakú WiFi sieť
  • adresa MQTT broker-a - IP adresa broker-a je momentálne IP adresa WiFi sieťového adaptéra vášho počítača
  • používateľské meno a heslo sú aktuálne prázdne (broker umožňuje anonymné pripojenie)
  • ako base_topic použite gw/temperature/<LOGIN> pre teplotu a gw/humidity/<LOGIN> pre vlhkosť

Task

Spustite chytrý senzor a overte správnosť vašej úpravy.

Ak ste postupovali správne, v aplikácii MQTT Explorer uvidíte správy prichádzajúce z vášho senzora.

Task

Aktualizujte konfiguráciu ntpHost v konfiguračnom súbore chytrého senzora tak, aby senzor synchronizoval čas voči NTP serveru chrony nachádzajúcemu sa vo vašej kompozícii.

Ako IP adresu uveďte IP adresu vášho počítača podobne, ako je tomu v prípade MQTT brokera.

Task

Overte aktualizáciu vašej konfigurácie.

Úspešnosť aktulizácie si môžete overiť vypísaním obsahu premennej host v balíku ntptime napr. takto:

>>> import ntptime
>>> ntptime.host
192.168.0.122

MQTT Bridge

Aktuálne zostávajú namerané údaje len na lokálnom MQTT brokeri. Ak ich chceme dostať do MQTT brokera na serveri Mother, musíme vytvoriť tzv. bridge.

Task

Pripojte lokálny MQTT broker na vzdialený MQTT broker nachádzajúci sa na serveri mother.

Pripojenie zabezpečíme rozšírením konfigurácie lokálneho MQTT brokera o nasledujúce riadky:

# bridge from local mqtt broker to mother
connection <UID>-to-mother
address 147.232.205.176
remote_username maker
remote_password mother.mqtt.password

# bridge all topics
topic # both 2

kde UID je váš univerzitný identifikátor.

Konfigurácia by mala byť čitateľná, pretože jednotlivé jej položky slúžia na pripojenie sa na vzdialený MQTT broker.

Riadok topic # both 2 zabezpečí, aby sa preposielali všetky správy oboma smermi:

  • ak lokálny broker prijme správu, automaticky sa odošle do tej istej témy aj na vzdialený broker, a
  • ak vzdialený broker prijme správu, automaticky sa stiahne aj na lokálny broker.

Task

Overte úspešnosť vášho pripojenia.

To, či pripojenie prebehlo v poriadku, si viete overiť aj pohľadom do logovacích správ. Príslušné správy budú vyzerať takto:

mosquitto version 2.0.20 starting
Config loaded from /mosquitto/config/mosquitto.conf.
Opening ipv4 listen socket on port 1883.
Opening ipv6 listen socket on port 1883.
Connecting bridge ab123cd-to-mother (147.232.205.176:1883)
mosquitto version 2.0.20 running

Následne si otvorte MQTT Explorer a overte, či správy, ktoré prichádzajú na lokálny broker, sa objavia aj na vzdialenom brokeri, a opačne.

Task

Zabezpečte, aby len tie správy, ktoré publikuje váš senzor do lokálneho MQTT brokera, boli preposielané na MQTT broker matka.

Vďaka aktuálnej konfigurácii sa automaticky preposielajú všetky správy oboma smermi. V tejto úlohe však zabezpečíme, aby sa preposielali len vybrané správy (prichádzajúce z chytrého senzora) do vzdialeného MQTT brokera.

To zabezpečíme zrušením pôvodného kľúčového slova topic s parametraim a do konfiguračného súboru pridéme pravidlá na preposielanie týchto správ na vzdialený MQTT broker:

# forwarding messages from local gw to mother
topic #        out 2 gw/temperature/ kpi/ab123cd/temperature/
topic ab123cd/status out 2 gw/temperature/ kpi/ab123cd/temperature/

Task

Zabezpečte, aby správy posielané chytrému senzoru cez MQTT broker na serveri mother boli doručované na lokálnom MQTT brokeri.

# subscribing to topics on mother
topic temperature/ab123cd/set   in 2 gw/ kpi/ab123cd/
topic temperature/ab123cd/cmd   in 2 gw/ kpi/ab123cd/

Pripojenie notifikačnej služby

Počas posledných cvičení sme vytvorili službu Notifier, pomocou ktorej je možné posielať notifikácie.

Služby sa však do architektúry Smart Department pripájajú cez cloud. To znamená, že aj naša vytvorená služba sa bude do architektúry pripájať cez MQTT broker v cloud-e tak, ako tomu bolo doteraz.

V tomto kroku však rozšírime kompozíciu o spúšťanie notifikačnej služby.

Task

Rozšírte kompozíciu o vytvorenú službu Notifier, z ktorej ste vytvorili Docker obraz a nahrali ste ho na hub.docker.com.

Do konfigurácie kompozície pridajte túto službu:

notifier:
  image: <USERNAME>/notifier
  environment:
    - NOTIFIER_BROKER=147.232.205.176
    - NOTIFIER_USER=maker
    - NOTIFIER_PASSWORD=mother.mqtt.password
    - NOTIFIER_BASE_TOPIC=services/notifier/<LOGIN>

kde <USERNAME> je vaše používateľské meno, akým ste sa zaregistrovali na portáli hub.docker.com.

Task

Overte vašu kompozíciu.

Kompozíciu po zmene konfigurácie vypnite a opäť zapnite. Ak ste postupovali správne, tak po poslaní správy do témy services/notifier vo formáte, ktorý sme vytvorili na predchádzajúcich cvičeniach, dostanete odoslanú notifikáciu.

Task

Zabezpečte, aby správy, ktoré budú z lokálneho MQTT brokera odosielané do témy

Ďalšie úlohy

  1. Ak chcete mať pre svoju kompozíciu aj pekné používateľské webové rozhranie, môžete vyskúšať nietkorý z aplikačných dashboardov, ako je napr. Homepage. Ten je použitý aj na jednotlivých zariadeniach IoT Gateway.

Ďalšie zdroje