Package Cronotermostato

HassioHelp

Package Cronotermostato

.

Argomento: Riscaldamento

Livello: Novizio (Novizio, Esperto, Pro)

Difficoltà: Bassa (Bassa, Media, Alta)

Questo articolo è frutto di un nostro lettore che ci segue anche su Telegram Mario Tlod lo ringrazio per la guida che ci ha fornito.

Introduzione

L’inverno è arrivato, è ora di mettere in funzione il mio generic_thermostat! Caspita, devo accenderlo e spegnerlo a mano. No, sicuramente ci sarà qualcosa su internet…
Guardando in giro per il web non sono riuscito a trovare nulla di funzionale e anche bello esteticamente per il mio termostato per Home Assistant. L’entità climate da sola funziona bene ma ha bisogno di un po’ di automazioni per essere davvero sfruttabile in pieno. Mi sono armato di pazienza e mi sono messo all’opera.
Ho creato una serie di entità ed automazioni per fare in modo che il termostato funzioni in varie modalità selezionabili dall’utente e che sia possibile accenderlo in determinati orari e se si è o meno in casa.
Vediamo come installarlo.

Prerequisiti

Per funzionare ha bisogno di 2 entità: uno switch che attivi e disattivi il termostato ed un sensore di temperatura.
Per installare questo package avrete bisogno di:
1. aver configurato i packages
2. installare button-card, card-mod  e state-switch (da HACS vedi HACS guida all’installazione)

Installazione

Scaricare il file pkg_cronotermostato_v1_0.zip e decomprimere i file.
Copiare i file in questo modo:
pkg_cronotermostato_v1_0.yaml nella cartella packages
blu.jpgfiamma.gif nella cartella www/immagini/lovelace/

homeassistant:
customize:
package.node_anchors:
customize: &customize
package: 'Cronotermostato'
version: '1.0'
author: 'MARIO @tlod80'
reference: 'www.hassiohelp.eu'

expose: &expose
<<: *customize
haaska_hidden: false
homebridge_hidden: false


##--------------------- IMPOSTAZIONI DEL PACKAGE ---------------------##
setting:
Interruttore Caldaia: &caldaia 'switch.caldaia' #sostituire con l'interruttore che attiva la caldaia
Sensore Temperatura: &sens_temp 'sensor.temperature' #sostituire con il sensore della temperatura
Tracker: &tracker 'device_tracker.dispositivo'
Zona: &zona 'zone.casa'

##--------------------- ---------------------##

#Entità termostato.

climate:
- platform: generic_thermostat
name: Riscaldamento
heater: *caldaia
target_sensor: *sens_temp
min_temp: 18
max_temp: 24
ac_mode: False
hot_tolerance: 0
cold_tolerance: 0.5

#Le modalità del termostato:
# OFF: termostato spento
# AUTO: il termostato si accende in base agli orari impostati se si è in casa
# MANUALE: termostato acceso. Non tiene conto di orari e posizione
# ECO: abbassa la temperatura ma comuque rimane acceso, ideale per la notte
# PRERISCALDAMENTO: il termostato si accende all'ora impostata anche quando si è lontani da casa

input_select:
modalita_termostato:
options:
- "OFF"
- "AUTO"
- "MANUALE"
- "ECO"
- "PRERISCALDAMENTO"

#Serve per tenere traccia quando si passa in automatico alla modalià ECO
#in modo da ritornare alla modalità precedente

modalita_old:
options:
- "OFF"
- "AUTO"
- "MANUALE"
- "ECO"
- "PRERISCALDAMENTO"
#Questo input_select seve per le visualizzazioni in lovelace
visualizzazione:
options:
- "TERMOSTATO"
- "ORARIO"
- "IMPOSTAZIONI"

input_datetime:
orario_accensione:
has_date: false
has_time: true
orario_spegnimento:
has_date: false
has_time: true
orario_accensione_eco:
has_date: false
has_time: true
orario_spegnimento_eco:
has_date: false
has_time: true

input_text:
casella_vuota:
initial: ' '

input_number:
temperatura_termostato:
initial: 19
min: 18
max: 24
step: 0.5
unit_of_measurement: °C

temperatura_termostato_old:
initial: 19
min: 18
max: 24
step: 0.5

temperatura_eco:
min: 18
max: 24
step: 0.5

#sensor:
# - platform: time_date
# display_options:
# - 'time'


automation:

- id: 'mod_manuale'
alias: modalità manuale
trigger:
- entity_id: input_select.modalita_termostato
platform: state
to: 'MANUALE'
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_on
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: MANUALE


- id: 'mod_off'
alias: modalità off
description: ''
trigger:
- entity_id: input_select.modalita_termostato
platform: state
to: 'OFF'
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_off
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: 'OFF'


