COS’E’ MOSQUITTO
Mosquitto (Message Queue Telemetry Transport) è un protocollo di rete molto leggero, realizzato con l’idea di utilizzare il meno possibile la banda internet in modo che i device possano comunicare informazioni tra di loro il più velocemente possibile e quindi ottimizzare il risparmio energetico. Infatti molti dispositivi che utilizzato tale protocollo sono devices che funzionano a batteria, a volte anche batterie a bottone e quindi è fondamentale ridurre al minimo lo scambio di dati superfluo per aumentarne la durata.
Il funzionamento di MQTT è basato sullo scambio di informazioni di tipo publish-subscribe dove i client si sottoscrivono ad un Feed del broker. Se il Feed viene aggiornato, il broker comunica a tutti i devices sottoscritti il nuovo stato. Anche i client a loro volta hanno la possibilità di aggiornare lo stato del Feed: in questo caso il broker ne riceverà comunicazione e a sua volta sarà compito suo comunicare la variazione a tutti gli altri client interessati al Feed.
INSTALLAZIONE
Colleghiamoci al Raspberry via SSH e digitiamo:
sudo apt-get update
successivamente:
sudo apt-get install mosquitto
successivamente i comandi:
sudo apt-get install mosquitto-clients
e digitiamo y (yes) quando richiesto.
CONFIGURAZIONE DI MOSQUITTO
Eseguiamo il comando:
sudo nano /etc/mosquitto/mosquitto.conf
Modifichiamo il file di configurazione che ci si presenta e copiamo questo testo:
# Place your local configuration in /etc/mosquitto/conf.d/ # # A full description of the configuration file is at # /usr/share/doc/mosquitto/examples/mosquitto.conf.example pid_file /var/run/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ log_dest topic log_type error log_type warning log_type notice log_type information connection_messages true log_timestamp true allow_anonymous false password_file /etc/mosquitto/passwords include_dir /etc/mosquitto/conf.d
Usciamo salvando il tutto con CTRL-X, Y, INVIO.
Configuriamo ora un nome utente ed una password per utilizzare il servizio MQTT. Nell’esempio seguente sostituite lamiausernamemqtt con una a vostro piacimento:
cd /etc/mosquitto sudo mosquitto_passwd -c passwords lamiausernamemqtt
Vi verrà quindi richiesta una password da impostare. Impostatela e date invio. Vi verrà richiesto quindi di digitarla una seconda volta per conferma. Durante la digitazione della password non vedrete nulla a schermo. E’ normale, continuate a scrivere fino alla pressione di INVIO.
Abilitiamo ed avviamo il servizio MQTT:
sudo systemctl enable mosquitto sudo systemctl start mosquitto
Ora il servizio MQTT è pronto ed in esecuzione sulla porta 1883 del vostro Raspberry.
Verifichiamo che tutto funzioni correttamente aprendo 2 terminali PuTTY contemporaneamente e affianchiamoli per comodità.
Nel terminale a sinistra, dopo essersi ricollegati tramite SSH, digitiamo:
mosquitto_sub -d -u username -P password -t dev/test
(notare la P maiuscola. Ovviamente al posto di username e password dovete sostituire i vostri valori scelti precedentemente)
Vi apparirà il seguente risultato:
Bene, ora digitale nel terminale di destra il seguente comando:
mosquitto_pub -d -u username -P password -t dev/test -m "Ciao a tutti"
(notare la P maiuscola. Ovviamente al posto di username e password dovete sostituire i vostri valori scelti precedentemente)
Se tutto funziona correttamente, dovreste vedere la scritta “Ciao a tutti” sul terminale di sinistra.
INTEGRAZIONE MQTT CON HOME ASSISTANT
Apriamo il file configuration.yaml di Home Assistant e aggiungiamo il seguente blocco:
mqtt: discovery: true broker: 192.168.1.5 port: 1883 birth_message: topic: 'hass/status' payload: 'online' will_message: topic: 'hass/status' payload: 'offline' username: 'lamiausernamemqtt' password: 'lamiapassword'
sostituendo broker con il vostro indirizzo IP (del Raspberry), username e password con quelli scelti da voi precedentemente.
Salvate e riavviate (da SSH oppure direttamente da Home Assistant):
sudo reboot
Siete ora pronti a integrare dispositivi che fanno uso del protocollo MQTT come ad esempio Shelly, Sonoff con firmware Tasmota, ecc…