SCOPI DEL PROGETTO:
CONCETTI AFFRONTATI:
|
COMPONENTI SOFTWARE UTILIZZATE:
DISPOSITIVI FISICI INTERESSATI:
|
PROGETTO INDICATO a UTENTI CON ISTALLAZIONE: |
|
NOTE E DISCLAIMER
|
|
Revisione progetto: 4.4 |
Attenzione! In alternativa a questo progetto, si consiglia di leggere il suo gemello il quale utilizza – anziché Tasmota – il firmware ESPHome.
Abstract
Come spiegato anche nel nostro percorso di formazione in occasione del tema “dispositivi”, un termostato è un elemento domestico che a grandi linee contiene in sé un termometro, un relè e un’elettronica – più o meno complessa in base ai modelli – nella quale risiede l’intelligenza (primitiva) che gli permette di essere programmato dall’utente al fine di provvedere, in base al calendario e alla temperatura dell’ambiente all’accensione e allo spegnimento automatico del riscaldamento.
L’emissione del calore nei caloriferi (o nelle serpentine a pavimento, o altre tecnologie) viene prodotta da un elemento come una caldaia a gas, a pellet o altre tecnologie che chiameremo, a partire da qui, unità termica e che daremo per scontata, per questo progetto, nell’ambiente domestico.
Le unità termiche vengono solitamente attivate alla produzione del calore tramite la chiusura da parte del termostato di un contatto pulito di tipo NC o NO (normalmente chiuso o normalmente aperto), ovvero due poli non alimentati da tensione elettrica e che, se aperti (nel caso di contatto NC) o chiusi (nel caso di contatto NO) avviino per l’appunto la produzione del calore.
Esistono anche altre metodologie, ad esempio contatti alimentati, ma non sono oggetto del presente progetto.
Questo progetto illustrerà come, solo grazie a un contatto pulito (in questo progetto useremo un Sonoff Basic modificato a tale scopo, ma andrebbe bene qualunque attuatore a contatto pulito) e un sensore termico riusciremo a spostare l’intelligenza di un termostato tradizionale presso Home Assistant, domotizzando così una qualunque unità termica attivata tramite contatto pulito NC o NO.
N.b. Ovviamente è possibile utilizzare altri attuatori domotici a contatto pulito al posto del Sonoff Basic (modificato a tal scopo), come per esempio il Sonoff Mini (sempre con modifica), oppure il Sonoff 4CH Pro o lo Shelly 1, i quali due sono nativamente dotati di questa funzione. |
Sonoff Basic sarà il nostro attuatore, il sensore termico il nostro termometro, quindi infine Home Assistant diventerà il nostro termostato – il che ci permetterà di automatizzare il riscaldamento, controllarlo da remoto e molto altro.
Ovviamente, il termostato tradizionale potrà essere successivamente rimosso, in quanto non più necessario.
In caso non funzioni più la connessione ad internet, la cosa non rappresenterà un problema (se non per quanto riguarda l’eventuale controllo remoto): Home Assistant lavora comunque sulla LAN / Wi-Fi locale, pertanto sarà possibile continuare a controllare il riscaldamento seppure con la connessione internet non funzionante.
LE ALTERNATIVE
Ovviamente, esistono alternative. Sostituire un termostato tradizionale con uno domotico (eg. NEST, o Tado°) permette di ottenere gli stessi risultati del presente progetto senza eccessive complicazioni.
Questo progetto ha PURO SCOPO DIDATTICO. Non si risponde di eventuali danni (di qualunque tipo) provocati dall’utente.
A questo tema abbiamo dedicato anche due episodi del nostro podcast.
Partiamo
- Logica del progetto
- Schema elettrico
- Configurazione di Home Assistant
- Uso ordinario
- Automazione e controllo remoto
- Temporizzazione
Logica del progetto
La logica proposta in questo progetto è tanto banale quanto, crediamo, funzionale.
“Climate” di Home Assistant è un componente nativo generico che fornisce a questo HUB personale la possibilità di implementare piattaforme aggiuntive per la gestione del clima domestico. Tra le tante, “Generic Thermostat” è una piattaforma che permette di creare una o più entità di controllo clima (di riscaldamento o di raffrescamento) a partire dal controllo di un attuatore e dalla lettura di un sensore termico.
ATTUATORE
Dato che il Sonoff Basic, tramite modifica, può dotarsi di un’uscita a contatto pulito, va da sé che si tratta un candidato ideale per attivare/disattivare un’unità termica di quel tipo (attivata a NC o NO), ed è questo il motivo per cui lo useremo per questo progetto. Sempre tramite modifica, è possibile utilizzare il Sonoff Mini.
L’alternativa (che non prevede alcuna modifica) è utilizzare un Sonoff 4ch PRO, il quale dispone di fabbrica di ben quattro uscite a contatto pulito (per questo progetto ne utilizzeremo una sola). Un’alternativa ottimale, senza bisogno di modifiche, è lo Shelly Plus 1.
L’importante, comunque, è che l’attuatore a contatto pulito sia basato su SOC ESP8266 o ESP32 e quindi che sia riprogrammabile con firmware Tasmota.
SENSORE TERMICO
Per quanto riguarda la ricezione della temperatura ambientale – necessaria all’entità clima per operare – essa dev’esser già censita tramite un apposita entità di tipo “Sensor” presso la configurazione di Home Assistant.
Quale che sia il sensore (un classico sensore Xiaomi, un Sonoff SNZM-02P, un Sonoff TH-16/TH-10 o qualsiasi altro sensore ambientale integrabile con Home Assistant), la cosa importante per proseguire con il presente progetto è che sia già integrato nella configurazione di Home Assistant.
Schema elettrico
Prima di proseguire, ricordiamo ancora una volta che:
NOTE E DISCLAIMER
|
Quello che andremo a fare è disconnettere i due poli connessi al termostato (si dà per scontato che si sia appurato prima di proseguire che il modello di unità termica in uso venga attivata tramite contatti puliti NC o NO, come spiegato nell’abstract) per connetterli all’uscita del Sonoff Basic precedentemente modificato a contatto pulito (modifica obbligatoria!) oppure a una di quelle del Sonoff 4CH PRO (nessuna modifica da fare).
ATTENZIONE: Connettendo erroneamente l’uscita di un Sonoff Basic NON modificato, alla sua attivazione si invieranno 220v all’unità termica, mandandola completamente in guasto (probabilmente irreversibile)!!!
Questa guida ha solo intenti didattici, si ricorda per l’ennesima volta che:
|
Il fatto che l’unità termica venga attivata tramite NC o NO è invece indifferente, in quanto il tipo di attivazione dell’attuatore (il fatto che l’attivazione corrisponda alla chiusura o all’apertura del contatto pulito) sarà impostato tramite la configurazione di Home Assistant che vedremo a seguire.
Dato che il Sonoff Basic (mo-di-fi-ca-to!) necessita di alimentazione a 220v, l’idea potrebbe essere quella di posizionarlo presso il vano dell’unità termica (ovviamente al riparo da agenti atmosferici e da eventuali emissioni – termiche o di altro tipo – da parte dell’unità stessa) e collegare la stessa alimentazione 220v che l’unità termica stessa riceve all’ingresso del Sonoff Basic per permettere l’alimentazione anche di quest’ultimo.
Ovviamente, il Sonoff Basic e il sensore termico dovranno trovarsi “a tiro” della Wi-Fi sulla quale sia attestato anche Home Assistant.
Configurazione di Home Assistant
Apportata la modifica all’impianto, è il momento di configurare gli elementi che definiranno l’entità termostato presso la configurazione di Home Assistant.
N.b. Affinché la configurazione che ci apprestiamo a realizzare funzioni, è necessario che il Sonoff Basic modificato a contatto pulito abbia già a bordo Tasmota e presenti il protocollo MQTT già configurato.
ASSUNZIONI SUI NOMI
Assumiamo per il progetto che:
- il nome MQTT del Sonoff Basic sia “ThermoSonoff“;
- il nome dell’entità Home Assistant relativo al sensore di temperatura sia “sensor.temperatura“.
Ovviamente questi nomi potranno essere personalizzati in base alla propria configurazione.
CONFIGURAZIONE SWITCH
In primis è necessario definire in configurazione uno switch associato al Sonoff a contatto pulito che, se attivato/disattivato, di conseguenza accenda/spenga la produzione del calore.
L’entità assumerà il nome di “switch.unita_termica“:
mqtt:
switch:
- name: unita_termica
state_topic: "stat/ThermoSonoff/POWER"
command_topic: "cmnd/ThermoSonoff/POWER"
availability_topic: "tele/ThermoSonoff/LWT"
qos: 1
payload_on: "ON"
payload_off: "OFF"
payload_available: "Online"
payload_not_available: "Offline"
retain: false
È necessario soffermarsi sulla configurazione di due campi, “payload_on” e “payload_off“, ovvero i due payload che, associati al “command_topic“, di fatto agiscono sull’attivazione/disattivazione dello switch fisico.
Per come è configurato nell’esempio sopra, il comandi MQTT inviati a fronte dell’attivazione/disattivazione dello switch saranno:
Attivazione (produzione calore) | Disattivazione |
cmnd/ThermoSonoff/POWER ON | cmnd/ThermoSonoff/POWER OFF |
Questo significa che all’attivazione il contatto di uscita verrà chiuso (cortocircuitato) – e mantenuto tale – mentre in disattivazione verrà aperto – e mantenuto tale, altrettanto. Questo è il comportamento adatto a un’unità termica che venga attivata tramite contatto pulito normalmente aperto (NO).
In caso l’unità termica venga attivata tramite contatto pulito normalmente chiuso (NC), la configurazione dello switch dovrà essere configurato al contrario:
mqtt:
switch:
- name: unita_termica
state_topic: "stat/ThermoSonoff/POWER"
command_topic: "cmnd/ThermoSonoff/POWER"
availability_topic: "tele/ThermoSonoff/LWT"
qos: 1
payload_on: "OFF"
payload_off: "ON"
payload_available: "Online"
payload_not_available: "Offline"
retain: false
Che genererà un output comandi di questo tipo:
Attivazione (produzione calore) | Disattivazione |
cmnd/ThermoSonoff/POWER OFF | cmnd/ThermoSonoff/POWER ON |
quindi adatti al comportamento previsto per contatti puliti NC, ovvero all’attivazione il contatto pulito verrà aperto e alla disattivazione, chiuso (cortocircuitato).
N.b. Questo comportamento (ovvero l’inverted toggle) può essere realizzato anche usando il primo blocco di configurazione sopra citato e poi applicando una configurazione Tasmota ad hoc tramite il comando SWITCHMODE. Lo svantaggio è quello di doversi ricordare di aver attuato questa doppia configurazione.
N.b. Per maggiori informazioni sulla configurazione degli switch MQTT su Home Assistant, si rimanda a questa pagina specifica. |
DEFINIZIONE DEL TERMOSTATO DOMOTICO
Creiamo ora l’entità di tipo “Climate” basata sulla piattaforma “Generic Thermostat”.
Tale entità viene impostata per le funzioni di riscaldamento:
climate:
- platform: generic_thermostat
name: Riscaldamento
heater: switch.unita_termica
target_sensor: sensor.temperatura_sala
min_temp: 10
max_temp: 25
ac_mode: false
target_temp: 17
min_cycle_duration:
seconds: 30
initial_hvac_mode: "off"
away_temp: 10
Tale configurazione genera un’entità di questo tipo:
Tale configurazione può essere oggetto di ampia personalizzazione. Si rimanda alla scheda di dettaglio della piattaforma per prendere visione di tutti i parametri configurabili.
Uso ordinario
A questo punto la configurazione è completa: il nostro termostato generico è pronto a operare.
Le modalità operative del termostato sono:
- Off (spento – inteso come termostato non operativo, non come produzione calore spenta);
- Heat (riscaldamento – inteso come termostato operativo in modalità riscaldamento, non come produzione calore accesa).
Una volta impostata la modalità “Heat“, il termostato sarà pienamente operativo e provvederà ad accendere/spegnere l’impianto di riscaldamento (usando lo switch indicato in configurazione) in base alla temperatura dell’ambiente (rilevata dal sensore indicato in configurazione) e alla temperatura target impostata dall’utente.
L’uso di questa entità Home Assistant è descritto in questo nostro video:
Automazione e controllo remoto
Una volta reso domotico l’impianto di riscaldamento, oltre alle funzioni sinora descritte sarà finalmente possibile:
- attivarlo e disattivarlo manualmente tramite controllo remoto;
- automatizzarne il comportamento tramite automazioni Home Assistanat.
Per quanto riguarda il controllo remoto manuale sarà sufficiente che Home Assistant sia configurato in modo da esser raggiungibile da fuori casa (vedi guida) e usare l’applicazione mobile di Home Assistant e/o un comune browser web.
Per quanto riguarda l’automazione sarà possibile impostare vari scenari, automatici, tra i quali:
- attivare l'”Away Mode” quando tutti gli inquilini lasciano l’ambiente domotico;
- attivare la modalità “Heat” quando una specifica persona entra in un raggio specifico nei paraggi dell’ambiente domotico, in modo da pre-riscaldare (in caso ce ne sia bisogno in base alla temperatura);
- impostare in “off” il termostato superando un certo numero di km di distanza dall’ambiente (in caso per esempio di periodi di vacanza)
- regolare dinamicamente la temperatura target in base agli orari del giorno della notte
e molti altri, in base alle proprie esigenze e fantasia.
Vediamo qualche esempio.
TEMPORIZZAZIONE
Una delle caratteristiche più peculiari di un termostato è – oltre alla valutazione della temperatura – la possibilità di temporizzare le accensioni.
Dato che il presente progetto permette la creazione di un’entità “Climate”, tale entità si presta ottimamente all’applicazione di un temporizzatore come spiegato in quest’altro progetto.
IMPOSTARE L’AWAY MODE quando GLI INQUILINI si allontanano
Innanzitutto diamo per scontato che nella propria configurazione sia presente un raggruppamento di device tracker, come spiegato su questa guida, entità che assumeremo abbia nome “group.famiglia“.
Il nostro termostato generico assumeremo si chiami “climate.riscaldamento“.
Vogliamo che il termostato si imposti in “Away Mode” in caso gli inquilini (tutti) abbandonino l’ambiente domotico. Ovviamente, solo in caso il termostato sia in modalità “Heat”.
L’automazione sarà la seguente:
automation:
- alias: 'Away Mode automatico'
trigger:
platform: state
entity_id: group.famiglia
from: 'home'
to: 'not_home'
condition:
condition: state
entity_id: climate.riscaldamento
state: 'Heat'
action:
- service: climate.set_preset_mode
data:
entity_id: climate.living_room_thermostat
preset_mode: away
Attivazione pre-riscaldamento al rientro
Ipotizziamo che tramite in configurazione si sia definita una zona geografica con un raggio di 10 km chiamata “location” e con centro l’ambiente domotico. Vogliamo attivare il termostato (quindi indirettamente il riscaldamento, se la temperatura è inferiore a quella target) appena il “Device Tracker” chiamato “Marco” entri dentro il perimetro della “location“.
automation:
- alias: 'Pre-riscaldamento al rientro'
trigger:
platform: state
entity_id: tracker.marco
to: 'location'
condition:
condition: state
entity_id: climate.riscaldamento
state: 'off'
action:
- service: climate.set_temperature
data:
entity_id: climate.riscaldamento
temperature: 20
hvac_mode: heat
Un altro interessante esempio è disponibile su questa pagina esterna, dove l’utente ha creato un piccolo pannello di controllo presso il frontend utile per regolare funzioni di automatismo legate al riscaldamento.
Temporizzazione
Può naturalmente essere utile implementare anche funzioni “chrono” (per la pianificazione delle accensioni) legate all’entità “Climate” definita tramite l’adozione del presente progetto.
Dato che Home Assistant non integra componenti per la definizione di “cronotermostati, su inDomus abbiamo realizzato un ulteriore progetto che, a partire da un’entità “Climate”, permette di definire delle schedulazioni di accensione.
Il link è il seguente:
Creare un temporizzatore per sistemi clima su Home Assistant
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |