aioairctrl
Python library and CLI for controlling Philips air purifiers over the local network using the encrypted CoAP protocol.
Overview
Philips air purifiers (AC series) expose a CoAP endpoint on port 5683 of your local network. This library communicates with that endpoint using an AES-128/CBC encryption scheme reverse-engineered from the Philips app. No cloud connection or account is required.
Supported operations:
- Read the current device status (all sensor readings and settings)
- Observe live status updates as the device pushes them
- Send control commands to change settings
Home Assistant integration If you want to control your Philips air purifier from Home Assistant, see the companion integration: kongo09/philips_airpurifier_coap. It is built on top of this library.
Requirements
- Python 3.12 or newer
- The air purifier must be on the same local network (or otherwise reachable by IP)
Installation
pip install aioairctrl
Command-line usage
All commands require the -H/--host flag with the IP address of your purifier. Find it in your router's DHCP table or the Philips app.
Get current status
aioairctrl -H 192.168.1.100 status
Add --json to get machine-readable output:
aioairctrl -H 192.168.1.100 status --json
Watch for live updates
Stays connected and prints a new line each time the device reports a change (e.g. sensor readings, mode changes):
aioairctrl -H 192.168.1.100 status-observe
aioairctrl -H 192.168.1.100 status-observe --json
Press Ctrl+C to stop.
Set a value
String values:
aioairctrl -H 192.168.1.100 set mode=AG
Boolean values (true/false are handled automatically):
aioairctrl -H 192.168.1.100 set pwr=true
aioairctrl -H 192.168.1.100 set pwr=false
Integer values (use -I/--int):
aioairctrl -H 192.168.1.100 set -I om=2
Multiple values at once:
aioairctrl -H 192.168.1.100 set -I pwr=true om=2
Debug output
Add -D/--debug to any command to see the raw CoAP traffic:
aioairctrl -H 192.168.1.100 --debug status
Python API
import asyncio
from aioairctrl import CoAPClient
async def main():
client = await CoAPClient.create(host="192.168.1.100")
try:
# Read status once
status, max_age = await client.get_status()
print(status)
# Stream live updates
async for status in client.observe_status():
print(status)
break # stop after first update
# Send a command
await client.set_control_value("pwr", True)
# Send multiple values at once
await client.set_control_values({"om": 2, "rhset": 50})
finally:
await client.shutdown()
asyncio.run(main())
License
MIT
Metadata
Release files for aioairctrl 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aioairctrl-0.3.1.tar.gz | 16.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aioairctrl-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.2 kB
Release files / aioairctrl-0.3.1.tar.gz
| Download URL | aioairctrl-0.3.1.tar.gz |
|---|---|
| Size | 16.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d74feb65d62d9151dc84144cf429fbd6c71994998b093472ec72a0cc1495b57a
|
|
BLAKE2b-256 checksum How to use checksums |
5d055ab57278e85289fb6fffcb617fb83efd02479ff246d52035f4abf13fbd2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Mar 1, 2026.
Transparency logRelease files / aioairctrl-0.3.1-py3-none-any.whl
| Download URL | aioairctrl-0.3.1-py3-none-any.whl |
|---|---|
| Size | 9.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d20c08bf23112d754e43cd558cc286103dd0aa42d45e4a94929a9705a01244d3
|
|
BLAKE2b-256 checksum How to use checksums |
bfc54bb0bd466aba18e93435af56224c2a100e1e14588c4c54b0744d5c944228
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Mar 1, 2026.
Transparency log