Automação Ligar e desligar luz com base no sensor de porta

Olá pessoal, estou a tentar fazer uma automação bastante simples, no entanto só está a a funcionar em parte…
Eu quero que a luz da rua (controlada por um switch sonoff) ligue ao abrir a porta e depois desligue ao fim de 5 segundos. Para dar o trigger da porta aberta/fechada tenho um sensor da xiaomi

A luz liga ao abrir a porta, no entanto não desliga passados 5 segundos como seria suposto… já olhei 100x vezes para o código e não encontro nenhuma falha… também já testei com “delay” em vez do “for” e também não funcionou…

Estou a correr o home assistant num Pi3 em Hassio. Não tenho erros no log

Código que estou a utilizar:

- alias: liga luz rua
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'on'
  action:
    - service: switch.turn_on
      entity_id: switch.tx_hall_a2

- alias: desliga luz rua
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'off'
    for:
     seconds: 5
  action:
    - service: switch.turn_off
      entity_id: switch.tx_hall_a2

Estás a complicar com duas automações o que podes fazer facilmente só com uma. Por exemplo:

#### DOOR LIGHT AT NIGHT
  - alias: 'Porta da Rua - Liga luz à noite'
    initial_state: 'on'
    trigger:
      - platform: time
        minutes: '/15'
        seconds: 0
    condition:
          condition: and
          conditions:
            - condition: time
              after: '23:30:00'
              before: '2:30:00'
    action:
      - service: light.turn_on
        data_template:
          entity_id: light.luz_da_rua
      - delay: '01:00'
      - service: light.turn_off
        data_template:
          entity_id: light.luz_da_rua

Esta automação liga a luz, espera 1 minuto e depois apaga a luz. Vais conseguir facilmente alterar para o teu caso usando o trigger que já tens.

Obrigado pela resposta Jorge :slight_smile:
Tentei a tua sugestão e ficou assim

- alias: liga luz rua
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'on'
  action:
    - service: switch.turn_on
      entity_id: switch.tx_hall_a2
    - delay: '01:00'
    - service: switch.turn_off
      entity_id: switch.tx_hall_a2

No entanto continua a não funcionar, agora a luz não chega a ligar e recebi o seguinte erro no log

“homeassistant/turn_on cannot be called without entity_id”

Repara nas actions que eu pus e vê lá se não falta nada…

@j_assuncao mas na tua automação não falta o sensor de porta? Como é que o HA vai saber que a porta foi aberta?
Eu para essa situação uso estas duas automações…

  - alias: Liga Luz do Gateway
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d00022b3ad2
      to: 'on'
    condition:
      condition: or
      conditions:
      - condition: sun
        after: sunset
        after_offset: "+00:15:00"
      - condition: sun
        before: sunrise
    action:
      - service: light.turn_on
        data_template:
          entity_id: light.gateway_light_7811dcb38555
          brightness: 200
          color_name: deepskyblue

  - alias: Desliga Luz do Gateway
    initial_state: true
    trigger:
      platform: state
      entity_id: binary_sensor.door_window_sensor_158d00022b3ad2
      to: 'off'
      for:
        minutes: 2
    action:
      - service: light.turn_off
        data_template:
          entity_id: light.gateway_light_7811dcb38555

Não sei se são as mais corretas mas estão a funcionar a mais de 1 ano.

Repara nas actions que eu pus e vê lá se não falta nada…

realmente faltam os “data_template”, sinceramente, pensava que não eram necessários…

adicionei o “data_template” mas continua sem funcionar

- alias: liga luz rua
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'on'
  action:
    - service: switch.turn_on
      data_template:
        entity_id: switch.tx_hall_a2
    - delay: '01:00'
    - service: switch.turn_off
      data_template:
        entity_id: switch.tx_hall_a2

O exemplo de automação que coloquei foi apenas para se ver as actions. Basicamente o que faz é ligar a luz entre as 23h30 e as 2h30.

1 Like

E tens alguns erros no log?

Tira o data_template e mete só data.
data_template não é necessário.

Agora tenho estes erros no log, dizem respeito precisamente ao switch que estou a tentar automatizar… vou tentar descobrir a que se referem os erros

No matching payload found for entity: tx_hall_A1 Button2 with state topic: TX_hall_A/stat/RESULT. Payload: , with value template Template("{{value_json.BUTTON2}}")

11:50 components/mqtt/binary_sensor.py (WARNING) - message first occurred at 2:22 and shows up 6 times

No matching payload found for entity: tx_hall_A1 Button1 with state topic: TX_hall_A/stat/RESULT. Payload: , with value template Template("{{value_json.BUTTON1}}")

11:50 components/mqtt/binary_sensor.py (WARNING) - message first occurred at 2:22 and shows up 6 times

Esses erros são da configuração do switch e não da automação.

Finalmente consegui fazer funcionar… Já tinha uma outra automação com o mesmo trigger mas com uma action diferente, será que estava ai o problema? Foi só adicionar a nova action à que já existia e ficou a funcionar… Apesar de estar a funcionar acho que tenho isto um pouco complicado… vou postar o código, será que alguem me poderá dar umas dicas de como poderei melhorar o codigo da automação?

- alias: liga luz gateway e luz rua
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'on'
  action:
    - service: light.turn_on
      data_template:
        entity_id: light.gateway_light_7c49ebad8595
        brightness: 100
        color_name: white
    - service: switch.turn_on
      data_template:
        entity_id: switch.tx_hall_a2


- alias: desliga luz rua
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'off'
    for:
      seconds: 5
  action:
    - service: switch.turn_off
      data_template:
        entity_id: switch.tx_hall_a2


- alias: desliga luz gateway
  initial_state: true
  trigger:
    platform: state
    entity_id: binary_sensor.door_window_sensor_01
    to: 'off'
    for:
      minutes: 2
  action:
    - service: light.turn_off
      data_template:
        entity_id: light.gateway_light_7c49ebad8595

Basicamente o que está aqui a acontecer é:
Quando a porta se abre, é ligada a luz do gateway da xiaomi e a luz exterior (controlada por um switch sonoff com tasmota)…
Passados 5 segundos de a porta ser fechada a luz exterior desliga.
Passados 2 minutos de a porta ser fechada desliga-se a luz do gateway

Mas acho que deverias meter aí uma condição para acender só a noite. Porque assim vai sempre acender. Quer seja dia ou noite. Basicamente está igual ao código que eu partilhei mais em cima mas sem a condition.

E volto a dizer que o data_template não faz sentido nenhum aí.

E volto a dizer que o data_template não faz sentido nenhum aí.

1 Like

Esta automação está das tuas mãos. :sweat_smile::sweat_smile::sweat_smile:
Na altura foste tu que me ajudaste com esta automação…
Então devo alterar só para data?

Não adicionei uma condição de tempo porque é uma zona escura e dá-me jeito que a luz ligue a qualquer hora do dia :wink:

1 Like

por acaso já tinha tirado, mas o código que colei aqui foi de um backup do automations.yaml e nem reparei… Nesse caso em que situações se deve usar o “data_template”?

Quando tens templates dentro do action.
O que nessa automação não tens.

1 Like