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.

Smart Department: Architektúra

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

  1. naučiť sa nainštalovať nové balíky do MicroPython-u

  2. naučiť sa ovládať chytré zariadenie pomocou protokolu MQTT

  3. naučiť sa prijímať správy cez MQTT protokol

  4. porozumieť významu príznaku retain pri odosielaní MQTT správ

  5. 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.

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 1883 alebo 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:

  1. nastaviť tzv. poslednú vôľu, a
  2. 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.

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.

Diagram stavov: konceptuálny diagram stavov chytrého senzora

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…

Ďalšie úlohy

Ďalšie zdroje

  1. MicroPython Lib: umqtt.simple - zdrojové kódy, ukážkové príklady a dokumentácia

  2. MicroPython Chapters: Inštalácia balíkov

  3. MicroPython Chapters: Práca s protokolom MQTT