Termostato com agenda

Boa tarde.
Estou a configurar os termostatos aqui em casa com este código:

climate:
    
  - platform: generic_thermostat  
    name: Aquecimento Escritorio
    heater: switch.shelly1pm_a4cf12f43988
    target_sensor: sensor.ewelink_th01_460e6922_esc_temperature
    min_temp: 17
    max_temp: 22
    ac_mode: false
    target_temp: 18
    cold_tolerance: 0.3
    hot_tolerance: 0
    min_cycle_duration:
      seconds: 60
    initial_hvac_mode: "off"
    precision: 0.1

Agora queria que os termostatos funcionassem apenas dentro dos períodos selecionados (dia/hora). Integrei o scheduler component do HACS, mas não permite gerir a entidade generic_thermostat. Poderão recomendar-me outra integração que o permita fazer?
Agradeço desde já as sugestões.

Podes usar automações para ligar e desligar o termostato à hora que quiseres, não precisas de estar a instalar mais coisas no HA.

Certo, mas pretendia que as horas e dias pudessem ser alteradas por outros utilizadores, sem entrar na edição da automação. E no meu caso que estou a iniciar-me a esta linguagem de programação ainda não estou a chegar lá :slight_smile:

Podes fazer isso com input_datetime e usar os valores na automação.

Estou a tentar, mas tenho erro:

o código que estou a utilizar nas automações é este:

- id: '1612126424540'
  alias: Teste inputs_liga
  description: ''
  trigger:
    platform: state
    entity_id: input_boolean.liga_desliga_aquecimento_afonso
    to: "on"
  condition:
    platform: template
    value_template: "{{ now().timestamp() >= (states.input_datetime.hora_ligar_aquecimento_afonso.attributes.timestamp) | int }}"
  action:
  - type: turn_on
    device_id: 2bc97287cd9ef8a9982b9fb459409e34
    entity_id: switch.tomada_corredor
    domain: switch
  mode: single

Há alguma configuração que tenha que se efetuar no configuration.yaml para utilizar o input_datetime?

Não há nada que tenhas de configurar mas vejo aí algumas coisas incorretas na tua automação.

Primeiro, a chamada da entidade está feita de uma maneira que é desaconselhada porque vai dar erros quando o estado da entidade não é conhecido.

Segundo, estás a comparar coisas diferentes porque o timestamp do input_datetime é a data/hora a que alteraste da ultima vez o valor e não o valor definiste na UI.

Experimenta usar o seguinte no value_template:

value_template: "{{ ((as_timestamp (now())) | timestamp_custom("%H:%M")) >= (states('input_datetime.hora_ligar_aquecimento_afonso') | timestamp_custom("%H:%M",false)) }}"

Não testei o código e não posso garantir que esteja totalmente correcto mas é uma boa orientação

Terceiro, o YAML tem regras para os espaçamentos e as entradas que tens abaixo do action: têm todas dois espaços a menos (o mode está correcto).

Posso estar enganado mas se estás a apanhar esses erros no log é porque não estás a validar o código antes de reiniciares, deves sempre fazer a validação antes para prevenir erros.

Quanto aos templates podes e deves sempre testá-los antes de os colocares nas automações na página de templates do Dev Tools.

Podes ler mais sobre estes assuntos aqui:

Obrigado pelas dicas. @j_assuncao tens dado uma grande ajuda nestes passos iniciais com o HA.

1 Curtiu

É para isso que cá estamos! E já conseguiste colocar a automação a funcionar?

Ainda não consegui. Na ferramenta templates o código dá resultado correcto:

value_template: {{ (as_timestamp (now()) | timestamp_custom("%H:%M")) >= state_attr('input_datetime.hora_ligar_aquecimento_afonso','timestamp') | timestamp_custom("%H:%M",false) }}
value_template: {{ (as_timestamp(now()) | timestamp_custom("%H:%M")) >= states('input_datetime.hora_ligar_aquecimento_afonso') | timestamp_custom("%H:%M",false) }}

quando edito o código dá-me código válido mas depois ao verificar dá-me este erro:

o código que tenho em automation.yaml é este:

