Changelog¶
Unreleased¶
Added¶
Added R20A device-class support for the community-reported door-phone profile, including full user, schedule, and contact CRUD; group add / delete; API relay trigger; relay status; device config get; logs; and key discovery. The legacy FCGI OpenDoor path is unsupported on this firmware.
Refs #234.
Changed¶
R20A now reports confirmed device config set support from webhook configuration writes; R20K is promoted to the same support by R20-family equivalence (maintainer vouch), not direct evidence.
Refs #237.
The write-mode capability report now exercises
device.config.setwith a same-value fallback probe on devices that lack the previous hardcoded relay hold-delay key.Refs #238.
The
device.config.setfallback probe now covers non-relay devices with benign UI, localization, display, device-name, and relay-label keys while avoiding network settings; it tries safe same-value candidates until one write is accepted.Refs #241.
Confirmed R20K user add, modify, and delete support from a follow-up write-mode capability report.
Refs #229.
v1.3.0 (2026-07-06)¶
Breaking changes¶
The
pylocal_akuvox.capabilitiesimport subpath has been removed (issue #140).import pylocal_akuvox.capabilitiesandfrom pylocal_akuvox.capabilities import Xnow raiseModuleNotFoundError.The following four symbols, formerly reachable via the dropped subpath, are now formally internal and no longer publicly importable:
Provenance(inpylocal_akuvox._capability_profile),DeviceClassPatternandlookup_capabilities(inpylocal_akuvox._capability_matching), andDEFAULT_USER_FIELD_ALIASES(inpylocal_akuvox._capability_defaults).Migration: the five public symbols
Capability,CapabilityStatus,DeviceCapabilities,FieldAliases, andSchemaShaperemain re-exported unchanged from the top-levelpylocal_akuvoxpackage. Consumers should usefrom pylocal_akuvox import Capability, CapabilityStatus, DeviceCapabilities, FieldAliases, SchemaShape. No consumer-facing public symbol has been renamed or removed.The
pylocal_akuvox.capability_probeimport subpath has been removed (issue #141).import pylocal_akuvox.capability_probeandfrom pylocal_akuvox.capability_probe import probe_capabilitiesnow raiseModuleNotFoundError.Migration: continue calling
AkuvoxDevice.probe_capabilities()— the documented public method onpylocal_akuvox.AkuvoxDeviceis unchanged and remains the consumer-facing handle for the capability probe. No consumer-facing public symbol has been renamed or removed. White-box callers (test suites, internal tooling) that previously imported helpers from the dropped subpath should switch to the new owning underscore modules:pylocal_akuvox._probe_outcomes,pylocal_akuvox._probe_classifiers,pylocal_akuvox._probe_parsers, andpylocal_akuvox._capability_probe.Refs #141.
Changed¶
Contact writes (add, modify, delete) on apartment-book device classes now raise a uniform
AkuvoxUnsupportedErrorwithreason="capability_missing"before any I/O; device"unsupport action"/"unsupported action"envelopes now translate toAkuvoxUnsupportedErrorwithreason="envelope_unsupported"; and the public service-functionschema_shape=write-deferral kwarg was removed.Refs #121.
trigger_relay()on IT83-class devices now raises an actionable error directing callers toAkuvoxDevice.open_door_http()instead of issuing a credential-less OpenDoor request.Refs #122.
Split the
AkuvoxDeviceimplementation into focused internal_device_*helper modules while preservingpylocal_akuvox.deviceand both public import forms.Refs #142.
Fixed¶
Write-mode capability reports now backfill default user write aliases for unrecognized devices whose probe only observes schedule relay read aliases, allowing user add and modify diagnostics to reach the device.
Refs #230.
modify_user()now preserves and normalizes an existing schedule relay value whenschedule_relayis left unchanged, preventing devices that requireScheduleRelayon user updates from rejecting PIN-only modifications.Refs #219.
Capability probes on matrix-recognised devices now preserve curated write aliases while still refining observed read aliases, so
add_user()andmodify_user()can emit schedule relay keys after probing.Refs #216.
Avoid a blocking package metadata read when
AkuvoxDevice.__aenter__()performs its connect-time capability matrix lookup.Refs #215.
open_door_http()now checks thehcSingleResultmarker returned by IT83-class/fcgi/do?action=OpenDoorresponses so HTTP 200 withvalue='-1'raises an authentication error instead of reporting a false success.Refs #168.
Added¶
Added R20K device-class support for the community-reported door-phone profile, including schedule and contact CRUD, group add / delete, API relay trigger, relay status, device config get, logs, and key discovery.
Refs #229.
Added A08S device-class support for user and schedule CRUD, API relay trigger and status, door logs, device config, and key discovery. Contacts, groups, and call logs are unsupported on this access-unit class.
Refs #222.
Added the public
run_capability_report()API for generating the redacted capability report used byexamples/mvp_test.py.Refs #208.
Added optional apartment-book
Contactfieldsapt_name,apt_num,building, andlandlinefor preserving X915S contact metadata on reads.Refs #121.
Added
pylocal_akuvox.relay.open_door_httpandAkuvoxDevice.open_door_httpfor credentialed/fcgi/do?action=OpenDoorrelay unlocks.Refs #122.
Added E18 device-class support with the full door-phone capability set and firmware floor
18.30.10.118+.Refs #207.
Initial release of pylocal-akuvox
Async-only Python library for Akuvox local HTTP API
Device connection and info retrieval
User and PIN management (CRUD)
Relay control (trigger and status)
Access schedule management (CRUD)
Door and call log retrieval
Authentication: None, AllowList, Basic, Digest
SSL support with self-signed certificate handling
Typed exception hierarchy for error handling
Capability profile data model with
Capability,CapabilityStatus, and immutableDeviceCapabilitiesrecordsBuilt-in model-to-capability matrix with first-match lookup plus probe override-and-merge semantics
Safe
probe_capabilities()using a deterministic 9-call read-only sequence for device capability discoveryAkuvoxDevice.attempt_unknown_capabilityopt-in for attempting operations whose capability status isUNKNOWNInternal
_request_rawhelper used by the probe to classify raw status codes and device envelopesCapability-aware service kwargs (
field_aliases=,schema_shape=,capabilities=) threaded through user/contact APIsPublished docs include the capability matrix Sphinx directive for the live device support table
Lowered OpenSSL security level to 0 in the no-verify SSL path to support older Akuvox devices (e.g. S562) that ship with 1024-bit DH parameters