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

Činnosti v prohlížeči

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

Činnosti v terminálu

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

Jak ovládat editor vi

Pro aktivování funkcí editoru vi stiskneme klávesu “ESC”, tím se nám dole v editoru zobrazí příkazový řádek, do kterého můžeme psát. Zadáváme příkaz, který potřebujeme a nakonec stiskneme ENTER.

Vyhledávání

/allow_anonymous hledá následující výskyt řetězce “allow_anonymous”
?allow_anonymous hledá předchozí výskyt řetězce “allow_anonymous”
n (next) opakuje poslední hledání
N (Next) opakuje poslední hledání směrem zpět

:wq uložení změn a ukončení editoru
:q! zkončení editoru bez uložení změn

V konfiguračním souboru odkomentujeme a upravíme řádky 513 a 555 tak, aby vypadaly následovně. Zjistil jsem, že v závislosti na verzi se číslo řádků liší. Použijte vyhledávací příkazy editoru vi a nastavte následující hodnoty.

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

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.

Nezapomeňte v Ovládací panel > Terminál a SNMP > Terminál opět zakázat přístup přes službu SSH!

Testování komunikace pomocí MQTT klienta

MQTT broker Mosquitto jsme tedy zprovoznili, teď už ho jen zbývá otestovat. V předchozí verzi článku jsem popisoval, jak k tomu účelu použít aplikaci MQTT.fx. Ta bohužel od ledna 2021 změnila vývojáře a nyní je k dispozici pouze jako placený nástroj. Pro naše domácí testování je tedy na čase najít jiného vhodného kandidáta.

Po velmi krátkém hledání jsem se rozhodl pro MQTT-Explorer. Opět je k dispozici na všechny operační systémy a já tentokrát využil portable verzi pro Windows.

Ihned po spuštění programu se zobrazí okno s nastavením připojení.

Profil připojení si nějak pojmenujeme a 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. Do políček Username a Password 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.

Pokud jsme vše nastavili správně, na pravé straně se nám zeleně rozsvítí ikona, signalizující, že jsme online. Protože se připojuji k již běžící chytré domácnosti, v levé části okna vidím, že existují nějaká témata a zprávy.

Nemusíme provádět žádné složité testy. Stačí v kartě “Publish” vymyslet libovolné téma a odeslat testovací zprávu. Ta se ihned objeví v levé části aplikace, jako přijatá zpráva.

A to je vše. Mosquitto již zůstane stále zapnuté a MQTT-Explorer 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.

Pokud si nejste jisti, co teď dál, zkuste přes MQTT připojit třeba chytrou zásuvku. Můžete to zkusit třeba podle mého návodu Jak nahrát vlastní software Tasmota do chytré zásuvky WETO W-T05.

1 názor na “Jak zprovoznit MQTT server Mosquitto na Synology DS218”

  1. Pingback: Co je Home Assistant - Vysvětlení od nováčka, který je o krok před vámi

Diskuse uzavřena.