blog.vyoralek.cz

MQTT server Mosquitto na NAS Synology

NAS od Synology se hodí na poustu věcí a jednou z nich je například možnost provozovat na něm jednoduchý MQTT server jako Mosquitto.

Instalace z balíčků

Mosquitto není součástí standardních balíčků a tak pokud jsme to už neudělali dříve musíme neprve přidat zdroj balíčků ze stránek synocommunity.com

V seznamu balíčků si pak najdeme Mosquitto a nainstalujeme běžným způsobem. Po instalaci bude služba ve stavu „Zastaveno“ a pokud se ji pokusíme ručně spustit tak dostaneme informace, že „Služba balíčku nebyla spuštěna“.

Úprava skriptu pro úspěšný start

Přihlasíme se přes ssh klienta na Synology a do shellu dáme následující příkazy:

cd /var/packages/mosquitto/scripts
sudo vi start-stop-status

a ve skriptu start-stop-status zakomentujeme řádek s názvem uživatele:

#!/bin/sh

# Package
PACKAGE="mosquitto"
DNAME="Mosquitto"

# Others
INSTALL_DIR="/usr/local/${PACKAGE}"
PATH="${INSTALL_DIR}/bin:${PATH}"
#USER="mosquitto" <--- TENTO RADEK ZAKOMENTUJEME
MOSQUITTO="${INSTALL_DIR}/sbin/mosquitto"
PID_FILE="${INSTALL_DIR}/var/mosquitto.pid"
CFG_FILE="${INSTALL_DIR}/var/mosquitto.conf"

Vrátíme se do menu s balíčky a pokusíme se spustit službu znovu a nyní by už mělo být vše vpořádku

Konfigurace

Ukážeme si jak změnit nastavení tak, aby bylo nutné se k MQTT přihlašovat pomocí uživatelského jména a hesla.

Hlavní konfigurační soubor mosquitto.conf se nachází ve složce /usr/local/mosquitto/var a upravíme jej takto:

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

Oba klíče by už v souboru měly být, takže je stačí odkomentovat a nastavit hodnoty.

Přepneme se do adresáře /usr/local/mosquitto/bin a zadáme příkaz:

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

a poté budete vyzváni k zadání hesla.  Pro aplikování změn zrestartujeme Mosquitto prostřednictvím správce balíčků.

Otestování konfigurace

Pro odzkoušení, že jsme vše nastavili správně potřebujeme nějakého MQTT klienta. Já používám MQTT.fx, který je multiplatformní a poměrně dobře se s ním dělá.

Nejprve nastavíme parametry MQTT Brokeru a vyplníme i záložku „User Credentials“, kam zadáme jméno uživatele a heslo, které jsme si vygenerovali výše.

Pokud vše funguje měli bychom po stisknutí na „Connect“ vidět vpravo zelenou bublinu.

Status si můžeme ověřit i pomocí obrazovky „Broker Status“.

Abychom si vyzkoušeli i opačný scénář, tj. že v případě špatných přistupových údajů se nebudeme schopni na MQTT brokera napojit změníme konfiguraci na nesprávný údaj v uživatelském jméně nebo hesle.

Měli bychom dostat informaci, že uživatel nebyl autorizován a spojení bylo odmínuto – červená bublina vpravo.

33 comments

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

  • Dobry den,
    na toto tema je i na youtube video. Provedl jsem podle neho, ale po zadani ssh user@ip_address a napsani hesla mi DS oznami „Permission denied, please try again“.
    zkousel jsem i prihlaseni pres noveho uzivatele ssh svc-mosquitto@ip_address (heslo jsem zmenil, abych ho znal), ale vysledek je tentyz.
    mam povolenou SSH sluzbu na portu 22 u Terminal and SNMP.

    co s tim? dekuji za radu.

    • Dobrý den,
      hmm zajímavé. Předpokládám povolenou službu máte přes „Ovládací panely->Terminál a SNMP->Terminál“ a volbu „Povolit službu SSH“ že? To by mělo být snad dostatečné. Možná ještě uživatel musí být administrátor, čili koukněte zda je ten váš ve skupině administrators.
      A ještě jeden dotaz. Používal jste jiného uživatele než root že? Jelikož při rootovi mi to píše tu stejnou chybu.
      J.

  • Zdravím, návod super jen prosim o radu jak konfigurovat server dal. Kde prosím mohu definovat jmena, hesla…? Děkuji

    • Díky za podnět. Původní článek jsem rozšířil o návod jak nastavit uživatelskou autentifikaci. Kdyby Vám v článku ještě něco chybělo tak dejte vědět.

  • Za rozšíření návodu mockrát děkuji 🙂 krásná práce. I tak jsem se ale zasekl na přidání uživatele:

    login as: admin
    [email protected]‚s password:
    admin@RohlikNAS:/$ cd /usr/local/mosquitto/bin
    admin@RohlikNAS:/usr/local/mosquitto/bin$ sudo ./mosquitto_passwd -c
    Password:
    mosquitto_passwd is a tool for managing password files for mosquitto.

    Usage: mosquitto_passwd [-c | -D] passwordfile username
    mosquitto_passwd -b passwordfile username password
    mosquitto_passwd -U passwordfile
    -b : run in batch mode to allow passing passwords on the command line.
    -c : create a new password file. This will overwrite existing files.
    -D : delete the username rather than adding/updating its password.
    -U : update a plain text password file to use hashed passwords.

    See http://mosquitto.org/ for more information.

    admin@RohlikNAS:/usr/local/mosquitto/bin$ /usr/local/mosquitto/etc/mosquitto/pwf ile
    -sh: syntax error near unexpected token `newline‘
    admin@RohlikNAS:/usr/local/mosquitto/bin$ /usr/local/mosquitto/etc/mosquitto/pwfile
    -sh: syntax error near unexpected token `newline‘
    admin@RohlikNAS:/usr/local/mosquitto/bin$

    • Když na to tak koukám, tak důvodem mohlo být jedno z následujícího:

      1. příkaz pro vytvoření hesla byl poněkud nešikovně zalomený na dva řádky – upravil jsem nastavení na blogu tak, aby se to nedělo a přidal se raději posuvník
      2. při zkopírování se do textu nějak dostal ještě navíc znak nového řádku

      Zkuste to tedy příkaz zkopírovat znovu a pokud to nepomůže tak ručně přepsat. Možná to dělá skutečně jen neplechu při zkopírování.

      • Zdravím, perfektní článek, díky za něj. Zasekl jsem se na přidání uživatele, po zadání vašeho příkazu:
        sudo ./mosquitto_passwd -c /usr/local/mosquitto/etc/mosquitto/pwfile

        Mi to vyhodí chybu:
        -sh: syntax error near unexpected token `newline‘

        Nějaký nápad?
        Děkuji
        Vojta

        • Nevidím v tom vašem příkazu název uživatele. Zkuste to spustit kompletně, tj. např. pokud uživatel bude mít název „nas“ pak příkaz by byl:
          sudo ./mosquitto_passwd -c /usr/local/mosquitto/etc/mosquitto/pwfile nas

  • Dobrý den, právě jsem na Synology NAS instaloval Mosquitto verze 1.4.14-9 a ten se okamžitě spustil. Nebylo potřeba žádnou úpravu. Domoticz se dle vašeho návodu také spustil. Nahrál jsem fw Tasmota do Sonoff basic, ale pokud ho vytáhnu ze zásuvky, tak v Domoticzu svítí pořád jako on-line. Prostě jsem nanstaloval Domoticz, MQTT a všechno šlo napoprvé. Prosím o nakopnutí, jak odstranit tuto chybu, děkuji.

    • Skvělá zpráva, že Mosquitto už šlape rovnou 🙂 Co se týče vašeho problému. Já tady tuším žádný článek k Domoticzu nemám, nebo ano? Nemám s tímto systémem žádné zkušenosti – víceméně odzačátku jsem používal HomeAssistant. Podle vašeho popisu se obvávám, že ten problém bude spíše na straně Domoticz než Tasmoty :(, ale fundovaně odpovědět neumím.

      • Zdravím, měl bych dotaz k Mosquitto a HomeAssistant. Mosquitto mi běží, ovlánání bez problému, ale občas se stane, že se nějaký výstup ze zařízení Sonof s Tasmotou se opakovaně sám zapíná. Můžeto bý způsobeno, že nemám Mosquitto se zařízeními Sonoff přihlášené přes heslo u uživatelské jméno? Děkuji. Pepa

        • Tuším, že by zrada v přístupu bez hesla neměla být. Samotnému se mě to občas stalo – tak jednou za 14dní a než jsem po tom začal pátrat tak jsem přešel na ESPHome. Jak často se vám to děje?

          • Když vypnu a zachvíly zapnu Mosquitto tak mám třeba na den dva klid, ale pak se to stává několikrát za den a vetšinou se to stává na jednom určitém výstupu. Ale jednou za čas (2-3 za týden) se to stane i na jiných výstupech, více méně na náhodných výstupech. Mám celkem cca 35 výstupů. Ale když jsem si nastavil výstup jako tlačítko s impulzem na 2s (ovládání vjezdové brány) tak v tomto případě se samovolně spínal i 10-15 za den, zkušel jsem to i na ruzných zařízeních Basic, Wemos D1 mini, 4 Ch a všude to bylo stejné, neustálé samovolné spínání.

          • Zkusil bych se připojit na MQTT pomocí třebas MQTT.fx aplikace a dát subsribe na jedno zařízení – popř. i více ale zase abyste tam pak toho neměl moc a z logu zpráv by pak mohlo jít odvodit, kde ten problém nastává. Např. jestli nedochází k restartu těch zařízení.

          • A kdyz se vam to stavalo mel jste pripojeni Mosquitto-Sonoff pod heslem?

          • Ano, měl. Byl to pravda divný pocit když se to samo seplo během noci a svítila lampa. Člověk začne trochu pochybovat, zda mu to někdo neovládá. Mate ten MQTT na synology nasce?

          • Ano na Synology. Mam tento problem od zacatku co jsem presel na Tasmotu. Mam pres Sonoff ovladany skoro cely dum a dost me to ted znepokojuje kdyz se mi v noci rozsvici svetlo v loznici a v detskych pokojich 🙁 hledam po netu nejake reseni ale zatim bez uspechu.

          • Jj, chápu. Nic konkrétního mě takhle nenapadá. Šel bych na přes logovani a zkusil tam najít příčinu. A nebo šílenější varianta přejít na ESPHome 🙂

      • Jak moc je narocny prechod na ESPHome? Predpokladam ze bude potreba prepsat cely config home assistanta..?

  • Dobrý den, děkuji Vám za vaše články, jsou velice inspirující.
    V balíčcích na „synocommunity.com/packages“ jsem našel beta verzi Home Assistant:
    https://synocommunity.com/package/homeassistant
    Nemáte s tím nějakou zkušenost? Po instalaci se Home Assistant spustí, ale nedokáži se do něj přihlásit, protože asi neznám správné jméno a heslo.
    Děkuji
    BB

    • Dobrý den, zajímavé. Já kdysi HomeAssistant zkoušel dostat na Synology NAS, podle návodu na Homeassistant webu, ale odradila mě tahle věta:

      Synology only provide Python 3.5.1, which is not compatible with Home Assistant 0.65.0 or later.

      A koukám, že je to s verzí Pythonu na NASu stále stejné. Otázka je tedy jak to dělá váš uvedený balíček, jelikož má očividně novější verzi HA než 0.65. Na druhou stranu je tohle trochu cesta do pekel, jelikož jste pak hodně závislý na balíčku pro Synology, které bohužel nebývají zrovna nejčerstvější. Z podobného důvodu jsem přestal používat na NASu i Ubiquiti controller.

      Je škoda, že ten NASový systém od Synology není nějaký univerzálnější, že by si tam člověk doinstaloval co potřebuje, jelikož HW je to supr stabilní. Jediným řešením jsou asi ty vyšší verze, které podporují docker kontejnery, ale to už je cenově dost šílené.

      Nějak jsem se rozepsal a trochu odbočil takže ve zkratce s tímhle balíčkem zkušenosti nemám.

  • Dobrý den,
    jsem nováček v tomto, udelal jsem

    cd /var/packages/mosquitto/scripts
    sudo vi start-stop-status

    za asekl jsem se v instalaci u textu:

    „ve skriptu start-stop-status zakomentujeme řádek s názvem uživatele“

    Vůbec nevím co tím autor myslel nebo jak s tím dále naložit?

  • dobrý den,
    instalaci jsem provedl podle návodu, ale při spuštění MQTT FX se mi spouští ať zadám uživatele nebo bez? …vždy zelená bublinka, což je zřejmě špatně…co dělám špatně?

    • Dobrý den, jestli to dobře chápu, jde vám o to, že vám nefunguje přihlašování na základě uživatele, resp. to tyto údaje ignoruje?

      • přesně tak, vytvořil jsem uživatele „X“ s heslem „Y“ do souboru „pwfile“, v configu jsem aktivoval pravidlo „allow_anonymous false“ a zároveň jsem zde nastavil odkaz na soubor s nově vytvořeným uživatelem „password_file /usr/local/mosquitto/etc/mosquitto/pwfile“.

        Ale v MQTT FX i když zadám uživatele „A“ s heslem „B“, nebo nechám políčka prázdná, tak se vpohodě připojí.

        • Kouknul jsem na to a nic jiného v konfiguračním souboru u mě nevidím a funguje chová se to jak je to v článku. Napadá mě snad jedině jestli jste po nastavení NAS či tuto službu restartoval, ale to předpokládám že ano. Nic dalšího tam nevidím 🙁

          • tak nevím v čem byl bug, ale po 2. restartu NASu a následném zastavení a spuštění MQTT serveru se to rozběhlo korektně, kdy je vyžadován autorizovaný uživatel….každopádně díky support