community italiana di domotica personale
 
Domotizzare un termoventilatore da bagno con Broadlink e Home Assistant

Domotizzare un termoventilatore da bagno con Broadlink e Home Assistant

SCOPI DEL PROGETTO:
  • Domotizzare un riscaldatore da bagno (o uno generico) in modo da poterlo controllare e automatizzare tramite Home Assistant
  • Livello di difficoltà: medio
  • Costo: ridotto (<30 €)
CONCETTI AFFRONTATI:
COMPONENTI SOFTWARE UTILIZZATE:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA INDICATA A UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
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.

ARGO Chic Silver

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

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:

ARGO Chic Silver - Telecomando

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.

Vetrina Promo

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:

Termoventilatore switch Home Assistant

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:

Termoventilatore automazione Home Assistant

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 selettoreinput_boolean.termoventilatore_bagno_weekendattivo. 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.