- id: '1612126424541'
  alias: Teste inputs_desliga
  description: ''
  trigger:
  - platform: state
    entity_id: input_boolean.liga_desliga_aquecimento_afonso
    to: "on"
  condition:
  - platform: template
    value_template: {{ (as_timestamp(now()) | timestamp_custom("%H:%M")) >= states('input_datetime.hora_ligar_aquecimento_afonso') | timestamp_custom("%H:%M",false) }}
  action:
  - type: turn_on
    device_id: d3b6b0d9f485765b368dc400724ba023
    entity_id: switch.shelly1pm_a4cf12f43988
    domain: switch
  mode: single

Nas DevTools não precisas de colocar o value_template, basta o que está dentro de {{ }}.

E continuas a ter o espaçamento mal feito…

já tentei com diferente espaçamento e não dá.
O file editor dá-me configuração correcta:

e o erro é sempre o mesmo:
image

Experimenta isto:

- id: '1612126424541'
  alias: Teste inputs_desliga
  description: ''
  trigger:
    - platform: state
      entity_id: input_boolean.liga_desliga_aquecimento_afonso
      to: "on"
  condition:
    - platform: template
      value_template: '{{ ((as_timestamp(now()) | timestamp_custom("%H:%M"))) >= (states('input_datetime.hora_ligar_aquecimento_afonso') | timestamp_custom("%H:%M",false)) }}'
  action:
    - type: turn_on
      device_id: d3b6b0d9f485765b368dc400724ba023
      entity_id: switch.shelly1pm_a4cf12f43988
      domain: switch
  mode: single

mesmo erro:

image

Tentei agora com este código. Na verificação do servidor deu OK, mas ao recarregar as automações tenho o erro de log que indico em baixo:

- id: '1612126424541'
  alias: Teste inputs_desliga
  description: ''
  trigger:
    - platform: state
      entity_id: input_boolean.liga_desliga_aquecimento_afonso
      to: "on"
  condition:
    - platform: template
      value_template: "{{ now().strftime('%H:%M') >= (state_attr('input_datetime.hora_ligar_aquecimento_afonso','timestamp') | timestamp_custom('%H:%M')) }}"
  action:
    - type: turn_on
      device_id: 2bc97287cd9ef8a9982b9fb459409e34
      entity_id: switch.tomada_corredor
      domain: switch
  mode: single

Logger: homeassistant.config
Source: config.py:415
First occurred: 17:41:39 (1 occurrences)
Last logged: 17:41:39

Invalid config for [automation]: Unexpected value for condition: ‘None’. Expected numeric_state, state, sun, template, time, zone, and, or, not, device @ data[‘condition’][0]. Got None. (See /config/configuration.yaml, line 18).

Já consegui com este código:

- id: '1612722403473'
  alias: Nova Automação
  description: ''
  trigger:
  - platform: state
    entity_id: input_boolean.liga_desliga_aquecimento_afonso
    from: 'off'
    to: 'on'
  condition:
  - condition: template
    value_template: '{{ now().strftime(''%H:%M'') >= (state_attr(''input_datetime.hora_ligar_aquecimento_afonso'',''timestamp'')
      | timestamp_custom(''%H:%M'')) }}'
  action:
  - type: turn_on
    device_id: 2bc97287cd9ef8a9982b9fb459409e34
    entity_id: switch.tomada_corredor
    domain: switch
  mode: single

Obrigado pelas dicas.

1 Curtiu

Não vi o tópico todo mas a minha sugestão é ligares o HA ao Google calendar ou algo de gênero.

Eu tenho um calendário e lá defino os períodos que quero que o aquecimento ligue… tipo de manhã e á noite.

Depois basta mudar o horário dos eventos… posso gerar os que eu quiser e com a mesma automação funciona sempre.

E com a ligação ao Google calendar em caso de falha de internet os eventos funcionam?

Se não estou em erro o Home Assistant sincroniza o calendário com o Google, mantendo uma cópia local.

Não tenho a certeza, mas acho que sem internet apenas não atualiza, mas mantém os eventos já sincronizados. É uma questão de testar. Os eventos estão disponíveis no menu “Calendário” do lado esquerdo.


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade