Python Client for ESPHome native API. Used by Home Assistant.

Overview

aioesphomeapi

aioesphomeapi allows you to interact with devices flashed with ESPHome.

Installation

The module is available from the Python Package Index.

$ pip3 install aioesphomeapi

Usage

It'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:6053

The 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."""

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

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:

Development

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

License

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

Comments
  • Fix failure to reconnect when the process task raises an exception during decoding a protobuf message

    Fix failure to reconnect when the process task raises an exception during decoding a protobuf message

    When the process loop raised an exception it would bubble through into the cleanup which would prevent the disconnect callback from being fired. In this case it was UnicodeDecodeError from a bad name in advertisment. We now handle unicode decode errors by replacing invalid utf-8 and catch the exception so it does not prevent the disconnected callback from running

    seen https://github.com/home-assistant/core/pull/83888#issuecomment-1347670905

    opened by bdraco 11
  • Optimize throughput of api to decrease latency

    Optimize throughput of api to decrease latency

    We still have a bit of latency with the reader because we have to lock and unlock every loop. Once we have finished the handshake (noise only) we hold the read lock for the duration of the connection to avoid locking/unlocking on every read

    opened by bdraco 7
  • Can't connect after latest update

    Can't connect after latest update "A Stream Socket was expected" Error

    Traceback (most recent call last): File "C:\Users\Administrator\aio\aio\lib\site-packages\aioesphomeapi\client.py", line 176, in connect await self._connection.connect() File "C:\Users\Administrator\aio\aio\lib\site-packages\aioesphomeapi\connection.py", line 157, in connect self._socket_reader, self._socket_writer = await asyncio.open_connection( File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\asyncio\streams.py", line 52, in open_connection transport, _ = await loop.create_connection( File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 1047, in create_connection raise ValueError( ValueError: A Stream Socket was expected, got <socket.socket fd=592, family=AddressFamily.AF_INET, type=0, proto=6, laddr=('192.168.2.4', 32149), raddr=('192.168.2.25', 6053)> The above exception was the direct cause of the following exception: Traceback (most recent call last): File "t.py", line 24, in <module> loop.run_until_complete(main()) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete return future.result() File "t.py", line 10, in main await api.connect(login=True) File "C:\Users\Administrator\aio\aio\lib\site-packages\aioesphomeapi\client.py", line 184, in connect raise APIConnectionError( aioesphomeapi.core.APIConnectionError: Unexpected error while connecting to 192.168.2.25: A Stream Socket was expected, got <socket.socket fd=592, family=AddressFamily.AF_INET, type=0, proto=6, laddr=('192.168.2.4', 32149), raddr=('192.168.2.25', 6053)>

    After replacing, in line 132 of connection.py

    self._socket = socket.socket( family=addr.family, type=addr.type, proto=addr.proto )

    with

    self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    The problem is fixed.

    opened by v-alvex 7
  • Climate

    Climate

    Update esphome climate schema to be in sync with HA climate schema, intended to be backward compatible, so migration can happen incrementally. This PR is part of a bundle, as aioesphomeapi, HA esphome component also needs to change. Other relate PRs:

    • https://github.com/esphome/esphome/pull/1471
    • https://github.com/home-assistant/core/pull/48116
    opened by Lumpusz 7
  • Avoid executor jump to resolve ip addresses

    Avoid executor jump to resolve ip addresses

    Similar to #26

    Avoids executor overload at statup with lots of esphome devices

    2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.189, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.248, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.234, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.206, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.220, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.61, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.133, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.3, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.203, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.178, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.173, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.106.243, 6053, 0, 0, 6, 0), kwargs: {} 2021-09-17 07:34:00 DEBUG (MainThread) [homeassistant.util.executor] Calling executor with function: <function getaddrinfo at 0x7f96b7915a60>, args: (192.168.107.170, 6053, 0, 0, 6, 0), kwargs: {}

    opened by bdraco 5
  • Using adressable_set from aioesphomeapi

    Using adressable_set from aioesphomeapi

    I'm trying to use aioesphomeapi from a Python program to drive some leds with fastled. The aim is to choose which color on which led i wanna to turn on. I was thinking of sending an array like this one : [ n_led, color_r, color_b, color_g , n_led_next, color_r, color_b, color_g ... ] I'm confuse on how to do that, I try to read the documentation but i do not understand on how to add an argument on a call from aiesphomeapi and what to add on the YAML for my ESP.

    Can somebody have an example or explain to me how to do it ?

    Thanks

    opened by fanchlegal 5
  • Move message parsing out of the read loop

    Move message parsing out of the read loop

    To further reduce the pressure on the esp, we want to read and drain the buffer as fast as possible, and since we have to wait to read while the data is processing we want the read loop to read as much as possible first to keep the latency down and reduce the memory pressure on the esp.

    opened by bdraco 4
  • Adjust ble timeouts to be longer than bleak timeouts

    Adjust ble timeouts to be longer than bleak timeouts

    The default timeouts were shorter than the timeout used by bleak and the surrounding stack which could lead to unexplained timeout failures.

    fixes #286

    opened by bdraco 4
  • home assistant logs

    home assistant logs "Error doing job: Task was destroyed but it is pending!"

    home assistant logs "Error doing job: Task was destroyed but it is pending!". also, HA fails to connect to some devices sometimes. after the failure, a few seconds later, it reconnects successfully. I'm not sure they are related. installed HA via pip + virtualenv.

    homeassistant              2022.10.3
    aioesphomeapi              11.1.0
    
    2022-10-12 11:31:23.830 ERROR (MainThread) [homeassistant] Error doing job: Task was destroyed but it is pending!:   File "/usr/home/hass/hass/.tox/python/bin/hass", line 10, in <module>
        sys.exit(main())                                                                                                                    
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/homeassistant/__main__.py", line 191, in main                       
        exit_code = runner.run(runtime_conf)                                                                                                
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/homeassistant/runner.py", line 119, in run                          
        return loop.run_until_complete(setup_and_run_hass(runtime_config))                                                                  
      File "/usr/local/lib/python3.9/asyncio/base_events.py", line 634, in run_until_complete                                               
        self.run_forever()                                                                                                                  
      File "/usr/local/lib/python3.9/asyncio/base_events.py", line 601, in run_forever                                                      
        self._run_once()                                                                                                                                                                                                                                                            
      File "/usr/local/lib/python3.9/asyncio/base_events.py", line 1897, in _run_once                                                       
        handle._run()                                                                                                                       
      File "/usr/local/lib/python3.9/asyncio/events.py", line 80, in _run                                                                   
        self._context.run(self._callback, *self._args)                                                                                      
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/reconnect_logic.py", line 171, in _reconnect_loop                                                                                                                                             
        await self._reconnect_once()                                    
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/reconnect_logic.py", line 166, in _reconnect_once
        await self._try_connect()                                       
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/reconnect_logic.py", line 121, in _try_connect
        await self._cli.connect(on_stop=self._on_disconnect, login=True)                                                                    
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/client.py", line 240, in connect                      
        await self._connection.connect(login=login)                                                                                         
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/connection.py", line 305, in connect                  
        await _do_connect()                                             
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/connection.py", line 294, in _do_connect              
        await self._connect_init_frame_helper()                         
      File "/usr/home/hass/hass/.tox/python/lib/python3.9/site-packages/aioesphomeapi/connection.py", line 205, in _connect_init_frame_helper
        asyncio.create_task(self._process_loop())                                                                                           
      File "/usr/local/lib/python3.9/asyncio/tasks.py", line 361, in create_task                                                            
        task = loop.create_task(coro)                                   
    
    opened by trombik 4
  • `ValueError: 6 is not a valid ClimateMode` when getting climate device entities

    `ValueError: 6 is not a valid ClimateMode` when getting climate device entities

    I'm encountering this error enumerating the entities of my climate device.

    This problem is occurring within Homeassistant as well (see logs).

    asyncio funkiness because I'm running in Jupyter.

    Successfully installed aioesphomeapi-2.8.0

    import nest_asyncio
    nest_asyncio.apply()
    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, "prusa_enclosure.local", 6053, "")
        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()
    
        # List all entities of the device
        entities = await api.list_entities_services()
        for entity in entities[0]:
            print(entity)
    
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    
    APIVersion(major=1, minor=4)
    
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-2-764d321eea0b> in <module>
         25 
         26 loop = asyncio.get_event_loop()
    ---> 27 loop.run_until_complete(main())
    
    ~/.venv3/lib/python3.9/site-packages/nest_asyncio.py in run_until_complete(self, future)
         68                 raise RuntimeError(
         69                     'Event loop stopped before Future completed.')
    ---> 70             return f.result()
         71 
         72     def _run_once(self):
    
    /usr/lib/python3.9/asyncio/futures.py in result(self)
        199         self.__log_traceback = False
        200         if self._exception is not None:
    --> 201             raise self._exception
        202         return self._result
        203 
    
    /usr/lib/python3.9/asyncio/tasks.py in __step(***failed resolving arguments***)
        254                 # We use the `send` method directly, because coroutines
        255                 # don't have `__iter__` and `__next__` methods.
    --> 256                 result = coro.send(None)
        257             else:
        258                 result = coro.throw(exc)
    
    <ipython-input-2-764d321eea0b> in main()
         19 
         20     # List all entities of the device
    ---> 21     entities = await api.list_entities_services()
         22     for entity in entities[0]:
         23         print(entity)
    
    ~/.venv3/lib/python3.9/site-packages/aioesphomeapi/client.py in list_entities_services(self)
        135             for key, _ in attr.fields_dict(cls).items():
        136                 kwargs[key] = getattr(msg, key)
    --> 137             entities.append(cls(**kwargs))
        138         return entities, services
        139 
    
    ~/.venv3/lib/python3.9/site-packages/aioesphomeapi/model.py in __init__(self, object_id, key, name, unique_id, supports_current_temperature, supports_two_point_target_temperature, supported_modes, visual_min_temperature, visual_max_temperature, visual_temperature_step, supports_away, supports_action, supported_fan_modes, supported_swing_modes)
          7     self.supports_two_point_target_temperature = supports_two_point_target_temperature
          8     if supported_modes is not NOTHING:
    ----> 9         self.supported_modes = __attr_converter_supported_modes(supported_modes)
         10     else:
         11         self.supported_modes = __attr_converter_supported_modes(__attr_factory_supported_modes())
    
    ~/.venv3/lib/python3.9/site-packages/aioesphomeapi/model.py in _convert_climate_modes(value)
        243 
        244 def _convert_climate_modes(value):
    --> 245     return [ClimateMode(val) for val in value]
        246 
        247 
    
    ~/.venv3/lib/python3.9/site-packages/aioesphomeapi/model.py in <listcomp>(.0)
        243 
        244 def _convert_climate_modes(value):
    --> 245     return [ClimateMode(val) for val in value]
        246 
        247 
    
    /usr/lib/python3.9/enum.py in __call__(cls, value, names, module, qualname, type, start)
        358         """
        359         if names is None:  # simple value lookup
    --> 360             return cls.__new__(cls, value)
        361         # otherwise, functional API: we're creating a new Enum type
        362         return cls._create_(
    
    /usr/lib/python3.9/enum.py in __new__(cls, value)
        675             ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__))
        676             if result is None and exc is None:
    --> 677                 raise ve_exc
        678             elif exc is None:
        679                 exc = TypeError(
    
    ValueError: 6 is not a valid ClimateMode
    
    esphome:
      name: prusa_enclosure
      platform: ESP32
      board: esp32dev
    
    wifi:
      ssid: ""
      password: ""
    
      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "Prusa Enclosure Fallback Hotspot"
        password: ""
    
    captive_portal:
    
    # Enable logging
    logger:
    
    # Enable Home Assistant API
    api:
    
    ota:
    
    output:
      - platform: ledc
        pin: GPIO32
        id: fan_output
        frequency: "25kHz"
    
      - platform: template
        id: fan_output_scaled
        type: float
        write_action:
          - output.set_level:
              id: fan_output
              level: !lambda |-
                     return (state ? state*.55+.20 : 0);
    
    light:
      - platform: monochromatic
        name: "Enclosure fan"
        output: fan_output_scaled
        gamma_correct: 1
        default_transition_length: 0s
    
      - platform: fastled_clockless
        chipset: WS2812B
        pin: GPIO26
        num_leds: 68
        rgb_order: GRB
        name: "Enclosure light"
    
    sensor:
      - platform: pulse_counter
        pin: GPIO33
        name: 'Fan speed'
        filters:
          - multiply: 0.5
        update_interval: 1s
            
      - platform: dht
        pin: 25
        temperature:
                name: "Enclosure temperature"
                id: "enclosure_temp"
                unit_of_measurement: "°C"
        humidity:
                name: "Enclosure humidity"
        update_interval: 1s
        model: DHT22
    
    
    climate:
      - platform: pid
        name: "Enclosure PID controller"
        id: pid_enclosure
        sensor: enclosure_temp
        default_target_temperature: 26.00C
        cool_output: fan_output
        control_parameters:
            kp: 0.25000
            ki: 0.00150
            kd: 0.15000
    
    
    switch:
      - platform: template
        name: "PID Autotune"
        turn_on_action:
          - climate.pid.autotune:
                  id: pid_enclosure
                  noiseband: 0.10
                  negative_output: -75%
    
    2021-06-16 09:15:10 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
    Traceback (most recent call last):
      File "/usr/src/homeassistant/homeassistant/components/esphome/__init__.py", line 214, in on_login
        entity_infos, services = await cli.list_entities_services()
      File "/usr/local/lib/python3.8/site-packages/aioesphomeapi/client.py", line 137, in list_entities_services
        entities.append(cls(**kwargs))
      File "<attrs generated init aioesphomeapi.model.ClimateInfo>", line 9, in __init__
        self.supported_modes = __attr_converter_supported_modes(supported_modes)
      File "/usr/local/lib/python3.8/site-packages/aioesphomeapi/model.py", line 245, in _convert_climate_modes
        return [ClimateMode(val) for val in value]
      File "/usr/local/lib/python3.8/site-packages/aioesphomeapi/model.py", line 245, in <listcomp>
        return [ClimateMode(val) for val in value]
      File "/usr/local/lib/python3.8/enum.py", line 339, in __call__
        return cls.__new__(cls, value)
      File "/usr/local/lib/python3.8/enum.py", line 662, in __new__
        raise ve_exc
    ValueError: 6 is not a valid ClimateMode
    
    opened by Quantum-cross 4
  • log level issue

    log level issue

    My ESPHome device publish some logs with log level DEBUG.

    If I try to subscribe to the log with subscribe_logs(log_callback, LOG_LEVEL_DEBUG) I receive nothing. Messages are received only with subscribe_logs(log_callback, LOG_LEVEL_VERBOSE) or subscribe_logs(log_callback, LOG_LEVEL_VERY_VERBOSE).

    Output example:

    level: LOG_LEVEL_VERBOSE
    message: "\033[0;36m[D][AirCon:976]: 0001776712: [=>] [BB 00 01 80 01 00 08 00] 1C 27 00 00 00 00 00 00 [1E 58] \033[0m"
    

    There is a string "[D]" in output. It means that message has LOG_LEVEL = DEBUG.

    It looks like an incorrect comparison somewhere in the code. "<" instead of "<=" or something like that.

    opened by GrKoR 4
  • Simplify connection flow with an asyncio.Protocol

    Simplify connection flow with an asyncio.Protocol

    This removes ~ 20k call_soons per minute which translates to a significant latency improvement (also reduces the run time by ~ 18-24%) with 7 ble proxies.

    With this change we can refactor a significant number of coroutines into normal functions.

    Eliminates:

    • read_loop
    • process_loop
    • queue
    opened by bdraco 5
  • Update mock requirement from <5,>=4.0.3 to >=4.0.3,<6

    Update mock requirement from <5,>=4.0.3 to >=4.0.3,<6

    Updates the requirements on mock to permit the latest version.

    Changelog

    Sourced from mock's changelog.

    5.0.0

    • gh-98624: Add a mutex to unittest.mock.NonCallableMock to protect concurrent access to mock attributes.

    • bpo-43478: Mocks can no longer be used as the specs for other Mocks. As a result, an already-mocked object cannot have an attribute mocked using autospec=True or be the subject of a create_autospec(...) call. This can uncover bugs in tests since these Mock-derived Mocks will always pass certain tests (e.g. isinstance) and builtin assert functions (e.g. assert_called_once_with) will unconditionally pass.

    • bpo-45156: Fixes infinite loop on :func:unittest.mock.seal of mocks created by :func:~unittest.create_autospec.

    • bpo-41403: Make :meth:mock.patch raise a :exc:TypeError with a relevant error message on invalid arg. Previously it allowed a cryptic :exc:AttributeError to escape.

    • gh-91803: Fix an error when using a method of objects mocked with :func:unittest.mock.create_autospec after it was sealed with :func:unittest.mock.seal function.

    • bpo-41877: AttributeError for suspected misspellings of assertions on mocks are now pointing out that the cause are misspelled assertions and also what to do if the misspelling is actually an intended attribute name. The unittest.mock document is also updated to reflect the current set of recognised misspellings.

    • bpo-43478: Mocks can no longer be provided as the specs for other Mocks. As a result, an already-mocked object cannot be passed to mock.Mock(). This can uncover bugs in tests since these Mock-derived Mocks will always pass certain tests (e.g. isinstance) and builtin assert functions (e.g. assert_called_once_with) will unconditionally pass.

    • bpo-45010: Remove support of special method __div__ in :mod:unittest.mock. It is not used in Python 3.

    • gh-84753: :func:inspect.iscoroutinefunction now properly returns True when an instance of :class:unittest.mock.AsyncMock is passed to it. This makes it consistent with behavior of :func:asyncio.iscoroutinefunction. Patch by Mehdi ABAAKOUK.

    • bpo-46852: Remove the undocumented private float.__set_format__() method, previously known as float.__setformat__() in Python 3.7. Its docstring said: "You probably don't want to use this function. It exists mainly to be used in Python's test suite." Patch by Victor Stinner.

    • gh-98086: Make sure patch.dict() can be applied on async functions.

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Bump actions/cache from 3.0.11 to 3.2.2

    Bump actions/cache from 3.0.11 to 3.2.2

    Bumps actions/cache from 3.0.11 to 3.2.2.

    Release notes

    Sourced from actions/cache's releases.

    v3.2.2

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/cache/compare/v3.2.1...v3.2.2

    v3.2.1

    What's Changed

    Full Changelog: https://github.com/actions/cache/compare/v3.2.0...v3.2.1

    v3.2.0

    What's Changed

    New Contributors

    ... (truncated)

    Changelog

    Sourced from actions/cache's changelog.

    3.0.11

    • Update toolkit version to 3.0.5 to include @actions/core@^1.10.0
    • Update @actions/cache to use updated saveState and setOutput functions from @actions/core@^1.10.0

    3.1.0-beta.1

    • Update @actions/cache on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. (issue)

    3.1.0-beta.2

    • Added support for fallback to gzip to restore old caches on windows.

    3.1.0-beta.3

    • Bug fixes for bsdtar fallback if gnutar not available and gzip fallback if cache saved using old cache action on windows.

    3.2.0-beta.1

    • Added two new actions - restore and save for granular control on cache.

    3.2.0

    • Released the two new actions - restore and save for granular control on cache

    3.2.1

    • Update @actions/cache on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. (issue)
    • Added support for fallback to gzip to restore old caches on windows.
    • Added logs for cache version in case of a cache miss.

    3.2.2

    • Reverted the changes made in 3.2.1 to use gnu tar and zstd by default on windows.
    Commits
    • 4723a57 Revert compression changes related to windows but keep version logging (#1049)
    • d1507cc Merge pull request #1042 from me-and/correct-readme-re-windows
    • 3337563 Merge branch 'main' into correct-readme-re-windows
    • 60c7666 save/README.md: Fix typo in example (#1040)
    • b053f2b Fix formatting error in restore/README.md (#1044)
    • 501277c README.md: remove outdated Windows cache tip link
    • c1a5de8 Upgrade codeql to v2 (#1023)
    • 9b0be58 Release compression related changes for windows (#1039)
    • c17f4bf GA for granular cache (#1035)
    • ac25611 docs: fix an invalid link in workarounds.md (#929)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Bump isort from 5.11.2 to 5.11.4

    Bump isort from 5.11.2 to 5.11.4

    Bumps isort from 5.11.2 to 5.11.4.

    Release notes

    Sourced from isort's releases.

    5.11.4

    Changes

    :package: Dependencies

    5.11.3

    Changes

    :beetle: Fixes

    :construction_worker: Continuous Integration

    v5.11.3

    Changes

    :beetle: Fixes

    :construction_worker: Continuous Integration

    Changelog

    Sourced from isort's changelog.

    5.11.4 December 21 2022

    5.11.3 December 16 2022

    Commits
    • 98390f5 Merge pull request #2059 from PyCQA/version/5.11.4
    • df69a05 Bump version 5.11.4
    • f9add58 Merge pull request #2058 from PyCQA/deps/poetry-1.3.1
    • 36caa91 Bump Poetry 1.3.1
    • 3c2e2d0 Merge pull request #1978 from mgorny/toml-test
    • 45d6abd Remove obsolete toml import from the test suite
    • 3020e0b Merge pull request #2057 from mgorny/poetry-install
    • a6fdbfd Stop installing documentation files to top-level site-packages
    • ff306f8 Fix tag template to match old standard
    • 227c4ae Merge pull request #2052 from hugovk/main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Bump pylint from 2.15.8 to 2.15.9

    Bump pylint from 2.15.8 to 2.15.9

    Bumps pylint from 2.15.8 to 2.15.9.

    Commits
    • 1ded4d0 Bump pylint to 2.15.9, update changelog (#7952)
    • 785c629 [testutil] More information in output for functional test fail (#7948)
    • 3c3ab98 [pypy3.8] Disable multiple-statements false positive on affected functional t...
    • dca3940 Fix inconsistent argument exit code when argparse exit with its own error cod...
    • 494e514 Fix ModuleNotFoundError when using pylint_django (#7940) (#7941)
    • 83668de fix: bump dill to >= 0.3.6, prevents tests hanging with python3.11 (#7918)
    • eadc308 [github actions] Fix enchant's install in the spelling job
    • 391323e Avoid hanging forever after a parallel job was killed (#7834) (#7930)
    • 4655b92 Prevent used-before-assignment in pattern matching with a guard (#7922) (#7...
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Home Assistant can not connected to ESPHome device due to: google.protobuf.message.DecodeError: Field number 0 is illegal.

    Home Assistant can not connected to ESPHome device due to: google.protobuf.message.DecodeError: Field number 0 is illegal.

    Error while reading incoming messages: Invalid preamble 5e 2022-12-13 12:14:38.800 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/connection.py", line 137, in _do_cleanup await self._process_task File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/connection.py", line 559, in _process_loop msg.ParseFromString(pkt.data) File "/usr/local/lib/python3.10/site-packages/google/protobuf/message.py", line 202, in ParseFromString return self.MergeFromString(serialized) File "/usr/local/lib/python3.10/site-packages/google/protobuf/internal/python_message.py", line 1128, in MergeFromString if self._InternalParse(serialized, 0, length) != length: File "/usr/local/lib/python3.10/site-packages/google/protobuf/internal/python_message.py", line 1178, in InternalParse raise message_mod.DecodeError('Field number 0 is illegal.') google.protobuf.message.DecodeError: Field number 0 is illegal.

    opened by abrilevskiy 13
Releases(v13.0.2)
  • v13.0.2(Dec 13, 2022)

    What's Changed

    • Fix failure to reconnect when the process task raises an exception during decoding a protobuf message (#339) @bdraco
    • Only start task if existing one is done (#337) @alexyao2015
    Source code(tar.gz)
    Source code(zip)
  • v13.0.1(Dec 4, 2022)

    What's Changed

    • Small speed up to parsing LE advertisement data (#330) @bdraco
    • Fix leak if send_message_callback_response raises (#334) @bdraco
    • Handle socket reset errors while reading (#333) @bdraco
    Source code(tar.gz)
    Source code(zip)
  • v13.0.0(Dec 2, 2022)

    What's Changed

    • Callback messages to listeners by type (#328) @bdraco
    • Optimize throughput of api to decrease latency (#327) @bdraco

    Breaking Changes

    • Add method to cancel bluetooth_gatt_start_notify upon ble device disconnect (#329) @bdraco
    Source code(tar.gz)
    Source code(zip)
  • v12.2.1(Nov 30, 2022)

    What's Changed

    • Reduce number of calls to readexactly (#324) @bdraco
    • Move message parsing out of the read loop (#323) @bdraco
    • Small speed ups to the bluetooth advertisement converts (#325) @bdraco
    • Fix bluetooth write without response (#326) @bdraco

    Dependencies

    2 changes
    • Bump types-protobuf from 3.20.4.6 to 4.21.0.1 (#321) @dependabot
    • Bump pylint from 2.15.6 to 2.15.7 (#322) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v12.2.0(Nov 29, 2022)

  • v12.1.0(Nov 29, 2022)

  • v12.0.1(Nov 28, 2022)

    What's Changed

    • Increase timeout while waiting for ListEntities to be done (#318) @jesserockz
    • Fix connection subscription leak on cancelation (#316) @bdraco

    Dependencies

    2 changes
    • Bump flake8 from 5.0.4 to 6.0.0 (#314) @dependabot
    • Bump types-protobuf from 3.20.4.5 to 3.20.4.6 (#313) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v12.0.0(Nov 22, 2022)

    What's Changed

    • Wait for BLE disconnect when connecting timeouts (#310) @bdraco
    • Update actions set-output to GITHUB_OUTPUT (#312) @jesserockz
    • Protobuf version upgrades (#307) @jesserockz

    Dependencies

    2 changes
    • Bump types-protobuf from 3.20.4.4 to 3.20.4.5 (#308) @dependabot
    • Bump pylint from 2.15.5 to 2.15.6 (#311) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v11.5.0(Nov 17, 2022)

    What's Changed

    • Add device class support to number (#309) @frenck
    • Catch error when task is stopped (#306) @jesserockz
    • Add vscode task to Generate files (#305) @jesserockz
    • Dev container (#302) @juliekoubova

    Dependencies

    2 changes
    • Bump mypy from 0.982 to 0.991 (#304) @dependabot
    • Bump types-protobuf from 3.20.4.2 to 3.20.4.4 (#300) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v11.4.3(Nov 6, 2022)

  • v11.4.2(Oct 31, 2022)

  • v11.4.1(Oct 31, 2022)

  • v11.4.0(Oct 30, 2022)

    What's Changed

    • Raise GATT errors on read and write etc (#272) @jesserockz
    • Fix race while disconnecting after connect timeout (#295) @bdraco
    Source code(tar.gz)
    Source code(zip)
  • v11.3.0(Oct 30, 2022)

    What's Changed

    • Disconnect ble device if connect attempt fails to recover slot (#293) @bdraco
    • Add esp ble error code mappings (#292) @bdraco

    Dependencies

    • Bump types-protobuf from 3.20.4.1 to 3.20.4.2 (#294) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v11.2.0(Oct 25, 2022)

    What's Changed

    • Get manufacturer name string from device (#290) @jesserockz
    • Adjust ble timeouts to be longer than bleak timeouts (#287) @bdraco
    • Fix permanent disconnect issue (#273) @alexyao2015

    Dependencies

    8 changes
    • Bump docker/build-push-action from 3.1.1 to 3.2.0 (#278) @dependabot
    • Bump types-protobuf from 3.20.4 to 3.20.4.1 (#284) @dependabot
    • Bump docker/login-action from 2.0.0 to 2.1.0 (#279) @dependabot
    • Bump docker/setup-qemu-action from 2.0.0 to 2.1.0 (#281) @dependabot
    • Bump actions/cache from 3.0.10 to 3.0.11 (#282) @dependabot
    • Bump docker/setup-buildx-action from 2.0.0 to 2.2.1 (#283) @dependabot
    • Bump black from 22.8.0 to 22.10.0 (#274) @dependabot
    • Bump pylint from 2.15.3 to 2.15.5 (#289) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v11.1.1(Oct 6, 2022)

    What's Changed

    • Bump actions/cache from 3.0.9 to 3.0.10 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/269
    • Bump mypy from 0.981 to 0.982 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/270
    • Fix process_task not ending correctly by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/271

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v11.1.0...v11.1.1

    Source code(tar.gz)
    Source code(zip)
  • v11.1.0(Oct 2, 2022)

    What's Changed

    • Only try remove callbacks when not None (#268) @jesserockz
    • Bump types-protobuf from 3.20.1 to 3.20.4 (#256) @dependabot
    • Bump actions/cache from 3.0.8 to 3.0.9 (#266) @dependabot
    • Increase underlying socket receive buffer (#267) @bdraco
    Source code(tar.gz)
    Source code(zip)
  • v11.0.0(Sep 30, 2022)

    What's Changed

    • Change has_bluetooth_proxy to a version (#264) @jesserockz
    • Process messages in a separate task loop (#263) @jesserockz
    • Change BLE advertisement data to bytes (#262) @jesserockz
    • A few fixes for BLE GATT (#261) @jesserockz

    Breaking Changes

    • Bump min python to 3.9 (#265) @jesserockz
    Source code(tar.gz)
    Source code(zip)
  • v10.14.0(Sep 28, 2022)

    What's Changed

    • Add Bluetooth GATT calls (#259) @jesserockz
    • Bump pylint from 2.15.0 to 2.15.3 (#257) @dependabot
    • Bump mypy from 0.971 to 0.981 (#260) @dependabot
    • Add async-timeout to requirements.txt (#255) @mjonuschat
    • Bump pylint from 2.14.5 to 2.15.0 (#250) @dependabot
    • Bump types-protobuf from 3.19.22 to 3.20.1 (#249) @dependabot
    • Bump actions/cache from 3.0.7 to 3.0.8 (#248) @dependabot
    • Bump black from 22.6.0 to 22.8.0 (#251) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v10.13.0(Aug 22, 2022)

    What's Changed

    • Add has_bluetooth_proxy flag to device info by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/247

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.12.0...v10.13.0

    Source code(tar.gz)
    Source code(zip)
  • v10.12.0(Aug 22, 2022)

    What's Changed

    • Change out asyncio.wait_for with async_timeout by @bdraco in https://github.com/esphome/aioesphomeapi/pull/243
    • Implement Bluetooth LE advertisement receiving by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/246
    Dependencies
    • Bump actions/cache from 3.0.4 to 3.0.7 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/245
    • Bump docker/build-push-action from 3.0.0 to 3.1.1 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/244
    • Bump pylint from 2.14.4 to 2.14.5 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/236
    • Bump mypy from 0.961 to 0.971 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/237
    • Bump flake8 from 4.0.1 to 5.0.4 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/241

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.11.0...v10.12.0

    Source code(tar.gz)
    Source code(zip)
  • v10.11.0(Jul 7, 2022)

    What's Changed

    • Increase ListEntitiesRequest timeout to 30 seconds by @syndtr in https://github.com/esphome/aioesphomeapi/pull/234
    • state class TOTAL added by @peterg79 in https://github.com/esphome/aioesphomeapi/pull/229
    Dependencies
    • Bump types-protobuf from 3.19.20 to 3.19.21 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/216
    • Bump mypy from 0.950 to 0.960 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/218
    • Bump actions/cache from 3.0.2 to 3.0.3 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/219
    • Bump pylint from 2.13.9 to 2.14.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/220
    • Bump pylint from 2.14.0 to 2.14.1 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/222
    • Bump mypy from 0.960 to 0.961 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/223
    • Bump actions/cache from 3.0.3 to 3.0.4 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/224
    • Bump actions/setup-python from 3 to 4 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/225
    • Bump pylint from 2.14.1 to 2.14.2 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/226
    • Bump pylint from 2.14.2 to 2.14.3 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/228
    • Bump types-protobuf from 3.19.21 to 3.19.22 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/227
    • Bump black from 22.3.0 to 22.6.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/230
    • Bump pylint from 2.14.3 to 2.14.4 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/231

    New Contributors

    • @syndtr made their first contribution in https://github.com/esphome/aioesphomeapi/pull/234
    • @peterg79 made their first contribution in https://github.com/esphome/aioesphomeapi/pull/229

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.10.0...v10.11.0

    Source code(tar.gz)
    Source code(zip)
  • v10.10.0(May 18, 2022)

    What's Changed

    • Assume volume (and therefore mute) is always supported by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/215

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.9.0...v10.10.0

    Source code(tar.gz)
    Source code(zip)
  • v10.9.0(May 18, 2022)

    What's Changed

    • Add media player entities by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/214
    Dependencies
    • Bump types-protobuf from 3.19.11 to 3.19.12 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/177
    • Bump docker/login-action from 1.12.0 to 1.13.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/178
    • Bump actions/setup-python from 2 to 3 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/180
    • Bump docker/login-action from 1.13.0 to 1.14.1 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/181
    • Bump actions/checkout from 2 to 3 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/182
    • Bump mypy from 0.931 to 0.940 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/184
    • Bump docker/build-push-action from 2.9.0 to 2.10.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/186
    • Bump mypy from 0.940 to 0.941 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/185
    • Bump black from 22.1.0 to 22.3.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/195
    • Bump mypy from 0.941 to 0.942 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/192
    • Bump types-protobuf from 3.19.12 to 3.19.15 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/190
    • Bump pylint from 2.12.2 to 2.13.4 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/197
    • Bump actions/cache from 2 to 3.0.1 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/196
    • Bump pylint from 2.13.4 to 2.13.5 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/198
    • Bump actions/cache from 3.0.1 to 3.0.2 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/199
    • Bump types-protobuf from 3.19.15 to 3.19.17 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/200
    • Bump docker/setup-buildx-action from 1.6.0 to 1.7.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/205
    • Bump pylint from 2.13.5 to 2.13.8 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/206
    • Bump docker/build-push-action from 2.10.0 to 3.0.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/210
    • Bump docker/setup-buildx-action from 1.7.0 to 2.0.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/209
    • Bump docker/setup-qemu-action from 1.2.0 to 2.0.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/208
    • Bump docker/login-action from 1.14.1 to 2.0.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/207
    • Bump pylint from 2.13.8 to 2.13.9 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/213
    • Bump types-protobuf from 3.19.17 to 3.19.20 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/212
    • Bump mypy from 0.942 to 0.950 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/204

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.8.2...v10.9.0

    Source code(tar.gz)
    Source code(zip)
  • v10.8.2(Feb 9, 2022)

    What's Changed

    • Fix no timeout for handshake (#176) @OttoWinter
    • Update pytest requirement from <7,>=6.2.4 to >=6.2.4,<8 (#173) @dependabot
    • Bump types-protobuf from 3.19.8 to 3.19.11 (#175) @dependabot
    • Bump types-protobuf from 3.19.7 to 3.19.8 (#172) @dependabot
    • Bump docker/build-push-action from 2.8.0 to 2.9.0 (#171) @dependabot
    • Bump black from 21.12b0 to 22.1.0 (#169) @dependabot
    • Bump types-protobuf from 3.19.6 to 3.19.7 (#170) @dependabot
    • Bump types-protobuf from 3.19.5 to 3.19.6 (#167) @dependabot
    Source code(tar.gz)
    Source code(zip)
  • v10.8.1(Jan 23, 2022)

    What's Changed

    • Export BadNameAPIError in main module by @OttoWinter in https://github.com/esphome/aioesphomeapi/pull/166

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.8.0...v10.8.1

    Source code(tar.gz)
    Source code(zip)
  • v10.8.0(Jan 20, 2022)

    What's Changed

    • Expect a name for connections by @OttoWinter in https://github.com/esphome/aioesphomeapi/pull/122
    • Bump types-protobuf from 3.19.4 to 3.19.5 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/165

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.7.0...v10.8.0

    Source code(tar.gz)
    Source code(zip)
  • v10.7.0(Jan 19, 2022)

    What's Changed

    • Bump docker/login-action from 1.10.0 to 1.12.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/153
    • Bump black from 21.11b1 to 21.12b0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/150
    • Bump pylint from 2.12.1 to 2.12.2 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/149
    • Remove loop argument by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/155
    • Add device class support to Switch by @frenck in https://github.com/esphome/aioesphomeapi/pull/157
    • Catch conn reset by @zathras777 in https://github.com/esphome/aioesphomeapi/pull/159
    • Bump types-protobuf from 3.18.2 to 3.18.3 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/160
    • Bump mypy from 0.910 to 0.930 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/156
    • Add lock entity by @kbickar in https://github.com/esphome/aioesphomeapi/pull/158
    • Bump docker/build-push-action from 2.7.0 to 2.8.0 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/164
    • Bump types-protobuf from 3.18.3 to 3.19.4 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/163
    • Bump mypy from 0.930 to 0.931 by @dependabot in https://github.com/esphome/aioesphomeapi/pull/162

    New Contributors

    • @zathras777 made their first contribution in https://github.com/esphome/aioesphomeapi/pull/159
    • @kbickar made their first contribution in https://github.com/esphome/aioesphomeapi/pull/158

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.6.0...v10.7.0

    Source code(tar.gz)
    Source code(zip)
  • v10.6.0(Nov 30, 2021)

    What's Changed

    • Add mode to number entities by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/148

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.5.0...v10.6.0

    Source code(tar.gz)
    Source code(zip)
  • v10.5.0(Nov 30, 2021)

    What's Changed

    • Add unit_of_measurement to number components by @jesserockz in https://github.com/esphome/aioesphomeapi/pull/147

    Full Changelog: https://github.com/esphome/aioesphomeapi/compare/v10.4.0...v10.5.0

    Source code(tar.gz)
    Source code(zip)
Owner
ESPHome
ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems.
ESPHome
Home Assistant integration for energy consumption data from UK SMETS (Smart) meters using the Hildebrand Glow API.

Hildebrand Glow (DCC) Integration Home Assistant integration for energy consumption data from UK SMETS (Smart) meters using the Hildebrand Glow API. T

Aniket 153 Dec 30, 2022
Resmed_myair_sensors - This is a Home Assistant custom component to pull daily CPAP data from ResMed's myAir service using an undocumented API

resmed_myair This component will set up the following platforms. Platform Description sensor Show info from the myAir API. Installation Using the tool

Preston Tamkin 17 Dec 29, 2022
Python script: Enphase Envoy mqtt json for Home Assistant

A Python script that takes a real time stream from Enphase Envoy and publishes to a mqtt broker. This can then be used within Home Assistant or for other applications. The data updates at least once per second with negligible load on the Envoy.

null 29 Dec 27, 2022
Universal Xiaomi MIoT integration for Home Assistant

Xiaomi MIoT Raw 简体中文 | English MIoT 协议是小米智能家居从 2018 年起推行的智能设备通信协议规范,此后凡是可接入米家的设备均通过此协议进行通信。此插件按照 MIoT 协议规范与设备通信,实现对设备的状态读取及控制。

null 1.9k Jan 2, 2023
Volkswagen ID component for Home Assistant

Volkswagen ID component for Home Assistant This folder contains both a generic Python 3 library for the Volkswagen ID API and a component for Home Ass

null 55 Jan 7, 2023
Sensor of Temperature Feels Like for Home Assistant.

Please ⭐ this repo if you find it useful Sensor of Temperature Feels Like for Home Assistant Installation Install from HACS (recommended) Have HACS in

Andrey 60 Dec 25, 2022
Home Assistant custom integration for e-distribución

e-Distribución is an energy distribution company that covers most of South Spain area. If you live in this area, you probably are able to register into their website to get some information about your power demand, energy consumption, or even cycle billing (in terms of consumptions).

VMG 17 Sep 7, 2022
Home Assistant custom integration for Yi cameras: yi-hack-MStar, yi-hack-Allwinner and yi-hack-Allwinner-v2

yi-hack Home Assistant integration Overview yi-hack Home Assistant is a custom integration for Yi cameras (or Sonoff camera) with one of the following

roleo 131 Jan 3, 2023
Интеграция Home Assistant с ЛК "Интер РАО"

ЕЛК ЖКХ «Интер РАО» для Home Assistant Предоставление информации о текущем состоянии ваших аккаунтов в ЕЛК ЖКХ. Введение @ TODO @ Установка Посредство

Alexander Ryazanov 27 Nov 5, 2022
Switch predictor for Home Assistant with AppDeamon

Home Assistant AppDeamon - Event predictor WORK IN PROGRESS - CURRENTLY NOT COMPLETE AND NOT WORK This is an idea under development (when I have free

null 37 Dec 17, 2022
Uses the Duke Energy Gateway to import near real time energy usage into Home Assistant

Duke Energy Gateway This is a custom integration for Home Assistant. It pulls near-real-time energy usage from Duke Energy via the Duke Energy Gateway

Michael Meli 28 Dec 23, 2022
Custom component for Home Assistant that integrates Candy/Haier Wi-Fi washing machines (also known as Simply-Fi).

Candy Home Assistant component Custom component for Home Assistant that integrates Candy/Haier Wi-Fi washing machines (also known as Simply-Fi). This

Olivér Falvai 61 Dec 29, 2022
emhass: Energy Management for Home Assistant

emhass EMHASS: Energy Management for Home Assistant Context This module was conceived as an energy management optimization tool for residential electr

David 70 Dec 24, 2022
Electrolux Pure i9 robot vacuum integration for Home Assistant.

Home Assistant Pure i9 This repository integrates your Electrolux Pure i9 robot vacuum with the smart home platform Home Assistant. The integration co

Niklas Ekman 15 Dec 22, 2022
Huawei Solar sensors for Home Assistant

Huawei Solar Sensors This integration splits out the various values that are fetched from your Huawei Solar inverter into separate HomeAssistant senso

Thijs Walcarius 151 Dec 31, 2022
Connect a TeslaMate instance to Home Assistant, using MQTT

TeslaBuddy Connect a TeslaMate instance to Home Assistant, using MQTT. It allows basic control of your Tesla vehicle via Home Assistant (currently, ju

null 4 May 23, 2022
Baseline model for Augmented Home Assistant

Dataset Preparation Step 1. Rename the Virtual-Home output directory to 'vh.[name]', for example: 'vh.door' Make sure the directory contains 100+ fram

Stanford HCI 1 Aug 24, 2022
Better support for Nuki devices to the Home Assistant

Another attempt to add a better support for Nuki devices to the Home Assistant Features: Lock interface implementation Uses local webhook from bridge

Konstantin 105 Jan 7, 2023
Water quality integration for Home Assistant with data provided by Budapest FVM

Water Quality FVM (Budapest, HU) custom integration for Home Assistant This custom component integrates water quality information provided by Budapest

Atticus Maximus 3 Dec 23, 2021