Restaurando o estado das luzes após uma queda de energia

O comportamento padrão usual de lâmpadas smart é, ao ser energizada, acender. Isso é legal porque permite que vc acenda a lâmpada usando o interruptor burro da parede. O problema é quando a queda/retorno da energia não é intencional… Alguns já devem ter passado por aquela situação da casa inteira acender após uma queda de energia, o que pelas leis de murphy acontece tipo as 3 da madrugada :-).

Faz algum tempo que penso em resolver o problema mas finalmente resolvi gastar um tempo com isso.

Obviamente que o pré-requisito e ter alguma maneira relativamente confiável de descobrir que faltou luz e que ela retornou! Existem algumas possibilidades pra isso, mas a que eu achei mais confiável foi obter essa informação do no-break! Infelizmente o meu não é suportado pelo NUT, apesar de ter uma interface USB. Felizmente, o pessoal da NHS foi gente boa e me passou a especificação do protocolo serial dele, e disso nasceu o nhs2mqtt :slight_smile: . Esse script cria um sensor que reflete o estado “com energia/sem energia” do nobreak.

Ok, sabendo que a energia voltou como fazer para restaurar o status anterior? bom… primeiro precisamos periodicamente salvar o status! A automação abaixo salva o status dos dispositivos listados de tempos em tempos, desde que a energia esteja ok a pelo menos 2 minutos (para evitar a automação de tentar salvar o estado durante uma queda!):

- alias: salva o estado das lampadas
  trigger:
     - platform: time_pattern
       minutes: '/1'
       seconds: 0
  condition:
       - condition: state
         entity_id: binary_sensor.ups
         state: "on"
         for:
           minutes: 2
  action:
    - service: scene.create
      data:
        scene_id: last_state
        snapshot_entities:
          - light.abajur_escritorio
          - light.area
          - light.area_servico
          <etc...>

Quando a energia retorna a automação abaixo espera alguns segundos (para que o mesh zigbee se estabeleça) e restaura o ultimo estado antes de faltar energia:

- alias: 'Retornou a energia'
  trigger:
      platform: state
      entity_id: binary_sensor.ups
      from: 'off'
      to: 'on'
  action:
        - delay: 40
        - service: scene.turn_on
          target:
            entity_id: scene.last_state

É isso… espera que seja útil pra mais gente :-).