Componente Home Assistant “MQTT”

4 minuti di lettura
Produttore: Home Assistant Community
Disponibilità: incluso nell’HUB Home Assistant
Categoria: software
Tipologia: componente Home Assistant
Difficoltà di implementazione: bassa
Revisione scheda: 1.2

Il componente “MQTT” di Home Assistant serve alla configurazione delle funzionalità di base del protocollo MQTT nell’ambito di questo specifico HUB personale. Esso abilita alla configurazione di un certo numero di piattaforme ad esso collegate, atte alla gestione/controllo di elementi quali:

  • Pannelli di controllo allarme
  • Sensori binari
  • IP Camera
  • Scuri per finestre
  • Tracciamento GPS
  • Ventilatori
  • Climatizzazione
  • Luci
  • Serrature
  • Notifiche
  • Sensori generici personalizzabili
  • Interruttori
  • Aspirapolvere

Tutti questi accessori (e relative piattaforme per l’implementazione) dipendono dalla configurazione, a monte, del componente MQTT.

Per aggiungere questo componente su Home Assistant è sufficiente che nel file di configurazione configuration.yaml sia presente questa riga:

# Example configuration.yaml entry
mqtt:

Laddove non venga indicato nient’altro, Home Assistant provvede ad avviare un broker MQTT in autonomia e utilizza direttamente quello. Per maggiore stabilità gli sviluppatori di Home Assistant precisano che sia preferibile utilizzare un broker esterno (eg. Eclipse Mosquitto).

Per configurare un broker esterno, è necessario impostare una configurazione come la seguente:

# MQTT
mqtt:
  broker: 127.0.0.1
  port: 1883
  client_id: home-assistant
  keepalive: 60

dove nel campo broker inseriremo l’ip del broker MQTT (in questo caso è indicato l’ip 127.0.0.1 in quanto il broker è in esecuzione sulla stessa macchina nel quale è in esecuzione Home Assistant).

Per attivare MQTT su Home Assistant, basta quanto sopra.

N.b. MQTT non è difficile da implementare, ma per farlo bisogna avere ben chiari in testa alcuni concetti. A tal proposito si consiglia la lettura attenta della guida dedicata alla configurazione dei componenti MQTT nella propria domotica.

Funzionalità aggiuntive

Uso di certificati

Home Assistant permette di specificare nella configurazione l’uso di certificati crittografici per la comunicazione da e verso il broker MQTT.

A tal scopo, la configurazione è la seguente:

mqtt:
  certificate: /home/pi/dev/addtrustexternalcaroot.crt

dove /home/pi/dev/addtrustexternalcaroot.crt è il percorso/nome file del certificato.

Variabili di configurazione:

certificateOpzionale. ‘auto’ oppure il percorso/nome file del certificato da utilizzare. In caso venga specificato un file, esso deve contenere il certificato root dell’ente certificatore che ha firmato il certificato stesso. Il file può contenere più certificati.
Esempio: /home/user/identrust-root.pem
client_keyOpzionale. Percorso/nome file della chiave crittografica del client.
Esempio: /home/user/owntracks/cookie.key 
client_certOpzionale. Percorso/nome file del certificato crittografico del client.
Esempio: /home/user/owntracks/cookie.crt 

Discovery

La funzione “discovery” del componente MQTT presso Home Assistant è estremamente comoda, perché permette di evitare la configurazione puntuale di ogni dispositivo presente in domotica (rischiando duplicati e misconfigurazioni). Una volta attivata, essa provvede al censimento e all’inserimento in configurazione dei seguenti tipi di accessori (laddove espongano topic MQTT, ovviamente):

  • Sensori binari
  • IP Camera
  • Scuri
  • Ventilatori
  • Luci
  • Sensori generici personalizzati
  • Interruttori

Per abilitare il discovery, è sufficiente indicare sul file di configurazione configuration.yaml di Home Assistant:

mqtt:
  discovery: true
  discovery_prefix: homeassistant

Variabili di configurazione:

discoveryOpzionale. Abilita o disabilita il discovery.
Esempio: ‘true‘ o ‘false
discovery_prefixOpzionale. Indica il prefisso per il topic MQTT del client Home Assistant.
Il default è ‘homeassistant‘.Il prefisso deve seguire un formato specifico:

<discovery_prefix>/<component>/[<node_id>/]<object_id>/<>

Dove:

<discovery_prefix> Uno dei componenti supportati, eg. ‘binary_sensor
<node_id>Opzionale. L’ID del nodo che fornisce il topic.
<object_id>L’ID del dispositivo. Serve per distinguere il dispositivo nel topic
<>Il comando, l’azione da seguire. eg. ‘ON‘ o ‘OFF‘.

I firmware per componenti IoT basati su ESP8266, ESP32 e dispositivi ITEAD Sonoff che offrono il servizio MQTT auto-discovery sono i seguenti:

Ulteriori informazioni ed esempi d’uso sul Discovery sono presenti sulla pagina dedicata del componente MQTT sul sito di Home Assistant.

Publish Service

Come si può immaginare, tramite l’implementazione MQTT di Home Bridge è possibile anche pubblicare topic.
Ci sono due metodi per pubblicare un payload: esplicitandone il valore oppure utilizzando un template:

{
"topic": "home-assistant/light/1/command",
"payload": "on"
}
{
"topic": "home-assistant/light/1/state",
"payload_template": "{{ states('device_tracker.paulus') }}"
}

Birth and Last will

MQTT supporta i cosiddetti testamenti di prime e ultime volontà, appunto LWT (Last Will Testament). In sostanza sono comandi da eseguire quando un dispositivo MQTT “nasce”, ovvero si accende e si presenta al broker (e quindi a chiunque sia iscritto a quei topic sul broker) oppure quando “muore”, ovvero esce inaspettatamente dalla rete (spengo fisicamente un dispositivo).

Anche Home Assistant permette la pubblicazione di topic di tipo LWT, sia per la “birth”, sia per la “will”:

mqtt:
  birth_message:
    topic: 'hass/status'
    payload: 'online'
  will_message:
   topic: 'hass/status'
   payload: 'offline'

Log

Il componente “log” di Home Assistant permette di tracciare i messaggi MQTT. È sufficiente aggiungere alla configurazione il seguente blocco:

logger:
  default: warning
  logs:
    homeassistant.components.mqtt: debug

Processare contenuti JSON

I componenti Switch e Sensor di Home Assistant supportano il processing JSON tramite messaggi MQTT e li interpretano tramite JSONPath. JSONPath ci permette di specificare dove, all’interno di un contenuto JSON, un determinato valore risieda.
Gli esempi a seguire ritornano sempre il valore “100“.

JSONPath queryJSON
somekey{ 'somekey': 100 }
somekey[0]{ 'somekey': [100] }
somekey[0].value{ 'somekey': [ { value: 100 } ] }

Per usarlo all’interno della configurazione di Home Assistant, si inserisce un blocco del tipo:

switch:
  platform: mqtt
  state_format: 'json:somekey[0].value'

È altresì possibile estrarre valori JSON usando un value template:

switch:
  platform: mqtt
  value_template: '{{ value_json.somekey[0].value }}'

Altre informazioni sulla sintassi sono disponibili sul repository di JSONPath.

Maggiori informazioni sul testing delle configurazioni MQTT per Home Assistant sono disponibili sul sito di Home Assistant.


Home Assistant Official LogoATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.


Please comment below