Komunikácia pomocou prokolu MQTT
organizácia tém, štruktúra správ, zmena konfigurácie zariadenia a jeho ovládanie na diaľku pomocou protokolu MQTT
Video pre cvičenie
Motivácia
Komunikačný protokol MQTT patrí medzi najčastejšie a najobľúbenejšie protokoly používané v oblasti IoT. Aj preto je hlavným komunikačným protokolom v architekúre projektu Smart Department, kde sa používa na komunikáciu medzi všetkými vrstami architektúry. Všetky správy, ktoré sa pomocou protokolu MQTT posielajú, sú vo formáte JSON.
 
Na tomto cvičení zabezpečíme odosielanie nameraných údajov zo senzoru, ako aj príjem správ na zmenu konfigurácie zariadenia a vzdialenú správu.
Ciele
- naučiť sa nainštalovať nové balíky do MicroPython-u 
- naučiť sa ovládať chytré zariadenie pomocou protokolu MQTT 
- naučiť sa prijímať správy cez MQTT protokol 
- porozumieť významu príznaku - retainpri odosielaní MQTT správ
- naučiť sa zabezpečiť OTA aktualizáciu zmenou konfigurácie zariadenia 
Postup
Inštalácia modulu pre prácu s protokolom MQTT
V aktuálnom firmvéri jazyka MicroPython pre mikrokontroléry
z rodiny RP2 sa nenachádza modul pre prácu s protokolom
MQTT. V tomto kroku ju pridáme nainštalovaním balíka
umqtt.simple.
Inštalácia modulu pre podporu MQTT protokolu sa vykoná
zavolaním funkcie install() nad modulom mip.
Túto inštaláciu je možné vykonať automaticky v stave
Commissioning hneď po tom, ako zariadenie overí, či sa môže
pripojiť do internetu. Inštalácia sa tak vykoná len raz - pri naozaj
prvom stretnutí zariadenia.
Poznámka
Možnosť automatickej inštalácie v prípade reálneho nasadenia mikrokontroléra treba samozrejme dôkladne zvážiť, pretože táto možnosť so sebou nesie isté riziká. Príkladom môže byť zmena verzie, zrušenie repozitára balíkov, prípadne jeho nedostupnosť.
Nastavenie MQTT komunikácie
Používateľ bude môcť nastaviť vlastnosti pripojenia pomocou webového
rozhrania v stave Configuration. Nezabudnite ho preto
upraviť.
Po načítaní používateľských nastavení zo súboru sa tieto budú
nachádzať v inštancii triedy Settings v členskej premennej
mqtt. Význam jednotlivých položiek je nasledovný:
- server- adresa MQTT brokera
- port- port, na ktorom počúva MQTT broker, štandardne sa jedná o port- 1883alebo- 8883, ak je komunikácia šifrovaná
- user- meno používateľa
- password- heslo používateľa
- ssl- príznak, že spojenie prebehne cez SSL/TLS a bude šifrované
- cert- umiestnenie certfikátu
Téma, ktorá sa používa pre každú správu, má tvar
department/room/+/id/+. Vo webovom rozhraní pre nastavenie
zariadenia nezabudnite nastaviť aj tieto položky:
- department- oddelenie/katedra, kde bude zariadenie umiestnené
- room- označenie miestnosti na oddelení/katedre
- id- jedinečný identifikátor zariadenia v tvare vášho študentského prihlasovacieho mena
Pripojenie k a odpojenie od MQTT brokeru
Aby bolo možné komunikovať pomocou protokolu MQTT s okolím, je potrebné pripojiť chytré zariadenie k MQTT broker-u. To zabezpečíme v tomto kroku.
Pre experimentovanie môžete použiť nasledovnú konfiguráciu, pomocou ktorej sa pripojíte na hlavný MQTT broker v architekúre Smart Department:
- server = "147.232.205.176"
- port = 8883
- user = "student"
- password = "dgRk9cQ8sU4fCO"
- ssl = true
Nastavenie uvedených vlastností zabezpečte v stave
Configuration samostatným rozhraním a overte ich v stave
Commissioning. Ak sa zariadeniu nepodarí pripojiť k
MQTT brokeru, vráťte sa späť do stavu
Configuration.
Samotné pripojenie k MQTT brokeru pred odoslaním nameraných
dát, prebehne v stave Connect Network. Odpojenie od
MQTT brokera zasa v stave Sleep. V prípade
akéhokoľvek problému zariadenie prejde do stavu Error. Pri
odpájaní nezabudnite, že najprv sa treba odpojiť od MQTT
brokera a až potom sa môžete odpojiť od WiFi.
Publikovanie stavu zariadenia a posledná vôľa
Rovno po pripojení zariadenia k MQTT brokeru je potrebné vykonať dve veci:
- nastaviť tzv. poslednú vôľu, a
- vypublikovať, resp. aktualizovať stav zariadenia
Posledná vôľa ako aj stav zariadenia by mali mať nastavený
retain príznak, aby sa o stave zariadenia dozvedel
ktokoľvek, kto sa pripojí neskôr, ako daná správa vznikla.
Stav zariadenia ako aj posledná vôľa, sa budú posielať do rovnakej
témy a síce:
<department>/<room>/<type>/<id>/status.
V oboch prípadoch je dôležité, aby JSON dokument obsahoval jeden kľúč
s názvom status a hodnotou online alebo
offline vzhľadom na stav zariadenia:
{
  "status": "offline"
}Keď sa zariadenie pripojí, môžete do stavu zariadenia publikovať aj ďalšie informácie, ako napr.:
- IP adresa zariadenia
- čas a dátum zapnutia
- vlastnosti zariadenia
- číslo firmvéru MicroPython-u
- číslo verzie vášho softvéru
- informácie o mikrokontroléri
- a pod.
Poznámka
Pre testovanie komunikácie si nainštalujte klientsku MQTT aplikáciu, ako napr.:
- MQTT Explorer - An all-round MQTT client that provides a structured topic overview.
- Mosquitto Clients - Príkazy pre príkazový riadok na komunikáciu s MQTT brokerom.
Publikovanie nameraných dát
Správanie chytrého senzora rozšírime o nový stav s názvom
PublishData, v ktorom dôjde k odoslaniu nameraných dát. Po
úspešnom odoslaní nameraných dát prejde zariadenie do stavu
Sleep.
 
