HA Alarme - Yet another take on alarm system (fork solução original)

Viva,

A versão inicial do “yet another take on alarm system” não teve mais desenvolvimento, mas dada a popularidade da mesma, foi criado um fork que se encontra aqui:

Tive alguma luta não tanto pela instalação, mas pelo conceito de como configurar e depois como ativar o alarme ou fazer acções quando houvesse um evento. Este custom-alarm é fantástico e vão perceber isso pela facilidade de configuração do mesmo, especialmente na escolha dos sensores em âmbito nos vários cenários(e.g. Home ou Away).

Acredito que há outras formas de fazer as automações e muita margem para melhoria tanto no que tenho feito como no tutorial, portanto se me faltar algo, avisem pf!

Instruções de instalação:

  • Download da última versão no repositório acima
  • Copiar o alarm.yaml para a raiz do HA
  • Copiar a pasta bwalarm para a pasta custom_components

No configuration.yaml inserir

alarm_control_panel: !include alarm.yaml

Nota: Garantir que não existem outros componentes de alarme que possam causar conflitos

Depois de um restart, já devem conseguir aceder via http://vosso_url/alarm

O módulo é 100% customizável por via de interface, pelo que não precisam de editar o ficheiro “alarm.yaml”. Podem fazer tudo via interface e as alteraçõe serão escritas neste ficheiro.

O componente tem pré-definidas 3 zonas (Away, Home e Perimeter). Eu estou a usar apenas Away e Home e são estas que irei partilhar aqui no tutorial para simplificar.



**Instruções de configuração do componente**

SENSORES

É tão simples como aceder ao link "Sensores, marcado a vermelho e para cada uma das zonas, escolher os sensores que queremos que sirvam como trigger para o alarme. Por exemplo, para o “Home Mode”, apenas escolhi sensores de exterior. Também é aqui que podem escolher como “Delayed”, o que significa que é dado um periodo de X segundos até o alarme disparar. Útil para garagem/porta de entrada.


CAMERAS

Caso pretendam ter as cameras neste componente basta indicar “enable Cameras Panel” e selecionar as cameras que estão configuradas no HA.


Outras configurações

Devem activar o MQTT e devem validar configurações genéricas na parte “Alarm” (e…g alterar pass de administração, panic code, …) e na secção design também dá para fazer modificações interessantes.

Depois da configuração, devem ficar com 2 botões apenas:

A componente do Alarm ficou finalizada com as instruções acima, mas agora é importante perceber ao certo como ativar o alarme, e o que fazer quando o alarme dispara. Diria que esta é a parte que está menos clara na documentação do módulo, portanto daqui para a frente vou mostrar o que foi a minha integração, apenas como exemplo e não como regra de melhoras práticas

Começando pelo resultado final. O objetivo é ter o seguinte:
image

Através do menu acima podemos definir uma hora para ligar o alarme em “home mode”, mas nos input_booleans abaixo podemos ativar de imediato o modo “AWAY” ou “HOME”

Configuração necessária:

Inputs que permitem a qualquer momento armar o alarme em cada zona:

input_boolean:
  alarme_exterior:
    name: Alarme Armado - HOME
    initial: off
  alarme_total:
    name: Alarme Armado - AWAY
    initial: off

Automações que vão permitir ligar o alarme à hora que indiquei no interface. no exemplo acima, por exemplo indica que o alarme exterior irá ligar Às 01:45:

- alias: 'Activate perimeter alarm on a specific time'
  trigger:
    platform: time_pattern
    minutes: '/1'
    seconds: '0'
  initial_state: 'on'
  condition:
    condition: and
    conditions:
      - condition: template
        value_template: '{{ now().strftime("%H:%M") ==  states.sensor.alarm_time.state }}'
  action:
    service: homeassistant.turn_on
    entity_id: input_boolean.alarme_exterior

Interação com o componente de alarme. Sempre que clicar no input_boolean definido acima, vai ativar o alarme na zona pretendida. Importante assegurar que passam o código do alarme no campo Data, onde eu tenho “1234”.

