Automação sensor / tomada: erro código

Olá, estou a dar o 1º passo numa automação.
Tenho o seguinte código:

automation:
- id: aquecedor_Gs_on
	alias: 'Ligar aquecedor Quarto Gs'
    #Triggers
	trigger:
	#Reinicio do HA
	- platform: homeassistant
		event: start
	#Tempo
	- platform: time
		after: '12:30:00'
        before: '12:40:00'
    condition:
      - condition: numeric_state
        entity_id: sensor.temperature_1
        below: 18
    action:
      service: switch.turn_on
      entity_id: switch.plug_1

Está a dar o seguinte erro:
image

Nota: a linha 28 é a 1ª onde está “automation:”

Obrigado!

A entrada automation s+o se pode escrever uma vez…

Coloca aqui o ficheiro na totalidade para confirmar o problema.

Obrigado caro @j_assuncao!
Em cima realmente tinha um já, em que coloquei um “#” antes, para não ser considerado.
Agora aparece o seguinte erro:
image
Deixo o código completo:


# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Uncomment this if you are using SSL/TLS, running in Docker container, etc.
# http:
#   base_url: example.duckdns.org:8123

# Text to speech
tts:
  - platform: google_translate

group: !include groups.yaml
#automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

xiaomi_aqara:
  discovery_retry: 5
  gateways:
    - key: xxxxxxsssssffff
      
switch:
  - platform: xiaomi_miio
    host: 192.168.1.XX
    token: xxxxxxxxxxxxxxxxxx664c6237bc2f4826
    
automation:
- id: aquecedor_Gs_on
	alias: 'Ligar aquecedor Quarto Gs'
    #Triggers
	trigger:
	#Reinicio do HA
	- platform: homeassistant
		    event: start
	#Tempo
    - platform: time
	  after: '12:30:00'
      before: '12:40:00'
    condition:
      - condition: numeric_state
        entity_id: sensor.temperature_1
        below: 18
    action:
      service: switch.turn_on
      entity_id: switch.plug_1

Em ambos os problemas as mensagens de erro dizem explicitamente qual o problema.

Tens os espaçamentos mal feitos na automação, devem ser feitos em conjuntos de dois.

Esta é a linha 37 e é igual à linha 34 (excepto o facto de que diz homeassistant) e no caso deste último não dá erro. Na linha 37 tenho 4 espaços antes do “-”.

Desculpa a azelhice…mas estou a começar…

Tens de ter cuidado com o programa que usas para editar os ficheiros, eu uso o addon VSCode ou em alternativa o Notepad++ com a opção de mostrar todos os caracteres. Para o YAML um TAB não equivale a 4 espaços embora possa parecer que sim. Tens de dar os espaços mesmo com a barra de espaços.

Anota%C3%A7%C3%A3o%202020-02-02%20184636

P.S.: Quando publicares as tuas cofigurações tens de alterar os teus dados pessoais e/ou outros dados sensiveis (keys, tokens, etc)

E como te disse, os espaçamentos são feitos em múltiplos de 2, o problema começa logo na linha a seguir a automation:

automation:
- id: aquecedor_Gs_on

Como vez em cima, não existem dois espaços antes de - id:, o que vai criar problemas logo a partir dai. Isto já para não falar da quantidade enorme de espaços da linha event: start.

Para validar o YAML podes usar este site: http://www.yamllint.com/

Obrigado @j_assuncao! Entretanto revi todos os espaços.
Contudo o “- id” retirei-o porque estava sempre a dar erro e não percebo o porquê…

Já agora, testei e arrancou, mas reparei que após o tempo final (before) ele não desligou. Deduzo portanto que tenho de criar uma condição para ele desligar, correcto?

O before não serve para parar, apenas diz que a deve correr entre as 12h30 e as 12h40. Podes usar a mesma automação e utilizar um delay com o tempo que queres (10 minutos neste exemplo), tipo isto:

    action:
      - service: switch.turn_on
        entity_id: switch.plug_1
      - delay: '00:10:00'
      - service: switch.turn_off
        entity_id: switch.plug_1

Bem, estou aqui a fazer umas experiências para ver se percebo melhor como funciona esta automação e surgiu-me agora esta dúvida:

automation:
    alias: 'Ligar aquecedor Quarto Gs'
    trigger:
    #Reinicio do HA
    - platform: homeassistant
      event: start
    #Tempo
    - platform: numeric_state
      entity_id: sensor.temperature_1
      below: 20
    condition:
    - condition: time
      after: '22:40:00'
      before: '22:45:00'
    action:
      service: switch.turn_on
      entity_id: switch.plug_1

Com este código, ele não arrancou e isto fez-me pensar numa coisa: sendo o trigger um valor de temperatura, qual é a frequência em que o HA analisa este valor?

Obrigado

Analisa quando o sensor acaba de reportar um novo valor igual,menor,ou superior.

@RodolfoVieira, não querias dizer menor, ou superior? Se se mantiver igual ele não faz nada.
Será assim? Etendi bem?

Obrigado

Na automação não faz nada, mas não foi essa a tua pergunta… o sensor reporta de x em x tempo e o HA analisa o valor…foi o que percebi da tua pergunta, para te responder desta forma.

Bom, isto está confuso…ando com experimentações e comecei novamente pelo básico.
No código seguinte, deixei apenas como trigger o arranque do HA. Reiniciei o HA e mesmo estando a Automação activa e a temperatura 20,8ºC, a tomada não ligou.

automation:
    - alias: 'Ligar aquecedor Quarto Gs'
      trigger:
      #Reinicio do HA
      - platform: homeassistant
        event: start
      #temperatura
      - platform: numeric_state
        entity_id: sensor.temperature_1
        below: 22
      #condition:
      #- condition: time
        #after: '18:20:00'
        #before: '18:40:00'
      action:
        service: switch.turn_on
        entity_id: switch.plug_1
    #- alias: 'Desligar aquecedor Quarto Gs'
      #trigger:
      #Reinicio do HA
      #- platform: homeassistant
        #event: start
      #temperatura
      #- platform: numeric_state
        #entity_id: sensor.temperature_1
        #above: 23
      #- platform: time
        #at: '18:45:00'
      #action:
        #service: switch.turn_off
        #entity_id: switch.plug_1

Tenho algo errado?

@mqdias tenta isto:


  - alias: 'Ligar/Desligar exemplo cpha'
    inital_state: true
    trigger:
      - platform: homeassistant
        event: start
      - platform: numeric_state
        entity_id: sensor.temperature_1
    action:
      service_template: >
       {% if states('sensor.temperature_1') | float < 22 %}
         switch.turn_on 
       {% if states('sensor.temperature_1') | float > 24 %}
         switch.turn_off
       {% endif %}
     entity_id: switch.plug_1

@RodolfoVieira e o que acontece entre os 22 e os 24 graus?

@j_assuncao o exemplo acima faz com que o switch.plug1 ligue após uma variação de temperatura abaixo dos 22 (valor reportado pelo sensor), e que desligue após uma variação de temperatura acima dos 24.

Ok, então o que acontece quando o HA arranca e a temperatura é 23 graus?

Mantém o último estado actual se o switch tiver o retain activo. Contudo é um exemplo …

Caro @RodolfoVieira

Agradeço imenso o tempo que disponibilizaste para escrever este código!

Como se fará o controlo horário como indicado no meu código (mas não usado). É que nos meus testes é precisamente neste ponto do “condition…time” que a coisa não funciona…

Obg

Exprimentas te se o que pus acima funciona?


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


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