Problem Set #6: The Messages and Topics in MQTT

alebo o organizácii a štruktúre tém a prenášaných správ pomocou komunikačného protokolu MQTT

Komunikačný protokol MQTT je hlavným komunikačným protokolom v architekúre projektu Chytrá katedra. Používa sa na komunikáciu medzi všetkými vrstami architektúry, pričom jednotlivé správy sa odosielajú vo formáte JSON.

Smart Department: Architektúra

Zariadenia na 1. vrstve budú dáta odosielať, ale rovnako ich budú aj prijímať. Tomu bude samozrejme zodpovedať aj štruktúra samotných správ.

Pri špecifikácii štruktúry tém správ budeme rozpoznávať tieto časti:

  • department - Názov organizácie alebo oddelenia, napr. kpi.
  • room - Názov alebo označenie miestnosti, napr. caprica.
  • type - Typ zariadenia, napr. humidity.
  • device_id - Jedinečný identifikátor daného zariadenia, používajte svoj univerzitný login v tvare ab123cd.

Odosielanie (nameraných) dát zo zariadenia

Pre odosielanie správ zo zariadenia budete používať tému <department>/<room>/<type>/<device_id>. Napríklad, ak sa jedná o teplomer v miestnosti dune na katedre kpi, bude téme vyzerať takto: kpi/dune/temperature/ab123cd.

Samotná správa bude vyzerať nasledovne:

{
  "dt": '2024-10-29T20:09:35Z',
  "metrics": [
    {
      "dt": '2024-10-29T20:00:00Z',
      "name": "temperature",
      "value": 23.4,
      "units": "metric"
    }
  ]
}

Čas a dátum či už odoslanej správy alebo jednotlivých meraní je odosielaný v reťazcovej podobe naformátovanej pomocou štandardu ISO 8601. Na reprezentáciu času sa používa vždy štandard UTC.

Pod kľúčom metrics sa nachádza zoznam meraní, kde každé je reprezentované samostatným JSON dokumentom. Tento dokument reprezentuje meranie príslušnej veličiny v konkrétny čas. To je dôležité vtedy, keď do jednej správy zabalíte viacero meraní tej istej veličiny. Názvy meraných veličín, prípustné hodnoty jednotiek ako aj typ hodnôt, je uvedený v nasledujúcej tabuľke.

name units value
temperature metric | imperial | standard float
humidity percent int

Odosielanie informácií o stave zariadenia

Každé zariadenie bude mať specifickú tému, v ktorej sa bude nachádzať aktuálny stav zariadenia. Hlavne informácia o tom, či zariadenie pracuje. Táto téma bude vyzerať nasledovne: <department>/<room>/<type>/<device_id>/status. Do tejto témy bude zapísaná aj posledná vôľa zariadenia.

V prípade, že zariadenie pracuje, bude v stave online a správa bude vyzerať nasledovne:

{
  "status": "online"
}

V opačnom prípade bude zariadenie v stave offline. V tom prípade bude správa vyzerať nasledovne:

{
  "status": "offline"
}

Zmena vlastností zariadenia

Počas behu zariadenia bude možné meniť jeho konfiguráciu, čím bude možné ovplyvniť správanie zariadenia. Na to bude slúžiť téma <department>/<room>/<type>/<device_id>/set.

Správa bude odrážať podobu konfiguračného súboru. Naraz je samozrejme možné zmeniť viacero hodnôt, čo znamená, že je možné naraz poslať novú podobu celého konfiguračného súboru.

Ovládanie zariadenia

V prípade, že zariadenie predstavuje akčný člen, akým je napríklad žiarovka, bude možné jej na diaľku posielať príkazy na jej ovládanie. To môže znamenať jej zapnutie, vypnutie, zmenu jasu, nastavenie farby, prehratie efektu a pod. Na to bude slúžiť téma <department>/<room>/<type>/<device_id>/cmd.

Zdroje

Pri navrhovaní tém a formátu správ sme sa inšpirovali najmä z týchto zdrojov: