MQTT MQTT broker pro soutěž NAG-IoT

Nastavení brokeru

Na soutěžním serveru je připraven MQTT broker, který je nastaven pro potřeby soutěže. Je zde implementováno přihlašování. Anonymní přihlášení není povoleno.

Přihlášení
Uživatel tym-X
Heslo API klíč týmu
Topic tym/X/proměnná

Při přihlašování k brokeru nahraďte X za číslo týmu. API klíč týmu je stejný jako při přihlašování k administraci týmu nebo k API.

Název topicu je vždy tym/X/proměnná, kde X je číslo týmu a proměnná je název proměnné. Při zadávání názvu proměnné dbejte na správnou velikost písmen.

Komunikace s brokerem je povolena pouze přes šifrovaný kanál na portu 8883. Nešifrovaná komunikace není povolena.

Broker podporuje verzi protokolu MQTT 3.1 a 3.1.1.

Správa topiců

Každý tým má automaticky vytvořený seznam topiců, které může odebírat a do kterých může publikovat.

Publikovat a zároveň odebírat můžete libovolné topicy začínající na tym/X/. Publikované hodnoty se ukládají pouze u topiců, pro které je založena proměnná týmu.

Při vytvoření nové proměnné týmu z administrace týmu, případně přes API, se vytvoří automaticky nový topic.

Odebírat můžete i všechny veřejné topicy ostatních týmů, tj. proměnné, které jsou zobrazeny v mapě.

Zrušení topicu se provede smazáním proměnné.

Propojení s API

MQTT broker je propojen s API. Při zápisu hodnoty do proměnné přes API se zároveň provede publikování hodnoty i do příslušného topicu.

Obdobně to funguje i opačně. Při publikování do topicu jsou data vyhodnocena a uložena do proměnné. Uložení je provedeno pouze v případě, že je do topicu publikována číselná hodnota nebo JSON objekt obsahující položku value s číselnou hodnotou. Příklad JSON objektu, který bude uložen:

{
    "value": 1.23
}

Publikování hodnot do topiců je omezeno na API v2.

Příprava klienta

Pro prvotní seznámení se s prací s MQTT brokerem jsme připravili krátký návod na odzkoušení na platformě Raspberry Pi. Návod zahrnuje pouze instalaci a základní práci s MQTT klientem.

Instalace

Instalaci MQTT clienta je možné provést následujícím příkazem:

sudo apt install mosquitto-clients

Po instalaci budete mít dostupné programy mosquitto_sub a mosquitto_pub.

Instalovaná verze balíku pro Raspbian je 1.4.10. Ve verzi 1.4.12 nebo starší, je nutné u předcházejících příkladů použít navíc přepínač -i nebo -I ke změně identifikátoru klienta. Ve verzi 1.4.12 a starších obsahuje výchozí hodnota pro identifikátor klienta znak /, který není brokerem v identifikátoru klienta povolen. Zakázané znaky v identifikátoru klienta jsou +#/.

Pozor také na to, že není možné souběžné připojení dvou klientů se stejným identifikátorem klienta. Při připojení více klientů je tedy nutné zajistit unikátní identifikátor klienta pro každého z nich. Vhodné je použití přepínače -I, který nastaví prefix identifikátoru klienta.

Přihlášení se k odběru topicu

Odběr topicu je možné vyzkoušet následujícím příkazem:

mosquitto_sub -h mqtt.nag-iot.zcu.cz -p 8883 --capath /etc/ssl/certs/ -I rpi- -u tym-X -P API_klíč -t tym/X/proměnná

Více podrobností o příkazu mosquitto_sub naleznete na manuálové stránce.

Publikování hodnoty do topicu

Pro odzkoušení publikování proměnných na MQTT broker je rovněž možné využít nástroj z balíku mosquitto-clients:

mosquitto_pub -h mqtt.nag-iot.zcu.cz -p 8883 --capath /etc/ssl/certs/ -I rpi- -u tym-X -P API_klíč -t tym/X/proměnná -m 1.23

Více podrobností o příkazu mosquitto_pub naleznete na manuálové stránce.

Použití v úlohách

MQTT broker je možné využít pro ukládání hodnot namísto API, případně je možné jej využít pro rychlou reakci na změnu hodnoty proměnné. Jelikož je možné do proměnné publikovat libovolnou (i nečíselnou) hodnotu, je možné využít broker pro zprostředkování komunikace mezi více klienty.

Knihovny

Pro použití MQTT na koncovém zařízení je možné využít některou z již existujících knihoven. Knihovnu volte dle vlastního uvážení.

Seznam dostupných knihoven naleznete na Wiki stránce GitHub projektu MQTT.

Při výběru knihovny je vždy nutné dbát na to, aby knihovna implementovala přihlašování uživatelů, podporovala šifrovanou komunikaci a uměla verzi protokolu MQTT 3.1 nebo 3.1.1.