SCOPI DEL PROGETTO:
CONCETTI AFFRONTATI:
|
COMPONENTI SOFTWARE UTILIZZATE:
DISPOSITIVI FISICI UTILIZZATI:
|
GUIDA INDICATA A UTENTI CON ISTALLAZIONE: |
|
NOTE E DISCLAIMER
|
|
Revisione progetto: 2.3 |
Abstract
Tra i progetti più interessanti sinora pubblicati su inDomus figura quello dedicato alla domotizzazione di un condizionatore tradizionale tramite Home Assistant. Lo scopo di questo progetto, il quale attinge a piene mani al progetto citato, è quindi dimostrare come si possa domotizzare con una spesa irrisoria un semplice termoventilatore da bagno al fine di renderlo controllabile e automatizzabile tramite Home Assistant.
Domotizzare un termoventilatore da bagno è estremamente comodo per renderlo controllabile remotamente e, sopratutto, pianificarne l’accensione (magari in relazione alla temperatura dell’ambiente).
Per questo progetto utilizzeremo un emettitore infrarossi Broadlink RM4 Mini e un termoventilatore da bagno controllato tramite telecomando a infrarossi: le metodologie qui descritte sono in linea di massima essenzialmente le stesse per tutti gli elementi riscaldanti controllati tramite telecomando infrarossi, anche i più datati.
Come elencato nell’incipit, è necessario essere in possesso di:
- un’istanza Home Assistant funzionante;
- un Broadlink RM4 Mini (o Broadlink modello equivalente purché emetta infrarossi, eg. mod. RM4 Pro)
- un termoventilatore e relativo manuale e telecomando di controllo a segnali infrarossi.
Per il progetto prenderemo come riferimento un modello di termoventilatore specifico tra i tanti disponibili sul mercato, l’ARGO Chic Silver, ma ovviamente si potrebbe utilizzare qualunque altro modello dotato di telecomando.
L’ARGO Chic Silver (come molti termoventilatori) è sostanzialmente un ventilatore con all’interno un’unità riscaldante. All’accensione l’utente imposta la temperatura alla quale vuol portare l’ambiente e il termoventilatore si avvia, in ventilazione e riscaldamento, mantenendo l’unità di riscaldamento accesa fino al raggiungimento della temperatura impostata; la ventilazione rimane invece sempre accesa fino allo spegnimento del termoventilatore stesso.
Dato che questo temoventilatore non ha a disposizione un timer di accensione (ma solo di spegnimento) e la sua attivazione non può essere innescata tramite un attuatore posto sulla linea di alimentazione a 230v. (come ad esempio nel caso del progetto volto a domotizzare un ventilatore); l’unica soluzione per far in modo di pianificarne l’accensione (magari per trovare il bagno caldo al risveglio) rimane l’uso degli infrarossi al fine di simulare il telecomando.
Questo scenario è tipico di moltissimi termoventilatori presenti in commercio, i quali:
- non possono essere attivati tramite attuatori sulla linea di alimentazione (on/off);
- non hanno a disposizione un timer di accensione, ma solo di spegnimento;
- non offrono nativamente supporto domotico.
Si parte
- Filosofia del progetto
- Analisi
- Configurazione Home Assistant
- Ricapitolo delle entità create
- Accorgimenti nella configurazione
- Automazione
Filosofia del progetto
Partiamo da un ragionamento semplice.
Dato che:
- Home Assistant è il nostro “ponte di comando” per il controllo della domotica (non sai cos’è? guarda, è fatto così);
- Home Assistant, tramite il componente “Broadlink IR Climate Component“, può inviare segnali infrarossi;
- il condizionatore è controllabile tramite segnali infrarossi,
dunque, è di conseguenza possibile controllare il condizionatore tramite Home Assistant e quindi integrarlo al resto della domotica, automazione inclusa.
Analisi
Analizzare le funzionalità controllabili da telecomando
In primis bisogna chiarire che, non esistendo su Home Assistant (al momento della redazione di questo progetto) un accessorio “termoventilatore” (ma solo un accessorio “termostato”, utile a controllare unità di riscaldamento/raffreddamento quali caldaie, caloriferi, condizionatori), di conseguenza dovremo aggirare tale limite con un semplice escamotage.
Utilizzare l’accessorio “termostato” (cosa che verrebbe da fare istintivamente) non è appropriato proprio per il suo modello funzionale: tale elemento prevede in configurazione un codice infrarosso per ogni temperatura impostata dall’utente il quale, unitamente alla temperatura, imposti anche le modalità operative dell’unità controllata (leggi qui per capire meglio come funziona solitamente il telecomando di un condizionatore).
Il termoventilatore preso ad esempio per questo progetto ha a disposizione un telecomando molto essenziale, il quale non presenta l’intelligenza del telecomando di un condizionatore né quella di un termostato tradizionale.
Tale dispositivo di comando presenta solo pulsanti “mono funzione”, ovvero una funzione, un tasto, un codice infrarosso:
Per ovviare a questo “problema” utilizzeremo un’entità “Switch” (interruttore): in sostanza andremo a semplificare la complessità, trattando il termoventilatore come un elemento capace di due soli stati: “acceso” (nelle modalità che desideriamo) e “spento”.
La configurazione dell’accessorio “switch” prevederà quindi, in occasione dell’accensione e dello spegnimento, la configurazione delle sequenze di codici infrarossi che normalmente invieremmo usando, manualmente, il telecomando.
Una volta fatto ciò, “l’accensione” dell’entità interruttore provvederà a fare le veci del telecomando e inviare quindi i codici di accensione infrarossi (nella sequenza pre-determinata) e quindi rendere operativo il termoventilatore. Viceversa per lo spegnimento.
Capire la logica di funzionamento del termoventilatore
Capire come il termoventilatore funzioni è alla base di questo progetto, in quanto ogni elemento ha la propria logica di funzionamento; è quindi necessario leggere innanzitutto il manuale del proprio termoventilatore, provarlo, capire come funzioni.
Nel caso del nostro ARGO Chic Silver, per far sì che esso riscaldi l’ambiente e che ponga le alette inclinate di 45 gradi (perché magari le vogliamo così posizionate) è necessario (partendo con l’unità spenta) premere sul telecomando, in sequenza:
- tasto accensione/spegnimento (e attendere mezzo secondo);
- due volte il tasto “eco|com” (e attendere 11 secondi, il tempo che gli serve per aprire le alette) ;
- tasto oscillazione alette (e attendere 7 secondi, il tempo che gli serve per posizionarsi a 45 gradi di inclinazione);
- nuovamente il tasto oscillazione alette (per fermarla in posizione).
Per spegnerlo, è sufficiente premere di nuovo il tasto di accensione.
Identificare i codici infrarossi utili alla nostra domotizzazione
Per quanto spiegato sopra, per “cablare” il comportamento di accensione/spegnimento in una sequenza di invio codici infrarossi avremo bisogno di catturare i codici di:
- tasto accensione/spegnimento;
- tasto “eco|com”;
- tasto oscillazione.
Ovviamente questo è lo scenario legato al termoventilatore oggetto di questo progetto, scenario che ovviamente varia da modello a modello, da situazione a situazione, da necessità a necessità.
Per il modello del presente progetto (ARGO Chic Silver) abbiamo messo a disposizione i codici originali presso il nostro archivio codici (al quale potete partecipare coi vostri codici a beneficio di tutti).
Configurazione del dispositivo Broadlink
Per utilizzare il componente “Broadlink” è necessario che l’attuatore (quale sia il modello) sia già configurato e quindi presente sulla nostra Wi-Fi. Per far in modo che l’emettitore infrarosso entri (e resti) dentro la vostra Wi-Fi è sufficiente utilizzare l’app mobile “e-Control” (per Android e iOS) e seguire le istruzioni a schermo. Alternativamente utilizzare l’app Broadlink (per Android e iOS, ma usarla solo in caso l’attuatore non sia supportato dall’app e-Control): in questo caso provvedere ad eseguire solo la procedura che fornisce all’attuatore le coordinate d’accesso alla Wi-Fi, poi interrompere e non completare la configurazione.
Finita la prima configurazione una tantum sarà poi necessario che l’attuatore Broadlink possegga, all’interno della nostra Wi-Fi, un IP fisso adottando la tecnica del “MAC Binding” sul router. Per farlo, si consiglia la lettura di questa guida.
All’atto dell’assegnare un IP fisso al Broadlink si consiglia di appuntarsi da parte sia l’IP assegnato sia il “MAC Address” (indirizzo fisico) dell’attuatore: entrambe queste informazioni serviranno più avanti.
Cattura dei codici infrarossi del telecomando
Prima di porsi il problema di catturare i codici, la cosa più sana è fare un salto sul nostro ARCHIVIO COLLABORATIVO di codici infrarossi/radiofrequenza. Con un po’ di fortuna, potresti già trovare il lavoro fatto. Differentemente, non dimenticarti (sempre tramite quella pagina) dopo aver raccolto i tuoi, di inviarli all’archivio! |
Per catturare i codici è necessario che l’attuatore Broadlink sia già integrato presso Home Assistant (vedi scheda).
Come per altri progetti, la tecnica di acquisizione dei codici (in questo caso infrarossi) è sempre la stessa descritta in questa pagina ad essa dedicata. Una volta raccolti tutti i codici che ci servono potremo passare alla configurazione dell’accessorio “switch” presso Home Assistant utile per l’invio dei comandi.
Configurazione Home Assistant
A questo punto è necessario definire una lista di azioni, una “sequenza” di invio codici in seno a Home Assistant. Per far ciò utilizzeremo il componente “Script”.
Tale configurazione, come sempre, avverrà nel file configuration.yaml di Home Assistant.
Il codice che segue (funzionante per l’esempio dell’ARGO Chic Silver) definisce due sequenze: la prima, “termoventilatore_on_ir_sequence” utile ad inviare la sequenza codici di impostazione del termoventilatore, la seconda “termoventilatore_off_ir_sequence” (un solo codice, in realtà) per lo spegnimento. I codici IR indicati sono quelli reali per questo modello.
N.b. Davanti ad ogni codice è NECESSARIO indicare il prefisso “b64:“. |
# Esempio di duplice script
script:
termoventilatore_on_ir_sequence:
alias: "TERMOVENTILATORE - Accensione"
sequence:
- service: remote.send_command
data:
entity_id: remote.NOME_DEL_BROADLINK
command: "b64:JgBQAAABKZQSExEUEhMSExITEhQSExITEjcTNxI3EzYTNxE4EzcROBI3ExITFBETEhMTEhMSExISFBI3EjcTNxI3EjgSNxI3EwAFHAABKEoSAA0FAAAAAAAAAAA"
- delay:
milliseconds: 500
- service: remote.send_command
data:
entity_id: remote.NOME_DEL_BROADLINK
command: "b64:JgBQAAABKJQTExITERQSExMSEhQRFBEUETgSNxM3EjcSOBE4EjgROBI3ExITNxI3EhMTEhIUEhMSExI3ExITExE4EzYTNxI3EgAFHQABJ0sRAA0FAAAAAAAAAAA"
- delay:
seconds: 11
- service: remote.send_command
data:
entity_id: remote.NOME_DEL_BROADLINK
command: "b64:JgBQAAABKJURFREUEBQTEhITExMRFBEUETgTNxE4EjcTNxM2EjcUNhITEhMSNxIUEhMSExITEhMTNxI3EhMSOBI3EjcTNxI3EgAFHQABKEoRAA0FAAAAAAAAAAA"
- delay:
seconds: 7.1
- service: remote.send_command
data:
entity_id: remote.NOME_DEL_BROADLINK
command: "b64:JgBQAAABKJURFREUEBQTEhITExMRFBEUETgTNxE4EjcTNxM2EjcUNhITEhMSNxIUEhMSExITEhMTNxI3EhMSOBI3EjcTNxI3EgAFHQABKEoRAA0FAAAAAAAAAAA"
termoventilatore_off_ir_sequence:
alias: "TERMOVENTILATORE - Spegnimento"
sequence:
- service: remote.send_command
data:
entity_id: remote.NOME_DEL_BROADLINK
command: "b64:JgBQAAABKZQSExEUEhMSExITEhQSExITEjcTNxI3EzYTNxE4EzcROBI3ExITFBETEhMTEhMSExISFBI3EjcTNxI3EjgSNxI3EwAFHAABKEoSAA0FAAAAAAAAAAA=="
N.b. la voce “host: ip_del_broadlink” è da valorizzarsi con l’indirizzo IP fisso dell’attuatore Broadlink che dovrà inviare i codici infrarossi, da mettere al posto di “ip_del_broadlink“.
Come si nota facilmente, la sequenza di accensione altro non è che la traduzione (in codici inviati e in tempi di attesa) della sequenza descritta sopra. Quella di spegnimento corrisponde al solo invio del codice di spegnimento.
A questo punto è necessario creare uno switch, un interruttore, tale che alla sua accensione venga invocato lo script “termoventilatore_on_ir_sequence” e che al suo spegnimento venga invocato lo script “termoventilatore_off_ir_sequence“.
Per far ciò utilizzeremo uno switch particolare, quello generato tramite il componente Home Assistant “Input Boolean“:
# Esempio di switch basato su input_boolean
input_boolean:
termoventilatore_bagno:
name: Termoventilatore bagno
initial: off
icon: mdi:hot-tub
Questa configurazione genererà un’entità visivamente così raffigurata:
In ultimo dovremo definire un’automazione tale che, a fronte di un cambio di stato dell’interruttore “termoventilatore_bagno” (da acceso a spento e viceversa) provveda a evocare una o l’altra sequenza definita come script:
automation:
- alias: Termoventilatore
initial_state: true
trigger:
- platform: state
entity_id: input_boolean.termoventilatore_bagno
condition: []
action:
- service: script.turn_on
data:
entity_id: >
{% if trigger.to_state.state == 'on' %}
script.termoventilatore_on_ir_sequence
{% elif trigger.to_state.state == 'off' %}
script.termoventilatore_off_ir_sequence
{% endif %}
Ovviamente l’automazione è stata impostata come “nascosta” e “attiva” (di base) perché ovviamente deve funzionare sempre (in quanto regola il funzionamento dell’entità interruttore).
Eventuali automazioni legate al termoventilatore (accensione programmata ecc.) verranno successivamente gestite in modo diverso.
Ricapitolo delle entità create
script.termoventilatore_off_ir_sequence | Script di accensione termoventilatore tramite sequenza di invio codici IR |
script.termoventilatore_off_ir_sequence | Script di spegnimento termoventilatore tramite sequenza di invio codici IR |
input_boolean.termoventilatore_bagno | Interruttore per l’attivazione/spegnimento del termoventilatore |
automation.termoventilatore | Automazione per il funzionamento dello switch |
Accorgimenti nella configurazione
Prima di dare in pasto qualsiasi file di configurazione a Home Assistant, ricordarsi sempre di verificarne la correttezza sintattica presso YAMLint.
Per tutte le informazioni di dettaglio sulle caratteristiche e i parametri di configurazione dell’entità “Switch” (interruttore) tramite il componente “Broadlink” fare direttamente riferimento alla sua pagina.
Automazione
Dopo aver domotizzare il termoventilatore sarà il momento di dedicarsi all’automazione dello stesso, dotandosi di un “pannello di controllo” che permetta all’utente di regolare:
- orario di accensione;
- durata dell’accensione in minuti;
- temperatura di soglia;
- se accendere o meno anche durante i giorni del weekend.
Il pannello che andremo a configura apparirà come segue:
Definizione dei controlli
Oltre allo switch definito nella prima parte del progetto – dedicato all’attivazione/disattivazione del termoventilatore, avremo bisogno di:
- un campo “orario” per la scelta dell’orario di accensione;
- due campi per definire due misure (temperatura di soglia e durata dell’accensione);
- un campo switch per indicare la volontà di accendere anche durante il weekend oppure no.
Si assume che in configurazione sia presente un’entità sensore di temperatura dal nome “sensor.temperatura“.
Si assume che in configurazione sia presente un’entità sensore di orario dal nome “sensor.time“.
Si assume che in configurazione sia presente un’entità gruppo di entità device traker dal nome “group.famiglia“.
Campo “orario”
Andiamo a definire il campo utilizzando il componente “Input Datetime“:
input_datetime:
termoventilatore_bagno_timing:
name: Termoventilatore timing
has_date: false
has_time: true
initial: '07:30'
Il quale imposta il campo, come valore di default, alle sette e trenta del mattino.
Campi “temperatura minima” e “durata”
Useremo per questi due campi il componente “Input Number“:
input_number:
termoventilatore_bagno_duration:
name: Durata
initial: 20
min: 5
max: 60
step: 1
termoventilatore_temperatura_soglia:
name: Min°
initial: 23
min: 20
max: 25
step: 01
Il campo durata è impostato di default a 20 (minuti), con un range operativo da 20 a 60.
La temperatura di soglia (quella sotto la quale l’accensione è confermata e viene effettuata all’orario indicato) è impostata di default a 23 (gradi), con un range operativo da 20 a 25.
Ovviamente tutti questi parametri possono essere personalizzati.
Campo “accensione weekend”
In ultimo definiamo lo switch (interruttore) utile a indicare all’automazione che andremo a creare se essere eseguita anche durante il sabato e la domenica, o meno.
Per far ciò utilizzeremo il componente già usato in precedenza, ovvero “Input Boolean“:
input_boolean:
termoventilatore_bagno_weekend:
name: Scaldare nel weekend?
initial: off
icon: mdi:home-circle
Elenco nuove entità create
input_datetime.termoventilatore_bagno_timing | Campo per la definizione dell’orario di accensione |
input_number.termoventilatore_bagno_duration | Campo per la definizione della durata in minuti |
input_number.termoventilatore_temperatura_soglia | Campo per la definizione della temperatura di soglia, in gradi |
input_boolean.termoventilatore_bagno_weekend | Campo per la definizione dell’accensione anche nei giorni di weekend, oppure no |
Definizione del gruppo
Per far sì che il pannello di controllo appaia come da immagine sopra, in configurazione verrà aggiunto un “gruppo” come segue:
group:
bagno:
name: Bagno
control: hidden
entities:
- input_boolean.termoventilatore_bagno
- input_datetime.termoventilatore_bagno_timing
- input_number.termoventilatore_temperatura_soglia
- input_number.termoventilatore_bagno_duration
- input_boolean.termoventilatore_bagno_weekend
Definizione dell’automazione
A questo punto non resta che definire l’automazione:
automation:
- alias: Termoventilatore Auto-ON
trigger:
- platform: template
value_template: "{{ states('sensor.time') == (states.input_datetime.termoventilatore_bagno_timing.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"
condition:
- condition: or
conditions:
- condition: and
conditions:
- condition: time
weekday:
- sat
- sun
- condition: state
entity_id: input_boolean.termoventilatore_bagno_weekend
state: 'on'
- condition: and
conditions:
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: template
value_template: '{{ states.sensor.temperatura.state | int(default=0) < states.input_number.termoventilatore_temperatura_soglia.state | int(default=0) }}'
- condition: state
entity_id: group.famiglia
state: 'home'
action:
- service: input_boolean.turn_on
entity_id: input_boolean.termoventilatore_bagno
- delay:
minutes: '{{ states.input_number.termoventilatore_bagno_duration.state | int(default=0) }}'
- service: input_boolean.turn_off
entity_id: input_boolean.termoventilatore_bagno
Spiegazione
TRIGGER
Ciò che innesca l’automazione, ovvero il trigger, è il tempo, ovvero l’orario. Il sensore “sensor.time” viene messo a paragone con l’orario impostato con “input_datetime.termoventilatore_bagno_timing“: quando sono uguali, l’automazione viene eseguita.
CONDITION
Le condizioni sono molteplici e annidate. Il primo blocco verifica che sia “vera” una delle due condizioni annidate, ovvero che sia un giorno della settimana oppure che sia sabato o domenica, ma con il selettore “input_boolean.termoventilatore_bagno_weekend” attivo. Se una delle due è vera, si può proseguire, altrimenti l’automazione si ferma.
Il secondo blocco – se ci si arriva per la logica appena spiegata – verifica che la temperatura dell’ambiente sia inferiore a quella di soglia impostata con “termoventilatore_temperatura_soglia”. Se così non è, l’automazione si ferma.
Infine, il terzo blocco – se ci si arriva – verifica che gli abitanti siano in casa. Se così non è, l’automazione si ferma.
ACTION
In caso tutte le condizioni siano state verificate si provvede all’azione, ovvero all’accensione di “input_boolean.termoventilatore_bagno“, il quale, dopo un’attesa (delay) impostata tramite “input_number.termoventilatore_bagno_duration“, viene spento.
⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui. |
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. |