lunedì 1 ottobre 2018

Installare Mosquitto su Domoticz


Ora che ci siamo ed abbiamo un'installazione funzionante di Domoticz, si va avanti mettendo su il broker MQTT. Fatto questo, lo si configura per dialogare con Domoticz!

Introduzione

Per chi si fosse perso la prima parte, ovvero installare Domoticz su  un Raspberry, ho fatto una guida passo passo la settimana scorsa.

Il mio obiettivo finale è quello di mettere in comunicazione i miei Sonoff tasmotizzati con un sistema di gestione centralizzato.

Per fare questo, devo scegliere ovviamente un protocollo di comunicazione. La scelta è caduta su MQTT, visto che è leggero, esiste per Linux ed è IL protocollo per la domotica.

La comunicazione avviene in maniera molto semplice, i Sonoff trasmettono ogni tot i dati (consumo, temperatura, umidità, stato, quel che si vuole) usando il protocollo MQTT. Sul Raspberry risiede il "broker" MQTT, che altro non è che un "database" nel quale vengono inseriti tutti i dati. Domoticz, a sua volta, va a leggerseli e li presenta sotto forma grafica all'utente.

Vantaggi e concetti di base di MQTT

Uno dei grandi vantaggi è che la trasmissione avviene solo ogni tot, tenendo basso il traffico. Altro lato positivo, non è detto che tutti i dispositivi debbano vedersi tra loro, devono solo "vedere" il broker, che ha visibilità totale. Questo concetto è molto importante, perché un messaggio MQTT che parte dall'apparato 1 può scatenare un'azione verso l'apparato 5, ma il tutto viene gestito dal broker, non dagli apparati stessi. In questo modo, gli apparati possono anche avere risorse molto limitate (come i Sonoff), tanto gli basta solo mandare il treno di messaggi (chiamato telemetria) e poi tornare in stato "silente" fino al prossimo invio.

Installare Mosquitto come broker MQTT


Iniziamo quindi con l'installare il broker MQTT che ci consente di ricevere i messaggi dai Sonoff tasmotizzati :-) Per prima cosa, lavoriamo ancora un pochino di PuTTY, collegandoci al Raspberry ed autenticandoci.

Piccola nota a margine, se volete copiare questi comandi ed incollarli su PuTTY, vi basta copiarli come al solito e, una volta sulla finestra di PuTTY, premere il tasto destro. La stringa di testo verrà incollata, poi dovete solo premere invio!

Iniziamo con il creare l'utente mosquitto:

sudo adduser mosquitto

Poi aggiorniamo la lista dei pacchetti disponibili, che non fa mai male:

sudo apt-get update

Ed installiamo un pochino di cosettine che ci serviranno per mosquitto:

sudo apt-get install build-essential libwrap0-dev libssl-dev libc-ares-dev uuid-dev xsltproc

A questo punto, siamo pronti per installare mosquitto, quindi lanciamo il comando

sudo apt-get install mosquitto

Si, occhio, ha due T finali.
Facciamo gli splendidi e ci mettiamo anche l'utility per controllare i pacchetti MQTT in transito, con questo comando :


sudo apt-get install mosquitto-clients

Adesso creiamo il file con la password e il nome utente per accedere a mosquitto

sudo mosquitto_passwd -c /etc/mosquitto/pwfile <USERNAME>

Al posto di <USERNAME> io ho inserito "mosquitto".
Alla richiesta di password inseriamo una password a scelta e premiamo invio.

Poi ci segniamo a dovere questa login e password, visto che ci servirà per la configurazione via interfaccia web di Domoticz.

Adesso diamo i permessi all'utente mosquitto di accedere a tutte le cartelle entro /var/lib/mosquitto/

sudo chown -R mosquitto:mosquitto /var/lib/mosquitto/

Adesso ci si sposta nella cartella di mosquitto così

cd /etc/mosquitto/

E poi ci mettiamo ad editare il file di configurazione:

sudo nano mosquitto.conf

Cerchiamo la riga "log_dest file /var/log/mosquitto/mosquitto.log" e la modifichiamo in questo modo:

log_dest topic

Stiamo quindi dicendo che la destinazione dei log sarà dedicata ai topic che arrivano, poi bisogna anche aggiungere queste due righe:

log_dest syslog
log_dest stdout

Queste due righe indicano appunto che i log vanno diretti nella cartella di syslog e che vanno anche mandati all'output standard di sistema.

Inoltre aggiungiamo anche che deve loggare altri eventi (in questo ordine):
deve tenere traccia dei messaggi di errore, degli alert e dei messaggi di notifica. Inoltre, voglio anche sapere quando i client si collegano e scollegano, voglio i timestamp, non permetto assolutamente le login anonime e le password se le deve pescare nel file di autenticazione creato prima. Per far tutto questo, si aggiungono quindi le seguenti righe:

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/pwfile

