Home Assistant: Come interagire con server Linux tramite MQTT

Autore: Vito
1,7K visite
Linux MQTT Client - Featured Image

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:

Procediamo installando i pacchetti necessari ad eseguire i nostri script Bash e Python, ed a creare il percorso dove andremo a posizionare i nostri file:

# 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:

  • /etc/init.d/:
    •  mqtt: Eseguibile che avvierà il client MQTT all’avvio e spegnimento del server;
  • /etc/push/:
    • mqtt.conf: Configurazione del client MQTT;
    • mqtt.log: File di LOG del client MQTT;
    • mqtt.py: Eseguibile Python del client MQTT;
  •  /sbin/:
    • cmd_mqtt: Eseguibile Bash per gestione e test del client MQTT.

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
Se ti è stato utile, perché non...
Mi offri un caffè?

Post correlati

Lascia un commento

* Utilizzando questo modulo accetti la memorizzazione e la gestione dei tuoi dati da questo sito web.