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.