Skip to main content

Pyronix Cloud for Home Assistant

Status: pre-alpha. The protocol was worked out from the Android app (see PROTOCOL.md). Read-only sessions (handshake, login, state dump, pushed updates) have been tested against a real Euro 46. The library and integration are tested offline against a fake panel; arming and disarming have not been tested on a real panel yet. Do not rely on this to protect your property.

An unofficial Home Assistant custom integration for Pyronix intruder alarm panels (Enforcer, Euro 46). It uses the same Pyronix Cloud relay as the official HomeControl2.0 app.

Not affiliated with or endorsed by Pyronix or Hikvision.

How it works

The panel has no local API that the app uses. Everything goes through the Pyronix Cloud:

Home Assistant ──WSS──▶ wss://app.pyronixcloud.com ──(panel uplink)──▶ Panel
        └────────── end-to-end session: ECDH P-256 + AES-128-CFB ──────────┘
  1. Cloud relay. An XML-like handshake identifies the panel and opens a relay.
  2. Encrypted panel session. Binary frames are protected with keys derived from an ECDH exchange and the panel's app password.
  3. Application layer. The client sends one-byte opcodes (arm, disarm, omit, outputs, log). The panel replies with JSON documents (panel, areas, inputs, outputs, user, faults, log).

The full specification is in PROTOCOL.md.

Features (first version)

HA platform What it shows
alarm_control_panel One entity per panel on level-set panels: level A → away, B → night, C → custom bypass. State comes from the panel's area status codes. Arming uses force-omit, as the app does. Area-set panels get one entity per area.
binary_sensor One per input (zone): open/closed.
sensor Diagnostic: connection state and fault count.
Diagnostics Download with all credentials and identifiers redacted.

Connection modes (Settings → Devices & services → Pyronix Cloud → Configure):

  • On demand (default). Every few minutes (default 2) and for each arm or disarm, Home Assistant opens a short session, reads the panel state, says goodbye and disconnects. The panel allows one remote session at a time, so the HomeControl2 app is blocked only for those few seconds.
  • Persistent ("live updates"). Keeps one session open for instant input and area changes, and reconnects with back-off. While it is connected, the HomeControl2 app cannot log in.

Planned: output switches, input omit, the event log and PIR-camera photos.

Installation

  1. In HACS, add this repository as a custom repository (category Integration) and install Pyronix Cloud. HACS installs the pyronix-cloud library from PyPI.
  2. Restart Home Assistant (2026.2 or later).
  3. Add the Pyronix Cloud integration and enter the details below.

What you need

The same details HomeControl2 uses. Each one is listed with its label in the app:

  • Device name (AppUser). This is a free-text name for the client, shown in the app under Settings > User Name. It defaults to the phone model and is not your e-mail.
  • System ID (PanelId, 8 characters). You entered it when you added the panel, and the app shows it as "Panel ID:".
  • App password (PanelPwd). The login screen asks for this. Your installer set it, and it is not your keypad code.
  • User code (UserCode). The login screen asks for this too. It is your keypad code.
  • An active Pyronix Cloud subscription for the panel

Repository layout

PROTOCOL.md                 Reverse-engineered protocol specification
probe/                      Stand-alone read-only protocol test script (step 1)
src/pyronix_cloud/          Async client library, no HA dependency (published as pyronix-cloud)
src/pyronix_cloud/testing/  Fake cloud relay + panel for offline tests and dev instances
custom_components/pyronix_cloud/   Home Assistant integration
tests/                      Library tests; tests/integration/ holds the HA tests
apk/, decompiled/           Local-only reverse-engineering inputs (gitignored, never committed)

Roadmap

  1. Probe: done; read-only live sessions answered most of PROTOCOL.md §13.
  2. Library and integration: first version done, tested offline.
  3. Confirm a real set/unset sequence on a live panel (§13 Q12), then outputs, omit and the log.
  4. Publish pyronix-cloud to PyPI, list in HACS, submit brand images; later, HA core.

Developing against the fake panel

uv run python -m pyronix_cloud.testing --port 8765

This serves a fake cloud relay and panel on ws://127.0.0.1:8765 and prints its test credentials. In the config flow, open Advanced and set the cloud relay URL to it.

Trying the probe

cp .env.example .env        # then fill in your panel details
# see probe/README.md for install and run instructions

.env is gitignored. Never commit credentials, captures or logs that contain them.

Contributing / development

See AGENTS.md for conventions, safety rules and the development workflow. These apply to human and AI contributors alike.

Licence

Per-file licensing follows the REUSE specification (see REUSE.toml).

This project is for interoperability with hardware you own. The APK and decompiled sources are used locally for analysis and are never redistributed.

Metadata

Release files for pyronix-cloud 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyronix-cloud 0.1.0
File Size Uploaded Provenance Actions
pyronix_cloud-0.1.0.tar.gz 126.8 kB With provenance Details for pyronix_cloud-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pyronix-cloud 0.1.0
File Interpreter ABI Platform Actions
pyronix_cloud-0.1.0-py3-none-any.whl Python 3 none any Details for pyronix_cloud-0.1.0-py3-none-any.whl

Total release size: 210.0 kB

Release files / pyronix_cloud-0.1.0.tar.gz

Download URL pyronix_cloud-0.1.0.tar.gz
Size 126.8 kB
Tags Source
SHA-256 checksum
How to use checksums
02810e1b8ac078e29056d800536e5e516125246f1ec9177385f96580968bbbf3
BLAKE2b-256 checksum
How to use checksums
c7c58fd25f46367fd16975125f6685c314f56cb0c2816b5be3bed2e0d2da4cf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / pyronix_cloud-0.1.0-py3-none-any.whl

Download URL pyronix_cloud-0.1.0-py3-none-any.whl
Size 83.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
428c5b29ff0b7dc49dd43c9d50e42cc300a8b7508e422b61578693b809d6dfee
BLAKE2b-256 checksum
How to use checksums
13f28de98423c3c25135f3fefbf34d8795632a8fc07b057a63ae4224d8e566ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Security for pyronix-cloud 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pyronix_cloud-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page