Pre odosielanie správ môžete využiť triedu Payload v
balíku models. Táto trieda má dve premenné:
- dt- čas odoslania reprezentovaný ako reťazec formátovaný podľa štandardu ISO 8601
- metrics- zoznam metrík, resp. zoznam meraní
Zariadenie bude svoje merania publikovať do témy
<department>/<room>/<type>/<id>/data.
Údaje budú publikované ako JSON dokument, ktorý bude vyzerať
napr. takto:
{
  "dt": "2024-10-29T20:09:35Z",
  "metrics": [
    {
      "dt": "2024-10-29T20:00:00Z",
      "name": "temperature",
      "value": 23.4,
      "units": "metric"
    },
    {
      "dt": "2024-10-29T20:00:00Z",
      "name": "humidity",
      "value": 70,
      "units": "%"
    }
  ]
}Merania reprezentujte ako inštanciu triedy Payload,
ktorá sa nachádza v module models.payload.
Pred odchodom z cvičenia…
Upozornenie
Ak máte dosku Raspberry Pi Pico 2 WH požičanú od cvičiaceho, tak pred odchodom z cvičenia si prosím:
- Uložte si vytvorený kód, ktorý ste na cvičení urobili.
- Zmažte obsah Flash pamäte mikrokontroléra nahratím fimrvéru flash_nuke.uf2. Pozor! Mikrokontrolér neodpájajte od počítača, pokiaľ sa vo vašom počítači znova neobjaví ako USB zariadenie.
- Nahrajte na mikrokontrolér najnovší firmvér.
Ďalšie úlohy
Ďalšie zdroje
- MicroPython Lib: umqtt.simple - zdrojové kódy, ukážkové príklady a dokumentácia 
- MicroPython Chapters: Inštalácia balíkov 
- MicroPython Chapters: Práca s protokolom MQTT