Automação:

- alias: 'Ativa alarme automatico  - HOME'
  trigger:
    platform: state
    entity_id: input_boolean.alarme_exterior
    to: 'on'
  action:
    - service: alarm_control_panel.alarm_arm_home
      data: {"entity_id":"alarm_control_panel.house","code":"1234"}

- alias: 'Ativa alarme automatico - TOTAL'
  trigger:
    platform: state
    entity_id: input_boolean.alarme_total
    to: 'on'
  action:
    - service: alarm_control_panel.alarm_arm_away
      data: {"entity_id":"alarm_control_panel.house","code":"1234"}

Automação similar, mas que desativa o alarme:

- alias: 'Desativa auto alarm - TOTAL'
  trigger:
    platform: state
    entity_id: input_boolean.alarme_exterior
    to: 'off'
  action:
    - service: alarm_control_panel.alarm_disarm
      data: {"entity_id":"alarm_control_panel.house","code":"1234"}

- alias: 'Desativa auto alarm - HOME'
  trigger:
    platform: state
    entity_id: input_boolean.alarme_total
    to: 'off'
  action:
    - service: alarm_control_panel.alarm_disarm
      data: {"entity_id":"alarm_control_panel.house","code":"1234"}

O que fazer quando o alarme dispara?
No meu caso, como pretendo ter acções diferentes caso esteja em casa ou fora de casa, defini duas automações que têm triggers diferentes e executam depois diferentes scripts.

- alias: Alarm has been triggered while away
  trigger:
    platform: state
    entity_id: alarm_control_panel.house
    from: 'armed_away'
    to: 'triggered'
  action:
    - service: script.turn_on
      entity_id: script.alarm_trigger_away

- alias: Alarm has been triggered while home
  trigger:
    platform: state
    entity_id: alarm_control_panel.house
    from: 'armed_home'
    to: 'triggered'
  action:
    - service: script.turn_on
      entity_id: script.alarm_trigger_home

Para não tornar o post ainda mais longo, fica o exemplo do script de trigger_away que é o mais completo.
Este script agora deve ser adaptado à vossa medida. Aqui uso a Alexa para fazer “barulho”, a gateway xiaomi, acendo luzes e envio notificação para telemóvel. A parte mais trabalhosa e que aconselho usarem foi encontrar qual o sensor que causou o disparo do alarme que é o código que conseguem ver, por exemlo no serviço telegram_bot_send_messagem.

   alarm_trigger_away:
       sequence:
         - service: media_player.alexa_tts
           entity_id: media_player.my_echo_dot_id_echo_dot
           data_template:
             message: >
               Alarm has been triggered... Alarm has been triggered.. Alarm has been triggered.. 
         - service: xiaomi_aqara.play_ringtone
           data:
               gw_mac: F00000000000
               ringtone_id: 1
               ringtone_vol: 10
         - service: homeassistant.turn_on
           entity_id: group.all_lights
         - service: telegram_bot.send_message
           data:
             title: "Alarme ativado - AWAY {{ as_timestamp (now()) | timestamp_custom('%d/%b/%Y %T') }}"
             message: Sensores - {{ states[states.alarm_control_panel.house.attributes.changed_by.split(".")[0]][ states.alarm_control_panel.house.attributes.changed_by.split(".")[1]].name }}
         - delay: 00:02:00
         - service: homeassistant.turn_off
           entity_id: group.all_lights

Quem tiver Android, pode usar uma aplicação específica que ativa o alarme por MQTT.
No caso de IOS, tenho integração com o HomeKit e ele reconhece logo o alarme e coloca estas opções disponíveis e também alerta sempre que ativo/desativo o alarme e avisa também quando o mesmo dispara:

3 Likes

Excelente tutorial, obrigado @mfrodrigues!

Obrigado pela partilha. Vai ser útil quando acabar de colocar os sensores em casa.

Bom trabalho :muscle::star::star::star::star::star:.
Top

