androidtv Documentation¶
ADB Setup¶
This package works by sending ADB commands to your Android TV / Fire TV device. There are two ways to accomplish this.
1. ADB Server¶
androidtv
can use a running ADB server to send ADB commands (credit: pure-python-adb). More info about ADB can be found here: Android Debug Bridge (adb). There are 3 main ways to setup an ADB server.
Note
The ADB server must be connected to your device(s) before starting Home Assistant. Otherwise, the components will not be setup.
1a) Hass.io ADB Addon¶
For Hass.io users, this is the easiest option. Information about the addon can be found here: Community Hass.io Add-ons: Android Debug Bridge. The configuration for the addon will look like:
{
"log_level": "info",
"devices": [
"192.168.0.111",
"192.168.0.222"
],
"reconnect_timeout": 90,
"keys_path": "/config/.android"
}
Your Home Assistant configuration will look like:
media_player:
- platform: androidtv
name: Android TV 1
host: 192.168.0.111
adb_server_ip: 127.0.0.1
media_player:
- platform: androidtv
name: Android TV 2
host: 192.168.0.222
adb_server_ip: 127.0.0.1
1b) Docker Container¶
Since Home Assistant isn’t able to start the connection with the Android device directly, the ADB Server must do it instead. The ADB Server must already be connected to the Android device when Home Assistant attempts to access the ADB Server, or else Home Assistant will be unable to set up the Android device.
A modified script provided on the Home Assistant forums (source) demonstrates an example startup script for a Docker container that will automatically attempt, and continue to connect to a device when run:
#!/bin/sh
# for a single device, use: DEVICES=("192.168.0.111")
DEVICES=("192.168.0.111" "192.168.0.222")
echo "Starting up ADB..."
while true; do
adb -a server nodaemon > /dev/null 2>&1
sleep 10
done &
echo "Server started. Waiting for 30 seconds..."
sleep 30
echo "Connecting to devices."
for device in ${DEVICES[@]}; do
adb connect $device
done
echo "Done."
while true; do
for device in ${DEVICES[@]}; do
adb connect $device > /dev/null 2>&1
done
sleep 60
done
Assuming the address of the ADB server is 192.168.0.101, your Home Assistant configuration will look like:
media_player:
- platform: androidtv
name: Android TV 1
host: 192.168.0.111
adb_server_ip: 192.168.0.101
media_player:
- platform: androidtv
name: Android TV 2
host: 192.168.0.222
adb_server_ip: 192.168.0.101
1c) Linux Service¶
TODO
Your Home Assistant configuration will look like:
media_player:
- platform: androidtv
name: Android TV 1
host: 192.168.0.111
adb_server_ip: 127.0.0.1
media_player:
- platform: androidtv
name: Android TV 2
host: 192.168.0.222
adb_server_ip: 127.0.0.1
2. Python ADB Implementation¶
The second way that androidtv
can communicate with devices is using the Python ADB implementation (credit: adb-shell).
If your device requires ADB authentication, you will need to follow the instructions in the “ADB Authentication” section below. Once you have an authenticated key, this approach does not require any additional setup or addons. However, users with newer devices may find that the ADB connection is unstable. For a Fire TV device, you can try setting the get_sources
configuration option to false
. If the problem cannot be resolved, you should use the ADB server option.
Assuming you have 2 devices that require authentication, your configuration will look like this (update the adbkey
path accordingly):
media_player:
- platform: androidtv
name: Android TV 1
host: 192.168.0.111
adbkey: "/config/.android/adbkey"
media_player:
- platform: androidtv
name: Android TV 2
host: 192.168.0.222
adbkey: "/config/.android/adbkey"
ADB Authentication¶
If you get a “Device authentication required, no keys available” error when trying to set up your Android TV or Fire TV, then you’ll need to create an adbkey and add its path to your configuration. Follow the instructions on this page to connect to your device from your computer: Connecting to Fire TV Through adb.
Note
In the dialog appearing on your Android TV / Fire TV, you must check the box that says “always allow connections from this device.” ADB authentication in Home Assistant will only work using a trusted key.
Once you’ve successfully connected to your Android TV / Fire TV via the command adb connect <ipaddress>
, the file adbkey
will be created on your computer. The default location for this file is (from https://developer.android.com/studio/command-line/adb):
Linux and Mac:
$HOME/.android
Windows:
%userprofile%\.android
Copy the adbkey
file to your Home Assistant folder and add the path to your configuration.
androidtv¶
androidtv package¶
Subpackages¶
androidtv.adb_manager package¶
Submodules¶
Classes to manage ADB connections.
ADBPythonAsync
utilizes a Python implementation of the ADB protocol.ADBServerAsync
utilizes an ADB server to communicate with the device.
-
class
androidtv.adb_manager.adb_manager_async.
ADBPythonAsync
(host, port, adbkey='', signer=None)[source]¶ Bases:
object
A manager for ADB connections that uses a Python implementation of the ADB protocol.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationsigner (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
ADBPythonAsync.load_adbkey()
-
property
available
¶ Check whether the ADB connection is intact.
- Returns
Whether or not the ADB connection is intact
- Return type
bool
-
async
connect
(always_log_errors=True, auth_timeout_s=10.0)[source]¶ Connect to an Android TV / Fire TV device.
- Parameters
always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
auth_timeout_s (float) – Authentication timeout (in seconds)
- Returns
Whether or not the connection was successfully established and the device is available
- Return type
bool
-
static
load_adbkey
(adbkey)[source]¶ Load the ADB keys.
- Parameters
adbkey (str) – The path to the
adbkey
file for ADB authentication- Returns
The
PythonRSASigner
with the key files loaded- Return type
PythonRSASigner
-
async
pull
(local_path, device_path)[source]¶ Pull a file from the device using the Python ADB implementation.
- Parameters
local_path (str) – The path where the file will be saved
device_path (str) – The file on the device that will be pulled
-
async
push
(local_path, device_path)[source]¶ Push a file to the device using the Python ADB implementation.
- Parameters
local_path (str) – The file that will be pushed to the device
device_path (str) – The path where the file will be saved on the device
-
class
androidtv.adb_manager.adb_manager_async.
ADBServerAsync
(host, port=5555, adb_server_ip='', adb_server_port=5037)[source]¶ Bases:
object
A manager for ADB connections that uses an ADB server.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
-
property
available
¶ Check whether the ADB connection is intact.
- Returns
Whether or not the ADB connection is intact
- Return type
bool
-
async
close
()[source]¶ Close the ADB server socket connection.
Currently, this doesn’t do anything except set
self._available = False
.
-
async
connect
(always_log_errors=True)[source]¶ Connect to an Android TV / Fire TV device.
- Parameters
always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
- Returns
Whether or not the connection was successfully established and the device is available
- Return type
bool
-
async
pull
(local_path, device_path)[source]¶ Pull a file from the device using an ADB server.
- Parameters
local_path (str) – The path where the file will be saved
device_path (str) – The file on the device that will be pulled
-
async
push
(local_path, device_path)[source]¶ Push a file to the device using an ADB server.
- Parameters
local_path (str) – The file that will be pushed to the device
device_path (str) – The path where the file will be saved on the device
-
class
androidtv.adb_manager.adb_manager_async.
ClientAsync
(host, port)[source]¶ Bases:
object
An async wrapper for the pure-python-adb
Client
class.
-
class
androidtv.adb_manager.adb_manager_async.
DeviceAsync
(device)[source]¶ Bases:
object
An async wrapper for the pure-python-adb
Device
class.
-
androidtv.adb_manager.adb_manager_async.
_acquire
(lock, timeout=3.0)[source]¶ Handle acquisition and release of an
asyncio.Lock
object with a timeout.- Parameters
lock (asyncio.Lock) – The lock that we will try to acquire
timeout (float) – The timeout in seconds
- Yields
acquired (bool) – Whether or not the lock was acquired
- Raises
LockNotAcquiredException – Raised if the lock was not acquired
Classes to manage ADB connections.
ADBPythonSync
utilizes a Python implementation of the ADB protocol.ADBServerSync
utilizes an ADB server to communicate with the device.
-
class
androidtv.adb_manager.adb_manager_sync.
ADBPythonSync
(host, port, adbkey='', signer=None)[source]¶ Bases:
object
A manager for ADB connections that uses a Python implementation of the ADB protocol.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationsigner (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
ADBPythonSync.load_adbkey()
-
property
available
¶ Check whether the ADB connection is intact.
- Returns
Whether or not the ADB connection is intact
- Return type
bool
-
connect
(always_log_errors=True, auth_timeout_s=10.0)[source]¶ Connect to an Android TV / Fire TV device.
- Parameters
always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
auth_timeout_s (float) – Authentication timeout (in seconds)
- Returns
Whether or not the connection was successfully established and the device is available
- Return type
bool
-
static
load_adbkey
(adbkey)[source]¶ Load the ADB keys.
- Parameters
adbkey (str) – The path to the
adbkey
file for ADB authentication- Returns
The
PythonRSASigner
with the key files loaded- Return type
PythonRSASigner
-
pull
(local_path, device_path)[source]¶ Pull a file from the device using the Python ADB implementation.
- Parameters
local_path (str) – The path where the file will be saved
device_path (str) – The file on the device that will be pulled
-
push
(local_path, device_path)[source]¶ Push a file to the device using the Python ADB implementation.
- Parameters
local_path (str) – The file that will be pushed to the device
device_path (str) – The path where the file will be saved on the device
-
class
androidtv.adb_manager.adb_manager_sync.
ADBServerSync
(host, port=5555, adb_server_ip='', adb_server_port=5037)[source]¶ Bases:
object
A manager for ADB connections that uses an ADB server.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
-
property
available
¶ Check whether the ADB connection is intact.
- Returns
Whether or not the ADB connection is intact
- Return type
bool
-
close
()[source]¶ Close the ADB server socket connection.
Currently, this doesn’t do anything except set
self._available = False
.
-
connect
(always_log_errors=True)[source]¶ Connect to an Android TV / Fire TV device.
- Parameters
always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
- Returns
Whether or not the connection was successfully established and the device is available
- Return type
bool
-
pull
(local_path, device_path)[source]¶ Pull a file from the device using an ADB server.
- Parameters
local_path (str) – The path where the file will be saved
device_path (str) – The file on the device that will be pulled
-
push
(local_path, device_path)[source]¶ Push a file to the device using an ADB server.
- Parameters
local_path (str) – The file that will be pushed to the device
device_path (str) – The path where the file will be saved on the device
-
androidtv.adb_manager.adb_manager_sync.
LOCK_KWARGS
= {'timeout': 3.0}¶ Use a timeout for the ADB threading lock if it is supported
-
androidtv.adb_manager.adb_manager_sync.
_acquire
(lock)[source]¶ Handle acquisition and release of a
threading.Lock
object withLOCK_KWARGS
keyword arguments.- Parameters
lock (threading.Lock) – The lock that we will try to acquire
- Yields
acquired (bool) – Whether or not the lock was acquired
- Raises
LockNotAcquiredException – Raised if the lock was not acquired
Module contents¶
androidtv.androidtv package¶
Submodules¶
Communicate with an Android TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.androidtv.androidtv_async.
AndroidTVAsync
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, signer=None)[source]¶ Bases:
androidtv.basetv.basetv_async.BaseTVAsync
,androidtv.androidtv.base_androidtv.BaseAndroidTV
Representation of an Android TV device.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.load_adbkey()
-
async
get_properties
(get_running_apps=True, lazy=False)[source]¶ Get the properties needed for Home Assistant updates.
This will send one of the following ADB commands:
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_LAZY_RUNNING_APPS
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_LAZY_NO_RUNNING_APPS
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_NOT_LAZY_RUNNING_APPS
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedaudio_state (str, None) – The audio state, as determined from “dumpsys audio”, or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedaudio_output_device (str, None) – The current audio playback device, or
None
if it was not determinedis_volume_muted (bool, None) – Whether or not the volume is muted, or
None
if it was not determinedvolume (int, None) – The absolute volume level, or
None
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
-
async
get_properties_dict
(get_running_apps=True, lazy=True)[source]¶ Get the properties needed for Home Assistant updates and return them as a dictionary.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
A dictionary with keys
'screen_on'
,'awake'
,'wake_lock_size'
,'current_app'
,'media_session_state'
,'audio_state'
,'audio_output_device'
,'is_volume_muted'
,'volume'
,'running_apps'
, and'hdmi_input'
- Return type
dict
-
async
running_apps
()[source]¶ Return a list of running user applications.
- Returns
A list of the running apps
- Return type
list
-
async
update
(get_running_apps=True, lazy=True)[source]¶ Get the info needed for a Home Assistant update.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
state (str) – The state of the device
current_app (str) – The current running app
running_apps (list) – A list of the running apps if
get_running_apps
is True, otherwise the list[current_app]
audio_output_device (str) – The current audio playback device
is_volume_muted (bool) – Whether or not the volume is muted
volume_level (float) – The volume level (between 0 and 1)
Communicate with an Android TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.androidtv.androidtv_sync.
AndroidTVSync
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, signer=None)[source]¶ Bases:
androidtv.basetv.basetv_sync.BaseTVSync
,androidtv.androidtv.base_androidtv.BaseAndroidTV
Representation of an Android TV device.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.load_adbkey()
-
get_properties
(get_running_apps=True, lazy=False)[source]¶ Get the properties needed for Home Assistant updates.
This will send one of the following ADB commands:
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_LAZY_RUNNING_APPS
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_LAZY_NO_RUNNING_APPS
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_NOT_LAZY_RUNNING_APPS
androidtv.constants.CMD_ANDROIDTV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS`
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedaudio_state (str, None) – The audio state, as determined from “dumpsys audio”, or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedaudio_output_device (str, None) – The current audio playback device, or
None
if it was not determinedis_volume_muted (bool, None) – Whether or not the volume is muted, or
None
if it was not determinedvolume (int, None) – The absolute volume level, or
None
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
-
get_properties_dict
(get_running_apps=True, lazy=True)[source]¶ Get the properties needed for Home Assistant updates and return them as a dictionary.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
A dictionary with keys
'screen_on'
,'awake'
,'wake_lock_size'
,'current_app'
,'media_session_state'
,'audio_state'
,'audio_output_device'
,'is_volume_muted'
,'volume'
,'running_apps'
, and'hdmi_input'
- Return type
dict
-
running_apps
()[source]¶ Return a list of running user applications.
- Returns
A list of the running apps
- Return type
list
-
update
(get_running_apps=True, lazy=True)[source]¶ Get the info needed for a Home Assistant update.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
state (str) – The state of the device
current_app (str) – The current running app
running_apps (list) – A list of the running apps if
get_running_apps
is True, otherwise the list[current_app]
audio_output_device (str) – The current audio playback device
is_volume_muted (bool) – Whether or not the volume is muted
volume_level (float) – The volume level (between 0 and 1)
hdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
Communicate with an Android TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.androidtv.base_androidtv.
BaseAndroidTV
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None)[source]¶ Bases:
androidtv.basetv.basetv.BaseTV
Representation of an Android TV device.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)
-
DEVICE_CLASS
= 'androidtv'¶
-
_get_properties
(output, get_running_apps)[source]¶ Get the properties needed for Home Assistant updates.
- Parameters
output (str, None) – The output of the ADB command used to retrieve the properties
get_running_apps (bool) – Whether or not to get the
running_apps
property
- Returns
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedaudio_state (str, None) – The audio state, as determined from “dumpsys audio”, or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedaudio_output_device (str, None) – The current audio playback device, or
None
if it was not determinedis_volume_muted (bool, None) – Whether or not the volume is muted, or
None
if it was not determinedvolume (int, None) – The absolute volume level, or
None
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
-
_update
(screen_on, awake, audio_state, wake_lock_size, current_app, media_session_state, audio_output_device, is_volume_muted, volume, running_apps, hdmi_input)[source]¶ Get the info needed for a Home Assistant update.
- Parameters
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedaudio_state (str, None) – The audio state, as determined from “dumpsys audio”, or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedaudio_output_device (str, None) – The current audio playback device, or
None
if it was not determinedis_volume_muted (bool, None) – Whether or not the volume is muted, or
None
if it was not determinedvolume (int, None) – The absolute volume level, or
None
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
- Returns
state (str) – The state of the device
current_app (str) – The current running app
running_apps (list) – A list of the running apps if
get_running_apps
is True, otherwise the list[current_app]
audio_output_device (str) – The current audio playback device
is_volume_muted (bool) – Whether or not the volume is muted
volume_level (float) – The volume level (between 0 and 1)
hdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
Module contents¶
androidtv.basetv package¶
Submodules¶
Communicate with an Android TV or Amazon Fire TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.basetv.basetv.
BaseTV
(adb, host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None)[source]¶ Bases:
object
Base class for representing an Android TV / Fire TV device.
The
state_detection_rules
parameter is of the format:state_detection_rules = {'com.amazon.tv.launcher': ['idle'], 'com.netflix.ninja': ['media_session_state'], 'com.ellation.vrv': ['audio_state'], 'com.hulu.plus': [{'playing': {'wake_lock_size' : 4}}, {'paused': {'wake_lock_size': 2}}], 'com.plexapp.android': [{'paused': {'media_session_state': 3, 'wake_lock_size': 1}}, {'playing': {'media_session_state': 3}}, 'idle']}
The keys are app IDs, and the values are lists of rules that are evaluated in order.
VALID_STATES = ('idle', 'off', 'playing', 'paused', 'standby')
Valid rules:
'idle'
,'playing'
,'paused'
,'standby'
, or'off'
= always report the specified state when this app is open'media_session_state'
= try to use themedia_session_state()
property to determine the state'audio_state'
= try to use theaudio_state()
property to determine the state{'<VALID_STATE>': {'<PROPERTY1>': VALUE1, '<PROPERTY2>': VALUE2, ...}}
= check if each of the properties is equal to the specified value, and if so return the stateThe valid properties are
'media_session_state'
,'audio_state'
, and'wake_lock_size'
- Parameters
adb (ADBPythonSync, ADBServerSync, ADBPythonAsync, ADBServerAsync) – The handler for ADB commands
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see above)
-
static
_audio_output_device
(stream_music)[source]¶ Get the current audio playback device from the
STREAM_MUSIC
block fromadb shell dumpsys audio
.- Parameters
stream_music (str, None) – The
STREAM_MUSIC
block fromadb shell dumpsys audio
- Returns
The current audio playback device, or
None
if it could not be determined- Return type
str, None
-
static
_audio_state
(audio_state_response)[source]¶ Parse the
audio_state()
property from the output of the commandandroidtv.constants.CMD_AUDIO_STATE
.- Parameters
audio_state_response (str, None) – The output of the command
androidtv.constants.CMD_AUDIO_STATE
- Returns
The audio state, or
None
if it could not be determined- Return type
str, None
-
static
_conditions_are_true
(conditions, media_session_state=None, wake_lock_size=None, audio_state=None)[source]¶ Check whether the conditions in
conditions
are true.- Parameters
conditions (dict) – A dictionary of conditions to be checked (see the
state_detection_rules
parameter inBaseTV
)media_session_state (int, None) – The
media_session_state()
propertywake_lock_size (int, None) – The
wake_lock_size()
propertyaudio_state (str, None) – The
audio_state()
property
- Returns
Whether or not all the conditions in
conditions
are true- Return type
bool
-
static
_current_app
(current_app_response)[source]¶ Get the current app from the output of the command
androidtv.constants.CMD_CURRENT_APP
.- Parameters
current_app_response (str, None) – The output from the ADB command
androidtv.constants.CMD_CURRENT_APP
- Returns
The current app, or
None
if it could not be determined- Return type
str, None
-
_current_app_media_session_state
(media_session_state_response)[source]¶ Get the current app and the media session state properties from the output of
androidtv.constants.CMD_MEDIA_SESSION_STATE_FULL
.- Parameters
media_session_state_response (str, None) – The output of
androidtv.constants.CMD_MEDIA_SESSION_STATE_FULL
- Returns
current_app (str, None) – The current app, or
None
if it could not be determinedmedia_session_state (int, None) – The state from the output of the ADB shell command, or
None
if it could not be determined
-
_custom_state_detection
(current_app=None, media_session_state=None, wake_lock_size=None, audio_state=None)[source]¶ Use the rules in
self._state_detection_rules
to determine the state.- Parameters
current_app (str, None) – The
current_app()
propertymedia_session_state (int, None) – The
media_session_state()
propertywake_lock_size (int, None) – The
wake_lock_size()
propertyaudio_state (str, None) – The
audio_state()
property
- Returns
The state, if it could be determined using the rules in
self._state_detection_rules
; otherwise,None
- Return type
str, None
-
static
_get_hdmi_input
(hdmi_response)[source]¶ Get the HDMI input from the output of
androidtv.constants.CMD_HDMI_INPUT
.- Parameters
hdmi_response (str, None) – The output of
androidtv.constants.CMD_HDMI_INPUT
- Returns
The HDMI input, or
None
if it could not be determined- Return type
str, None
-
static
_is_volume_muted
(stream_music)[source]¶ Determine whether or not the volume is muted from the
STREAM_MUSIC
block fromadb shell dumpsys audio
.- Parameters
stream_music (str, None) – The
STREAM_MUSIC
block fromadb shell dumpsys audio
- Returns
Whether or not the volume is muted, or
None
if it could not be determined- Return type
bool, None
-
static
_media_session_state
(media_session_state_response, current_app)[source]¶ Get the state from the output of
androidtv.constants.CMD_MEDIA_SESSION_STATE
.- Parameters
media_session_state_response (str, None) – The output of
androidtv.constants.CMD_MEDIA_SESSION_STATE
current_app (str, None) – The current app, or
None
if it could not be determined
- Returns
The state from the output of the ADB shell command, or
None
if it could not be determined- Return type
int, None
-
_parse_device_properties
(properties)[source]¶ Return a dictionary of device properties.
- Parameters
properties (str, None) – The output of the ADB command that retrieves the device properties
- Returns
A dictionary with keys
'wifimac'
,'ethmac'
,'serialno'
,'manufacturer'
,'model'
, and'sw_version'
- Return type
dict
-
static
_parse_getevent_line
(line)[source]¶ Parse a line of the output received in
learn_sendevent
.- Parameters
line (str) – A line of output from
learn_sendevent
- Returns
The properly formatted
sendevent
command- Return type
str
-
static
_parse_stream_music
(stream_music_raw)[source]¶ Parse the output of the command
androidtv.constants.CMD_STREAM_MUSIC
.- Parameters
stream_music_raw (str, None) – The output of the command
androidtv.constants.CMD_STREAM_MUSIC
- Returns
The
STREAM_MUSIC
block from the output ofandroidtv.constants.CMD_STREAM_MUSIC
, orNone
if it could not be determined- Return type
str, None
-
static
_running_apps
(running_apps_response)[source]¶ Get the running apps from the output of
androidtv.constants.CMD_RUNNING_APPS
.- Parameters
running_apps_response (str, None) – The output of
androidtv.constants.CMD_RUNNING_APPS
- Returns
A list of the running apps, or
None
if it could not be determined- Return type
list, None
-
_volume
(stream_music, audio_output_device)[source]¶ Get the absolute volume level from the
STREAM_MUSIC
block fromadb shell dumpsys audio
.- Parameters
stream_music (str, None) – The
STREAM_MUSIC
block fromadb shell dumpsys audio
audio_output_device (str, None) – The current audio playback device
- Returns
The absolute volume level, or
None
if it could not be determined- Return type
int, None
-
_volume_level
(volume)[source]¶ Get the relative volume level from the absolute volume level.
- Parameters
volume (int, None) – The absolute volume level
- Returns
The volume level (between 0 and 1), or
None
if it could not be determined- Return type
float, None
-
static
_wake_lock_size
(wake_lock_size_response)[source]¶ Get the size of the current wake lock from the output of
androidtv.constants.CMD_WAKE_LOCK_SIZE
.- Parameters
wake_lock_size_response (str, None) – The output of
androidtv.constants.CMD_WAKE_LOCK_SIZE
- Returns
The size of the current wake lock, or
None
if it could not be determined- Return type
int, None
-
property
available
¶ Whether the ADB connection is intact.
- Returns
Whether or not the ADB connection is intact
- Return type
bool
-
androidtv.basetv.basetv.
state_detection_rules_validator
(rules, exc=<class 'KeyError'>)[source]¶ Validate the rules (i.e., the
state_detection_rules
value) for a given app ID (i.e., a key instate_detection_rules
).For each
rule
inrules
, this function checks that:rule
is a string or a dictionaryIf
rule
is a string:Check that
rule
is inVALID_STATES
orVALID_STATE_PROPERTIES
If
rule
is a dictionary:Check that each key is in
VALID_STATES
Check that each value is a dictionary
Check that each key is in
VALID_PROPERTIES
Check that each value is of the right type, according to
VALID_PROPERTIES_TYPES
See
BaseTV
for more info about thestate_detection_rules
parameter.- Parameters
rules (list) – A list of the rules that will be used to determine the state
exc (Exception) – The exception that will be raised if a rule is invalid
- Returns
rules – The provided list of rules
- Return type
list
Communicate with an Android TV or Amazon Fire TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.basetv.basetv_async.
BaseTVAsync
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, signer=None)[source]¶ Bases:
androidtv.basetv.basetv.BaseTV
Base class for representing an Android TV / Fire TV device.
The
state_detection_rules
parameter is of the format:state_detection_rules = {'com.amazon.tv.launcher': ['idle'], 'com.netflix.ninja': ['media_session_state'], 'com.ellation.vrv': ['audio_state'], 'com.hulu.plus': [{'playing': {'wake_lock_size' : 4}}, {'paused': {'wake_lock_size': 2}}], 'com.plexapp.android': [{'paused': {'media_session_state': 3, 'wake_lock_size': 1}}, {'playing': {'media_session_state': 3}}, 'idle']}
The keys are app IDs, and the values are lists of rules that are evaluated in order.
VALID_STATES = ('idle', 'off', 'playing', 'paused', 'standby')
Valid rules:
'idle'
,'playing'
,'paused'
,'standby'
, or'off'
= always report the specified state when this app is open'media_session_state'
= try to use themedia_session_state()
property to determine the state'audio_state'
= try to use theaudio_state()
property to determine the state{'<VALID_STATE>': {'<PROPERTY1>': VALUE1, '<PROPERTY2>': VALUE2, ...}}
= check if each of the properties is equal to the specified value, and if so return the stateThe valid properties are
'media_session_state'
,'audio_state'
, and'wake_lock_size'
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see above)
signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.load_adbkey()
-
async
_get_stream_music
(stream_music_raw=None)[source]¶ Get the
STREAM_MUSIC
block from the output of the commandandroidtv.constants.CMD_STREAM_MUSIC
.- Parameters
stream_music_raw (str, None) – The output of the command
androidtv.constants.CMD_STREAM_MUSIC
- Returns
The
STREAM_MUSIC
block from the output ofandroidtv.constants.CMD_STREAM_MUSIC
, orNone
if it could not be determined- Return type
str, None
-
async
_send_intent
(pkg, intent, count=1)[source]¶ Send an intent to the device.
- Parameters
pkg (str) – The command that will be sent is
monkey -p <pkg> -c <intent> <count>; echo $?
intent (str) – The command that will be sent is
monkey -p <pkg> -c <intent> <count>; echo $?
count (int, str) – The command that will be sent is
monkey -p <pkg> -c <intent> <count>; echo $?
- Returns
A dictionary with keys
'output'
and'retcode'
, if they could be determined; otherwise, an empty dictionary- Return type
dict
-
async
adb_close
()[source]¶ Close the ADB connection.
This only works for the Python ADB implementation (see
androidtv.adb_manager.adb_manager_async.ADBPython.close()
). For the ADB server approach, this doesn’t do anything (seeandroidtv.adb_manager.adb_manager_async.ADBServer.close()
).
-
async
adb_connect
(always_log_errors=True, auth_timeout_s=10.0)[source]¶ Connect to an Android TV / Fire TV device.
- Parameters
always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
auth_timeout_s (float) – Authentication timeout (in seconds)
- Returns
Whether or not the connection was successfully established and the device is available
- Return type
bool
-
async
adb_pull
(local_path, device_path)[source]¶ Pull a file from the device.
This calls
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.pull()
orandroidtv.adb_manager.adb_manager_async.ADBServerAsync.pull()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Parameters
local_path (str) – The path where the file will be saved
device_path (str) – The file on the device that will be pulled
-
async
adb_push
(local_path, device_path)[source]¶ Push a file to the device.
This calls
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.push()
orandroidtv.adb_manager.adb_manager_async.ADBServerAsync.push()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Parameters
local_path (str) – The file that will be pushed to the device
device_path (str) – The path where the file will be saved on the device
-
async
adb_screencap
()[source]¶ Take a screencap.
This calls
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.screencap()
orandroidtv.adb_manager.adb_manager_async.ADBServerAsync.screencap()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Returns
The screencap as a binary .png image
- Return type
bytes
-
async
adb_shell
(cmd)[source]¶ Send an ADB command.
This calls
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.shell()
orandroidtv.adb_manager.adb_manager_async.ADBServerAsync.shell()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Parameters
cmd (str) – The ADB command to be sent
- Returns
The response from the device, if there is a response
- Return type
str, None
-
async
audio_output_device
()[source]¶ Get the current audio playback device.
- Returns
The current audio playback device, or
None
if it could not be determined- Return type
str, None
-
async
audio_state
()[source]¶ Check if audio is playing, paused, or idle.
- Returns
The audio state, as determined from the ADB shell command
androidtv.constants.CMD_AUDIO_STATE
, orNone
if it could not be determined- Return type
str, None
-
async
awake
()[source]¶ Check if the device is awake (screensaver is not running).
- Returns
Whether or not the device is awake (screensaver is not running)
- Return type
bool
-
async
current_app
()[source]¶ Return the current app.
- Returns
The ID of the current app, or
None
if it could not be determined- Return type
str, None
-
async
get_device_properties
()[source]¶ Return a dictionary of device properties.
- Returns
props – A dictionary with keys
'wifimac'
,'ethmac'
,'serialno'
,'manufacturer'
,'model'
, and'sw_version'
- Return type
dict
-
async
get_hdmi_input
()[source]¶ Get the HDMI input from the output of
androidtv.constants.CMD_HDMI_INPUT
.- Returns
The HDMI input, or
None
if it could not be determined- Return type
str, None
-
async
is_volume_muted
()[source]¶ Whether or not the volume is muted.
- Returns
Whether or not the volume is muted, or
None
if it could not be determined- Return type
bool, None
-
async
launch_app
(app)[source]¶ Launch an app.
- Parameters
app (str) – The ID of the app that will be launched
-
async
learn_sendevent
(timeout_s=8)[source]¶ Capture an event (e.g., a button press) via
getevent
and convert it intosendevent
commands.For more info, see:
- Parameters
timeout_s (int) – The timeout in seconds to wait for events
- Returns
The events converted to
sendevent
commands- Return type
str
-
async
media_session_state
()[source]¶ Get the state from the output of
dumpsys media_session
.- Returns
The state from the output of the ADB shell command
dumpsys media_session
, orNone
if it could not be determined- Return type
int, None
Send menu action.
-
async
screen_on
()[source]¶ Check if the screen is on.
- Returns
Whether or not the device is on
- Return type
bool
-
async
set_volume_level
(volume_level)[source]¶ Set the volume to the desired level.
- Parameters
volume_level (float) – The new volume level (between 0 and 1)
- Returns
The new volume level (between 0 and 1), or
None
ifself.max_volume
could not be determined- Return type
float, None
-
async
start_intent
(uri)[source]¶ Start an intent on the device.
- Parameters
uri (str) – The intent that will be sent is
am start -a android.intent.action.VIEW -d <uri>
-
async
stop_app
(app)[source]¶ Stop an app.
- Parameters
app (str) – The ID of the app that will be stopped
- Returns
The output of the
am force-stop
ADB shell command, orNone
if the device is unavailable- Return type
str, None
-
async
volume
()[source]¶ Get the absolute volume level.
- Returns
The absolute volume level, or
None
if it could not be determined- Return type
int, None
-
async
volume_down
(current_volume_level=None)[source]¶ Send volume down action.
- Parameters
current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
- Returns
The new volume level (between 0 and 1), or
None
ifself.max_volume
could not be determined- Return type
float, None
-
async
volume_level
()[source]¶ Get the relative volume level.
- Returns
The volume level (between 0 and 1), or
None
if it could not be determined- Return type
float, None
-
async
volume_up
(current_volume_level=None)[source]¶ Send volume up action.
- Parameters
current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
- Returns
The new volume level (between 0 and 1), or
None
ifself.max_volume
could not be determined- Return type
float, None
Communicate with an Android TV or Amazon Fire TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.basetv.basetv_sync.
BaseTVSync
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, signer=None)[source]¶ Bases:
androidtv.basetv.basetv.BaseTV
Base class for representing an Android TV / Fire TV device.
The
state_detection_rules
parameter is of the format:state_detection_rules = {'com.amazon.tv.launcher': ['idle'], 'com.netflix.ninja': ['media_session_state'], 'com.ellation.vrv': ['audio_state'], 'com.hulu.plus': [{'playing': {'wake_lock_size' : 4}}, {'paused': {'wake_lock_size': 2}}], 'com.plexapp.android': [{'paused': {'media_session_state': 3, 'wake_lock_size': 1}}, {'playing': {'media_session_state': 3}}, 'idle']}
The keys are app IDs, and the values are lists of rules that are evaluated in order.
VALID_STATES = ('idle', 'off', 'playing', 'paused', 'standby')
Valid rules:
'idle'
,'playing'
,'paused'
,'standby'
, or'off'
= always report the specified state when this app is open'media_session_state'
= try to use themedia_session_state()
property to determine the state'audio_state'
= try to use theaudio_state()
property to determine the state{'<VALID_STATE>': {'<PROPERTY1>': VALUE1, '<PROPERTY2>': VALUE2, ...}}
= check if each of the properties is equal to the specified value, and if so return the stateThe valid properties are
'media_session_state'
,'audio_state'
, and'wake_lock_size'
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see above)
signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.load_adbkey()
-
_get_stream_music
(stream_music_raw=None)[source]¶ Get the
STREAM_MUSIC
block from the output of the commandandroidtv.constants.CMD_STREAM_MUSIC
.- Parameters
stream_music_raw (str, None) – The output of the command
androidtv.constants.CMD_STREAM_MUSIC
- Returns
The
STREAM_MUSIC
block from the output ofandroidtv.constants.CMD_STREAM_MUSIC
, orNone
if it could not be determined- Return type
str, None
-
_send_intent
(pkg, intent, count=1)[source]¶ Send an intent to the device.
- Parameters
pkg (str) – The command that will be sent is
monkey -p <pkg> -c <intent> <count>; echo $?
intent (str) – The command that will be sent is
monkey -p <pkg> -c <intent> <count>; echo $?
count (int, str) – The command that will be sent is
monkey -p <pkg> -c <intent> <count>; echo $?
- Returns
A dictionary with keys
'output'
and'retcode'
, if they could be determined; otherwise, an empty dictionary- Return type
dict
-
adb_close
()[source]¶ Close the ADB connection.
This only works for the Python ADB implementation (see
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.close()
). For the ADB server approach, this doesn’t do anything (seeandroidtv.adb_manager.adb_manager_sync.ADBServerSync.close()
).
-
adb_connect
(always_log_errors=True, auth_timeout_s=10.0)[source]¶ Connect to an Android TV / Fire TV device.
- Parameters
always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
auth_timeout_s (float) – Authentication timeout (in seconds)
- Returns
Whether or not the connection was successfully established and the device is available
- Return type
bool
-
adb_pull
(local_path, device_path)[source]¶ Pull a file from the device.
This calls
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.pull()
orandroidtv.adb_manager.adb_manager_sync.ADBServerSync.pull()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Parameters
local_path (str) – The path where the file will be saved
device_path (str) – The file on the device that will be pulled
-
adb_push
(local_path, device_path)[source]¶ Push a file to the device.
This calls
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.push()
orandroidtv.adb_manager.adb_manager_sync.ADBServerSync.push()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Parameters
local_path (str) – The file that will be pushed to the device
device_path (str) – The path where the file will be saved on the device
-
adb_screencap
()[source]¶ Take a screencap.
This calls
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.screencap()
orandroidtv.adb_manager.adb_manager_sync.ADBServerSync.screencap()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Returns
The screencap as a binary .png image
- Return type
bytes
-
adb_shell
(cmd)[source]¶ Send an ADB command.
This calls
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.shell()
orandroidtv.adb_manager.adb_manager_sync.ADBServerSync.shell()
, depending on whether the Python ADB implementation or an ADB server is used for communicating with the device.- Parameters
cmd (str) – The ADB command to be sent
- Returns
The response from the device, if there is a response
- Return type
str, None
-
audio_output_device
()[source]¶ Get the current audio playback device.
- Returns
The current audio playback device, or
None
if it could not be determined- Return type
str, None
-
audio_state
()[source]¶ Check if audio is playing, paused, or idle.
- Returns
The audio state, as determined from the ADB shell command
androidtv.constants.CMD_AUDIO_STATE
, orNone
if it could not be determined- Return type
str, None
-
awake
()[source]¶ Check if the device is awake (screensaver is not running).
- Returns
Whether or not the device is awake (screensaver is not running)
- Return type
bool
-
current_app
()[source]¶ Return the current app.
- Returns
The ID of the current app, or
None
if it could not be determined- Return type
str, None
-
get_device_properties
()[source]¶ Return a dictionary of device properties.
- Returns
props – A dictionary with keys
'wifimac'
,'ethmac'
,'serialno'
,'manufacturer'
,'model'
, and'sw_version'
- Return type
dict
-
get_hdmi_input
()[source]¶ Get the HDMI input from the output of
androidtv.constants.CMD_HDMI_INPUT
.- Returns
The HDMI input, or
None
if it could not be determined- Return type
str, None
-
is_volume_muted
()[source]¶ Whether or not the volume is muted.
- Returns
Whether or not the volume is muted, or
None
if it could not be determined- Return type
bool, None
-
launch_app
(app)[source]¶ Launch an app.
- Parameters
app (str) – The ID of the app that will be launched
-
learn_sendevent
(timeout_s=8)[source]¶ Capture an event (e.g., a button press) via
getevent
and convert it intosendevent
commands.For more info, see:
- Parameters
timeout_s (int) – The timeout in seconds to wait for events
- Returns
The events converted to
sendevent
commands- Return type
str
-
media_session_state
()[source]¶ Get the state from the output of
dumpsys media_session
.- Returns
The state from the output of the ADB shell command
dumpsys media_session
, orNone
if it could not be determined- Return type
int, None
Send menu action.
-
screen_on
()[source]¶ Check if the screen is on.
- Returns
Whether or not the device is on
- Return type
bool
-
set_volume_level
(volume_level)[source]¶ Set the volume to the desired level.
- Parameters
volume_level (float) – The new volume level (between 0 and 1)
- Returns
The new volume level (between 0 and 1), or
None
ifself.max_volume
could not be determined- Return type
float, None
-
start_intent
(uri)[source]¶ Start an intent on the device.
- Parameters
uri (str) – The intent that will be sent is
am start -a android.intent.action.VIEW -d <uri>
-
stop_app
(app)[source]¶ Stop an app.
- Parameters
app (str) – The ID of the app that will be stopped
- Returns
The output of the
am force-stop
ADB shell command, orNone
if the device is unavailable- Return type
str, None
-
volume
()[source]¶ Get the absolute volume level.
- Returns
The absolute volume level, or
None
if it could not be determined- Return type
int, None
-
volume_down
(current_volume_level=None)[source]¶ Send volume down action.
- Parameters
current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
- Returns
The new volume level (between 0 and 1), or
None
ifself.max_volume
could not be determined- Return type
float, None
-
volume_level
()[source]¶ Get the relative volume level.
- Returns
The volume level (between 0 and 1), or
None
if it could not be determined- Return type
float, None
-
volume_up
(current_volume_level=None)[source]¶ Send volume up action.
- Parameters
current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
- Returns
The new volume level (between 0 and 1), or
None
ifself.max_volume
could not be determined- Return type
float, None
Module contents¶
androidtv.firetv package¶
Submodules¶
Communicate with an Amazon Fire TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.firetv.base_firetv.
BaseFireTV
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None)[source]¶ Bases:
androidtv.basetv.basetv.BaseTV
Representation of an Amazon Fire TV device.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)
-
DEVICE_CLASS
= 'firetv'¶
-
_get_properties
(output, get_running_apps=True)[source]¶ Get the properties needed for Home Assistant updates.
This will send one of the following ADB commands:
androidtv.constants.CMD_FIRETV_PROPERTIES_LAZY_NO_RUNNING_APPS
androidtv.constants.CMD_FIRETV_PROPERTIES_NOT_LAZY_RUNNING_APPS
androidtv.constants.CMD_FIRETV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
- Parameters
output (str, None) – The output of the ADB command used to retrieve the properties
get_running_apps (bool) – Whether or not to get the
running_apps
property
- Returns
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
-
_update
(screen_on, awake, wake_lock_size, current_app, media_session_state, running_apps, hdmi_input)[source]¶ Get the info needed for a Home Assistant update.
- Parameters
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
- Returns
state (str) – The state of the device
current_app (str) – The current running app
running_apps (list) – A list of the running apps if
get_running_apps
is True, otherwise the list[current_app]
hdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
Communicate with an Amazon Fire TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.firetv.firetv_async.
FireTVAsync
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, signer=None)[source]¶ Bases:
androidtv.basetv.basetv_async.BaseTVAsync
,androidtv.firetv.base_firetv.BaseFireTV
Representation of an Amazon Fire TV device.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.load_adbkey()
-
async
get_properties
(get_running_apps=True, lazy=False)[source]¶ Get the properties needed for Home Assistant updates.
This will send one of the following ADB commands:
androidtv.constants.CMD_FIRETV_PROPERTIES_LAZY_NO_RUNNING_APPS
androidtv.constants.CMD_FIRETV_PROPERTIES_NOT_LAZY_RUNNING_APPS
androidtv.constants.CMD_FIRETV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
-
async
get_properties_dict
(get_running_apps=True, lazy=True)[source]¶ Get the properties needed for Home Assistant updates and return them as a dictionary.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
A dictionary with keys
'screen_on'
,'awake'
,'wake_lock_size'
,'current_app'
,'media_session_state'
,'running_apps'
, and'hdmi_input'
- Return type
dict
-
async
running_apps
()[source]¶ Return a list of running user applications.
- Returns
A list of the running apps
- Return type
list
-
async
update
(get_running_apps=True, lazy=True)[source]¶ Get the info needed for a Home Assistant update.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
state (str) – The state of the device
current_app (str) – The current running app
running_apps (list) – A list of the running apps if
get_running_apps
is True, otherwise the list[current_app]
hdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
Communicate with an Amazon Fire TV device via ADB over a network.
ADB Debugging must be enabled.
-
class
androidtv.firetv.firetv_sync.
FireTVSync
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, signer=None)[source]¶ Bases:
androidtv.basetv.basetv_sync.BaseTVSync
,androidtv.firetv.base_firetv.BaseFireTV
Representation of an Amazon Fire TV device.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.load_adbkey()
-
get_properties
(get_running_apps=True, lazy=False)[source]¶ Get the properties needed for Home Assistant updates.
This will send one of the following ADB commands:
androidtv.constants.CMD_FIRETV_PROPERTIES_LAZY_NO_RUNNING_APPS
androidtv.constants.CMD_FIRETV_PROPERTIES_NOT_LAZY_RUNNING_APPS
androidtv.constants.CMD_FIRETV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
screen_on (bool, None) – Whether or not the device is on, or
None
if it was not determinedawake (bool, None) – Whether or not the device is awake (screensaver is not running), or
None
if it was not determinedwake_lock_size (int, None) – The size of the current wake lock, or
None
if it was not determinedcurrent_app (str, None) – The current app property, or
None
if it was not determinedmedia_session_state (int, None) – The state from the output of
dumpsys media_session
, orNone
if it was not determinedrunning_apps (list, None) – A list of the running apps, or
None
if it was not determinedhdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
-
get_properties_dict
(get_running_apps=True, lazy=True)[source]¶ Get the properties needed for Home Assistant updates and return them as a dictionary.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
A dictionary with keys
'screen_on'
,'awake'
,'wake_lock_size'
,'current_app'
,'media_session_state'
,'running_apps'
, and'hdmi_input'
- Return type
dict
-
running_apps
()[source]¶ Return a list of running user applications.
- Returns
A list of the running apps
- Return type
list
-
update
(get_running_apps=True, lazy=True)[source]¶ Get the info needed for a Home Assistant update.
- Parameters
get_running_apps (bool) – Whether or not to get the
running_apps()
propertylazy (bool) – Whether or not to continue retrieving properties if the device is off or the screensaver is running
- Returns
state (str) – The state of the device
current_app (str) – The current running app
running_apps (list) – A list of the running apps if
get_running_apps
is True, otherwise the list[current_app]
hdmi_input (str, None) – The HDMI input, or
None
if it could not be determined
Module contents¶
Submodules¶
androidtv.constants module¶
Constants used throughout the code.
Links
-
androidtv.constants.
CMD_ANDROIDTV_PROPERTIES_LAZY_NO_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11"¶ Get the properties for an Android TV device (
lazy=True, get_running_apps=False
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_ANDROIDTV_PROPERTIES_LAZY_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11 && ps -A | grep u0_a"¶ Get the properties for an Android TV device (
lazy=True, get_running_apps=True
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_ANDROIDTV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' || echo -e '0\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11"¶ Get the properties for an Android TV device (
lazy=False, get_running_apps=False
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_ANDROIDTV_PROPERTIES_NOT_LAZY_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' || echo -e '0\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11 && ps -A | grep u0_a"¶ Get the properties for an Android TV device (
lazy=False, get_running_apps=True
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_AUDIO_STATE
= "dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')"¶ Get the audio state
-
androidtv.constants.
CMD_AWAKE
= 'dumpsys power | grep mWakefulness | grep -q Awake'¶ Determine whether the device is awake
-
androidtv.constants.
CMD_CURRENT_APP
= 'CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP'¶ Get the current app
-
androidtv.constants.
CMD_CURRENT_APP_GOOGLE_TV
= "CURRENT_APP=$(dumpsys activity a . | grep -E 'mResumedActivity' | cut -d ' ' -f 8) && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP"¶ Get the current app for a Google TV device
-
androidtv.constants.
CMD_FIRETV_PROPERTIES_LAZY_NO_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo)"¶ Get the properties for a Fire TV device (
lazy=True, get_running_apps=False
); seeandroidtv.firetv.firetv_sync.FireTVSync.get_properties()
andandroidtv.firetv.firetv_async.FireTVAsync.get_properties()
-
androidtv.constants.
CMD_FIRETV_PROPERTIES_LAZY_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && ps | grep u0_a"¶ Get the properties for a Fire TV device (
lazy=True, get_running_apps=True
); seeandroidtv.firetv.firetv_sync.FireTVSync.get_properties()
andandroidtv.firetv.firetv_async.FireTVAsync.get_properties()
-
androidtv.constants.
CMD_FIRETV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo)"¶ Get the properties for a Fire TV device (
lazy=False, get_running_apps=False
); seeandroidtv.firetv.firetv_sync.FireTVSync.get_properties()
andandroidtv.firetv.firetv_async.FireTVAsync.get_properties()
-
androidtv.constants.
CMD_FIRETV_PROPERTIES_NOT_LAZY_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && ps | grep u0_a"¶ Get the properties for a Fire TV device (
lazy=False, get_running_apps=True
); seeandroidtv.firetv.firetv_sync.FireTVSync.get_properties()
andandroidtv.firetv.firetv_async.FireTVAsync.get_properties()
-
androidtv.constants.
CMD_GOOGLE_TV_PROPERTIES_LAZY_NO_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys activity a . | grep -E 'mResumedActivity' | cut -d ' ' -f 8) && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11"¶ Get the properties for a Google TV device (
lazy=True, get_running_apps=False
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_GOOGLE_TV_PROPERTIES_LAZY_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys activity a . | grep -E 'mResumedActivity' | cut -d ' ' -f 8) && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11 && ps -A | grep u0_a"¶ Get the properties for a Google TV device (
lazy=True, get_running_apps=True
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_GOOGLE_TV_PROPERTIES_NOT_LAZY_NO_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' || echo -e '0\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys activity a . | grep -E 'mResumedActivity' | cut -d ' ' -f 8) && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11"¶ Get the properties for a Google TV device (
lazy=False, get_running_apps=False
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_GOOGLE_TV_PROPERTIES_NOT_LAZY_RUNNING_APPS
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true') && echo -e '1\\c' || echo -e '0\\c' && dumpsys power | grep mWakefulness | grep -q Awake && echo -e '1\\c' || echo -e '0\\c' && (dumpsys audio | grep paused | grep -qv 'Buffer Queue' && echo -e '1\\c' || (dumpsys audio | grep started | grep -qv 'Buffer Queue' && echo '2\\c' || echo '0\\c')) && dumpsys power | grep Locks | grep 'size=' && CURRENT_APP=$(dumpsys activity a . | grep -E 'mResumedActivity' | cut -d ' ' -f 8) && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && (dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {' || echo) && (dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]' || echo) && dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11 && ps -A | grep u0_a"¶ Get the properties for a Google TV device (
lazy=False, get_running_apps=True
); seeandroidtv.androidtv.androidtv_sync.AndroidTVSync.get_properties()
andandroidtv.androidtv.androidtv_async.AndroidTVAsync.get_properties()
-
androidtv.constants.
CMD_HDMI_INPUT
= "dumpsys activity starter | grep -o 'HDMIInputService\\/HW[0-9]' -m 1 | grep -o 'HW[0-9]'"¶ Get the HDMI input
-
androidtv.constants.
CMD_LAUNCH_APP
= "CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${{CURRENT_APP#*{{* * }} && CURRENT_APP=${{CURRENT_APP%%/*}} && if [ $CURRENT_APP != '{0}' ]; then monkey -p {0} -c android.intent.category.LAUNCHER --pct-syskeys 0 1; fi"¶ Launch an app if it is not already the current app
-
androidtv.constants.
CMD_LAUNCH_APP_GOOGLE_TV
= "CURRENT_APP=$(dumpsys activity a . | grep -E 'mResumedActivity' | cut -d ' ' -f 8) && CURRENT_APP=${{CURRENT_APP%%/*}} && if [ $CURRENT_APP != '{0}' ]; then monkey -p {0} -c android.intent.category.LAUNCHER --pct-syskeys 0 1; fi"¶ Launch an app if it is not already the current app (for Google TV devices)
-
androidtv.constants.
CMD_MEDIA_SESSION_STATE
= "dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {'"¶ Get the state from
dumpsys media_session
; this assumes that the variableCURRENT_APP
has been defined
-
androidtv.constants.
CMD_MEDIA_SESSION_STATE_FULL
= "CURRENT_APP=$(dumpsys window windows | grep mCurrentFocus) && CURRENT_APP=${CURRENT_APP#*{* * } && CURRENT_APP=${CURRENT_APP%%/*} && echo $CURRENT_APP && dumpsys media_session | grep -A 100 'Sessions Stack' | grep -A 100 $CURRENT_APP | grep -m 1 'state=PlaybackState {'"¶ Determine the current app and get the state from
dumpsys media_session
-
androidtv.constants.
CMD_RUNNING_APPS_ANDROIDTV
= 'ps -A | grep u0_a'¶ Get the running apps for an Android TV device
-
androidtv.constants.
CMD_RUNNING_APPS_FIRETV
= 'ps | grep u0_a'¶ Get the running apps for a Fire TV device
-
androidtv.constants.
CMD_SCREEN_ON
= "(dumpsys power | grep 'Display Power' | grep -q 'state=ON' || dumpsys power | grep -q 'mScreenOn=true')"¶ Determine if the device is on
-
androidtv.constants.
CMD_STREAM_MUSIC
= "dumpsys audio | grep '\\- STREAM_MUSIC:' -A 11"¶ Get the “STREAM_MUSIC” block from
dumpsys audio
-
androidtv.constants.
CMD_WAKE_LOCK_SIZE
= "dumpsys power | grep Locks | grep 'size='"¶ Get the wake lock size
-
androidtv.constants.
DEFAULT_ADB_TIMEOUT_S
= 9.0¶ Default timeout (in s) for
adb_shell.handle.tcp_handle.TcpHandle
andadb_shell.handle.tcp_handle_async.TcpHandleAsync
-
androidtv.constants.
DEFAULT_AUTH_TIMEOUT_S
= 10.0¶ Default authentication timeout (in s) for
adb_shell.handle.tcp_handle.TcpHandle.connect()
andadb_shell.handle.tcp_handle_async.TcpHandleAsync.connect()
-
androidtv.constants.
DEFAULT_LOCK_TIMEOUT_S
= 3.0¶ Default timeout for acquiring the lock that protects ADB commands
-
androidtv.constants.
MEDIA_SESSION_STATES
= {0: None, 1: 'stopped', 2: 'paused', 3: 'playing'}¶ States for the
media_session_state
property
-
androidtv.constants.
VALID_PROPERTIES
= ('audio_state', 'media_session_state', 'wake_lock_size')¶ Properties that can be checked for custom state detection (used by
state_detection_rules_validator()
)
-
androidtv.constants.
VALID_PROPERTIES_TYPES
= {'audio_state': <class 'str'>, 'media_session_state': <class 'int'>, 'wake_lock_size': <class 'int'>}¶ The required type for each entry in
VALID_PROPERTIES
(used bystate_detection_rules_validator()
)
-
androidtv.constants.
VALID_STATES
= ('idle', 'off', 'playing', 'paused', 'standby')¶ States that are valid (used by
state_detection_rules_validator()
)
-
androidtv.constants.
VALID_STATE_PROPERTIES
= ('audio_state', 'media_session_state')¶ Properties that can be used to determine the current state (used by
state_detection_rules_validator()
)
androidtv.exceptions module¶
Exceptions for use throughout the code.
androidtv.setup_async module¶
Connect to a device and determine whether it’s an Android TV or an Amazon Fire TV.
ADB Debugging must be enabled.
-
async
androidtv.setup_async.
setup
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, device_class='auto', auth_timeout_s=10.0, signer=None)[source]¶ Connect to a device and determine whether it’s an Android TV or an Amazon Fire TV.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)device_class (str) – The type of device:
'auto'
(detect whether it is an Android TV or Fire TV device),'androidtv'
, or'firetv'`
auth_timeout_s (float) – Authentication timeout (in seconds)
signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_async.ADBPythonAsync.load_adbkey()
- Returns
The representation of the device
- Return type
Module contents¶
Connect to a device and determine whether it’s an Android TV or an Amazon Fire TV.
ADB Debugging must be enabled.
-
androidtv.
ha_state_detection_rules_validator
(exc)[source]¶ Validate the rules (i.e., the
state_detection_rules
value) for a given app ID (i.e., a key instate_detection_rules
).See
BaseTV
for more info about thestate_detection_rules
parameter.- Parameters
exc (Exception) – The exception that will be raised if a rule is invalid
- Returns
wrapped_state_detection_rules_validator – A function that is the same as
state_detection_rules_validator()
, but with theexc
argument provided- Return type
function
-
androidtv.
setup
(host, port=5555, adbkey='', adb_server_ip='', adb_server_port=5037, state_detection_rules=None, device_class='auto', auth_timeout_s=10.0, signer=None)[source]¶ Connect to a device and determine whether it’s an Android TV or an Amazon Fire TV.
- Parameters
host (str) – The address of the device; may be an IP address or a host name
port (int) – The device port to which we are connecting (default is 5555)
adbkey (str) – The path to the
adbkey
file for ADB authenticationadb_server_ip (str) – The IP address of the ADB server
adb_server_port (int) – The port for the ADB server
state_detection_rules (dict, None) – A dictionary of rules for determining the state (see
BaseTV
)device_class (str) – The type of device:
'auto'
(detect whether it is an Android TV or Fire TV device),'androidtv'
, or'firetv'`
auth_timeout_s (float) – Authentication timeout (in seconds)
signer (PythonRSASigner, None) – The signer for the ADB keys, as loaded by
androidtv.adb_manager.adb_manager_sync.ADBPythonSync.load_adbkey()
- Returns
The representation of the device
- Return type
androidtv
is a Python package that provides state information and control of Android TV and Fire TV devices via ADB. This package is used by the Android TV integration in Home Assistant.
Installation¶
pip install androidtv
To utilize the async version of this code, you must install into a Python 3.7+ environment via:
pip install androidtv[async]
ADB Intents and Commands¶
A collection of useful intents and commands can be found here (credit: mcfrojd).
Acknowledgments¶
This is based on python-firetv by happyleavesaoc and the androidtv component for Home Assistant by a1ex4, and it depends on the Python packages adb-shell (which is based on python-adb) and pure-python-adb.