[Custom Component] Alarmo - browser managed alarm system

Click on the line in the table to access the settings.

checked and this is what I have:
Device Type : Door
Enabled modes: highlighted are Home and Away
Advanced settings:
Use exit delay: not active
Use entry delay: Active
Arm after closing: Active
Bypass automatically: Not active
Trigger when unavailable: Not active

Hi everyone, just a small update :slightly_smiling_face:
With release v1.7.4 the support for configuring sensor groups is added.
Which is a bit of a hidden feature so I thought I owe you some introduction.

What are sensor groups about?
In a sensor group, 2 (or more) sensors need to be triggered within a defined time span, before the alarm will be activated.
This functionality is meant for suppressing false triggers, which unfortunately can happen (especially with battery-powered sensors and PIR motion detectors).

Example
A small example use-case:
You have a (square) living room which has 4 motion sensors, one in each corner.
All 4 sensors are assigned to sensor group ‘Motion living room’.
The sensor group is configured with a time-out of 5 minutes.

Now when the alarm is armed, the motion sensors start working together:

  • If two out of four motion sensors detect movement within 5 minutes, the alarm will be triggered.
  • If there is more than 5 minutes between detected movements of the different sensors, this is ignored.
  • If one sensor is continuously flickering (I actually have experienced this myself), this is ignored as well.

Where do I find this?
Update to v1.7.4 first.
You can find this feature within the sensor configuration page (so by clicking any sensor in the ‘Sensors’ tab).
Then click the ‘setup groups’ button here:

Opens a dialog where you can set up a like this:


I guess it speaks pretty much for itself, otherwise there is some documentation on it.

Hope you find this feature useful :+1:
Please like this post if you do, or let me know why you don’t (user feedback is very low lately) :slightly_smiling_face:

PS: This is a new feature, and although I tested it, it might contain bugs. Please take this in consideration.

7 Likes

I’m trying to activate Alarmo with a telegram command. I can’t find the mode!
can someone help me, maybe with an example? Thank you

done, thanks anyway

alias: attiva allarme con telegram
description: ‘’
trigger:

  • platform: event
    event_type: telegram_command
    event_data:
    command: /allarme
    condition: []
    action:
  • service: alarmo.arm
    data:
    code: ‘1111’
    entity_id: alarm_control_panel.casa
    mode: single

Hi!
I saw that this plugin has some support for other language than English, https://github.com/nielsfaber/alarmo/tree/main/custom_components/alarmo/frontend/localize/languages. I think that would be nice to have it translated to Swedish because even if I write some actions with Swedish text some sensor text when you use the build in parameters will still be in English. I can help out with that. Anyone know how I can do that?

You can submit (via pull request) a se.json file, based on the en.json.
Note that as alarmo grows the file needs to be periodically updated, so I prefer to see people taking care of the maintenance as well.
As for open_sensors text, I would like to make this translated as well. This is a bit harder since the message is composed by the backend (which doesn’t have access to the json translation file).

Would it be possible to allow arming from ‘home’ to ‘away’ without having to disarm in between and then still have the exit delay?

It can be a start to translate the existing English file but does maintenance of this work in these kind of project? How can I be notified if some text is the English file is changed or added so I can translate that to Swedish to?

Currently not, since state ‘leaving’ occurs only between ‘disarmed’ and ‘armed’ states, not when staying in ‘armed’ state.
Perhaps it would be possible to change this though.

There is no such mechanism in place.
If translations are missing, the English texts are used as fallback.
Typically new translations are required only after a new functionality is added.
If someone goes over the json file every one or two months, I think it should be sufficient.

You can achieve this by overloading any Alarmo alarm arming service calls in your configuration with a script like this. This script will check the current alarm state and if it’s not disarmed it will disarm the alarm, then arm it in the mode specified in the call

arm_alarm:
  alias: "Arm Alarm"
  description: "Arm house alarm."
  icon: mdi:alarm-bell
  fields:
    mode:
      description: "Alarm arm mode."
      example: 'away'
    code:
      description: "Alarm arm code."
      example: '1111'
    override:
      description: "Bypass open sensors."
      example: 'true'
  variables:
    hass_code: !secret ALARMO_HA
    code: "{{ code|default(hass_code) }}"
  sequence:
    - condition: template
      alias: Alarm not already armed
      value_template: "{{ not is_state('alarm_control_panel.master',mode) }}"

    - choose:
        - conditions:
            - condition: not
              alias: Alarm is not disarmed
              conditions:
                - condition: state
                  entity_id: alarm_control_panel.master
                  state: disarmed
          sequence:
            - service: alarm_control_panel.alarm_disarm
              target:
                entity_id: alarm_control_panel.master
              data:
                code: "{{ code }}"

    - choose:
        - conditions: "{{ override|default(false) }}"
          sequence:
            - service: alarmo.arm #ISSUE does not support target!
              data:
                entity_id: alarm_control_panel.master
                mode: "{{ mode }}"
                code: "{{ code }}"
                force: true
                skip_delay: true

      default:
        - service: alarmo.arm
          data:
            entity_id: alarm_control_panel.master
            mode: "{{ mode }}"
            code: "{{ code }}"

Example service call.

    - service: script.arm_alarm
      data:
        mode: night
        code: !secret ALARMO_HA

On a related note…

I’ve seen this warning pop up a few times recently and I’m not understanding why. The alarm is supposed to go from state arming to state armed_away. Any idea what’s happening here?

