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.
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.
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.
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é.
Č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.
Pingback: Co je Home Assistant - Vysvětlení od nováčka, který je o krok před vámi