CLI and library to control Philips Android-powered TVs.
Project description
philipstv
Python CLI and library for controlling Philips Android-powered TV's.
Features:
- Get and set current TV power state.
- Get and set current volume
- List and change TV channels.
- Emulate pressing remote keys.
- Get and set ambilight power state.
- Set ambilight RGB color.
- List and launch applications.
Installation
If you plan to use the CLI:
pip install 'philipstv[cli]'
If you only need a library for use in Python code:
pip install philipstv
CLI
Pairing
First, you need to pair philipstv with your TV. For this, you need to know its IP address. You can find it in network settings.
Pairing is done using the following command:
philipstv --host IP [--id ID] [--save] pair
--host
(required) specifies the TV IP address.--id
(optional) specifies the device ID to use during pairing. This will be later used for authentication. If not provided, the ID is generated randomly.--save
saves received credentials after successful pairing. Use this if you don't want to provide credentials every time you run philipstv.
After running pair
command, you will be prompted to enter PIN number displayed on the TV's screen.
This completes the process and outputs your credentials.
The complete process should look like this:
$ philipstv --host 192.168.0.100 --save pair
Enter PIN displayed on the TV: 5639
Pairing successful!
ID: JMBsfOjJDYg5gxRG
Key: 151080ea24e06ef4acc410a98398129e9de9edf43b1569ffb8249301945f5868
Credentials saved.
Usage
Once paired, use received credentials to authenticate. E.g.:
philipstv --host 192.168.0.100 --id JMBsfOjJDYg5gxRG --key 151080ea24e06ef4acc410a98398129e9de9edf43b1569ffb8249301945f5868 power get
If you used the --save
option during pairing, this is just:
philipstv power get
The CLI is fully documented, so you can explore commands using -h
option: philipstv -h
, philipstv power -h
, etc...
Example usage session could look like this:
$ philipstv power set on
$ philipstv volume set 15
$ philipstv ambilight set on
$ philipstv app list
YouTube
TED
Twitch
Prime Video
Netflix
$ philipstv launch Netflix
$ philipstv key ok
$ philipstv key play
Library
I really hope I will find strength to create proper documentation, for now those few examples + source code will have to be enough.
PhilipsTVRemote
High level TV interaction interface. It wraps API functionality into convenient and easy to use methods.
Pairing:
from philipstv import PhilipsTVRemote
def pin_callback():
return str(input("Enter PIN: "))
remote = PhilipsTVRemote.new("192.168.0.100")
id, key = remote.pair(pin_callback)
Usage with credentials:
from philipstv import InputKeyValue, PhilipsTVRemote
remote = PhilipsTVRemote.new("192.168.0.100", ("<id>", "<key>"))
remote.set_power(True)
current_volume = remote.get_volume()
remote.set_volume(current_volume + 10)
remote.set_ambilight_power(True)
remote.launch_application("Netflix")
remote.input_key(InputKeyValue.OK)
remote.input_key(InputKeyValue.PLAY)
PhilipsTVAPI
Lower level interface.
Each method mirrors one request to one API endpoint.
Input and output values have original shape, just like in API, but are wrapped in pydantic
models.
Pairing:
from philipstv import DeviceInfo, PhilipsTV, PhilipsTVAPI, PhilipsTVPairer
api = PhilipsTVAPI(PhilipsTV("192.168.0.100"))
device_info = DeviceInfo(
id="<id>",
device_name="<name>",
device_os="<os>",
app_id="<id>",
app_name="<name>",
type="<type>",
)
def pin_callback():
return str(input("Enter PIN: "))
id, key = PhilipsTVPairer(api, device_info).pair(pin_callback)
And using with credentials:
from philipstv import PhilipsTV, PhilipsTVAPI
from philipstv.model import PowerState, PowerStateValue, Volume
api = PhilipsTVAPI(PhilipsTV("192.168.0.100", auth=("<id>", "<key>")))
api.set_powerstate(PowerState(powerstate=PowerStateValue.ON))
api.set_volume(Volume(current=15, muted=False))
PhilipsTV
Lowest level interface. Acts as a helper for sending authenticated requests to the TV.
For instance:
tv = PhilipsTV("192.168.0.100", auth=("<id>", "<key>"))
volume_resp = tv.get("6/audio/volume")
volume = volume_resp["current"]
tv.post("6/audio/volume", {"current": volume + 10})
Resources
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for philipstv-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3305747b3851bf24671bbaa00ccb26341f21db0cee4a17a44e39b0d6c555fe0 |
|
MD5 | 78307b790470af63ca2176012471861c |
|
BLAKE2b-256 | 7fcbfedc8ac4d235c7c0134e89ba12d7c8d1ddffa79bd2307c45f34ffbb661d6 |