Automação de luzes com sensores de movimento Xiaomi


(Antonio Schneider) #1

Boas amigos!

Passei aqui para deixar meu projeto de automação das luzes que uso em casa.

Minhas principais necessidades são:

  1. Ligar e desligar as luzes automaticamente
  2. Aguardar um tempo configurável para desligar
  3. Se a luz for ligada manualmente antes do gatilho, não iniciar a automação, isto é, não deligar sozinha (modo semi-automático)
  4. Se a luz for apagada, reiniciar o gatilho da automação ao invés de aguardar o tempo mínimo
  5. Tudo em uma única entrada de automação

Neste script uso o atributo No motion since do sensor Xiaomi para calcular o tempo de espera.

Cada cômodo tem sua automação única, onde uso outras duas automações de rotinas (nascer do sol e pôr do sol) para ligar e desligar todas as automações automaticamente de acordo com a posição solar.

Segue o package completo:

automation:

  - alias: Bedroom Light
    trigger:
      platform: state
      entity_id: binary_sensor.motion_sensor
      to: 'on'
    condition:
      condition: state
      entity_id: light.bed_light
      state: 'off'
    action:
      - service: light.turn_on
        entity_id: light.bed_light
      - delay: 00:00:05 #atrasa 5 segundos para que o wait template inicie com sucesso
      - wait_template: >
          {% set light = "light.bed_light" -%} #entidade da luz
          {%- set timmer_input = "input_select.bedroom" -%} #entidade do seletor de timmer
          {%- set motion_sensor = "binary_sensor.motion_sensor" -%} #entidade do sensor de movimento

          {%- if is_state(light , 'off') or (state_attr(motion_sensor, 'No motion since') | int >= states(timmer_input) | int and is_state(motion_sensor , 'off')) -%}true{%- else -%}false{%- endif %} #se a luz estiver desligada ou o tempo mínimo foi atingido
      - condition: state #verifica se a luz ainda está ligada
        entity_id: light.bed_light
        state: 'on'
      - service: light.turn_off
        entity_id: light.bed_light

  - alias: Routine - Sunset
    trigger:
      platform: sun
      event: sunset
      offset: '-00:15:00'
    action:
      - service: homeassistant.turn_on
        entity_id:
          - automation.bedroom_light
  
  - alias: Routine - Sunrise
    trigger:
      platform: sun
      event: sunrise
      offset: '-00:15:00'
    action:
      - service: homeassistant.turn_off
        entity_id:
          - automation.bedroom_light

input_select:

  bed_light_timmer:
    name: 'Bedroom'
    options:
     - 120
     - 180
     - 300
     - 600
     - 1200
    initial: 180
    icon: mdi:timer

Basta multiplicar a automação das luzes para cada cômodo com seus respectivos sensores e luzes e adicionar o mesmo junto à lista de rotinas.

Ainda dá para melhorar um pouco mas já estou bem satisfeito com o resultado. Foram alguns meses de testes.

Espero ter ajudado!


(Carlos Alberto Martins) #3

Muito bom, obrigado pelo post, nunca tinha pensado em ter um input para setar o tempo.
Eu utilizo assim, mas o SUNSET ja esta nas condições:

automation:
  - alias: Luz Garagem Automatica
    hide_entity: True
    trigger:
    condition:
      condition: or
      conditions:
       - condition: state
         entity_id: binary_sensor.door_window_sensor_158d0001f38878 #SENSOR DO PORTAO INDIVIDUAL
         state: 'on'
       - condition: state
         entity_id: binary_sensor.door_window_sensor_158d0001f4081d # SENSOR DO PORTAO GRANDE
         state: 'on' 
       - condition: state
         entity_id: light.garagem  
         state: 'off'
       - condition: sun
         after: sunset
       - condition: sun
         before: sunrise