Info / IoT

23 jun 2022 17h44

Portão da garagem e social - automações

  • URL Curta:
Vamos ver algumas automações simples, mas uteis para usar quando abrir/fechar os portões?

Requisitos:
- Portão da garagem e social - sensor aberto/fechado com Sonoff Mini
- Portão da garagem e social - automatizando com Sonoff 4ch pro

Neste ponto, vamos confirmar as automações que fizemos no script de abertura do cover, quando o portão abrir. Esta parte é opcional, mas é interessante pois podemos por exemplo: abrir o portão social na chave, então o script de abertura do cover não será executado, logo as automações não funcionarão.

Abertura:
Crie uma nova automação, coloque o nome e a descrição.
Nos gatilhos coloque os dois portões:
Portão da garagem:
entity_id: cover.portao_da_garagem
from: closed
platform: state
to: open


Portão social:
entity_id: cover.portao_social
from: closed
platform: state
to: open


Em ações, vamos executar o que for necessário.
Ligar luzes:
service: light.turn_on
data: {}
target:
 entity_id:
   - light.luz_da_fachada
   - light.luz_da_garagem


Notificar os aplicativos que o portão foi aberto.
data_template:
 message: >-
     O {{ trigger.from_state.attributes.friendly_name }} acabou de ser aberto -
     {{  now().strftime('%H:%M:%S') }}
 title: 'ABERTO: {{ trigger.from_state.attributes.friendly_name }}'
 data:
   ttl: 0
   priority: high
service: notify.mobile_app_fulano


Essa são ações simples, vai ligar essas luzes toda vez que abrir e vai notificar esse app. Você pode acrescentar outras luzes e outros apps.

A questão é que dessa forma já é útil, mas não muito inteligente, então poderíamos, por exemplo:
- Ligar as luzes somente a noite
- Notificar somente quando o grupo de pessoas não estiver em casa, quando você chega em casa por exemplo, já que quando estiver saindo você não quer receber esta notificação.

Para isso, vamos trocar em ações e chamar scripts.
Script de luzes:
data: {}
service: script.turn_on
target:
 entity_id:
   - script.1123456789


Script notificar apps
data_template:
 variables:
   message: >-
     O {{ trigger.from_state.attributes.friendly_name }} acabou de ser aberto -
     {{  now().strftime('%H:%M:%S') }}
   title: 'ABERTO: {{ trigger.from_state.attributes.friendly_name }}'
entity_id: script.123456789
service: script.turn_on


Agora nos scripts vamos incrementar:
Luzes: crie o script ligar luzes
Sequência, condição:
condition: or
conditions:
 - before: sunrise
   before_offset: '00:40:00'
   condition: sun
 - after: sunset
   after_offset: '-00:40:00'
   condition: sun


Aqui a condição é que só ligaremos essas luzes, 40 minutos antes do por do sol e 40 minutos antes do nascer do sol. Esse tempo pode ser ajustado conforme acharem melhor.

Depois dessa condição, podemos ligar as luzes.
service: light.turn_on
data: {}
target:
 entity_id:
   - light.luz_da_fachada
   - light.luz_da_garagem


Aqui, ainda temos uma situação chata, se a luz da garagem já estiver acessa, ao fechar o portão ela irá desligar. Então podemos incrementar mais.
Recomendo que crie um input_boolean para cada luz e ao invés de ligar todas, vamos verificar uma por uma. Vamos usar a ação do tipo selecione.

Luz da fachada
choose:
 - conditions:
     - condition: state
       entity_id: light.luz_da_fachada
       state: 'off'
   sequence:
     - service: light.turn_on
       data: {}
       target:
         entity_id: light.luz_da_fachada
     - service: input_boolean.turn_on
       data: {}
       target:
         entity_id: input_boolean.luz_fachada
default: []


Luz da garagem
choose:
 - conditions:
     - condition: state
       entity_id: light.luz_da_garagem
       state: 'off'
   sequence:
     - service: light.turn_on
       data: {}
       target:
         entity_id: light.luz_da_garagem
     - service: input_boolean.turn_on
       data: {}
       target:
         entity_id: input_boolean.luz_garagem
default: []


