Skip to content

Home Assistant integration for Pima Force alarm system

License

Notifications You must be signed in to change notification settings

amitfin/pima_force

Repository files navigation

Pima Force

HACS Badge

GitHub Release

Download Analytics

Project Maintenance

This integration is not affiliated with Pima.

The integration creates binary_sensor entities for Pima Force alarm system zones. The sensors turn on when the zone is "open" (i.e., triggers the alarm when it's armed). This is a read-only integration and does not have the ability to control or change the alarm system. It reads SIA events with ADM-CID payload sent from the alarm. The integration does not require additional hardware.

Note: a guide to controlling Pima Force (outside of this read-only integration) is available here.

Install

HACS is the preferred and easiest way to install the component and can be done using this My button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Otherwise, download pima_force.zip from the latest release, extract and copy the content under custom_components directory.

A Home Assistant restart is required once the integration files are copied (either by HACS or manually).

The integration should also be added to the configuration. This can be done using this My button:

Open your Home Assistant instance and start setting up a new integration.

There are 2 fields:

  1. Port: the port to listen for incoming events. The default is 10001, which is also the default port in the alarm. It should be kept as is unless there is a specific reason not to.
  2. Zone names: An ordered list of zone names as defined in the alarm system. The integration does not have access to the alarm’s configured zone names, so they must be entered manually and in the correct order. If a specific zone in the alarm is not used, there should be a corresponding empty item on the list to preserve zone number alignment. For example, if the alarm has 3 zones: 1=door, 2=[not used], 3=window, the list should be door, [empty], window.

After the component is installed, it can be reconfigured using the Configure dialog, which can be accessed via this My button:

Open your Home Assistant instance and show an integration.

image

Pima Force Setup

Codes

There are 3 sets of codes:

  1. Regular user code: the code to arm / disarm the system and configure basic settings (e.g. bypass zones).
  2. Master user code: opens additional options in the user menu.
  3. Master technician code: a different menu used by installers to set up the system.

This setup can be done only with the master technician code. User codes, either regular or master, are not enough. Please make sure you know the master technician code before proceeding. The rest of the instructions assume you entered the technician menu by entering the master technician code.

Keyboard

The alarm's keypad has limited capabilities, so here are a few tips on how to use it:

  • Press star (*) to change from capital letters to small letters and then to numbers (circular). Only numbers (and dots) will be used for this configuration.
  • When entering numbers, pressing twice on the number one (1) produces a dot (.).
  • Pressing twice on the hash key (#) clears the value.
  • After changing a value, press enter () to exit (and not the back key ).
  • To save a changed configuration, press back () multiple times until exiting from the main menu. The alarm will reboot.

Monitoring Station

Home Assistant IP:port should be configured as a Central Monitoring Station (CMS) in the alarm's configuration. The alarm sends the events to its monitoring stations. There are 4 different settings which should be configured (please read carefully, or it won't work):

  1. System Configuration => CMS & Communications => Monitoring Stations => CMS 1 => Communication Paths => Network (Ethernet) => Network Addresses:
    • IP 1: enter Home Assistant's IP address, e.g. 192.168.1.100.
    • Port 1: the port which is configured for the integration. The default port is the same in the alarm and the integration (10001) so there is no need to change it.
  2. System Configuration => CMS & Communications => Monitoring Stations => CMS 1 => Communication Paths => Network (Ethernet) => Account IDs:
    • Partition 1: enter a 6-character account ID. The actual value is ignored, but must be present. 111111 will do (or anything else).
  3. System Configuration => CMS & Communications => Monitoring Stations => CMS 1 => Communication Paths => Network (Ethernet):
    • Account ID length: change it from 16 to 6 so it matches the length of the account ID entered in the previous step.
    • Disable encryption: this is not checked by default. Press enter () to disable encryption (which is not supported).
  4. System Configuration => CMS & Communications => Monitoring Stations => CMS 1 => Event Reporting:
    • Zone/output Toggle: this is not checked by default. Press enter () to set the alarm to send events on zone status changes. Without this option selected, the relevant events won't be sent and the integration will not be notified when a zone is open or closed.

Binary Sensors

The integration creates a binary sensor for each zone. It skips zones with an empty name (but it takes empty zones into account for numbering correctly the rest of the zones).

The entity_id has the format of binary_sensor.pima_force_<port>_zone<#>. For example: binary_sensor.pima_force_10001_zone5.

The default device class is Door, but it can be changed by customizing the entity. It's not required to change the device class and it doesn't impact the underline implementation. It can be done for UI purposes, like changing the icon and displayed state (which is translated based on the device class).

Each sensor exposes attributes (timestamps are local time, ISO 8601):

  • zone: zone number from the configured list.
  • last_set: last time the zone state was set (including test services).
  • last_open: last time the zone reported open.
  • last_close: last time the zone reported closed.

The state is restored after Home Assistant restarts, but events that occur during downtime can be missed. For example, if a door opens while Home Assistant is rebooting, the sensor will still show "closed" (off) until the next change. Because the alarm only sends events on changes (not periodically), any mismatch is corrected the next time that zone reports a change.

Dashboard

Here is an example of a markdown card which lists all zones sorted by their last status change:

- title: Zone Status History
  type: markdown
  content: |
    | Zone | Set | Open | Closed |
    |------|-----|------|--------|
    {% for sensor in states.binary_sensor |
         selectattr('entity_id', 'in', integration_entities('pima_force')) |
         sort(attribute='attributes.friendly_name') |
         sort(attribute='attributes.last_set', reverse=True)
    -%}
    | {{ sensor.attributes.friendly_name.split()[2:] | join(' ') }} |
    {{- as_timestamp(sensor.attributes.last_set) | timestamp_custom('%H:%M:%S %d/%m/%y', true) }} |
    {{- (as_timestamp(sensor.attributes.last_open) | timestamp_custom('%H:%M:%S %d/%m/%y', true)) if sensor.attributes.last_open else '' }} |
    {{- as_timestamp(sensor.attributes.last_close) | timestamp_custom('%H:%M:%S %d/%m/%y', true) }} |
    {% endfor %}
image

Automation

The sensors can be used also in automation rules. For example,

alias: Safe is open
triggers:
  - trigger: state
    entity_id: binary_sensor.pima_force_10001_zone999  # safe's zone
    to: "on"
actions:
  - action: notify.mobile_app
    data:
      title: Alarm System
      message: Safe is open!

Here is a more sophisticated example, which combines also the alarm panel entity (not created by this integration):

alias: Alarm is triggered
triggers:
  - trigger: state
    entity_id: alarm_control_panel.home_alarm_panel
    to: triggered
actions:
  - variables:
      start: "{{ now() | as_timestamp - 2 }}"
  - repeat:
      until:
        - condition: template
          value_template: "{{ last_set > start }}"
      sequence:
        - delay:
            milliseconds: 500
        - variables:
            entity_id: |-
              {{
                states.binary_sensor |
                selectattr('entity_id', 'in', integration_entities('pima_force')) |
                sort(attribute='attributes.last_set', reverse=True) |
                first |
                attr('entity_id')
              }}
            last_set: "{{ state_attr(entity_id, 'last_set') | as_timestamp }}"
            zone: "{{ state_attr(entity_id, 'friendly_name').split()[2:] | join(' ') }}"
  - action: notify.mobile_app
    data:
      title: 🚨🚨 Alarm System 🚨🚨
      message: "The alarm was triggered by the zone: {{ zone }}"

Additional automation ideas can be:

  • Turning on lights using motion sensors.
  • Use motion sensors for presence (or absence) detection.
  • Notify on door sensors, for example, when the backyard door (the pool area) is open.

Services

The integration exposes services to read and update the configured zone names. It also provides testing-only actions that can simulate zone state changes in Home Assistant.

pima_force.get_zones

Returns the zone name list for a specific config entry. Empty items are preserved to keep zone numbering aligned with the alarm. The response payload contains zones, an ordered list of strings.

service: pima_force.get_zones
data:
  config_entry_id: 1234567890abcdef1234567890abcdef

pima_force.set_zones

Replaces the zone name list for a specific config entry. Provide an ordered list of strings; use empty strings for unused zones.

service: pima_force.set_zones
data:
  config_entry_id: 1234567890abcdef1234567890abcdef
  zones:
    - Front Door
    - ""
    - Back Door

pima_force.set_open (testing only)

Marks a zone as open in Home Assistant without sending anything to the alarm system. Use this only for testing automations and dashboards. The zone stays open until the alarm explicitly reports otherwise or pima_force.set_closed action is performed.

service: pima_force.set_open
target:
  entity_id: binary_sensor.pima_force_10001_zone5

pima_force.set_closed (testing only)

Marks a zone as closed in Home Assistant without sending anything to the alarm system. Use this only for testing automations and dashboards. The zone stays closed until the alarm explicitly reports otherwise or pima_force.set_open action is performed.

service: pima_force.set_closed
target:
  entity_id: binary_sensor.pima_force_10001_zone5

Troubleshooting

Below are some troubleshooting tips, mainly focused on the initial setup:

  1. After configuring the alarm, verify its status. If the alarm has a communication issue with its CMS (in this case, the integration), an error message should appear on the keypad screen.
  2. Enable debug logging for the integration and check whether the log contains entries indicating that SIA messages are being received and processed:
[pysiaalarm.base_server] Incoming line: 9A940041"ADM-CID"0141R1L0#AAAAAA[#AAAAAA|1760 01 032]_17:04:37,02-12-2026
[pysiaalarm.event] Content matches: {'account': 'AAAAAA', 'event_qualifier': '1', 'event_type': '760', 'partition': '01', 'ri': '032', 'xdata': None, 'timestamp': '17:04:37,02-12-2026'}
[pysiaalarm.aio.server] Incoming event: Content: #AAAAAA|1760 01 032]_17:04:37,02-12-2026, Zone (ri): 032, Code: YN, Message: , Account: AAAAAA, Receiver: R1, Line: L0, Timestamp: 2026-02-12 17:04:37+00:00, Length: 0041, Sequence: 0141, CRC: 9A94, Calc CRC: 9A94, Encrypted Content: None, Full Message: "ADM-CID"0141R1L0#AAAAAA[#AAAAAA|1760 01 032]_17:04:37,02-12-2026.
[pysiaalarm.aio.server] Outgoing line: b'\n53C40018"ACK"0141R1L0#AAAAAA[KC]\r'

Uninstall

  1. Delete the configuration:

    • Open the integration page (my-link), click the 3‑dot menu (⋮), and select Delete.
  2. Remove the integration files:

    • If the integration was installed via HACS, follow the official HACS removal instructions.
    • Otherwise, manually delete the integration’s folder custom_components/pima_force.

📌 A Home Assistant core restart is required in both cases to fully apply the removal.

Contributions are welcome!

If you want to contribute to this, please read the Contribution guidelines.

About

Home Assistant integration for Pima Force alarm system

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published