Python Client for ESPHome native API. Used by Home Assistant.
Go to file
dependabot[bot] 280ada7803
Bump types-protobuf from 3.19.15 to 3.19.17 (#200)
Bumps [types-protobuf](https://github.com/python/typeshed) from 3.19.15 to 3.19.17.
- [Release notes](https://github.com/python/typeshed/releases)
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-20 16:47:00 +12:00
.github Bump actions/cache from 3.0.1 to 3.0.2 (#199) 2022-04-12 17:05:43 +12:00
aioesphomeapi Fix no timeout for handshake (#176) 2022-02-09 16:29:50 +01:00
script Add pytest unit testing (#64) 2021-07-12 20:09:17 +02:00
tests Bump black from 21.12b0 to 22.1.0 (#169) 2022-01-31 17:38:57 +01:00
.dockerignore Build docker image to generate protoc (#72) 2021-07-22 11:35:08 +12:00
.gitignore Initial commit 2018-12-13 21:34:57 +01:00
Dockerfile Fix Dockerfile missing libprotobuf-dev (#127) 2021-10-21 18:59:33 +02:00
LICENSE Initial commit 2018-12-13 21:34:57 +01:00
MAINTAINERS.md Rename master branch to main (#58) 2021-06-30 18:08:56 +02:00
MANIFEST.in Implement PEP561 typing support (#55) 2021-06-30 17:05:44 +02:00
mypy.ini Refactor Lint Configs (#53) 2021-06-30 17:03:55 +02:00
pyproject.toml Refactor Lint Configs (#53) 2021-06-30 17:03:55 +02:00
README.rst Remove loop argument (#155) 2021-12-22 14:09:42 +13:00
requirements_test.txt Bump types-protobuf from 3.19.15 to 3.19.17 (#200) 2022-04-20 16:47:00 +12:00
requirements.txt Require zeroconf >=0.36 (#118) 2021-10-13 10:19:42 +02:00
setup.cfg Add flake8, black, isort and mypy linting (#39) 2021-06-18 17:57:02 +02:00
setup.py Bump version to 10.8.3 2022-02-14 15:12:06 +00:00

aioesphomeapi
=============

``aioesphomeapi`` allows you to interact with devices flashed with `ESPHome <https://esphome.io/>`_.

Installation
------------

The module is available from the `Python Package Index <https://pypi.python.org/pypi>`_.

.. code:: bash

    $ pip3 install aioesphomeapi

Usage
-----

It's required that you enable the `Native API <https://esphome.io/components/api.html>`_ component for the device.

.. code:: yaml

   # 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.

.. code:: bash

   [17:56:38][C][api:095]: API Server:
   [17:56:38][C][api:096]:   Address: api_test.local:6053


The sample code below will connect to the device and retrieve details.

.. code:: python

   import aioesphomeapi
   import asyncio
   
   async def main():
       """Connect to an ESPHome device and get details."""

       # Establish connection 
       api = aioesphomeapi.APIClient("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.

.. code:: python

   import aioesphomeapi
   import asyncio
   
   async def main():
       """Connect to an ESPHome device and wait for state changes."""
       cli = aioesphomeapi.APIClient("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:

- `Camera <https://gist.github.com/micw/202f9dee5c990f0b0f7e7c36b567d92b>`_
- `Async print <https://gist.github.com/fpletz/d071c72e45d17ba274fd61ca7a465033#file-esphome-print-async-py>`_
- `Simple print <https://gist.github.com/fpletz/d071c72e45d17ba274fd61ca7a465033#file-esphome-print-simple-py>`_
- `InfluxDB <https://gist.github.com/fpletz/d071c72e45d17ba274fd61ca7a465033#file-esphome-sensor-influxdb-py>`_

Development
-----------

For development is recommended to use a Python virtual environment (``venv``).

.. code:: bash

    # 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-protoc

License
-------

``aioesphomeapi`` is licensed under MIT, for more details check LICENSE.