- id: 'accensione auto'
alias: accensione auto
description: ''
trigger:
- entity_id: input_select.modalita_termostato
platform: state
to: AUTO
condition:
condition: and
conditions:
- condition: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_accensione', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
- condition: template
value_template: "{{ states('sensor.time') < (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
- condition: zone
entity_id: *tracker
zone: *zona
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_on
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: AUTO


- id: 'accensione auto2'
alias: accensione auto orario
description: ''
trigger:
- platform: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_accensione', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
condition:
condition: and
conditions:
- condition: template
value_template: "{{ states('sensor.time') < (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
- condition: state
entity_id: input_select.modalita_termostato
state: AUTO
- condition: zone
entity_id: *tracker
zone: *zona
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_on
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: AUTO


- id: 'spegnimento auto'
alias: spegnimento auto
description: ''
trigger:
- entity_id: input_select.modalita_termostato
platform: state
to: AUTO
condition:
condition: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_off
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: AUTO

- id: 'spegnimento auto2'
alias: spegnimento auto orario
description: ''
trigger:
- platform: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
condition:
- condition: state
entity_id: input_select.modalita_termostato
state: AUTO
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_off
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: AUTO

- id: 'temp term'
alias: temperatura termostato
trigger:
platform: state
entity_id: input_number.temperatura_termostato
action:
- service: climate.set_temperature
data_template:
entity_id: climate.riscaldamento
temperature: "{{ states('input_number.temperatura_termostato') }}"
hvac_mode: heat

- id: 'mod eco'
alias: modalità eco
trigger:
entity_id: input_select.modalita_termostato
platform: state
to: ECO
condition:
- condition: template
value_template: "{{ states('sensor.time') != (state_attr('input_datetime.orario_accensione_eco', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
action:
- service: input_number.set_value
data_template:
entity_id: input_number.temperatura_termostato_old
value: "{{ states('input_number.temperatura_termostato') }}"
- service: input_number.set_value
data_template:
entity_id: input_number.temperatura_termostato
value: "{{ states('input_number.temperatura_eco') }}"

- id: 'auto eco'
alias: modalità eco auto
trigger:
platform: template
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.orario_accensione_eco', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
condition:
condition: or
conditions:
- condition: state
entity_id: input_select.modalita_termostato
state: 'OFF'
- condition: state
entity_id: input_select.modalita_termostato
state: 'AUTO'
- condition: state
entity_id: input_select.modalita_termostato
state: 'MANUALE'
- condition: state
entity_id: input_select.modalita_termostato
state: 'PRERISCALDAMENTO'
action:
- service: input_number.set_value
data_template:
entity_id: input_number.temperatura_termostato_old
value: "{{ states('input_number.temperatura_termostato') }}"
- delay: 2
- service: input_number.set_value
data_template:
entity_id: input_number.temperatura_termostato
value: "{{ states('input_number.temperatura_eco') }}"
- service: input_select.select_option
data_template:
entity_id: input_select.modalita_termostato
option: ECO

- id: 'auto norm'
alias: modalità normale
trigger:
platform: template
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.orario_spegnimento_eco', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
action:
- service: input_select.select_option
data_template:
entity_id: input_select.modalita_termostato
option: "{{ states('input_select.modalita_old')}}"



- id: 'accensione pre'
alias: preriscaldamento
description: ''
trigger:
- entity_id: input_select.modalita_termostato
platform: state
to: PRERISCALDAMENTO
condition:
condition: and
conditions:
- condition: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_accensione', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
- condition: template
value_template: "{{ states('sensor.time') < (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_on
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: PRERISCALDAMENTO


- id: 'accensione pre2'
alias: accensione auto orario
description: ''
trigger:
- platform: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_accensione', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
condition:
condition: and
conditions:
- condition: template
value_template: "{{ states('sensor.time') < (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
- condition: state
entity_id: input_select.modalita_termostato
state: PRERISCALDAMENTO
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_on
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: PRERISCALDAMENTO

- id: 'spegnimento pre'
alias: spegnimento pre
description: ''
trigger:
- entity_id: input_select.modalita_termostato
platform: state
to: PRERISCALDAMENTO
condition:
condition: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_off
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: PRERISCALDAMENTO

- id: 'spegnimento pre2'
alias: spegnimento pre2
description: ''
trigger:
- platform: template
value_template: "{{ states('sensor.time') >= (state_attr('input_datetime.orario_spegnimento', 'timestamp') | int | timestamp_custom('%H:%M', false)) }}"
condition:
- condition: state
entity_id: input_select.modalita_termostato
state: PRERISCALDAMENTO
action:
- data:
entity_id: climate.riscaldamento
service: climate.turn_off
- service: input_select.select_option
data:
entity_id: input_select.modalita_old
option: PRERISCALDAMENTO

