Komunikácia cez MQTT

organizácia tém, typy správ a ich formát

Zariadenia a služby v architektúre Smart Department spolu komunikujú prostredníctvom protokolu MQTT. Aby si navzájom rozumeli, musia dodržiavať spoločné pravidlá – kam správy posielať a ako majú vyzerať. Tieto pravidlá opisuje tento dokument. Je spoločnou dohodou medzi zariadeniami, ktoré správy posielajú, a službami, ktoré ich spracovávajú.

Pripojenie k brokeru

Hlavný MQTT broker architektúry beží na serveri Mother:

  • adresa: mother.fei.tuke.sk
  • port: 8883
  • používateľské meno: student
  • heslo: dgRk9cQ8sU4fCO
  • šifrovaná komunikácia (TLS): áno

Zariadenia komunikujú pomocou protokolu MQTT vo verzii 3.1.1. Ako identifikátor klienta používajú svoj identifikátor zariadenia (device_id), ktorý musí byť v rámci brokera jedinečný.

Organizácia tém

Každá téma, do ktorej zariadenie posiela správy, má tento tvar:

<department>/<room>/<device_type>/<device_id>/<message_type>

Význam jednotlivých úrovní témy je nasledovný:

  • <department> – katedra, v ktorej sa zariadenie nachádza; pre nás vždy kpi,
  • <room> – názov miestnosti, v ktorej je zariadenie umiestnené (pozri zoznam miestností),
  • <device_type> – typ zariadenia, napr. thsensor,
  • <device_id> – jedinečný identifikátor zariadenia,
  • <message_type> – typ správy, napr. data alebo status (pozri typy správ).

Organizácia tém vychádza z prístupu Unified Namespace, v ktorom celá organizácia zdieľa jednu hierarchiu tém odrážajúcu jej štruktúru. Úrovne takejto hierarchie sú v priemysle zvyčajne odvodené od normy ISA-95 (podnik, závod, oblasť, výrobná linka, …). V našom prípade ide o katedru, miestnosť a zariadenie.

Príklad témy, do ktorej posiela namerané údaje chytrý senzor teploty a vlhkosti v miestnosti Endor:

kpi/endor/thsensor/ab123cd/data

Prefix tém

Zariadenie samo nevie, kde je nasadené. Prvé tri úrovne témy <department>/<room>/<device_type> preto tvoria tzv. prefix tém (<topic_prefix>), ktorý sa zariadeniu nastaví pri jeho inštalácii. Vďaka tomu je možné to isté zariadenie použiť v ľubovoľnej miestnosti, ale aj mimo architektúry Smart Department – napr. doma, kde mu stačí ako prefix samotný typ zariadenia:

thsensor/ab123cd/data

Základ tém

Prefix tém spolu s identifikátorom zariadenia tvoria tzv. základ tém (<base_topic>). Je spoločným začiatkom všetkých tém, do ktorých zariadenie posiela správy:

<department>/<room>/<device_type> / <device_id> / <message_type>
└──────── <topic_prefix> ───────┘
└──────────────── <base_topic> ───────────────┘

Zariadenie tak tému skladá vždy rovnako: <base_topic>/<message_type>, napr. kpi/endor/thsensor/ab123cd/data.

Pravidlá zápisu

