vidaa-control
Python library for controlling Hisense/Vidaa Smart TVs. Communicates directly with the TV's built-in MQTT-over-TLS broker — no cloud, no external broker needed.
Used by the ha-vidaa-tv Home Assistant integration.
Features
- Direct SSL connection to the TV's built-in broker (port 36669)
- Auto-discovery via SSDP and UDP broadcast
- PIN pairing — authenticate via TV screen, tokens persisted automatically
- Protocol detection — supports modern, middle, and legacy Vidaa firmware
- 48 remote keys — power, navigation, playback, numbers, colors, etc.
- Volume control — get/set/mute with state tracking
- Input source switching — HDMI, TV, AV, Component
- App launching — Netflix, YouTube, Prime Video, Disney+, and more
- Wake-on-LAN — power on from standby
- Sync and async clients —
VidaaTVandAsyncVidaaTV - CLI tool —
vidaacommand for interactive control
Installation
pip install git+https://github.com/tombabolewski/vidaa-control.git
Quick Start
CLI
# Discover TVs on the network
vidaa discover
# Pair with a TV (shows PIN on TV screen)
vidaa pair 192.168.1.225
# Send commands
vidaa key home
vidaa volume 25
vidaa launch netflix
vidaa source hdmi1
Python (sync)
from vidaa import VidaaTV
tv = VidaaTV(
host="192.168.1.225",
mac_address="AA:BB:CC:DD:EE:FF",
use_dynamic_auth=True,
)
if tv.connect():
tv.power_on()
tv.set_volume(25)
tv.launch_app("netflix")
tv.disconnect()
Python (async)
from vidaa import AsyncVidaaTV
from vidaa.config import TokenStorage
tv = AsyncVidaaTV(
host="192.168.1.225",
mac_address="AA:BB:CC:DD:EE:FF",
use_dynamic_auth=True,
enable_persistence=True,
storage=TokenStorage("tokens.json"),
)
if await tv.async_connect():
state = await tv.async_get_state()
volume = await tv.async_get_volume()
await tv.async_launch_app("youtube")
await tv.async_disconnect()
Remote Keys
48 keys available via send_key() / async_send_key():
| Category | Keys |
|---|---|
| Power | KEY_POWER |
| Navigation | KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_OK, KEY_BACK, KEY_MENU, KEY_HOME, KEY_EXIT |
| Volume | KEY_VOLUME_UP, KEY_VOLUME_DOWN, KEY_MUTE |
| Channel | KEY_CHANNEL_UP, KEY_CHANNEL_DOWN |
| Playback | KEY_PLAY, KEY_PAUSE, KEY_STOP, KEY_FAST_FORWARD, KEY_REWIND |
| Numbers | KEY_0 through KEY_9 |
| Colors | KEY_RED, KEY_GREEN, KEY_YELLOW, KEY_BLUE |
| Extras | KEY_INFO, KEY_SUBTITLE |
Protocol
Communication uses MQTT over TLS on port 36669. The library bundles the required client certificates. Authentication is handled automatically:
- Discovery — SSDP or UDP broadcast finds TVs
- Protocol detection — HTTP probe determines firmware generation
- Pairing — TV displays PIN, client authenticates
- Token persistence — auth tokens stored for reconnection
See docs/PROTOCOL.md for the full protocol analysis.
License
MIT
Release files for vidaa-control 1.1.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 | |
|---|---|---|---|
| vidaa_control-1.1.0.tar.gz | 50.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vidaa_control-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.8 kB
Release files / vidaa_control-1.1.0.tar.gz
| Download URL | vidaa_control-1.1.0.tar.gz |
|---|---|
| Size | 50.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7870ed5a2783875a016bacad59e41f1f0edd3486a177cf13f4c5f4b898830ccf
|
|
BLAKE2b-256 checksum How to use checksums |
cb52116286b73172c2090f8d1a2af78c1965b7b6bfe59f11fd7c64aec6b80b9a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / vidaa_control-1.1.0-py3-none-any.whl
| Download URL | vidaa_control-1.1.0-py3-none-any.whl |
|---|---|
| Size | 55.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4b54659e400a6509965bc928519750efa8849683d7c0d1f4d9b291a22a11c1e1
|
|
BLAKE2b-256 checksum How to use checksums |
65e61e550b27425fc031ddc089fd61b7f8e70a4bc61c1f2876efd551e2213efe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|