WARNING (MainThread) [custom_components.alarmo.alarm_control_panel] Cannot go to state armed_away from state arming.

Arming is only allowed when the alarm is disarmed (or armed in case of switching modes).
If the alarm is in arming, there is already a transition in progress. It can only be aborted by disarming, before starting another one.

1 Like

Ah ha. I knew exactly where to look after your explanation. I have an auto arming automation with multiple possible triggers. I had conditions for not already armed but I neglected to add a not arming condition as well. Thank you!

My Alarm Auto Arm Automation
- id: alarm_auto_arm #OCC
  alias: "[Alarm] Auto Arm"
  description: "Auto arm alarm by occupancy mode."
  mode: restart
  trigger:
    - platform: state
      id: disarmed
      entity_id: alarm_control_panel.master
      to: disarmed
      for: # wait to see if someone comes home (almost home, plug in dead phone)
        minutes: 5

    - platform: state
      id: away
      entity_id: input_select.occupancy_mode
      to:
        - Away
        - Vacation

    - platform: state
      id: night
      entity_id: input_select.occupancy_mode
      to:  Night

    - platform: state
      id: lock_keypad
      entity_id: # do not auto arm with garage side door
        - sensor.back_door_lock_status
        - sensor.front_door_lock_status
        - sensor.side_door_lock_status
      to:  #LOCK_USER
        - Locked (Keypad)
        - Locked (Jason)
        - Locked (Sheri)
        - Locked (Dawn)
  condition:
    - condition: state
      entity_id:
        - input_boolean.alarm_automation
        - input_boolean.alarm_auto_arming
      state: 'on'

    - condition: state
      entity_id: input_boolean.alarm_temp_override
      state: 'off'

    - "{{ is_state('input_boolean.lock_automation','on') if trigger.id in ['unlock_keypad','lock_keypad'] else true }}"
    - "{{ is_state('input_boolean.presence_automation','on') if trigger.id in ['away','night'] else true }}"
  action:
    - choose:
        - conditions: "{{ trigger.id == 'disarmed' }}"
          sequence:
            - wait_template: "{{ is_state('binary_sensor.someone_home','on') }}"
              timeout: # wait to see if presence override to turns on
                minutes: 5

            - condition: state
              entity_id: alarm_control_panel.master
              state: disarmed

            - condition: state
              entity_id: binary_sensor.someone_home
              state: 'off'

            - service: script.arm_alarm # rearm alarm if still disarmed and nobody home
              data:
                mode: away

        - conditions:
            - "{{ trigger.id in ['lock_keypad','away'] }}"

            - condition: not
              alias: Alarm not already armed_away
              conditions:
                - condition: state
                  entity_id: alarm_control_panel.master
                  state:
                    - armed_away
                    - arming
          sequence:
            - choose: #LOCK_USER
                - conditions: "{{ trigger.id == 'away' or trigger.to_state.state == 'Locked (Keypad)' }}"
                  sequence:
                    - service: script.arm_alarm
                      data:
                        mode: away

                - conditions: "{{ trigger.to_state.state == 'Locked (Jason)' }}"
                  sequence:
                    - service: script.arm_alarm
                      data:
                        mode: away
                        code: !secret ALARMO_JASON

                - conditions: "{{ trigger.to_state.state == 'Locked (Sheri)' }}"
                  sequence:
                    - service: script.arm_alarm
                      data:
                        mode: away
                        code: !secret ALARMO_SHERI

                - conditions: "{{ trigger.to_state.state == 'Locked (Dawn)' }}"
                  sequence:
                    - service: script.arm_alarm
                      data:
                        mode: away
                        code: !secret ALARMO_DAWN

        - conditions:
            - "{{ trigger.id == 'night' }}"

            - condition: not
              alias: Alarm not already armed_night
              conditions:
                - condition: state
                  entity_id: alarm_control_panel.master
                  state:
                    - armed_night
                    - arming
          sequence:
            - service: script.arm_alarm
              data:
                mode: night

Hi, do you also have this problem?
The Alarmo card is often slow to load, not always but often this happens.
This does not happen with the HomeAssistant “Alarm Control Panel” card, I have configured the two parallel cards to see the difference:

That is not how I wanted it to look :slightly_frowning_face:
Is this solved by refreshing the HA page, or it stays like this?
Does it occur only after restarting HA or more frequently?
I prefer to follow-up on this problem via GitHub issues.

it is also happening to me,
on every page refresh

Alarmo

This happens when for example I am doing something else on Homeassistant, then I open the view that contains that card and it remains like this for a few seconds.
It’s as if there was a delay during card loading, or a dialogue delay between card and Alarmo integration.

Thank you so much for this great component. I’m now using it as the main alarm system for my house.

I’ve set up Alerts in the configuration.yaml file which are working great based on Alarmo changing to triggered and when someone disarms the alarm it send a notification to my phone. I was able to add who disarmed it by pulling the changed_by state however to take this even further it would be great to disable users/codes based on who is present. i.e. I set up user James and then have an automation that says if James isn’t present that user code is disabled. The reason I require this is to force each user to use their code so I can accurately determine who disabled the alarm.

Is it possible to add an option to enable/disable users?

Thanks a lot for your feedback!

Unfortunately not.

However there is an open feature request about this, and I see it fairly easy to implement.
The only question is when. At the moment the time I can spend on improvements is quite limited.