Pre každú úroveň témy platí:

  • obsahuje len malé písmená bez diakritiky, číslice a znak -,
  • nesmie byť prázdna (téma teda nesmie obsahovať // a nesmie začínať ani končiť znakom /),
  • nesmie obsahovať zástupné znaky + a #.

Povolené témy

Broker na serveri Mother používa zoznam povolených tém (z angl. Access Control List, ACL). Prepustí preto len témy, ktoré dodržiavajú tvar <department>/<room>/<device_type>/<device_id>/<message_type>, teda majú päť úrovní a poslednou je povolený typ správy.

Správy do ostatných tém broker zahodí. Zariadenie sa o tom nedozvie, pretože odoslanie správy skončí bez chyby. Ak správa v klientskej aplikácii neprichádza, najprv skontrolujte tvar témy. Prefix tém thsensor z predchádzajúceho príkladu preto na tomto brokeri nefunguje.

Zoznam miestností

Miestnosti sa v témach označujú svojím názvom:

<room> Miestnosť
abydos A536
dune B529
endor B526
hyperion A512
kronos B524
meridian B519
nyx B501
romulus A534
solaris A532
vulcan A514

Typy správ

Všetky správy sú vo formáte JSON. Časové údaje sú reťazce vo formáte podľa normy ISO 8601 v časovom pásme UTC, napr. "2026-10-30T07:05:00Z".

<message_type> Obsah Kedy sa posiela QoS retain
data namerané údaje (telemetria) po každom meraní 0 nie
status stav zariadenia po pripojení, pred odpojením a ako posledná vôľa 1 áno
info informácie o zariadení po pripojení 1 áno

Telemetria (data)

Správa obsahuje všetky metriky, ktoré zariadenie odosiela naraz. Jej štruktúra je inšpirovaná špecifikáciou Sparkplug B (norma ISO/IEC 20237), ktorá pre priemyselný internet vecí definuje podobu tém a správ nad protokolom MQTT. Aj v nej má správa časovú značku a zoznam metrík, pričom každá metrika má svoj názov, časovú značku a hodnotu. Jedna správa tak môže niesť hodnoty rôznych veličín nameraných v rôznom čase, napr. keď zariadenie merania najprv ukladá a odošle ich až naraz.

Náš formát však so špecifikáciou Sparkplug B nie je kompatibilný. Tá používa vlastnú organizáciu tém a správy kóduje binárne pomocou Protocol Buffers, kým my používame čitateľný formát JSON.

Správa má tieto položky:

Položka Typ Povinná Význam
dt reťazec áno čas odoslania správy
metrics zoznam áno zoznam metrík

Každá metrika má tieto položky:

Položka Typ Povinná Význam
dt reťazec áno čas merania
name reťazec áno názov metriky, napr. temperature alebo humidity
value číslo áno nameraná hodnota
units reťazec nie kód jednotky nameranej hodnoty podľa štandardu SenML, napr. "Cel" (pozri zoznam metrík)

Okrem nameraných veličín môže zariadenie rovnakým spôsobom posielať aj metriky o sebe samom, napr. stav batérie alebo silu signálu WiFi.

Položka units obsahuje vždy kód jednotky, v ktorej je hodnota uvedená. Kódy jednotiek sú prevzaté zo štandardu SenML (RFC 8428), ktorý ich definuje v registri organizácie IANA. Na rozdiel od značiek, ako napr. °C, obsahujú len znaky ASCII a každá jednotka má práve jeden kód. Odberateľ tak vie hodnotu správne zobraziť bez toho, aby poznal nastavenia zariadenia. Metriky, ktoré jednotku nemajú (napr. počet), položku units neobsahujú.

Príklad správy:

{
  "dt": "2026-10-30T07:05:00Z",
  "metrics": [
    {
      "dt": "2026-10-30T07:00:00Z",
      "name": "temperature",
      "value": 23.4,
      "units": "Cel"
    },
    {
      "dt": "2026-10-30T07:00:00Z",
      "name": "humidity",
      "value": 70,
      "units": "%RH"
    }
  ]
}

Zoznam metrík

Aby bolo možné porovnávať údaje z rôznych zariadení, používajú zariadenia pre rovnaké veličiny rovnaké názvy metrík a jednotky:

name Veličina units
temperature teplota "Cel"
humidity relatívna vlhkosť "%RH"
pressure atmosférický tlak "hPa"
battery stav batérie "%EL" alebo "V"
rssi sila signálu WiFi "dBm"

Teplotu posielajú zariadenia vždy v stupňoch Celzia, pretože pre stupne Fahrenheita štandard SenML kód nedefinuje.

Stav zariadenia (status)

Správa informuje o dostupnosti zariadenia. Posiela sa s príznakom retain, aby sa posledný známy stav zariadenia dozvedel aj ten, kto sa prihlási na odber neskôr. Má tieto položky:

Položka Typ Povinná Význam
dt reťazec nie čas zmeny stavu; v poslednej vôli má hodnotu null
status reťazec áno stav zariadenia

Stav zariadenia môže mať tieto hodnoty:

Stav Význam Kto ho posiela
online zariadenie je pripojené zariadenie hneď po pripojení k brokeru
sleeping zariadenie sa korektne odpojilo a spí zariadenie pred odpojením od brokera
offline spojenie so zariadením sa neočakávane prerušilo broker ako poslednú vôľu zariadenia

Príklad správy po pripojení zariadenia:

{
  "dt": "2026-10-30T07:05:00Z",
  "status": "online"
}

Posledná vôľa sa nastavuje už pri pripájaní, preto čas neobsahuje:

{
  "dt": null,
  "status": "offline"
}

Informácie o zariadení (info)

Správa obsahuje informácie o zariadení, ktoré sa menia len zriedka, napr. po aktualizácii jeho softvéru. Posiela sa s príznakom retain po pripojení k brokeru. Má tieto položky:

Položka Typ Povinná Význam
dt reťazec áno čas odoslania správy
device_type reťazec áno typ zariadenia, napr. thsensor
version reťazec áno verzia softvéru zariadenia
micropython reťazec nie verzia firmvéru MicroPython, ak ho zariadenie používa
ip reťazec áno IP adresa zariadenia v sieti

Typ zariadenia je síce súčasťou prefixu tém, ale prefix sa dá ľubovoľne nastaviť. Položka device_type preto jednoznačne určuje, o aké zariadenie ide.

Príklad správy:

{
  "dt": "2026-10-30T07:05:00Z",
  "device_type": "thsensor",
  "version": "2026.11",
  "micropython": "1.27.0",
  "ip": "192.168.1.42"
}

Ďalšie zdroje

  1. Eclipse Foundation: Sparkplug - špecifikácia tém a správ MQTT pre priemyselný internet vecí, z ktorej vychádza štruktúra správ s nameranými údajmi

  2. Eclipse Foundation: The Eclipse Foundation Announces Sparkplug as an International Standard - oznámenie o vydaní špecifikácie ako normy ISO/IEC 20237

  3. HiveMQ: Breaking Down MQTT Sparkplug Payload Structures in IIoT Messaging - štruktúra správ v priemyselnom internete vecí

  4. HiveMQ: Implementing Unified Namespace (UNS) With MQTT Sparkplug - prístup Unified Namespace a jeho vzťah k špecifikácii Sparkplug

  5. Wikipedia: ANSI/ISA-95 - norma, od ktorej sa zvyčajne odvodzujú úrovne hierarchie tém