- id: 'pass da eco'
alias: passaggio da ECO
trigger:
- entity_id: input_select.modalita_termostato
from: ECO
platform: state
action:
- service: input_number.set_value
data_template:
entity_id: input_number.temperatura_termostato
value: "{{ states('input_number.temperatura_termostato_old') }}"

Aprire il file pkg_cronotermostato_v1_0.yaml ed effettuare le seguenti modifiche:
1. sostituire switch.caldaia con lo switch che accende il termostato (riga 18)
2. sostituire sensor.temperature con il sensore della temperatura (riga 19)
3. sostituire device_tracker.dispositivo con il proprio device_tracker (riga 20)
4. sostituire la zona casa con la propria (riga 21)
5. se non si ha già il sensor.time, togliere i commenti (righe da 108 a 111)
6. se volete un’isteresi, ovvero che il termostato si spenga ad una temperatura superiore o che si riaccenda ad una inferiore a quella impostata, dovrete modificare hot_tolerance e cold_tolerance.
Esempio: impostando la temperatura a 23 e impostando cold_tolerance a 2 e hot_tollerance a 0, il termostato si spegnerà quando arriverà a 23 gradi e si riaccenderà a 21. Di default sono impostati cold_tolerance: 0.5 e hot_tolerance: 0.

Riavviare home assistant

Per la configurazione della card:
Per chi usa la modalità raw, creare una nuova card e copiare il contenuto di lovelace_raw.yaml.
Per chi usa la modalità yaml, aprire il file lovelace_yaml.yaml e copiare il contenuto nel proprio file lovelace.
In entrambe le modalità dovrete sostituire sensor.temp con il vostro sensore e switch.caldaia (ce ne sono 2) con il vostro switch.file

Funzionamento

Nella card principale vi ritroverete in alto a sinistra un ingranaggio che apre le impostazioni per la modalità ECO, in alto a destra un pulsante per aprire le impostazioni degli orari di accensione e spegnimento per la modalità AUTO e PRERISCALDAMENTO, al centro a sinistra c’è la temperatura del vostro sensore mentre a destra la temperatura impostata che potete modificare con le 2 frecce che sono posizionate sopra e sotto; affianco sulla destra viene indicato se al momento il termostato è acceso o spento; in basso ci sono le 5 modalità di funzionamento; la modalità selezionata sarà evidenziata in giallo.

Modalità di funzionamento

Il termostato, è configurato per funzionare in 5 modalità:

OFF: termostato spento.

MANUALE:  termostato acceso, non tiene conto di orari e posizione.

AUTO:  il termostato si accende solo se si è a casa e se l’ora è tra gli intervalli di tempo impostati.

PRE: il termostato si accende all’ora impostata anche se si è fuori casa.

ECO:  imposta una temperatura più bassa, ideale per la notte o se si vuole lasciare una temperatura più bassa quando non si è a casa.

Quando è acceso il termostato, in qualsiasi modalità tranne la OFF, resterà acceso fino a quando non arriverà alla temperatura impostata e si riaccenderà se la temperatura si riabbasserà.
La modalità ECO si attiva automaticamente all’ora impostata per poi ritornare alla modalità precedente e alla temperatura precedente una volta che arriva all’ora impostata per lo spegnimento della modalità ECO. È possibile anche attivarla manualmente cliccando sul bottone ECO. Per disattivarla basta scegliere una modalità diversa e ritornerà anche la temperatura impostata precedentemente.

Dalla pagina iniziale, cliccando sull’ingranaggio in alto a sinistra, si aprirà il menù impostazioni modalità eco.
Qui potete inserire l’orario di accensione e spegnimento della modalità e la temperatura da impostare quando si attiverà tale modalità.
Cliccando sulla freccia in alto a destra si tornerà alla pagina iniziale.

Dalla pagina iniziale, cliccando sull’icona  in alto a destra, si aprirà il menù impostazioni per l’accensione in modalita AUTO e PRERISCALDAMENTO.
Qui potrete impostare l’orario di accensione e spegnimento del termostato.
Cliccando sulla freccia in alto a destra si tornerà alla pagina iniziale.

 

6 risposte

  1. Avatar mimmo ha detto:

    installato e funziona ma quando selezione un pulsante auto man ecc non si vede la selezione che dovrebbe essere gialla, come mai?

  2. Avatar Davide Brescianini ha detto:

    ciao se io ho un termostato tuya e quindi ho un entita climate.**** al posto degli switch e dei sensor posso usarlo questo package? perche ho un termostato bth6000 pero vorrei avere le sue funzioni programmabili anche da hassio.altrimenti sai come posso fare per integrarle?

  3. Avatar ABBA ha detto:

    Ciao, ho due termostati come faccio a metterne due su HA?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *