Jak zprovoznit MQTT server Mosquitto na Synology DS218

Začal jsem stavět chytrou domácnost. Nemám s tím žádné zkušenosti a návody, které nacházím, jsou vždy jen na kousek problému, který se objeví. Proto si vytvářím tyto zápisky, abych v případě problémů mohl začít od začátku. Tento příspěvek je o tom, jak jsem zjistil, co je protokol MQTT a jak se přes něj komunikuje. Bude to základ pro celý můj chytrý dům, pro internet věcí a pro komunikaci mezi zařízeními.

Již nějakou dobu měřím množství vody ve studni. Spustím tam metr připevněný na dřevěné lati, která má dole závaží. Podle mokré stopy na lati vidím, kolik vody je ve studni. Naměřenou hodnotu zapisuji do android aplikace ECAS, kam občas zapíšu stav elektroměru a plynoměru. Jednoduché, funkční, geniální. A taky časově náročné. Celou dobu přemýšlím nad tím, jak tuto činnost zautomatizovat. Pročetl jsem soustu návodů, viděl různé možnosti řešení, ale žádné řešení nebylo podle mých představ. Navíc, čím více informací jsem získával, tím více funkcí jsem přidával. Nakonec jsem zjistil, že si chci vybudovat chytrou domácnost.

Jednotlivá zařízení mezi sebou budou komunikovat prostřednictvím protokolu MQTT. Celé to funguje tak, že připojená zařízení publikují zprávy a čtou zprávy. Na základě zpráv pak vykonávají různé činnosti. Aby v tom byl přehled, publikují do různých skupin. Jak jsou skupiny pojmenovány a kolik jich je, záleží jen na tvůrci celé aplikace. Jen je potřeba si vymyslet nějaký systém. Kromě jednotlivých zařízení, je potřeba ještě MQTT server (MQTT broker). To je místo, kam všechna zařízení publikují svoje zprávy a zároveň odtud také zprávy čtou. Vše, co jsem o MQTT komunikaci potřeboval vědět, jsem se dozvěděl z článku Protokol MQTT: komunikační  standard pro IoT.

Instalace Mosquitto na Synology NAS

Protože mám doma NAS od Synology, rozhodl jsem se mu přidat další užitečnou funkci. Tou je zmiňovaný MQTT broker. Nejpoužívanější je aplikace Mosquitto. Ta bohužel není součástí standardních balíčků a proto musíme v Synology > Centrum balíčků > Nastavení > Zdroje balíčků přidat další zdroj balíčků z webu synocommunity.com.

Přidání zdroje balíčků do Synology DMS

Po přidání dalšího zdroje balíčků vyhledáme balíček Mosquitto a nainstalujeme ho běžným způsobem. Po instalaci balíčku uvidíte zelený nápis „spuštěno“. Rovnou zde klineme na tlačítko „zastavit“. Budeme totiž zasahovat do konfiguračního souboru, tak ať nám v tom běžící Mosquitto nedělá neplechu.

Nainstalovaný balíček Mosquitto

Ve výchozím nastavení je Mosquitto nastaveno tak, aby se k němu mohl připojit kdokoliv. To se mi nezdá moc bezpečné. Aby s mým MQTT brokerem nemohl komunikovat jen tak někdo, změníme konfigurační soubor tak, aby přihlášení vyžadovalo jméno a heslo.

Z bezpečnostních důvodů je přístup do Synology pro uživatele root omezen. Zároveň je ve výchozím nastavení vypnutý přístup přes SSH. Pro povolení přístupu uživatele root prostřednictvím SSH připojení přejdeme v Synology na Ovládací panel > Terminál a SNMP > Terminál a zaškrtneme pole Povolit službu SSH. Po provedení všech změn doporučuji přístup přes SSH opět deaktivovat.

Povolení SSH přístupu

Tím je veškeré nastavení uvnitř Synology hotové. Když už máme otevřenou Synology aplikaci, tak se podíváme, na jaké IP adrese je Synology připojené.

IP adresa Synology

Nyní máme připraveno vše ke změně nastavení konfiguračního souboru Mosquitto. Otevřeme terminál a připojíme se přes ssh uživatelské_jméno@IP_adresa_Synology a následně zadáme heslo. Je to uživatelské jméno a heslo, přes které jsme se před chvilkou přihlašovali do Synology. V mém případě píšu do terminálu

ssh TataGEEK@192.168.0.106

Pokud vše proběhne správně, vidíme v terminálu TataGEEK@SynologyDS218: To znamená, že jsme přihlášeni jako uživatel TataGEEK. Pro úpravy konfiguračního souboru potřebujeme získat oprávnění superuživatele root. Ty získáme zapsáním příkazu sudo -i

sudo -i

Terminál nás upozorní, ať získané „superschopnosti“ nezneužijeme a ať dáváme pozor, ať si nic nepoškodíme. Nakonec zapíšeme heslo (stejné jako heslo prvního uživatele na Synology) a naše uživatelské jméno se změní na root@SynologyDS218.

Konfigurační soubor nalezneme v usr/local/mosquitto/var/mosquitto.conf Přepneme se tam přepneme pomocí

cd ../usr/local/mosquitto/var/

Jediný předinstalovaný textový editor, který máme k dispozici, je editor vi https://cs.wikipedia.org/wiki/Vi_(editor) . Tím upravíme konfigurační soubor.

vi mosquitto.conf

V konfiguračním souboru odkomentujeme a upravíme řádky 513 a 555 tak, aby vypadaly následovně

allow_anonymous false
password_file /usr/local/mosquitto/etc/mosquitto/pwfile

Po provedení úprav stiskneme klávesu „ESC“ a pak dvojtečku, tím se nám dole v editoru zůstane zobrazený příkazový řádek. Pak napíšeme wq. Takže po sobě stiskneme :wq a stiskneme „ENTER“. A máme hotovo. Pokud chceme editor ukončit bez uložení změn, stiskneme „ESC“, dvojtečku, klávesu „q“, pak vykřičník a nakonec „ENTER“.

Tím jsme k MQTT brokeru povolili přístup jen pro konkrétní uživatele s heslem. Nyní potřebujeme uživatele vytvořit a přiřadit jim heslo. Přepneme se do adresáře /usr/local/mosquitto/bin pomocí

cd ../usr/local/mosquitto/bin/

A spustíme příkaz k vytvoření nového uživatele, kde část <uzivatel> nahradíme uživatelským jménem. Následně jsme vyzváni k zadání hesla, které uživatel bude používat. Pro odstranění překlepů musíme zadat vybrané heslo jednou.

sudo ./mosquitto_passwd -c /usr/local/mosquitto/etc/mosquitto/pwfile <uzivatel>

Tím pro nás nastavování aplikace Mosquitto končí a ve správci balíků můžeme Mosquitto opět spustit.

Testování komunikace pomocí MQTT klienta MQTT.fx

MQTT broker Mosquitto jsme tedy zprovoznili, teď už ho jen zbývá otestovat. K tomu použijeme aplikaci MQTT.fx. Je k dispozici na všechny operační systémy a nalezneme na ni spoustu návodů. Protože používám Ubuntu, stáhnul jsem soubor s příponou .deb, což je zkompilovaný balíček pro Debian (kompatibilní s Ubuntu). Instalaci spustíme dvojklikem na stažený soubor a o vše další se už postará správce balíčků.

Nejprve musíme spustit nastavení, aby klient věděl, kam se připojit. Klikneme na ozubené kolo.

Nastavení aplikace MQTT.fx

Profil připojení si nějak pojmenujeme, zadáme IP adresu, na které je připojeno Synology. Protože jsme četli v úvodu odkazovaný článek Protokol MQTT: komunikační  standard pro IoT, tak už víme, že Broker Port je 1883. Jako Client ID můžeme dát libovolný název nebo klikneme na vygenerování řetězce.

V záložce User Credentials napíšeme uživatelské jméno a heslo, které jsme v terminálu vytvořili. Po uložení již můžeme kliknout na tlačítko Connect.

Připojení k MQTT brokeru

Pokud jsme vše nastavili správně, na pravé straně se nám rozsvítí zelené světlýko. Zároveň jsme přepnuti v záložce Publish, tak rovnou napíšeme nějakou zprávu a kliknutím na tlačítko „Publish“ ji odešleme do skupiny předpřipravené skupiny home/garden/fountain.

Publikování testovací zprávy

Přepneme se na kartu Subscribe, kde je připravená stejná skupina home/garden/fountain. Zde klikneme na tlačítko „Subscribe“, čím se přihlásíme k odběru zpráv v této skupině. V okně níže pak vidíme publikované zprávy.

Příjem testovací zprávy

A to je vše. Mosquitto již zůstane stále zapnuté a MQTT.fx spustíme vždy, když budeme chtít ověřit, zda naše zařízení a kódy fungují tak, jak od nich požadujeme.