Piattaforma Home Assistant “MQTT HVAC” (Heating, Ventilation and Air Conditioning)

7 minuti di lettura
Produttore: Home Assistant Community
Disponibilità: incluso nell’HUB personale Home Assistant
Categoria: software
Tipologia: piattaforma Home Assistant
Famiglia: componente “Climate” Home Assistant
Difficoltà di implementazione: media

La piattaforma “MQTT HVAC” (Heating, Ventilation and Air Conditioning, ovvero riscaldamento, ventilazione e condizionamento), figlia del componente “Climate”, serve per definire delle entità di controllo utili, appunto, a gestire tramite Home Assistant riscaldamento e/o ventilazione e/o condizionamento a partire da dispositivi controllabili tramite protocollo MQTT.

N.b. Questo componente NON è indicato per l’integrazione di dispositivi/attuatori che, sebbene supportino protocollo MQTT, non abbiano a disposizione una propria intelligenza proprietaria per la gestione del clima (eg. semplici interruttori MQTT, tipo l’ITEAD Sonoff Basic). In pratica, questo componente si usa SOLO per integrare su Home Assistant dei termostati MQTT.

Una piattaforma alternativa  – per dispositivi MQTT collegati a una unità termica ma che NON posseggano una propria intelligenza legata alla gestione clima – è la “Generic Thermostat“. Un esempio di questo tipo di implementazione è data dal progetto di domotizzazione di un riscaldamento autonomo tramite contatto pulito.

I dispositivi gestibili tramite la piattaforma MQTT HVAC possono essere diversi.
Ad esempio:

  • termostati o elettronica inclusa a bordo della caldaia/pompa calore/climatizzatore che supportino nativamente MQTT;
  • un’interfaccia software (eg. Node-RED) che si frapponga tra la piattaforma MQTT HVAC di Home Assistant e un qualunque oggetto a valle, controllabile in modo diverso.

Il primo caso è il più facile da capire. La configurazione della piattaforma invia comandi MQTT e riceve telemetrie MQTT direttamente dal dispositivo controllato.

Il secondo caso è quello più sofisticato: ciò con cui questa piattaforma “parla” (sempre inconsapevolmente) non è più un dispositivo (che sia un termostato, un dispositivo intelligente, un attuatore) ma con un software il quale sappia interpretare i comandi MQTT emessi da Home Assistant tramite la piattaforma MQTT HVAC e li traduca in qualcos’altro.
Questo “qualcos’altro” può essere qualunque cosa. Portando il caso di Node-RED, si potrebbe estremizzare il concetto immaginando un flusso di nodi che, intercettato il comando di accensione ricevuto via MQTT, provveda a inviare un SMS al telefono di una persona con scritto “Accendi la caldaia!” –  “Spegni la caldaia!“. Potrebbe sembrare un’ipotesi peregrina, ma non lo è. Visti i centinaia di nodi di output disponibili per questo potente software, nel campo reale si potrebbero utilizzare tecniche diverse per arrivare a domotizzare qualcosa che non lo sarebbe.

Questa piattaforma lavora de default in “optimistic mode“, ovvero non riceve gli stati di funzionamento tramite topic MQTT (quindi li assume) e limita a inviarne (comandi), a ricordare l’ultimo stato impostato dall’utente e a ricevere la temperatura dell’ambiente tramite topic telemetrici (i quali possono arrivare anche da fonti diverse dall’elemento clima controllato, eg. un sensore ad hoc). Questo comportamento può essere variato tramite l’adozione dei parametri “*_state_topic“, come spiegato a seguire.

tado° su Home Assistant
esempio di entità “Climate” su Home Assistant
N.b. Per utilizzare questa piattaforma è necessario che il componente “MQTT” di Home Assistant sia stato preventivamente configurato (vedi prima parte della scheda dedicata al componente “MQTT”). Si consiglia inoltre di leggere con attenzione la guida dedicata al tema della configurazione dei componenti MQTT nella propria domotica.

Configurazione

Per creare un’entità clima tramite questa piattaforma il blocco da inserire presso la configurazione “configuration.yaml” di Home Assistant è di base analoga alla seguente:

# Esempio di configurazione
climate:
  - platform: mqtt
    name: Salotto
    current_temperature_topic: /sensors/hvac/current_temp
    temperature_command_topic: /sensors/hvac/target_temp

Dove le proprietà di personalizzazione sono:

name(stringa, opzionale) – Il nome dell’entità. Default: “MQTT HVAC”
qos(intero, opzionale) – Il livello di QoS per lo state_topic. Default: 0 (Cos’è QoS?)
retain(booleano, opzionale) – Imposta la retain sui messaggi MQTT pubblicati. Default: false
send_if_off(booleano, opzionale) – Se impostato a “false”, sospende l’invio dei messaggi MQTT quando l’entità è in modalità “off”. Default: true
initial(decimale, opzionale) – Imposta la temperatura target dell’entità. Default: 21 gradi centigradi, 70 fahrenheit.
payload_on(stringa, opzionale) – Il payload che rappresenta lo stato “on” (acceso). Default: “true”.
payload_off(stringa, opzionale) – Il payload che rappresenta lo stato “off” (spento). Default: “false”.
availability_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato online/offline da parte del dispositivo controllato.
payload_available
(stringa, opzionale) – Il payload che rappresenta lo stato “disponibile” da parte del dispositivo controllato. Esempio: “online”. Viene usato in abbinamento alla variabile “availability_topic“.
payload_not_available
(stringa, opzionale) – Il payload che rappresenta lo stato “non disponibile” da parte del dispositivo controllato. Esempio: “offline”. Viene usato in abbinamento alla variabile “availability_topic“.
value_template
(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato in tutti i payload “*_state_topic“.
current_temperature_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere la temperatura corrente.
current_temperature_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di temperatura dal topic indicato nel “current_temperature_template“.
power_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte dell’accensione/spegnimento dell’entità.
mode_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte di un cambio di stato dell’entità.
mode_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
mode_state_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “mode_state_topic“.
mode(lista|stringa, opzionale) – Lista delle modalità operative disponibili. Valori di default: [“auto”, “off”, “cool”, “heat”, “dry”, “fan_only”]
temperature_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte di un cambio di temperatura target dell’entità.
temperature_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato dei cambiamenti nella temperatura target del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
temperature_state_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “temperature_state_topic“.
fan_mode_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte di un cambio di modalità di ventilazione dell’entità.
fan_mode_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato dei cambiamenti nella modalità di ventilazione del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
fan_mode_state_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “fan_mode_state_topic“.
fan_modes(lista|stringa, opzionale) – Lista delle modalità operative di ventilazione disponibili. Valori di default: [“auto”, “low”, “medium”, “high”]
swing_mode_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte di un cambio di modalità di oscillazione dell’entità.
swing_mode_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato dei cambiamenti nella modalità di oscillazione del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
swing_mode_state_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “swing_mode_state_topic“.
swing_modes(lista|stringa, opzionale) – Lista delle modalità operative di oscillazione disponibili. Valori di default: [“on”, “off”]
away_mode_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte di un cambio di modalità “away” dell’entità.
away_mode_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato dei cambiamenti nella modalità “away” del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
away_mode_state_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “away_mode_state_topic“.
hold_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte di un cambio di modalità “hold” dell’entità.
hold_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato dei cambiamenti nella modalità “hold” del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
hold_state_topic_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “hold_mode_state_topic“.
aux_command_topic(stringa, opzionale) – Topic MQTT pubblicato a fronte dell’accensione/spegnimento di un dispositivo ausiliario di riscaldamento presso l’entità.
aux_state_topic(stringa, opzionale) – Topic MQTT al quale iscriversi per ottenere lo stato del dispositivo ausiliario di discaldamento del dispositivo controllato. Se non impostato, l’entità lavora in “optimistic mode” (vedi dopo la tabella).
aux_state_template(template, opzionale) – Definisce il template per l’estrazione (parsing) del dato di stato dal topic indicato nel “aux_state_topic“.
min_temp(decimale, opzionale) – Definisce la temperatura target minima impostabile presso l’entità.
max_temp(decimale, opzionale) – Definisce la temperatura target massima impostabile presso l’entità.
OPTIMISTIC MODE

Se una proprietà lavora in “optimistic mode” (ovvero quando il corrispondente “state topic” non è impostato, Home Assistant assume che ogni variazione di stato dell’entità attuata dall’utente – e quindi la corrispondente pubblicazione MQTT di topic e payload relativi alla variazione stessa – abbia avuto esito positivo presso il dispositivo controllato, pertanto lo stato dell’entità presso Home Assistant assumerà automaticamente ed immediatamente il nuovo stato.
In caso invece lo “state topic” sia stato definito, il cambiamento di stato dell’entità non viene modificato fin tanto che tale topic e relativo payload non siano stati ricevuti.

USO DI TEMPLATE

In ogni “*_state_topic” può essere definito un template per l’estrazione (parsing) del dato di stato. Può anche esserne definito uno per tutti, utilizzando la proprietà “value_template“. Questo si traduce in una grande comodità sopratutto quando si è in presenza di payload scritti in notazione JSON.

Esempi

CONFIGURAZIONE COMPLETA

Un esempio di configurazione “tipo” per un climatizzatore compatibile col protocollo MQTT è la seguente:

# Esempio di configurazione
climate:
  - platform: mqtt
    name: Salotto
    modes:
      - off
      - cool
      - fan_only
    swing_modes:
      - on
      - off
    fan_modes:
      - high
      - medium
      - low
    power_command_topic: "study/ac/power/set"
    mode_command_topic: "study/ac/mode/set"
    temperature_command_topic: "study/ac/temperature/set"
    fan_mode_command_topic: "study/ac/fan/set"
    swing_mode_command_topic: "study/ac/swing/set"


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.

🔻 Clicca QUI per commentare l'articolo. 🔻