Automação baseado em localizações


(Nelson Oliveira) #1

Bom dia,
Precisava de opinião/ajuda em criar uma automação.
O objectivo é o HA detectar quando ambos os device trackers estão fora de casa e verificar se o alarme está desarmado. Caso esteja desarmado enviar notificação com acções.
Até aqui tudo simples, mas precisava de opiniões sobre o que usar como trigger. E tambem há um senão: definir as condiçoes para “away” tambem não chega pois se estiver dentro de uma zona, o estado não é away mas sim o nome da zona.

Estava a criar a automação desta forma (a qual não é funcional):

- id: '154149aa8119974'
  alias: Alerta quando alarme esta desarmado e ambos fora
  trigger:
  - entity_id: device_tracker.nelson
    from: home
    platform: state
  - entity_id: device_tracker.sofia
    from: home
    platform: state
  condition:
  - condition: state
    entity_id: device_tracker.nelson
    state: away
  - condition: state
    entity_id: device_tracker.sofia
    state: away
  - condition: state
    entity_id: alarm_control_panel.casa
    state: disarmed
  action:
  - service: notify.telegram_ne_p20
    data:
      title: "Alerta"
      message: "O alarme está desativado sem ninguem em casa. Armar?"
      data:
        keyboard:
          - '/armar'
          - '/desarmar'

Desta forma, tanto o trigger como as condições não são ideais pois o trigger baseia-se na alteração da localização. O problema é que se ja ambos estivermos fora de casa o home assistant não vai detectar a mudança de localizaçao llogo não vai fazer a verificação. Por isso talvez seja ideal outro tipo de trigger.
Quanto às condições, desta forma não são funcionais pois caso eu esteja dentro de uma zona predefinida, o estado não será away mas sim o nome da zona.

Conselhos e dicas sobre a melhor forma de fazer?


(Jorge Assunção) #2

A primeira coisa que salta à vista é a formatação estar toda errada.

Depois o trigger também está errado porque o que queres saber é quando não está ninguém em casa.

A entrada das condições está mal pois tem entradas a mais, o device_tracker já serve de trigger não tem de estar em condition.

De resto a action parece estar bem.

O que eu uso é isto:

#### LIGHTS OFF IF NO ONE IS HOME
  - alias: 'Luzes apagadas se ninguem em casa'
    trigger:
      - platform: time
        minutes: '/2'
    condition:
      condition: and
      conditions:
        - condition: state
          entity_id: group.familia
          state: 'not_home'
        - condition: state
          entity_id: input_boolean.modo_ferias
          state: 'off'
        - condition: state
          entity_id: group.all_lights
          state: 'on'
    action:
      - service: light.turn_off
        entity_id: group.all_lights
      - service: script.notify_zanzito_jorge
        data:
          title: '{{ as_timestamp (now()) | timestamp_custom("%d/%b/%Y %T") }}'
          message: 'Luzes Apagadas - NINGUÉM EM CASA'

No teu caso deve bastar alterar a action para aquilo que queres.


(Nelson Oliveira) #3

A minha formatação está correcta para a minha config.
Será que me podias esclarecer uns pontos?
O trigger no teu caso faz uma verificaçpão de 2 e 2 minutos em loop?
Depois em condition tens tambem:

condition: and
Isso define que as condições seguintes como um “tambem” correcto?
Quanto ao state ‘not_home’ funciona mesmo que o state seja uma das zonas predefinidas?


(Jorge Assunção) #4

Sim, no meu caso é o suficiente.

Sim e mesmo que não ponhas o and ele assume automaticamente. Podes trocar para or e ele retorna verdadeiro se qualquer uma das condições for verdadeira.

not_home é a negação de home. Caso tenhas uma zona pré-definida para o HA será sempre not_home embora te mostre o nome da zona.


(Nelson Oliveira) #5

Muito obrigado… agora é hora de testar :smiley:


(Nelson Oliveira) #6

Tudo está aparentemente bem, mas não recebo as notificações…

O meu código é o seguinte:

#################################################### Notifica Sobre Alarme
- id: 'notifalarmeqaundofora'
  alias: Alerta_sobre_alarme_quando_ausentes
  trigger:
  - platform: time
    minutes: '/2'
  condition:
    condition: and
    conditions:
      - condition: state
        entity_id: device_tracker.nelson
        state: 'not_home'
      - condition: state
        entity_id: device_tracker.sofia
        state: 'not_home'
      - condition: state
        entity_id: alarm_control_panel.casa
        state: 'disarmed'
  action:
  - service: notify.telegram_ne_p20
    data:
      title: "Alerta"
      message: "O alarme está desativado sem ninguem em casa. Armar?"
      data:
        keyboard:
          - '/armar'
          - '/desarmar'

Se fizer verificação do código, diz que está tudo direito. As automações carregam e estão todas ligadas. Mas não recebi nenhuma notificação ainda. Neste momento o alarme está no estado disarmed e ambos os trackers estão numa localização predefenida “trabalho”.

Uso o seguinte codigo para me notificar quando uma luz se liga e funciona na perfeição:

#################################################### Notifica com Pergunta
- id: '154091sdff2062137'
  alias: teste telegram
  trigger:
  - entity_id: light.kitchen
    platform: state
    to: 'on'
  condition: []
  action:
  - service: notify.telegram_ne_p20
    data:
      title: "Alerta"
      message: "A luz da cozinha acendeu Desligar?"
      data:
        keyboard:
          - '/Sim'
          - '/Não'

Está a escapar-se-me algo? Suponho k o problema esteja ou no trigger ou nas condições. pois a automação das luzes funciona.


(Jorge Assunção) #7

Tenta assim:

- id: 'notifalarmeqaundofora'
  alias: Alerta_sobre_alarme_quando_ausentes
  trigger:
  - platform: state
    entity_id: device_tracker.nelson
    from: 'home'
    to: 'not_home'
  - platform: state
    entity_id: device_tracker.sofia
    from: 'home'
    to: 'not_home'
  condition:
    condition: and
    conditions:
      - condition: state
        entity_id: alarm_control_panel.casa
        state: 'disarmed'
  action:
  - service: notify.telegram_ne_p20
    data:
      title: "Alerta"
      message: "O alarme está desativado sem ninguem em casa. Armar?"
      data:
        keyboard:
          - '/armar'
          - '/desarmar'

(Nelson Oliveira) #8

Essa forma não é a ideal por se basear na alteração da localização, a qual não funcionará caso já estejamos fora de casa. A ideia anterior baseada numa verificação de X em X tempo era melhor.


(Jorge Assunção) #9

Mas a automação assim funciona?


(Nelson Oliveira) #10

Não testei, mas antes disso vou tentar alterar primeiro só o trigger, começar a fazer exclusão do que possa ser. Não testei assim pois mesmo que funcione não será o ideal, daí querer primeiro tentar perceber qual o problema na outra. Se não estiver a chegar lá tento dessa forma afim de despistar qual o problema.


(Nelson Oliveira) #11

O problema está mesmo no “not_home”

- id: 'notifalarmeqaundofora'
  alias: Alerta_sobre_alarme_quando_ausentes
  trigger:
#  - entity_id: light.kitchen
#    platform: state
#    to: 'on'
  - platform: time
    minutes: '/2'
  condition:
    condition: and
    conditions:
      - condition: state
        entity_id: device_tracker.nelson
        state: 'TRABALHO'
      - condition: state
        entity_id: device_tracker.sofia
        state: 'TRABALHO'
      - condition: state
        entity_id: alarm_control_panel.casa
        state: 'disarmed'
  action:
  - service: notify.telegram_ne_p20
    data:
      title: "Alerta"
      message: "O alarme está desativado sem ninguem em casa. Armar?"
      data:
        keyboard:
          - '/armar'
          - '/desarmar'

com isto deparei-me com outra questão, é que ele envia-me notificação praticamente a cada segundo até neste caso o armar. não deveria receber notificação de 2 em 2mins?


(Jorge Assunção) #12

Engraçado que comigo funciona perfeitamente o not_home e uso em várias automações…


(Nelson Oliveira) #13

comigo tambem vai ter de funcionar… :smiley:
O que me está a deixar tambem curioso é o facto de me estar a floodar com notificações a cada segundo em vez de enviar uma a cada 2 mins.


(Jorge Assunção) #14

Agora enquanto testas experimenta adicionar o seguinte no final da action: delay: '00:02:00'

action:
  - service: notify.telegram_ne_p20
    data:
      title: "Alerta"
      message: "O alarme está desativado sem ninguem em casa. Armar?"
      data:
        keyboard:
          - '/armar'
          - '/desarmar'
  - delay: '00:02:00'

(Nelson Oliveira) #15

A questão de receber as notificações a cada segundo resolve-se assim:

  - platform: time
    minutes: '/10'
    seconds: 00

Acrescentando os segundos, caso contrario ele faz a verificação 60 vezes a cada minuto


(Jorge Assunção) #16

É isso mesmo! Tenho isso na automação seguinte e não tinha reparado…


(Nelson Oliveira) #17

penso que o problema do not_home tem a ver com não ser um grupo. Os grupos só apresentam home e not_home . Ou seja, terei de criar um grupo com o tracker e definir as condiçoes pelo estado desse grupo. Após testar dou novidades


(Jorge Assunção) #18

Mas eu utilizo também para trackers de pessoas individuais e funciona.

Seja como for a opção de criar o grupo família é a melhor e alias na minha automação que publiquei acima é como está feito.


(Nelson Oliveira) #19

O grupo parece-me bem. Mas esclarece-me isto:
Vamos supor que no teu grupo familia estás tu e a tua mulher e estão os dois em casa. o grupo mostra como not_home. se um de voces sair de casa, o grupo mostra qual estado? o ultimo que sofreu alteração? ou mantem o home por o outro se manter em casa?

Se ele mantiver o home mesmo alguem saindo penso que se adaptará, mas se ele alterar o estado do grupo em função da ultima localizaçao de um dos 2 para not_home, já não se aplica.

Uma forma de dar a volta a isto era criar um sensor que altera o estado para away quando a localizaçao for diferente de “home” e enviar a notificaçao mediante o estado do sensor. Mas queria uma forma mais “limpa”.


(Jorge Assunção) #20

Penso que te enganaste a escrever, querias dizer que em casa o grupo mostra home, certo?

Sim, se estiverem os dois em casa vai mostrar home, se um de vocês sair continua home. Se saírem os dois passa a not_home.

Quando um dos dois regressa a casa passa para home e quando o segundo elemento da família chegar continua home.

Comigo a automação de desligar todas as luzes funciona perfeitamente com 4 elementos na família