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á
Podes fazer isso com input_datetime e usar os valores na automação.
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.
É 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:
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:
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.
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.
Deu uns toques na minha blueprint se precisares.
Encontras aqui: https://github.com/jfmcarreira/home-assistant-config/blob/master/blueprints/automation/carreira/calendar_based_on_off.yaml
A ideia seria eu detetar eventos “Aquecimento”, “Aquecimento ON” e “Aquecimento OFF”, mas aquilo não correu bem.
Neste momento uso da seguinte forma. Quando o evento “Aquecimento” começa ele liga-se e quando acaba desliga-se.
Obrigado, vou explorar esse assunto.