Già che abbiamo nano aperto (che è l'editor di testo), aggiungiamo il nostro indirizzo IP in modo che si faccia sempre riferimento a quello, specifichiamo la porta, mettiamo l'autosalvataggio e gli diciamo quale è il file di database da usare, il tutto con queste righe :

bind_address XXXXXXX
port 1883
autosave_on_changes true
persistence_file mosquitto.db

A questo punto il MIO file è così:

bind_address 192.168.1.129
port 1883
autosave_on_changes true
pid_file /var/run/mosquitto.pid

persistence true
persistence location /var/lib/mosquitto/
persistence_file mosquitto.db

log_dest syslog
log_dest stdout
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/pwfile

Con un bel CTRL ed O vado in salvataggio, alla richiesta del nome del file premo semplicemente invio, poi premo CTRL ed X e ciao a tutti.
Ed ora, facciamo partire mosquitto manualmente così

sudo /etc/init.d/mosquitto start

Adesso ancora una modifichina piccola, ma fondamentale.
Dobbiamo lanciare mosquitto all'avvio del sistema, per fare questo ci serve tornare nell'editor di testo.
Quindi lanciamo il comando

sudo nano /etc/rc.local

Ed a questo punto PRIMA della riga dove c'è "exit 0" scriviamo

sudo mosquitto –d

Nuovamente CTRL ed O vado in salvataggio, alla richiesta del nome del file premo semplicemente invio, poi premo CTRL ed X e siamo nuovamente nella shell.

Configurazione di Mosquitto in Domoticz

Adesso colleghiamoci all'IP di Domotics, dobbiamo configurare il fatto che si debbano ricevere dei messaggi MQTT da un determinato indirizzo ed una determinata porta.


Andiamo sull'ultima voce, Setup , e dal menu a tendina scegliamo "Hardware"

Alla prima voce, va messo Enabled.
Alla seconda, il nome del tutto, io ho scelto client mqtt.
Alla terza, dal menu drop down, si sceglie "MQTT Client Gateway with LAN interface".
Lasciamo Data Timeout come Disabled.
In Remote Address mettiamo l'IP del Raspberry stesso, nel quale gira appunto Mosquitto.
Nel campo Port mettiamo 1883.
Username e Password sono quelli che abbiamo segnato prima, quelle che ho detto che serviranno. Ecco, adesso servono!
Publish Topic va lasciato come "out".
CA Filename va lasciato vuoto.

A questo punto, un bel click su "Add" e il primo dispositivo è aggiunto!
Adesso lo vedete sulla riga in alto, bello pronto.
Però ora vediamo se tutto funziona...

Sempre da Setup scegliamo nuovamente Hardware ed aggiungiamo un dispositivo con nome a scelta, ma nel Type bisogna scegliere "Dummy".
Appena fate click su "Add" vedrete che in alto vi apparirà la scritta "Create Virtual Sensor".
Benissimo, fate click su quello ed inserite un nome, poi scegliere che sensore avete, nel mio caso ho scelto "Temperature".

Adesso è il momento della verità, andate in Setup e scegliete "Devices".

Dovreste vedere il vostro dispositivo, con una serie di numeri.
Adesso segnatevi il numero "Idx" a fianco del vostro sensore.


Configurazione di Mosquitto in Tasmota

Ora bisogna aprire la pagina web del vostro Sonoff. Da qui, Configure e poi Configure Domoticz.



Nel campo "Sensor idx" dovete mettere il numero IDX che vi siete appena segnati, ed assegnarlo al sensore corretto.
Nel mio caso, siccome ho un sensore di sola temperatura, ho messo "Sensor idx 1 temp" con il numero IDX appena segnato.

Salvate il tutto, ma rimanete sulla pagina del Sonoff.
Una volta che il dispositivo si è riavviato, passate in Configuration, poi Configure MQTT.
Inserite l'indirizzo IP del vostro Raspberry e la porta 1883, poi premete Save.

A questo punto, oramai ci siamo!
Abbiamo installato un broker MQTT, abbiamo detto a Domoticz che deve ricevere dei messaggi dal broker MQTT, abbiamo detto ai Sonoff tasmotizzati dove devono mandare i messaggi MQTT e quale sensore devono usare.

Vedere i messaggi MQTT in arrivo in Domoticz

Adesso si torna in Domoticz e poi in Setup e poi Log.


Dovreste vedere i messaggi di telemetria che arrivano, vero?
Altrimenti, vedrete dov'è esattamente il problema...

Supponendo che tutto sia andato per il meglio, adesso provate un pochino a vedere la sezione "Temperature"...
Magia!
Il sensore c'è!

Mi sono poi aggiunto con la stessa logica i sensori di consumo, impostandoli come categoria "Electric (Istant + Counter)" in modo da vedere il consumo al momento ed il consumo totale.
Direi che pian piano ci siamo, ora devo solo popolare tutti i miei sensori, ma prima devo finire di collegarli elettricamente :-)








A questo punto, possiamo espandere con ogni cosa che ci viene in mente, io di idee ne ho, vedremo come andrà a finire!

2 commenti:

  1. Ciao, hai fatto un ottima guida.
    Funziona tutto bene fino a quando non riavvio il raspberry. Da quel momento domoticz non trova più il server mqtt e mi restituisce errore 14.Cosa potrebbe essere.Grazie

    RispondiElimina
  2. Ciao, se dopo il reboot lanci il comando "sudo /etc/init.d/mosquitto start" e mosquitto parte, vuol dire che non hai messo l'avvio in automatico di Mosquitto.

    RispondiElimina

Sei davvero sicuro di voler sprecare tempo prezioso per scrivere qualcosa? Non è che preferisci andare su Google?

Cerca nel blog

I post più letti di sempre