aioesphomeapi allows you to interact with devices flashed with ESPHome.
The module is available from the Python Package Index.
$ pip3 install aioesphomeapiIt's required that you enable the Native API component for the device.
# Example configuration entry
api:
  password: 'MyPassword'Check the output to get the local address of the device or use the name:``under ``esphome: from the device configuration.
[17:56:38][C][api:095]: API Server:
[17:56:38][C][api:096]:   Address: api_test.local:6053The sample code below will connect to the device and retrieve details.
import aioesphomeapi
import asyncio
async def main():
    """Connect to an ESPHome device and get details."""
    loop = asyncio.get_running_loop()
    # Establish connection
    api = aioesphomeapi.APIClient(loop, "api_test.local", 6053, "MyPassword")
    await api.connect(login=True)
    # Get API version of the device's firmware
    print(api.api_version)
    # Show device details
    device_info = await api.device_info()
    print(device_info)
    # List all entities of the device
    entities = await api.list_entities_services()
    print(entities)
 loop = asyncio.get_event_loop()
 loop.run_until_complete(main())Subscribe to state changes of an ESPHome device.
import aioesphomeapi
import asyncio
async def main():
    """Connect to an ESPHome device and wait for state changes."""
    loop = asyncio.get_running_loop()
    cli = aioesphomeapi.APIClient(loop, "api_test.local", 6053, "MyPassword")
    await cli.connect(login=True)
    def change_callback(state):
        """Print the state changes of the device.."""
        print(state)
    # Subscribe to the state changes
    await cli.subscribe_states(change_callback)
loop = asyncio.get_event_loop()
try:
    asyncio.ensure_future(main())
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    loop.close()Other examples:
For development is recommended to use a Python virtual environment (venv).
# Setup virtualenv (optional)
$ python3 -m venv .
$ source bin/activate
# Install aioesphomeapi and development depenencies
$ pip3 install -e .
$ pip3 install -r requirements_test.txt
# Run linters & test
$ script/lint
# Update protobuf _pb2.py definitions (requires a protobuf compiler installation)
$ script/gen-protocaioesphomeapi is licensed under MIT, for more details check LICENSE.