Skip to main content

pylocal-akuvox

CI Documentation License Python

Async Python library for the Akuvox local HTTP API.

pylocal-akuvox provides a single AkuvoxDevice object for communicating with Akuvox intercoms and access controllers on the LAN. It supports user/PIN management, relay control, schedule management, and log retrieval over the device's local HTTP API.

Features

  • Async-only — designed for asyncio event loops and Home Assistant
  • Single runtime dependency — only aiohttp
  • Full device management — users, PINs, relays, schedules, and logs
  • Multiple auth modes — None, Allowlist, Basic, and Digest
  • SSL support — including self-signed certificate handling
  • Legacy TLS compatibility — OpenSSL SECLEVEL relaxation for old devices
  • Comprehensive error handling — typed exception hierarchy
  • Capability-aware API — built-in device support matrix, safe probing, and fail-fast unsupported-operation checks
  • Contact schema fidelity — door-phone and apartment-book contact records preserve their device-specific fields

Installation

pip install pylocal-akuvox

Quick Start

import asyncio
from pylocal_akuvox import AkuvoxDevice


async def main():
    async with AkuvoxDevice("192.168.1.100") as device:
        info = await device.get_info()
        print(f"{info.model} — FW {info.firmware_version}")


asyncio.run(main())

Capability-aware API

Known device classes are matched against a built-in capability matrix when the connection opens. For unfamiliar devices, or after a firmware update, run the safe read-only probe and then act only on confirmed capabilities:

import asyncio
from pylocal_akuvox import AkuvoxDevice, Capability, CapabilityStatus


async def main():
    async with AkuvoxDevice("192.168.1.100") as device:
        capabilities = await device.probe_capabilities()

        user_add_status = capabilities.status_of(Capability.USER_ADD)
        if user_add_status is CapabilityStatus.SUPPORTED:
            await device.add_user(
                name="Alice",
                user_id="2001",
                web_relay="0",
                schedule_relay="1001-1",
                lift_floor_num="0",
                private_pin="1234",
            )
        else:
            print("User creation is not confirmed for this device")


asyncio.run(main())

The probe uses a deterministic, non-destructive read sequence. Operations whose status is UNSUPPORTED always fail fast. Operations whose status is UNKNOWN fail fast by default; set device.attempt_unknown_capability = True only when you intentionally want to try an unproven device-side operation. The effective profile is available as device.capabilities for the current connection.

The examples below call service methods directly for brevity. They assume the relevant capability is SUPPORTED; for portable code, guard each operation with the probed or matrix profile as shown above.

Contact models

Door-phone devices such as X916 and E18C expose contacts with ID, Name, Phone, and Group. Apartment-book devices such as X915S expose contacts with Name, Phone, APTName, APTNum, Building, and Landline; they have no device-assigned ID or Group.

Contact exposes apartment-book metadata as apt_name, apt_num, building, and landline. Those fields are None on door-phone records. Apartment-book contacts are read-only over the public HTTP API, so manage them through the device web UI, provisioning, or another vendor-supported channel.

Manage Users and PINs

import asyncio
from pylocal_akuvox import AkuvoxDevice


async def main():
    async with AkuvoxDevice("192.168.1.100") as device:
        await device.add_user(
            name="Alice",
            user_id="2001",
            web_relay="0",
            schedule_relay="1001-1",
            lift_floor_num="0",
            private_pin="1234",
        )

        users = await device.list_users()
        for user in users:
            print(f"{user.name} (ID: {user.user_id})")


asyncio.run(main())

Trigger a Door Relay

Door-phone models that support the JSON relay API use trigger_relay(), which sends /api/relay/trig with the connection's AuthConfig:

import asyncio
from pylocal_akuvox import AkuvoxDevice


async def main():
    async with AkuvoxDevice("192.168.1.100") as device:
        await device.trigger_relay(num=1, delay=5)


asyncio.run(main())

IT83-class devices use Akuvox's separate Open Relay Via HTTP setting instead. Enable Phone → Relay → Open Relay Via HTTP on the device and pass those relay-specific credentials per call:

import asyncio
from pylocal_akuvox import AkuvoxDevice


async def main():
    async with AkuvoxDevice("192.168.1.100") as device:
        await device.open_door_http(
            user="relay-user",
            password="relay-password",
        )


asyncio.run(main())

The vendor endpoint carries the OpenDoor password in the URL query string, so it can appear in proxy or device access logs outside this library. On an IT83, trigger_relay() raises an actionable error directing callers to AkuvoxDevice.open_door_http() instead of sending a credential-less OpenDoor request.

Authentication

import asyncio
from pylocal_akuvox import AkuvoxDevice, AuthConfig, AuthMethod


async def main():
    # Basic Auth
    auth = AuthConfig(method=AuthMethod.BASIC, username="admin", password="secret")
    async with AkuvoxDevice("192.168.1.100", auth=auth) as device:
        info = await device.get_info()


asyncio.run(main())

Documentation

Full documentation is available at pylocal-akuvox.readthedocs.io.

Contributing

This project uses uv for dependency management.

# Clone and install
git clone https://github.com/tykeal/pylocal-akuvox.git
cd pylocal-akuvox
uv sync --group dev

# Run tests
uv run pytest tests/ -x -q

# Run linting
uv run ruff check src/ tests/

# Build docs locally
uv run --extra docs sphinx-build -b html docs docs/_build/html

License

Apache-2.0 — see LICENSE for details.

Metadata

Release files for pylocal-akuvox 1.7.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 pylocal-akuvox 1.7.0
File Size Uploaded Provenance Actions
pylocal_akuvox-1.7.0.tar.gz 795.2 kB With provenance Details for pylocal_akuvox-1.7.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pylocal-akuvox 1.7.0
File Interpreter ABI Platform Actions
pylocal_akuvox-1.7.0-py3-none-any.whl Python 3 none any Details for pylocal_akuvox-1.7.0-py3-none-any.whl

Total release size: 903.7 kB

Release files / pylocal_akuvox-1.7.0.tar.gz

Download URL pylocal_akuvox-1.7.0.tar.gz
Size 795.2 kB
Tags Source
SHA-256 checksum
How to use checksums
97869040e395d0d42e11dded393fc8a7e65d28a73b539f5894c79ae8d0f00d70
BLAKE2b-256 checksum
How to use checksums
60ef59362109b568da0210b17a45bb43d295685999c22ed522f34611211e14fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

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 Oct 17, 2026.

Transparency log

Release files / pylocal_akuvox-1.7.0-py3-none-any.whl

Download URL pylocal_akuvox-1.7.0-py3-none-any.whl
Size 108.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2e04798fb0db3b02c233ff2c032b127b84fa648a55137647b1a3e1b05afaa28d
BLAKE2b-256 checksum
How to use checksums
5b4b4cbc4f2f099a35796ab4fefbf1ccae558a3dbdf2daad05a83133fa05501c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

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 Oct 17, 2026.

Transparency log

Security for pylocal-akuvox 1.7.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

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pylocal_akuvox-1.7.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 Oct 17, 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