Basics with MQTT
About
Existuje mnoho komunikačných protokolov umožňujúcich M2M komunikáciu. V prostredí IoT zariadení však našiel kvôli svojim vlastnostiam svoje využitie práve jeden protokol. MQTT. A dnes sa na neho pozrieme zblízka.
Goals
- Porozumieť mechanizmu publish-subscribe.
- Porozumieť základnej terminológii z oblasti MQTT.
- Naučiť sa pracovať s protokolom MQTT z príkazového riadku.
- Naučiť sa základom práce s protokolom MQTT v jazyku Python.
Content
Step 1: Prepare Your Environment
Ešte pred samotnou prácou skontroluj, či máš prichystané a pripravené všetko potrebné.
Úloha 1.1
Overte, či máte pre potreby cvičenia pripravené všetky potrebné komponenty.
Na toto cvičenie budete potrebovať: * Raspberry Pi * kontaktné pole * prepojovacie vodiče * tlačidlo, LED diódu, 220 óhmový odpor, bzučiak * editor Mu alebo Thonny
Step 2: Topics and Messages
Pre prácu s protokolom MQTT budeme používať broker Mosquitto.
Úloha 2.1
Do svojho systému si nainštalujte balík
mosquitto-clients
.
Ak používate Raspbian resp. distribúcie postavené na distribúcii Debian, do príkazového riadku napíšte:
sudo apt install mosquitto-clients
Ak používate distribúciu Fedora, tak napíšte:
sudo dnf install mosquitto-clients
Úloha 2.2
Pomocou príkazu mosquitto_pub
odošlite správu
Hello world!
do témy messages
.
Príkaz mosquitto_pub
má niekoľko parametrov (viď
man mosquitto_pub
):
-h
- špecifikuje adresu MQTT broker-a-t
- špecifikuje tému, do ktorej má byť správa odoslaná-m
- špecifikuje samotnú správu
Úloha 2.3
Pomocou príkazu mosquitto_sub
sa prihláste na odber
správ z témy messages
.
Príkaz mosquitto_sub
má niekoľko parametrov (viď
man mosquitto_sub
):
-h
- špecifikuje adresu MQTT broker-a-t
- špecifikuje tému, do ktorej má byť správa odoslaná
Správy do témy si posielajte pomocou príkazu
mosquitto_pub
. Vyskúšajte, čo sa stane, ak pošlete správu
do inej témy, ako je téma messages
.
Step 3: MQTT with Python
Tentokrát sa pozrieme na prácu s MQTT v jazyku Python.
Úloha 3.1
Nainštalujte si balík paho-mqtt
poskytujúci modul pre
komunikáciu s Mosquitto broker-om.
Inštaláciu vykonáte pomocou príkazu:
pip3 install paho-mqtt
Poznámka: Ak tento príkaz spustíte vo svojom
systéme, budete potrebovať aj práva superpoužívateľa
(sudo
). Ak však len vo virtuálnom prostredí
(virtualenv
), superpoužívateľom byť nemusíte.
Úloha 3.3
Vytvorte v jazyku Python program, pomocou ktorého pošlete do
témy messages
správu Hello world!
.
Riešenie môže vyzerať napríklad takto:
import paho.mqtt.client as mqtt
= mqtt.Client()
client # port is not mandatory
connect('10.20.30.40', port=1883)
client.
'general', 'Hello world!') client.publish(
Úloha 3.4
V jazyku Python vytvorte program, pomocou ktorého sa
prihlásite na odber správ z témy messages
.
Riešenie môže vyzerať napr. takto:
import paho.mqtt.client as mqtt
from time import sleep
def on_message(client, userdata, message):
= str(message.payload.decode("utf-8"))
text print(f'Received message "{text}" in topic "{message.topic}"')
if __name__ == '__main__':
= mqtt.Client()
client connect('10.20.30.40', port=1883)
client.'messages')
client.subscribe(= on_message
client.on_message
# non blocking call
client.loop_start() # or client.loop_forever() - blocking call (no need the rest of code)
while True:
# your job goes here
1)
sleep(
client.loop_stop()
Step 4: Smart Home Environment
Tentokrát si vytvoríte jednoduchú inteligentnú domácnosť, v ktorej
budú zariadenia medzi sebou komunikovať pomocou protokolu MQTT.
Miestnosti budú reprezentované vašimi stolmi (napr. obývačka, chodba,
spálňa, kuchyňa). Do týchto miestností vytvoríte jednoduchú sadu akčných
členov (napr. svetlo, bzučiak) a inštalujete tam jednoduché senzory
(napr. tlačidlo). Následne si zostavíte schému tém pre domácnosť (napr.
home/kitchen/light
) a zabezpečíte, aby jednotlivé senzory
publikovali informácie do príslušných kanálov, a aby boli akčné členy
ovládateľné na základe prichádzajúcich správ.
Úloha 4.1
Vytvorte jednoduchý scenár inteligentnej domácnosti spolupracujúci s vašimi komponentmi.
Vytvorte napríklad zabezpečene domácnosti, ktorá v prípade, že je
domácnosť zamknutá (stav v brokeri reprezentovaný hodnotou
locked
v príslušnej téme) a dôjde k detekcii otvorenia
dverí (napr. zapnutím tlačidla), dôjde k rozsvieteniu všetkých svetiel a
pípaniu vo všetkých miestnostiach.
Aby sme vedeli takúto situáciu simulovať, pripojíme k našim Raspberry Pi príslušné súčiastky, ako LED diódy, tlačidlá a bzučiaky. Pre správne použitie pinov sa riaďte nasledujúcimi schémami.
Zapojte súčiastky do vášho Raspberry Pi podľa vami vymysleného scenára.
Úloha 4.2
Použitie jednotlivých súčiastok zrealizujte vo vašich Python programoch tak, aby tlačidlá posielali mqtt správy na určenú tému (topic) a LED diódy či bzučiaky reagovali na prichádzajúce mqtt správy určenej témy (topicu).
Použitie súčiastok implementujete napríklad takto:
from gpiozero import Button, LED, Buzzer
= Button(17)
button = LED(27)
led = Buzzer(22) buzzer
Reagovanie na tlačidlo a rozsvietenie diódy môžete implementovať takto:
if button.is_pressed == True:
led.on()
Vaše programy upravte tak, aby čo najlepšie simulovalo prostredie
scenára, ktorý ste si vymysleli. Napríklad tlačidlá v kuchyni budú
posielať mqtt správy na tému kitchen/switch
a LED
dióda v kuchyni bude ragovať na správu s textom ZAPNI
na
rovnakú tému.
Step 5: Clean Your Environment
Po skončení uveďte svoje pracovisko do pôvodného stavu.
Úloha 5.1
Zmažte z disku svoje riešenie vytvorené v editore.
Úloha 5.2
Rozpojte zapojenie a uložte jeho súčasti na pôvodné miesto.
Additional Tasks
Additional Sources
- Prednáška č. 7
- MQTT 101 - niekoľko slajdov z kurzu o základoch práce s protokolom MQTT
- GPIO Zero 101 - niekoľko slajdov z kurzu o základoch práce s knižnicou GPIO Zero