Conosciamo Tado
Una delle principali marche di prodotti smart per il controllo del clima domestico è Tado. I prodotti della casa tedesca offrono all’utente funzionalità smart di climatizzazione della propria casa, sia per riscaldare sia per rinfrescare.
Tra i questi, quelli che sono di interesse al progetto descritto in questo post sono le teste termostatiche intelligenti (che impropriamente siamo portati a chiamare valvole) dedicate a chi ha un appartamento fornito di caloriferi con regolazione indipendente, ma con impanto centralizzato.
Il Kit di Base da acquistare è composto da una Testa Termostatica più il Bridge ed è presentato sul sito ufficiale tado. Attualmente la versione disponibile è la V3+, ma questo è importante solo per chi intende usufruire dei servizi a pagamento offerti dalla soluzione Tado. Servizi che noi possiamo replicare in modo totalmente gratuito mediante la nostra domotica personale (ad esempio: spegnimento dei caloriferi a seguito di rilevamento di una finestra aperta).
Il bridge è il componente responsabile di comunicare con il cloud Tado e con le singole testine smart, che quindi non consumano energia per una onerosa connessione wifi. Modificando tramite l’app (o il sito) la temperatura, il settaggio arriverà allo specifico calorifero grazie al bridge connesso ad una porta ethernet del proprio router di casa. Anche il componente di HA sfrutta questo meccanismo mediante cloud e non lavora quindi in locale. A corredo di ciascuna testina troviamo diversi adattatori per garantire compatibilità con la maggioranza delle valvole in commercio.
Cosa vogliamo fare
Come ogni componente smart, anche Tado ha il suo cluoud e la sua app con la quale gestire in modo più o meno agevole le funzionalità offerte dai suoi prodotti. Integrare questo componente in Home Assistant ci consente tuttavia di creare logiche più complesse, mediante automazioni che coinvolgono anche altri oggetti smart a nostra disposizione. Inoltre, possiamo estendere le sue funzionalità ed ovviare ad alcune notevoli limitazioni. Per il momento, conserviamo le funzionalità del cloud, per cui questo componente non lavorerà in locale (come invece auspicabile).
Il nostro obiettivo è quindi:
- Gestire i caloriferi direttamente da HA
- Creare scene ed automazioni avanzate
- Regolare automaticamente gli offset delle valvole
Cosa ci serve
Ricapitoliamo l’elenco della spesa:
- Sensori già integrati in HA, ad esempio uno dei seguenti:
- Xiaomi Mijia Sensore T&H
- Xiaomi Aqara Sensore T&H&P - nel mio caso ho usato questo
- Tado testa termostatica V3
- Kit di base con bridge - Necessario
- Testine termostatiche aggiuntive Duo Pack o Quattro Pack - Opzionali
Integriamo il componente
L’integrazione della piattaforma Tado è implementata dal componente Tado nativo di Home Assistant e descritta sul sito ufficiale. Da ormai parecchie release, questa integrazione è disponibile tra quelle attivabili direttamente in interfaccia, sia mediante auto-discovery sia mendiante procedura manuale. Se si preferisce il metodo classico, è necessario aggiungere nel proprio file configuration.yaml
le seguenti linee di codice:
tado:
username: !secret tado_key
password: !secret tado_pwd
Ed ovviamente nel proprio file secret.yaml
le corrispondenti voci contenenti le proprie credenziali di accesso. Per testare queste credenziali si può utilizzare il sito my.tado.com.
Il package
Per la gestione degli offset raccogliamo tutto quanto necessario (sensori, automazioni e customizzazioni) in un apposito package che ad esempio possiamo chiamare (il nome è ininfluente)controllo_tado_offset.yaml
. Ricordiamo che senza una sezione customize
il package non supera il controllo di validità della configurazione di HA.
homeassistant:
customize:
sensor.studio_temperature_offset:
name: offset
sensor.cameretta_temperature_offset:
name: offset
sensor.bagno_temperature_offset:
name: offset
sensor.cucina_temperature_offset:
name: offset
La logica
Una delle problematiche più significative legate a queste valvole è il calore eccessivo percepito a causa della inevitabile vicinanza alla fonte. In pratica, qualndo la valvola attiva il calorifero, il calore prodotto genera un repentino aumento della temperatura localmente al calorifero stesso, mentre occorre più tempo per diffondere questo calore nella stanza. Tuttavia la valvola, percependo una temperatura pari o superiore a quella target, si richiude. Il risultato è che la stanza è fredda ed il calorifero spento.
Per ovviare a questo problema è possibile, mediante il cloud Tado, impostare un offset sulla misura della temperatura di ciascuna valvola. Purtroppo però questo non basta, essendo questo valore fisso e modificabile solo manualmente. Quello che faremo è quindi regolare questo offset in modo dinamico tramite i servizi esposti dal componente, legandolo alle condizioni di operatività, vale a dire alla temperatura misurata mediante un sensore esterno.
Sensori
I sensori che useremo per implementare la nostra logica sono:
- offset corrente
- temperatura misurata sensore
- temperatura misurata tado
Per ottenere il valore corrente dell’offset possiamo utilizzare un sensore template oppure, se come nel mio caso si vuole gestire molte entità, il componente Attribute Extractor disponibile su HACS, con cui possiamo estrarre in un solo colpo da tutte le entità l’attributo richiesto:
sensor:
- platform: attributes
friendly_name: "Offset Tado"
attribute: offset_celsius
unit_of_measurement: °C
entities:
- climate.cucina
- climate.studio
- climate.cameretta
- climate.bagno
Recuperiamo poi le temperature misurate dai sensori esterni, che assumiamo già precedentemente integrati in HA. Nel caso di sensori Xiaomi integrati in HA mediante gateway proprietario (come da pagina ufficiale del componente) troveremo entità con un nome analogo:
Infine, le temperature misurate dai dispositivi Tado sono disponibili in entità nominate come sensor.NOME_DEVICE_temperature
automaticamente generate dall’integrazione del componente, dove NOME_DEVICE
è il nome dell’entità climate
corrispondente (es.: al device climate.cucina
corrisponde il sensore sensor.cucina_temperature
).
Automazioni
Per impostare il parametro offset_celsius
dei dispositi, il componente Tado espone il servizio tado.set_climate_temperature_offset
che può essere testato sempre mediante la gli strumenti per sviluppatori in HA:
Per ciascuna delle stanze (ovvero delle entità climate) che vogliamo controllare, scriviamo la seguente automazione:
automation: # Attenzione: scrivere una sola volta!!!
- alias: Clima__Tado_Cucina_offset
trigger:
platform: time_pattern
minutes: "/20"
condition:
condition: and
conditions:
- "{{ (states('sensor.cucina_temperature')|round(1) - states('sensor.temperature_ABC1234567890')|round(1))**2 >= 1 }}"
- condition: time
after: '5:55:00'
before: '23:00:00'
action:
service: tado.set_climate_temperature_offset
target:
entity_id: climate.cucina
data:
offset: >
{{ (states('sensor.cucina_offset_celsius')|float + states('sensor.temperature_158d00022728f3')|float - states('sensor.cucina_temperature')|float)|round(1) }}
Il meccanismo che andiamo ad implementare è molto semplice. Ogni X minuti (es.: X= 20min) l’automazione verifica che la differenza tra le temperature misurate dal sensore e dal Tado differiscano di almeno Y gradi (es.: Y=1°C).
Attenzione!! Questi parametri possono essere settati in modo più o meno aggressivo, ma è importante tenere presente che più spesso lavora l’autmazione, più in fretta si esauriranno le batterie della tua valvola.
Da notare che abbiamo elevato al quadrato la differenza delle due misure per fare in modo che la formula sia valida qualunque sia la temperatura più alta (equivale ad utilizzare il valore assoluto): questo perchè la nostra automazione agisce anche quando il calorifero è spento e la temperatura della stanza scende più lentamente di quella percepita dalla valvola. Questo va tenuto conto quando si setta la soglia desiderata.
Inoltre, automazione è pensata per funzionare solo nelle ore diurne, dato che i caloriferi (centralizzati) vengono spenti di notte. Se questo non fosse il caso, si può rimuovere questa condizione o variare il periodo di funzionamento come preferito.
Enjoy!