pymacon
Secure async REST and WebSocket client for the Macon Heat Pump Controller. It is the transport library used by the Macon Home Assistant integration.
Each MaconClient owns the credential, pinned certificate,
ordered state, reconnect loop, and reconciliation state for exactly one
controller. Multiple controllers therefore remain fully isolated.
Install
pip install pymacon
Usage
from pymacon import MaconClient
client = MaconClient(
"192.168.1.21",
token,
certificate_fingerprint,
# arctic-* is retained because it is the firmware wire-format ID.
device_id="arctic-001122334455",
)
client.subscribe(handle_snapshot)
client.subscribe_status(handle_status)
await client.start()
Call await client.stop() when unloading the owning config entry. Sessions
passed into the constructor remain owned by the caller; sessions created by
the client are closed automatically.
Control methods acknowledge that a command was accepted, but they never optimistically mutate local state. Subscribe to snapshots to observe the controller's reported state:
await client.async_set_cooling_setpoint(12)
await client.async_set_power(False)
Only controls advertised by client.capabilities should be called. The
firmware rejects unavailable, unsafe, or unsupported operations.
Controller health (uptime, reset reason, brownout/panic/watchdog counts,
Wi-Fi and RS485 bus counters) is polled separately from the heat-pump state
when client.capabilities.diagnostics is true. Every health field is
optional. A restart names the current boot so a late retry cannot reboot the
controller twice:
diagnostics = await client.async_fetch_diagnostics()
if client.capabilities.restart:
await client.async_restart()
Development
python -m pip install -e ".[tests]"
pytest
ruff check src tests
mypy src
Release files for pymacon 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pymacon-0.5.0.tar.gz | 23.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pymacon-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.8 kB
Release files / pymacon-0.5.0.tar.gz
| Download URL | pymacon-0.5.0.tar.gz |
|---|---|
| Size | 23.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
926c99a726bd2b23f2a92cf1c9163d9b2e73eb805bfabf253cd00a55649a077d
|
|
BLAKE2b-256 checksum How to use checksums |
e61f597dc17dbe6a07d1622546be2066f5fe9113eb3ee487467182a51450cb74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 26, 2026.
Transparency logRelease files / pymacon-0.5.0-py3-none-any.whl
| Download URL | pymacon-0.5.0-py3-none-any.whl |
|---|---|
| Size | 18.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
33a36c4fe74db4f4f6a80682ff3e2f169e073900b01b1fb922c9c47e9a569fd5
|
|
BLAKE2b-256 checksum How to use checksums |
e0c870286e27f747a0d785642c1379d58095eb8a66f5428729855bb6ab1e014b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 26, 2026.
Transparency log