YET another take on an alarm system

Uploaded a quick fix for mobile buttons. Please update to alarm.html 1.3.1

The next release is bringing direct user integration with the new HA v0.7 user authentication system, I’ll add an option to override the panel code to disarm on a per user basis. This will allow users already authenticated to quickly arm/disarm without the need for additional codes/passwords. Obviously this will be optional as mounted wall panels should still use panel specify codes.

It adds to the WAF in our house as the wife can quickly disarm from her (finger print access) phone as she is already authenticated to HA.

Let me know what you think

4 Likes

So it seems the reason I got a unknown status is because of the lovelace card. Because while it was showing unknown state, I switched to normal ui and the it show the countdown. However the countdown was not correct. It seems the counter on the UI is started when I load the webpage. So the alarm got triggered long before the countdown finished.

I cant believe how beautiful your alarm panel is! Great job once again!
It also feels faster! (is it just me?)

Thanks!

I have refactored some of the code with the aim of making it faster. For some reason however IOS or at least on an Iphone 6S the interface has a delay which I can’t figure out yet.

Thank you for the job done. I haven’t test yet but it looks promising and it was one of the last thing I was looking for before switching from jeedom to HA.

Any chance to get it included as officiel component?

Again, thanks !

Okay Just curious is there a way to get this to work with say the Alarm decoder component? I already have the alarm system in the house but would like to use this interface instead as its a lot friendlier for the wife to use. I’m a bit of a noob this so not sure how I would go about that.

Got it all working now. Thank you for a fantastic ui.

Apologies for resurrecting such an old post, but could you please share how you managed to set the Yeelights? I tried everything, but haven’t succeeded. As far as I know is should be as simple as making a call to light.turnon with data:

{
“effect”: " Police",
“entity_id”: " light.yeelight_rgb_7811dc6ba370"
}

I am trying to implement some of my scripts, switches and entities on the custom-elements panel, but I cant find out how
 I had no problem doing this for my camera feed, but that was just a link I pasted on an iframe
 Anyone who can help?

I use a script which I call from the alarm triggered action:

scripts.yaml

#script:
alarm_lights_on:
  alias: Alarm Lights On
  sequence:
  - service: homeassistant.turn_on
    data:
      entity_id: group.alarm_lights
      effect: police

where all my RGB Yeelights are in a group called ‘alarm_lights’. Perhaps the capital P in police is causing you the issue? or needing the effect after the entity_id?

Thanks! I don’t know what I did wrong, but after retyping everything it works as expected now :smiley:

I’m still having problems with arming home and it arming away.

As stated previously arming home from the service tab works but doing so from an automation will arm away.

If there’s any debug steps I can take to work this out that would be great.

Can you please paste your configuration? I can arm using automations, with no problems.

I’m trying to separate out the “entry delay” and “exit delay”, which previously were just known as pending_time. I want more time to leave than to arrive. So I’ve added exit_delay_time variable, to the Python, which I think is mostly working. However, I have no idea how to get the circle360 graphic on the web page to change to use my exit_delay_time variable. So while my exit delay is, for example, now 100 seconds long, the circle counts down from 45, then sits there at 0 for the other 55 seconds until the alarm actually activates.

Anyone point me to some ideas on how to get the 360-degree countdown graphic to use my new variable?

Here’s what I changed in the python:

39c39
< VERSION                     = '1.0.2'
---
> VERSION                     = '1.0.2b'
77a78
> CONF_EXIT_DELAY_TIME           = 'exit_delay_time'
166a168
>     vol.Required(CONF_EXIT_DELAY_TIME, default=90):                vol.All(vol.Coerce(int), vol.Range(min=0)),
237a240
>         self._exit_delay_time        = config[CONF_EXIT_DELAY_TIME]
357a361
>             'exit_delay_time':          self._exit_delay_time,
523c527
<                 if (datetime.timedelta(seconds=self._pending_time_by_state[STATE_ALARM_ARMED_HOME]) and override_pending_time == False):
---
>                 if (datetime.timedelta(seconds=self._exit_delay_time) and override_pending_time == False):
530c534
<                 if (datetime.timedelta(seconds=self._pending_time_by_state[STATE_ALARM_ARMED_AWAY]) and override_pending_time == False):
---
>                 if (datetime.timedelta(seconds=self._exit_delay_time) and override_pending_time == False):
538c542
<                 if (datetime.timedelta(seconds=self._pending_time_by_state[STATE_ALARM_ARMED_PERIMETER]) and override_pending_time == False):
---
>                 if (datetime.timedelta(seconds=self._exit_delay_time) and override_pending_time == False):
573c577
<                 _LOGGER.debug("[ALARM] Pending user leaving house")
---
>                 _LOGGER.debug("[ALARM] Pending user leaving house - activate after exit delay")
575c579
<                 self._timeoutat = now() + datetime.timedelta(seconds=self._pending_time_by_state[self._armstate])
---
>                 self._timeoutat = now() + datetime.timedelta(seconds=self._exit_delay_time)

I implemented separate entry/exit delays in my fork here:
https://github.com/jcooper-korg/Hass-Custom-Alarm/tree/johns-customizations
(Click on “commits” to see my list of changes)

I wasn’t able to get the newUI branch working here, and the master branch has some issues (as I reported earlier in this thread). So I forked and made the following changes:

  • implement separate warning time and pending time. allows longer countdown when arming and leaving the house, and shorter countdown when re-entering the house.
  • immediate sensors should trigger the alarm in pending/warning state, unless on the override list
  • shouldn’t trigger alarm in warning mode if sensor is in override list. (e.g. motion is in override list for away mode to allow walking to the panel to disarm).
  • cosmetic tweaks to make it look better in landscape mode on my Fire 7 tablet (reducing vertical space usage, making button text larger, moving 0 below the 8, etc)

Hope this helps,
John

(apologies if this has been covered but I can’t find it)

I’d like to use device tracking/presence to automatically arm/disarm the alarm.

I’m trying to get my alarm system to arm itself automatically a few minutes after “group.tracked_devices” goes “away” meaning everyone has left the house. However, when I’ve tested setting alarm_control_panel.home manually to “armed_away”, the alarm does not go off when I open an immediate door nor does it enter “warning” when I open a delayed door.

I also tried setting it to “pending”, thinking perhaps the state machine needs to pass through pending first, but it does not automatically proceed to “armed_away” when manually set to pending.

Has anyone figured out a working automation to arm/disarm the alarm system based on device tracking/presence?

John,
This is great, although you have the same problem I did. The graphic during the “warning time” shows a countdown timer for “pending time”. So the timer you see after entering the house doesn’t actually show how much time is left before the alarm sounds. Any idea where/how to correct that?

- id: Automatic_Alarm_Arm
  alias: 'Automatic Alarm Arm'
  trigger:
    entity_id: device_tracker.tom_iphone
    platform: state
    to: 'not_home'
    for:
      minutes: 2
  condition:
    condition: template
    value_template: "{{ is_state('alarm_control_panel.house', 'disarmed') }}"
  action:
    service: script.turn_on
    entity_id: script.alarm_arm_instant

- id: Automatic_Alarm_Disarm
  alias: Automatic Alarm Disarm
  trigger:
    - entity_id: device_tracker.tom_iphone
      platform: state
      to: 'home'
  condition:
    condition: template
    value_template: "{{ not is_state('alarm_control_panel.house', 'disarmed') }}"
  action:
    service: script.turn_on
    entity_id: script.alarm_disarm


alarm_arm_instant:
  sequence:
    service: alarm_control_panel.alarm_arm_away
    entity_id: alarm_control_panel.house
    data:
      code: '-1'

alarm_disarm:
  sequence:
    service: alarm_control_panel.alarm_disarm
    entity_id: alarm_control_panel.house
    data:
      code: !secret alarm_code
1 Like

It all works fine for me. I have this in alarm.yaml:

armed_home: 
  pending_time: 0
  warning_time: 45
  trigger_time: 300 
  [...etc...]
armed_away: 
  pending_time: 60
  warning_time: 30
  trigger_time: 600  
  [...etc...]

I see it countdown from 60 when I leave in away mode, and count down from 30 when I enter.
Did you see the change in alarm.html’s monitorAlarm() to use warning_time_by_state in the warning alarm.state handler?

-John