Aqui basicamente, temos: se a luz já estiver ligada, não fazemos nada. Se ela estiver off, vamos ligar ela e alterar o input para usarmos no fechamento do portão.

Agora vamos para o script de notificar portões abertos.
Crie um novo script com o nome de notificar portões
Vamos colocar seguinte condição:
condition: state
entity_id: group.pessoas
state: not_home


Aqui, você deve ter o grupo de pessoas configurado, seja por tracker wifi/gps/etc. Ou seja, se tiver 1 pessoa na casa, não vamos enviar mensagem aos apps.

Em ações, vamos usar as variáveis que configuramos anteriormente na automação.
data_template:
 message: '{{ message }}'
 title: '{{ title }}'
 data:
   ttl: 0
   priority: high
service: notify.mobile_app_fulano


Neste ponto pode configurar um grupo de apps ou adicionar outros com outras ações.
Aqui por segurança, tenho também notificações por sms, para usar quando vou dormir fora de casa.
Criamos o input para ativar e desativar as notificações sms e colocamos ele em condições. Essa condição/ação deve ficar no final para afetar somente os sms.
condition: state
entity_id: input_boolean.notificacoes_sms
state: 'on'


Aqui uso o amazon sns para notificações sms. Clique aqui para configurar
data_template:
 message: '{{ message }}'
 target: arn:aws:sns:us-east-1:123456789:notificacoes
service: notify.nome_do_sns



Fechamento
Crie uma automação, coloque nome/descrição.
Em gatilhos, configure.
Portão da garagem:
entity_id: cover.portao_da_garagem
for: '00:00:04'
from: open
platform: state
to: closed


Portão social:
entity_id: cover.portao_social
for: '00:00:04'
from: open
platform: state
to: closed


Em ações vamos chamar o script para desligar as luzes.
data: {}
service: script.turn_on
target:
 entity_id:
   - script.123456789


Se quiser pode também executar um request_location_update.
Configure um delay e defina um tempo que achar bom para que possa afastar da casa.
delay: '00:00:10'

Na ação, chame os apps:
data:
 message: request_location_update
service: notify.mobile_app_fulano


Recomendo que crie um script request_location_update e configure os apps nele, para que você possa chamar nos lugares que deve. Com o script você pode chamar ele no open/cover e no fechamento do portão e outros locais.

Agora no script de desligar luzes, configure as duas condições:
Portão da garagem
condition: state
entity_id: cover.portao_da_garagem
state: closed


Portão social:
condition: state
entity_id: cover.portao_social
state: closed


Com estas condições, enquanto os dois portões não estiver fechado, não vamos desligar as luzes. Pois poderia ocorrer de abrimos o da garagem e ao mesmo tempo o social, sem  essa condição, o que fecharmos primeiro desligaria as luzes, porém queremos manter elas acessas até todos estarem fechados.

Agora vamos criar as ações do tipo selecione.
Luz da fachada:
choose:
 - conditions:
     - condition: state
       entity_id: input_boolean.luz_fachada
       state: 'on'
   sequence:
     - service: light.turn_off
       data: {}
       target:
         entity_id: light.luz_da_fachada
     - service: input_boolean.turn_off
       data: {}
       target:
         entity_id: input_boolean.luz_fachada
default: []


Luz da garagem:
choose:
 - conditions:
     - condition: state
       entity_id: input_boolean.luz_garagem
       state: 'on'
   sequence:
     - delay:
         hours: 0
         minutes: 0
         seconds: 30
         milliseconds: 0
     - service: light.turn_off
       data: {}
       target:
         entity_id: light.luz_da_garagem
     - service: input_boolean.turn_off
       data: {}
       target:
         entity_id: input_boolean.luz_garagem
default: []


Aqui, usei um atraso de 30 segundos na luz da garagem para dar tempo de abrir a porta da sala, etc.

Nestas ações, verificamos se o input de cada luz está on, se positivo desligamos as respectivas luzes e voltamos o input para o estado off. Se a luz/luzes já estivessem acessas antes do portão abrir, iriamos manter elas ligadas, afinal alguém teria ligado elas seja pelo interruptor/assistente e provavelmente gostaria de manter elas acessas.

© MNDTI - Tecnologia e Informação. Todos Direitos Reservados. Política de privacidade.