Excelente… Mais uma dor de cabeça para mim :rofl::rofl::rofl::rofl:
Obrigado

@mfrodrigues,

Já ando de volta disto e após fazer os passos iniciais…

O que achas que pode ser?
Obrigado.

Infelizmente o erro assim é muito genérico, mas felizmente o output é colocado no log do home assistant. Podes colocar aqui o erro em concreto?

Dentro da pasta /custom_components/bwalarm tens o ficheiro alarm_control_panel.py, certo?

E o alarm.yaml está na raiz, ao lado da pasta custom_components certo?

E na configuração do home-assistant tens apenas um “alarm_control_panel” definido, certo?

Afirmativo todas as questões…

Vamos a LOGs:

2019-06-25 21:01:08 ERROR (MainThread) [homeassistant.components.alarm_control_panel] Error while setting up platform bwalarm
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 126, in _async_setup_platform
    SLOW_SETUP_MAX_WAIT)
  File "/usr/local/lib/python3.7/asyncio/tasks.py", line 416, in wait_for
    return fut.result()
  File "/config/custom_components/bwalarm/alarm_control_panel.py", line 410, in async_setup_platform
    alarm = BWAlarm(hass, config, mqtt)
  File "/config/custom_components/bwalarm/alarm_control_panel.py", line 431, in __init__
    self.init_variables()
  File "/config/custom_components/bwalarm/alarm_control_panel.py", line 570, in init_variables
    arm_states_dict = self._config[CONF_STATES]
KeyError: 'states'

Curioso que eu não tenho este erro, mas é um issue conhecido e já existe resolução no branch de devel.

Podes ver aqui o issue e resolução do mesmo: (na prática é substituir o componente por uma versão mais recente).

Igual… Actualizei para este: https://github.com/akasma74/Hass-Custom-Alarm/releases/tag/v1.6.0b

Fiz clear cache e

2019-06-25 22:01:06 ERROR (MainThread) [homeassistant.components.alarm_control_panel] Error while setting up platform bwalarm
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 126, in _async_setup_platform
    SLOW_SETUP_MAX_WAIT)
  File "/usr/local/lib/python3.7/asyncio/tasks.py", line 416, in wait_for
    return fut.result()
  File "/config/custom_components/bwalarm/alarm_control_panel.py", line 410, in async_setup_platform
    alarm = BWAlarm(hass, config, mqtt)
  File "/config/custom_components/bwalarm/alarm_control_panel.py", line 431, in __init__
    self.init_variables()
  File "/config/custom_components/bwalarm/alarm_control_panel.py", line 570, in init_variables
    arm_states_dict = self._config[CONF_STATES]
KeyError: 'states'

Esse é a versão 1.6.0b que penso ter 3 dias, mas o ficheiro que ele refere no issue é mais recente… Penso que tem apenas 2 dias.

E efetivamente comparei os dois e são ligeiramente diferentes e neste segundo que te envio é onde ele lida precisamente com a falta dessa chave de “states” que está a originar o erro.

https://raw.githubusercontent.com/akasma74/Hass-Custom-Alarm/dev/custom_components/bwalarm/alarm_control_panel.py

1 Like

Já deu… Obrigado.
Agora há está questão… Quando seleciono os sensores… Ele não os fixa.

Não consigo ver o video mas percebo o que dizes. Só me ocorre que possa ser o javascript.

Coloca pf isto no configuration.yaml

frontend:
  javascript_version: latest

Ele guarda tudo no alarm.yaml. Estás a conseguir guardar outras coisas tipo configuracoes e afins e é “apenas” os sensores que nao guarda?

No browser se abrires o log de javascript sabes se aparece algum erro?

E no log do HA surge algum erro?

@Luis_Belo, este problema é exactamente igual ao que um user reportou aqui e parece ter a ver com cache.

https://github.com/akasma74/Hass-Custom-Alarm/issues/2

O setup pode não ser fácil, mas depois de ficar OK vale a pena :slight_smile:

@mfrodrigues como e que consegues defenir o tempo para activar no painel final?


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade