Zariadenie IoT Gateway
vytvorenie vlastného zariadenia IoT Gateway pomocou kompozície kontajnerov
Video pre cvičenie
Upozornenie
Predtým, ako prídete na cvičenie, tak:
je potrebné mať lokálne nainštalovaný Docker
je potrebné zvládať základy práce s technológiou Docker
prineste si vytvorených chytrý senzor teploty vytvorený počas predchádzajúcich cvičení
{“stiahnite si nasledujúce Docker obrazy”=>“eclipse-mosquitto, smeagolworms4/mqtt-explorer, cturra/ntp”}
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.
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
Poznámka
Pre testovacie účely je dobré príkaz spúšťať takto:
$ docker compose up || docker compose down --volumes
Po nekorektnom ukončení kompozície (napr. stlačením kláves
Ctrl+C
) dôjde k ukončeniu kompozície a taktiež sa odstránia
aj všetky anonymné zväzky.
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.
Poznámka
Pri diagnostikovaní problémov vám pomôže sledovať aj log správy,
ktoré produkuje MQTT broker. Tie viete vidieť vo výstupe
príkazu docker compose up
, ale jeho súčasťou sú log správy
zo všetkých služieb. Ak chcete zobrazovať správy len zo služby
mosquitto
, tak v priečinku, kde sa nachádza súbor s
konfiguráciou kompozície docker-compose.yaml
spustite
príkaz:
$ docker compose logs mosquitto
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žitegw/temperature/<LOGIN>
pre teplotu agw/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
- 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
- Docker Compose - Docker Compose is a tool for defining and running multi-container applications.
- docker-compose
cheatsheet - ťahák pre používanie
docker compose