Il protocollo MQTT è ormai diventato uno standard per le comunicazioni sia in ambito domotico che in altri settori, compreso quello industriale.
In questo articolo andremo a capire come permettere l’interazione tra un server Linux Debian, o una distribuzione basata su di esso come ad esempio Ubuntu server, ed Home Assistant.
Preparazione
Come prima operazione è necessario assicurarsi di avere un Broker MQTT installato e correttamente configurato all’interno della propria installazione di Home Assistant, ad esempio Mosquitto disponibile come componente aggiuntivo per chi utilizza Home Assistant Supervised.
Per comprendere i vari passaggi consiglio di utilizzare un software per l’analisi dei dati scambiati con il Broker, ad esempio MQTT Explorer:
# sudo apt-get update
# sudo apt-get install python python-pip // Verificare in base al proprio ambiente
# sudo apt-get install mosquitto-clients
# pip install paho-mqtt
# mkdir /etc/mqtt/
I comandi sopra indicati potrebbero variare in base alla versione del sistema operativo e Python che sì vuole utilizzare, consiglio quindi di seguire le seguenti guide o di cercarne una apposita per il proprio ambiente:
Scaricare quindi questo pacchetto contenente i file necessari:
Copiati i file è necessario associargli i giusti permessi ed abilitare gli script di init:
# chmod 644 /etc/mqtt/*.conf
# chmod 644 /etc/mqtt/*.log
# chmod 755 /etc/mqtt/*.py
# chmod 755 /sbin/cmd_mqtt
# chmod 755 /etc/init.d/mqtt
# chmod a+x /etc/init.d/mqtt
# sudo update-rc.d mqtt defaults
# sudo update-rc.d mqtt enable // Per alcune versioni di Ubuntu potrebbe essere necessario
Il client che andremo a configurare deriva dal progetto mqtt-launcher di cui è possibile trovare tutte le informazioni nella pagina GitHub ufficiale.
Configurazione
Il primo file da configurare è “mqtt.conf“, che comprende le configurazioni del vero e proprio client MQTT. Di seguito le chiavi da configurare:
# Parameters
logfile = '/etc/mqtt/mqtt.log' // Posizione del file di LOG
mqtt_broker = '<YOUR MQTT BROKER IP>' // Indirizzo IP del Broker MQTT
mqtt_port = 1883 // Porta del Broker MQTT
mqtt_clientid = '<THIS CLIENT ID>' // ID del dispositivo, ad esempio "SERVER"
mqtt_username = '<YOUR MQTT BROKER USERNAME>' // Username del Broker MQTT
mqtt_password = '<YOUR MQTT BROKER PASSWORD>' // Password del Broker MQTT
mqtt_tls = None // Utilizzo TLS del Broker MQTT
Nella parte successiva del file vi è l’elenco dei topic che eseguiranno le azioni sul nostro server.
La struttura la sì può comprendere dall’esempio sottostante e per ogni topic è possibile definire più payload d’esecuzione come nel topic “pushover/glance/refresh“, esempio anticipato nel precedente articolo.
# Execution
topiclist = {
# Topic # Payload Value # Program & Arguments
# System
"system/server/test" : {
'1' : [ 'sudo', '/sbin/cmd_mqtt', 'test' ],
},
"system/server/reboot" : {
'1' : [ 'sudo', '/sbin/reboot' ],
},
# Pushover
"pushover/glance/refresh" : {
'1' : [ 'sudo', '/sbin/cmd_glance', 'send' ],
'2' : [ 'sudo', '/sbin/cmd_glance', 'send', 'test' ],
},
}
Successivamente configurare gli stessi valori all’interno del file “cmd_mqtt” che sarà il nostro esecutore e strumento di debug.
Per predisporre il sistema ad inviare una notifica push in seguito alla richiesta di test seguire questo articolo, oppure configurare un comando di test personalizzato.
# Parameters
process="python" // Eseguibile Python del processo
...
device="<THIS CLIENT ID>" // ID del dispositivo, ad esempio "SERVER"
host="<YOUR MQTT BROKER IP>" // Indirizzo IP del Broker MQTT
port="1883" // Porta del Broker MQTT
username="<YOUR MQTT BROKER USERNAME>" // Username del Broker MQTT
password="<YOUR MQTT BROKER PASSWORD>" // Password del Broker MQTT
...
cmd4="<YOUR TEST COMMAND>" // Comando test comunicazione, ad esempio "cmd_push send 0 $device MQTT Test"
...
Configurato tutto è possibile verificare il corretto funzionamento del client eseguendo il comando “cmd_mqtt start“.
Il file di init presenta al suo interno un ritardo pre-impostato di 60 secondi per eseguire il processo a sistema correttamente avviato e connesso, ed eventualmente attendendo l’avvio del Broker MQTT. Modificare questo ritardo in base alle proprie esigenze ed alla propria installazione.
# Parameters
delay1="60"
...
Integrazione in Home Assistant
Eseguita la configurazione ed avviato il client MQTT è possibile integrarlo in Home Assistant per eseguire i comandi configurati.
Creare uno script come il seguente:
script:
mqtt_communication_test:
alias: 'Test Comunicazione MQTT'
icon: mdi:bullhorn
sequence:
- service: mqtt.publish
data:
topic: 'system/server/test'
payload: 1
Una volta eseguito è possibile verificare la corretta comunicazione con il ricevimento della notifica definita in precedenza:
Strumenti supplementari
Il comando “cmd_mqtt” comprende ulteriori strumenti di debug sfruttando moqsuitto-clients, con il quale è possibile pubblicare e sottoscrivere dei topic MQTT.
Un esempio di comando di pubblicazione è il seguente:
# cmd_mqtt pub test/1 123456789
Tramite MQTT Explorer è possibile analizzare la corretta pubblicazione:
Allo stesso modo è possibile sottoscrivere un topic e pubblicare un contenuto tramite MQTT Explorer:
# cmd_mqtt sub test/1