https://github.com/peyton/homeassistant-anona-holo
Home Assistant custom integration for Anona Security smart locks.
https://github.com/peyton/homeassistant-anona-holo
anona-security custom-integration hacs home-assistant homeassistant smart-lock
Last synced: about 2 months ago
JSON representation
Home Assistant custom integration for Anona Security smart locks.
- Host: GitHub
- URL: https://github.com/peyton/homeassistant-anona-holo
- Owner: peyton
- License: mit
- Created: 2026-03-27T21:02:20.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2026-04-20T01:18:48.000Z (about 2 months ago)
- Last Synced: 2026-04-20T03:27:16.415Z (about 2 months ago)
- Topics: anona-security, custom-integration, hacs, home-assistant, homeassistant, smart-lock
- Language: Python
- Size: 101 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Anona Holo
Home Assistant custom integration for the Anona Holo smart lock, available [here](https://www.anonasecurity.com/products/holo).
## Supported Features
This integration currently supports:
- lock and unlock commands
- lock state
- online and availability state
**This integration does not support the Anona Holo Keypad.** Raw keypad-related diagnostic fields may still appear in lock attributes because the upstream lock status payload includes them, but no keypad entity or keypad controls are provided.
## HACS
This integration is structured for HACS distribution:
1. Add this repository to HACS as a custom integration repository, or install it directly once the repository is published in HACS.
2. Install `Anona Holo`.
3. Restart Home Assistant.
4. Add the integration from `Settings -> Devices & services`.
5. Sign in with the same email address and password you use in the Anona app.
If you already installed the previous version of this integration, remove it first and then add the renamed `anona_holo` integration again. This rename is a breaking change and does not include a migration path for existing installs.
Minimum tested Home Assistant version: `2026.3.4`
## Status
This integration matches the Anona mobile app API shape that was captured and verified live using Anona Security v1.5.0 for iOS:
- base64 response envelopes with `resultBodyObject`, `error`, and `errorCode`
- server-time bootstrap via `/baseServiceApi/V2/getTs`
- verified request signing for login and authenticated HTTP calls
- normalized home and device discovery
- online state from `/anona/device/api/getDeviceOnlineStatus`
- lock state and battery parsing from `dataHexStr`
- websocket bootstrap via `getDeviceCertsForOwner` and `getWebsocketAddress`
The repository also includes the reconstructed websocket command helpers from the native app capture:
- plaintext websocket handshake using the session token from `getWebsocketAddress`
- AES-CBC websocket frame encryption/decryption with the app's trailing little-endian CRC32
- websocket command JSON using the mobile-client `deviceType = 73` and `target = 2`
- protobuf command packing for `sendID = 7` (`lockDoor`) and `sendID = 6` (`unLockDoor`)
- same-`operateId` ack/result parsing through Home Assistant lock service calls
## Development
From a clean checkout:
```bash
mise bootstrap
just lint
just typecheck
just test
```
`mise bootstrap` installs the pinned CLI tools, creates `.venv`, installs the Python dependencies, and refreshes the `hk` git hooks. The `justfile` is the canonical manual command surface after bootstrap.
For local Home Assistant development, run `just develop`. It will create an ignored `config/` directory with a default `configuration.yaml` on first run and preserve any existing local changes under that directory.
## Repository Notes
- Runtime code lives in `custom_components/anona_holo`.
- Fixture-backed tests live in `tests/`.
- The migration exec plan is in [`docs/execplans/2026-04-01-align-anona-security-with-captured-api.md`](docs/execplans/2026-04-01-align-anona-security-with-captured-api.md).
- The websocket command capture note is in [`docs/2026-04-02-anona-websocket-command-capture.md`](docs/2026-04-02-anona-websocket-command-capture.md).