Zavlažování zahrady - MQTT server na Synology DS218 Play

Pro moje zavlažování zahrady (a jiné projekty) jsem potřeboval vytvořit MQTT server. Používám síťové uložiště Synology NAS DS218 Play, které je v provozu 24 hodin/ 7 dní v týdnu. Rozhodl jsem se pro použití MQTT serveru na tomto NASu. Ano mohl bych použít i například Raspberry Pi (a na něm spustit MQTT server), ale je to další zbytečná krabička (proč nevyužít stále běžící NAS uložiště).

MQTT server budu dále používat i jako broker pro OSPy plugin (MQTT SLAVE) pro vzdálené (podružné) ovládání zavlažovacího systému. Jeden hlavní systém (master) ovládá spousty podružných (slave) OSPy desek.

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í zprávy do různých skupin (topic). 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íce info o MQTT je například zde https://www.root.cz/clanky/protokol-mqtt-komunikacni-standard-pro-iot/ nebo zde mqtt.org.

Instalace MQTT serveru na NAS DS218 Play

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íčku 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íme zelený nápis "spuštěno". Rovnou zde klineme na tlačítko "zastavit". Níže budeme zasahovat do konfiguračního souboru a mohlo by to zlobit.

Ve výchozím nastavení je Mosquitto nastaveno tak, aby se k němu mohl připojit kdokoliv. To není moc bezpečné. Aby s MQTT brokerem mohl komunikovat jen 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ímto je 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é.

Nyní máme připraveno vše ke změně nastavení konfiguračního souboru Mosquitto. Otevřeme terminál (například oblíbený Putty) a připojíme se přes ssh. Pokud vše proběhne správně, vidíme v terminálu Test@SynologyDS218: To znamená, že jsme přihlášeni jako uživatel "Test". 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 (něco nerozbijeme v systému). 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 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 broker Mosquitto jsme tedy zprovoznili, teď ho otestujeme. K tomu použijeme aplikaci například MQTT.fx. Je k dispozici na všechny operační systémy a nalezneme na ni spoustu návodů. Nejprve musíme spustit nastavení, aby klient věděl, kam se připojit. Klikneme na ozubené kolo.

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.

Pokud jsme vše nastavili správně, na pravé straně se nám rozsvítí zelené světýlko. 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 naší skupiny.

Přepneme se na kartu Subscribe, kde je připravená stejná skupina. 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.

A to je z testu všechno. 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.

Příklad výpisu z Broker Status (kolik zpracoval zpráv za cca měsíc provozu).

 

Nastavení pluginu "MQTT Zone Broadcaster" v OSPy systému

Pokud již máme zprovozněný MQTT server (Broker), tak do něho můžeme odesílat stav všech stanic nadřízeného OSPy systému.

Nejprve do OSPy systému nainstalujeme pomocí správce doplňků pluginy MQTT a MQTT Zone Broadcaster.

Následně v pluginu MQTT zadáme:

  • IP adresu našeho Synology NAS (hostitel)
  • uživatelské jméno k Brokeru
  • heslo k Brokeru
  • port (pokud používáme jiný než je výchozí 1883)
  • téma zpráv pro publikování (do tohoto tématu se odesílá stav přihlášeného OSPy UP=OSPy běží, DOWN=OSPy neběží)

Pokud chceme zveřejnit i stav všech stanic, tak spustíme plugin "MQTT Zone Broadcaster" a vyplníme téma zpráv do kterého chceme publikovat. K publikování dojde při každé změně stavu výstupů.

Dalším krokem by bylo nastavit MQTT klienta pro příjem zpráv v podřízeném OSPy systému, nebo v jiném systému naší domácí automatizace.