Automação ligar luz com transição para acordar

Boa tarde, pessoal.

Estava precisando de uma automação que ligasse as luzes aqui do quarto utilizando uma transição de brilho. Minhas lampadas possuem o recurso de transição, mas ela não acontece da forma que eu gostaria, por isso criei um script do Home assistant para ter uma automação que além de ter uma transição da forma que eu quero, da para aplicar em qualquer lampada com controle de brilho.

O script também ficou reutilizável, sendo possível rodar ele apenas passando qual a entidade e tempo de transição.

Segue abaixo o script:

alias: "Wake up: Turn on bedroom lights with transition time"
sequence:
  - variables:
      steps: 100
      delay: "{{ transition_time / steps | round(0) }}"
      light: "{{ light }}"
      brightness_step: "{{ 100 / steps | round(0) }}"
  - repeat:
      while:
        - condition: template
          value_template: >-
            {{ 'brightness' not in states[light].attributes or ('brightness' in
            states[light].attributes and state_attr(light,'brightness') | int <
            254) }}
      sequence:
        - delay: "{{ delay  }}"
        - choose:
            - conditions:
                - condition: template
                  value_template: "{{ 'brightness' not in states[light].attributes }}"
              sequence:
                - service: light.turn_on
                  target:
                    entity_id: "{{ light }}"
                  data_template:
                    entity_id: "{{ light }}"
                    brightness_pct: "{{ repeat.index * brightness_step }}"
            - conditions:
                - condition: template
                  value_template: "{{ state_attr(light,'brightness') | int < 254 }}"
              sequence:
                - service: light.turn_on
                  target:
                    entity_id: "{{ light }}"
                  data_template:
                    entity_id: "{{ light }}"
                    brightness_pct: "{{ repeat.index * brightness_step }}"
            - conditions:
                - condition: template
                  value_template: "{{ state_attr(light,'brightness') | int >= 254 }}"
              sequence:
                - service: script.turn_off
                  target:
                    entity_id: script.1697216319779
                  data: {}
mode: single
icon: mdi:weather-sunny

Para usar basta seguir os passos:

  1. Ir para Configurações → automações e cenas → scripts e clicar em criar um novo.
  2. No menu de trẽs pontos ali do topo selecione a opção Editar em YAML
  3. Colar o código do script acima e salvar.

Para chamar o script:

  1. Crie uma automação e em ações selecione “Chamar serviço”. Na caixa de serviços selecione o script criado e depois, no menu de 3 pontos da ação, clique em editar YAML.

  2. Cole o seguinte dentro de data:

        light: {nome da luz},
        transition_time: {tempo total em segundos}
    

O script tem duas limitações:

  1. Só aceita uma entidade do tipo luz. Se precisar mais de uma, pode criar um grupo delas e usar.
  2. Após iniciada a automação, se tu desligar ou colocar em 100% o brilho, o script continua executando alterando o estado da luz até que a execução complete (tempo de transição). Para resolver isso é necessário fazer o stop da execução de acordo com sua necessidade. No meu caso, como o controle que uso aqui é por controle zigbee eu só coloquei a ação de stop antes da ação, mas em casos onde tu faz acionamento por voz ou outros talvez seja necessário escutar os eventos e fazer o stop do scrip.
2 curtidas