Hi everyone,
A few months ago I published a local INIM Prime integration that used the PrimeLAN HTTP API to control the alarm panel.
As many of you may have noticed, the PrimeLAN HTTP API is slow, incomplete, and appears to be buggy on newer firmware versions (for example, 4.07, where output control is unreliable). Because of these limitations, I started looking for a more robust alternative.
Over the past months, I’ve been analysing the network traffic between INIM Prime/STUDIO software and the alarm panel using Wireshark. After a lot of trial and error, I was able to understand and partially reconstruct the native INIM Prime protocol.
Python library (native protocol)
I’ve now developed an early-stage Python library that communicates directly with the panel using this native binary protocol (the same one used internally by INIM Prime/STUDIO).
Compared to the HTTP API, this approach is significantly faster and more complete.
Repository: GitHub - Pitscheider/inim-prime-protocol: An unofficial Python library for communicating with Inim Prime alarm panels using the native binary protocol, the same protocol used by the official Inim Prime/STUDIO software. · GitHub
Current status
This project is still alpha / experimental. The wire layer is functional and a small set of operations have been implemented and tested against my own panel setup (Inim Prime 60 zones with PrimeLAN).
There is still no unified client yet, and the API surface is expected to evolve.
What currently works
At the moment, the library supports the following operations:
-
get_panel_info — serial number, firmware version, model
-
get_partition_names — partition names
-
get_partition_statuses — armed state and alarm status per partition
-
get_partitions — combined names + statuses
-
set_partition_modes — arm/disarm (total, partial, instant, disarmed)
-
reset_partitions — reset partition alarm state
-
resolve_address — internal address resolution
Architecture overview
The implementation is based on analysis of the native protocol and includes:
-
AES-128-CBC encrypted communication (keys derived from panel password)
-
CRC-16/ARC frame integrity checks
-
Binary frame parsing (outer + inner headers)
-
Async TCP transport with chunked reads
-
Read/command request handling
The protocol itself appears to be extremely fast and efficient compared to the HTTP interface.
What’s next
My goal is to extend this work to support:
Ultimately, the long-term goal is to build a Home Assistant integration based on this native protocol.
Notes on compatibility
This implementation is currently based on observations from a single setup:
I have not yet been able to validate behavior across different panel models or configurations. One interesting possibility is that this protocol may also work without PrimeLAN, but this is currently untested.
How you can help
This is an early-stage research project. It is not yet ready for production use, and the API will change as development continues.
I would really appreciate help from the community, especially from anyone who:
If you’re interested, feel free to reach out via GitHub issues or DM on Home Assistant forums.
Legal notice
This project is an independent, unofficial implementation based on passive observation of network traffic between INIM Prime/STUDIO software and an INIM Prime panel owned by the author.
It is published under the GNU GPL v3.0. See inim-prime-protocol/LEGAL.md at befdc407ccd37ce79cf3d7e3c6efc959ca1980ed · Pitscheider/inim-prime-protocol · GitHub for full legal details and disclaimer.