• Stars
    star
    245
  • Rank 159,678 (Top 4 %)
  • Language
    Python
  • License
    MIT License
  • Created over 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Command line app for controlling Philips air purifiers

Build Status PyPI version

Command line application for controlling Philips air purifiers. Supports devices communicating over HTTP, CoAP and encrypted CoAP.

Installation

Python 3.4+ is required. Install with pip3:

$ pip3 install py-air-control

If your device is using CoAP then update the CoAPthon3 dependency to get fixes for several known bugs:

$ pip3 install -U git+https://github.com/rgerganov/CoAPthon3

Wi-Fi setup

The purifier can be connected to a Wi-Fi network with the following steps:

  1. Put the purifier into pairing mode. On AC2729 this is done by holding the power and child-lock buttons for 3 seconds. The purifier will create an open "PHILIPS Setup" wi-fi network.
  2. Connect your PC to the "PHILIPS Setup" network and get IP settings via DHCP. The IP address of the purifier will be 192.168.1.1.
  3. Now you can re-configure the wi-fi network of the purifier like this:
airctrl --ipaddr 192.168.1.1 --wifi-ssid <your_wifi_ssid> --wifi-pwd <your_wifi_password>

Note: this feature is only available for devices that work over HTTP

Usage in the local network

Getting the current status of device with IP 192.168.0.17:

$ airctrl --ipaddr 192.168.0.17
[pwr]   Power: ON
[pm25]  PM25: 4
[rh]    Humidity: 32
[rhset] Target humidity: 60
[iaql]  Allergen index: 1
[temp]  Temperature: 22
[func]  Function: Purification & Humidification
[mode]  Mode: M
[om]    Fan speed: 2
[aqil]  Light brightness: 100
[wl]    Water level: 100
[cl]    Child lock: False

You don't have to specify the IP address (--ipaddr parameter) if there is only one device in your LAN or you want to send commands to all your devices. The IP address will be autodetected using SSDP (UPnP) if the UDP 1900 port is not blocked.

You can change settings by using the prefix in the square brackets as a command line option. For example to set fan speed 2:

$ airctrl --om 2

For AC2889 you may need to specify both manual mode and fan speed:

$ airctrl --mode M --om 2

Set target humidity to 50%:

$ airctrl --rhset 50

Change function to "Purification":

$ airctrl --func P

Power off the device:

$ airctrl --pwr 0

and so on

To get filters status:

$ airctrl --filters
Pre-filter and Wick: clean in 245 hours
Wick filter: replace in 3965 hours
Active carbon filter: replace in 1565 hours
HEPA filter: replace in 3965 hours

Switching the the communication protocol

Use --protocol to switch between communication protocols. The following command will try to retrieve the current status using the CoAP protocol with encryption:

$ airctrl --ipaddr 192.168.0.17 --protocol coap

The following command will try to retrieve the current status using the CoAP protocol without encryption:

$ airctrl --ipaddr 192.168.0.17 --protocol plain_coap

Running without root privileges (Plain CoAP protocol only)

Works since Linux kernel 2.6.39.

Use id command to query your group ID:

$ id -g
995

The following command set the range of group IDs that are allowed to create ICMP sockets (ping_group_range kernel parameter, the default is "1 0", which means no group is allowed to create ICMP Echo sockets):

$ sudo sysctl -w net.ipv4.ping_group_range="0 1000"
net.ipv4.ping_group_range = 0 1000

Make it permanent:

$ echo "net.ipv4.ping_group_range=0 1000" | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
net.ipv4.ping_group_range = 0 1000

(see also: https://man7.org/linux/man-pages/man7/icmp.7.html)

Output of different devices

  • For further examples click here

Usage via cloud services

Use the cloudctrl script to control your device via the Philips cloud.

First you need to find your device id, provision an account and pair the account with the device id:

$ airctrl --ipaddr 192.168.0.17 --wifi
{'cppid': '9dcc618e9a82045d',
...
$ cloudctrl 9dcc618e9a82045d --pair 192.168.0.17
Creating cloud account ...
Logging in with 000000fff0000019
Client id: 000000fff10d40a1
Client key: NrIBL02WJNFDICqR6FGKig==
Exchanging secret key with the device ...
Saving session_key 512735aa3a5dc2608dfa8997b1b03a29 to /home/rgerganov/.pyairctrl
Pairing with 192.168.0.17 ...
{'return': [0]}
Logging in with 000000fff10d40a1
Sending pair request to cloud service ...
Relationship status: completed

The pairing needs to be done only once for each device, in the local network of the device.

Then you can control the paired device over the internet by using its ID and the account saved in ~/.pyairctrl:

$ cloudctrl 9dcc618e9a82045d --pwr 1
Logging in with 000000fff10d40a1
Sending event {'pwr': '1'} to device with id 9dcc618e9a82045d

Note: all IDs and credentials above are randomly generated and only used for illustration purposes Note: this feature is only available for devices that work over HTTP

More Repositories

1

footswitch

Command-line utility for PCsensor and Scythe foot switches
C
390
star
2

ggtag

programmable e-paper tag with RFID
C
262
star
3

rf-car

Controlling RC cars with HackRF
C++
130
star
4

nfqsed

Modify network traffic with netfilter_queue
C
86
star
5

gen5fw

Firmware tools for Mobis Gen5 navigation
Python
84
star
6

tesla-opener

Open Tesla charging port with HackRF
C++
70
star
7

shanocast

Google Chromecast Reciever
Nix
62
star
8

spoof_temp

Spoof temperature sensor with HackRF/FlipperZero
C++
38
star
9

aprs-sdr

APRS tracker with an SDR
C++
30
star
10

mks

Client for VMware consoles
Python
25
star
11

xxe-example

XXE vulnerability demo
Java
22
star
12

mario

Inject keystrokes with LEGO Mario
Python
19
star
13

ggwave-fm

Transmit ggwave encoded messages with an SDR
C++
16
star
14

dlp

Discrete logarithm problem
Java
12
star
15

vmdecrypt

Decrypt multicast Verimatrix streams
Go
9
star
16

pyvmdk

Python scripts for VMDK manipulations
Python
7
star
17

solo-pgp

PGP with Solo key
Python
5
star
18

rfbot

Slack bot for doing RF stuff
C++
4
star
19

vmware-vspc

Virtual Serial Port Concentrator
Python
4
star
20

sms

Send SMS messages from command line
C++
4
star
21

usdr

C++
3
star
22

osmo-sdr

Mirror of osmocom/osmo-sdr
C
3
star
23

stereovision

Capture video from two cameras
C
3
star
24

rabbit-comet

Comet application delivering messages from RabbitMQ broker
Java
3
star
25

remote-kbd

C
2
star
26

qsl

QSL cards gallery
Java
2
star
27

ctkip

Java
2
star
28

cec-watch

Emit a keypress when the display is powered off
C
1
star
29

stm32f3

Applications using the STM32F3 Discovery board
C
1
star
30

p4actions

Eclipse plug-in that adds custom actions to pending Perforce changelists
Java
1
star
31

nova-mksproxy

Nova console proxy for VMware instances
Python
1
star
32

openenclave-openssl

For using the OpenSSL libraries with the Open Enclave SDK
CMake
1
star