Skip to main content

aioairctrl

Python library and CLI for controlling Philips air purifiers over the local network using the encrypted CoAP protocol.

PyPI CI

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)

Source distribution for aioairctrl 0.3.1
File Size Uploaded
aioairctrl-0.3.1.tar.gz 16.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aioairctrl 0.3.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

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