mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Bump aioesphomeapi to 31.0.0 (#144778)
* aioesphomeapi update * Bump aioesphomeapi to 31.0.0 There are some breaking changes with the protobuf naming and types required some refactoring changelog: https://github.com/esphome/aioesphomeapi/compare/v30.2.0...v31.0.0 * actually include the commit to bump the lib
This commit is contained in:
parent
6d809b0b5a
commit
c76239806d
@ -63,7 +63,7 @@ class EsphomeFan(EsphomeEntity[FanInfo, FanState], FanEntity):
|
||||
if self._supports_speed_levels:
|
||||
data["speed_level"] = math.ceil(
|
||||
percentage_to_ranged_value(
|
||||
(1, self._static_info.supported_speed_levels), percentage
|
||||
(1, self._static_info.supported_speed_count), percentage
|
||||
)
|
||||
)
|
||||
else:
|
||||
@ -121,7 +121,7 @@ class EsphomeFan(EsphomeEntity[FanInfo, FanState], FanEntity):
|
||||
)
|
||||
|
||||
return ranged_value_to_percentage(
|
||||
(1, self._static_info.supported_speed_levels), self._state.speed_level
|
||||
(1, self._static_info.supported_speed_count), self._state.speed_level
|
||||
)
|
||||
|
||||
@property
|
||||
@ -164,7 +164,7 @@ class EsphomeFan(EsphomeEntity[FanInfo, FanState], FanEntity):
|
||||
if not supports_speed_levels:
|
||||
self._attr_speed_count = len(ORDERED_NAMED_FAN_SPEEDS)
|
||||
else:
|
||||
self._attr_speed_count = static_info.supported_speed_levels
|
||||
self._attr_speed_count = static_info.supported_speed_count
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
|
@ -8,6 +8,7 @@ from typing import TYPE_CHECKING, Any, cast
|
||||
|
||||
from aioesphomeapi import (
|
||||
APIVersion,
|
||||
ColorMode as ESPHomeColorMode,
|
||||
EntityInfo,
|
||||
LightColorCapability,
|
||||
LightInfo,
|
||||
@ -106,15 +107,15 @@ def _mired_to_kelvin(mired_temperature: float) -> int:
|
||||
|
||||
|
||||
@lru_cache
|
||||
def _color_mode_to_ha(mode: int) -> str:
|
||||
def _color_mode_to_ha(mode: ESPHomeColorMode) -> ColorMode:
|
||||
"""Convert an esphome color mode to a HA color mode constant.
|
||||
|
||||
Choose the color mode that best matches the feature-set.
|
||||
"""
|
||||
candidates = []
|
||||
candidates: list[tuple[ColorMode, LightColorCapability]] = []
|
||||
for ha_mode, cap_lists in _COLOR_MODE_MAPPING.items():
|
||||
for caps in cap_lists:
|
||||
if caps == mode:
|
||||
if caps.value == mode:
|
||||
# exact match
|
||||
return ha_mode
|
||||
if (mode & caps) == caps:
|
||||
@ -131,8 +132,8 @@ def _color_mode_to_ha(mode: int) -> str:
|
||||
|
||||
@lru_cache
|
||||
def _filter_color_modes(
|
||||
supported: list[int], features: LightColorCapability
|
||||
) -> tuple[int, ...]:
|
||||
supported: list[ESPHomeColorMode], features: LightColorCapability
|
||||
) -> tuple[ESPHomeColorMode, ...]:
|
||||
"""Filter the given supported color modes.
|
||||
|
||||
Excluding all values that don't have the requested features.
|
||||
@ -156,7 +157,7 @@ def _least_complex_color_mode(color_modes: tuple[int, ...]) -> int:
|
||||
class EsphomeLight(EsphomeEntity[LightInfo, LightState], LightEntity):
|
||||
"""A light implementation for ESPHome."""
|
||||
|
||||
_native_supported_color_modes: tuple[int, ...]
|
||||
_native_supported_color_modes: tuple[ESPHomeColorMode, ...]
|
||||
_supports_color_mode = False
|
||||
|
||||
@property
|
||||
|
@ -17,7 +17,7 @@
|
||||
"mqtt": ["esphome/discover/#"],
|
||||
"quality_scale": "platinum",
|
||||
"requirements": [
|
||||
"aioesphomeapi==30.2.0",
|
||||
"aioesphomeapi==31.0.0",
|
||||
"esphome-dashboard-api==1.3.0",
|
||||
"bleak-esphome==2.15.1"
|
||||
],
|
||||
|
@ -88,9 +88,9 @@ class EsphomeSensor(EsphomeEntity[SensorInfo, SensorState], SensorEntity):
|
||||
return
|
||||
if (
|
||||
state_class == EsphomeSensorStateClass.MEASUREMENT
|
||||
and static_info.last_reset_type == LastResetType.AUTO
|
||||
and static_info.legacy_last_reset_type == LastResetType.AUTO
|
||||
):
|
||||
# Legacy, last_reset_type auto was the equivalent to the
|
||||
# Legacy, legacy_last_reset_type auto was the equivalent to the
|
||||
# TOTAL_INCREASING state class
|
||||
self._attr_state_class = SensorStateClass.TOTAL_INCREASING
|
||||
else:
|
||||
|
2
requirements_all.txt
generated
2
requirements_all.txt
generated
@ -241,7 +241,7 @@ aioelectricitymaps==0.4.0
|
||||
aioemonitor==1.0.5
|
||||
|
||||
# homeassistant.components.esphome
|
||||
aioesphomeapi==30.2.0
|
||||
aioesphomeapi==31.0.0
|
||||
|
||||
# homeassistant.components.flo
|
||||
aioflo==2021.11.0
|
||||
|
2
requirements_test_all.txt
generated
2
requirements_test_all.txt
generated
@ -229,7 +229,7 @@ aioelectricitymaps==0.4.0
|
||||
aioemonitor==1.0.5
|
||||
|
||||
# homeassistant.components.esphome
|
||||
aioesphomeapi==30.2.0
|
||||
aioesphomeapi==31.0.0
|
||||
|
||||
# homeassistant.components.flo
|
||||
aioflo==2021.11.0
|
||||
|
@ -148,7 +148,7 @@ async def test_fan_entity_with_all_features_new_api(
|
||||
key=1,
|
||||
name="my fan",
|
||||
unique_id="my_fan",
|
||||
supported_speed_levels=4,
|
||||
supported_speed_count=4,
|
||||
supports_direction=True,
|
||||
supports_speed=True,
|
||||
supports_oscillation=True,
|
||||
|
@ -5,6 +5,7 @@ from unittest.mock import call
|
||||
from aioesphomeapi import (
|
||||
APIClient,
|
||||
APIVersion,
|
||||
ColorMode as ESPColorMode,
|
||||
LightColorCapability,
|
||||
LightInfo,
|
||||
LightState,
|
||||
@ -58,7 +59,7 @@ async def test_light_on_off(
|
||||
unique_id="my_light",
|
||||
min_mireds=153,
|
||||
max_mireds=400,
|
||||
supported_color_modes=[LightColorCapability.ON_OFF],
|
||||
supported_color_modes=[ESPColorMode.ON_OFF],
|
||||
)
|
||||
]
|
||||
states = [LightState(key=1, state=True)]
|
||||
@ -218,12 +219,14 @@ async def test_light_brightness_on_off(
|
||||
unique_id="my_light",
|
||||
min_mireds=153,
|
||||
max_mireds=400,
|
||||
supported_color_modes=[
|
||||
LightColorCapability.ON_OFF | LightColorCapability.BRIGHTNESS
|
||||
],
|
||||
supported_color_modes=[ESPColorMode.ON_OFF, ESPColorMode.BRIGHTNESS],
|
||||
)
|
||||
]
|
||||
states = [
|
||||
LightState(
|
||||
key=1, state=True, brightness=100, color_mode=ESPColorMode.BRIGHTNESS
|
||||
)
|
||||
]
|
||||
states = [LightState(key=1, state=True, brightness=100)]
|
||||
user_service = []
|
||||
await mock_generic_device_entry(
|
||||
mock_client=mock_client,
|
||||
@ -234,6 +237,10 @@ async def test_light_brightness_on_off(
|
||||
state = hass.states.get("light.test_mylight")
|
||||
assert state is not None
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == [
|
||||
ColorMode.BRIGHTNESS,
|
||||
]
|
||||
assert state.attributes[ATTR_COLOR_MODE] == ColorMode.BRIGHTNESS
|
||||
|
||||
await hass.services.async_call(
|
||||
LIGHT_DOMAIN,
|
||||
@ -246,8 +253,7 @@ async def test_light_brightness_on_off(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.BRIGHTNESS.value,
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -264,8 +270,7 @@ async def test_light_brightness_on_off(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.BRIGHTNESS.value,
|
||||
brightness=pytest.approx(0.4980392156862745),
|
||||
)
|
||||
]
|
||||
@ -407,13 +412,18 @@ async def test_light_brightness_on_off_with_unknown_color_mode(
|
||||
min_mireds=153,
|
||||
max_mireds=400,
|
||||
supported_color_modes=[
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LIGHT_COLOR_CAPABILITY_UNKNOWN
|
||||
ESPColorMode.ON_OFF,
|
||||
ESPColorMode.BRIGHTNESS,
|
||||
LIGHT_COLOR_CAPABILITY_UNKNOWN,
|
||||
],
|
||||
)
|
||||
]
|
||||
states = [LightState(key=1, state=True, brightness=100)]
|
||||
entity_info[0].supported_color_modes.append(LIGHT_COLOR_CAPABILITY_UNKNOWN)
|
||||
states = [
|
||||
LightState(
|
||||
key=1, state=True, brightness=100, color_mode=LIGHT_COLOR_CAPABILITY_UNKNOWN
|
||||
)
|
||||
]
|
||||
user_service = []
|
||||
await mock_generic_device_entry(
|
||||
mock_client=mock_client,
|
||||
@ -436,9 +446,7 @@ async def test_light_brightness_on_off_with_unknown_color_mode(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LIGHT_COLOR_CAPABILITY_UNKNOWN,
|
||||
color_mode=LIGHT_COLOR_CAPABILITY_UNKNOWN,
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -455,9 +463,7 @@ async def test_light_brightness_on_off_with_unknown_color_mode(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LIGHT_COLOR_CAPABILITY_UNKNOWN,
|
||||
color_mode=ESPColorMode.BRIGHTNESS,
|
||||
brightness=pytest.approx(0.4980392156862745),
|
||||
)
|
||||
]
|
||||
@ -517,13 +523,10 @@ async def test_rgb_color_temp_light(
|
||||
) -> None:
|
||||
"""Test a generic light that supports color temp and RGB."""
|
||||
color_modes = [
|
||||
LightColorCapability.ON_OFF | LightColorCapability.BRIGHTNESS,
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.COLOR_TEMPERATURE,
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.RGB,
|
||||
ESPColorMode.ON_OFF,
|
||||
ESPColorMode.BRIGHTNESS,
|
||||
ESPColorMode.COLOR_TEMPERATURE,
|
||||
ESPColorMode.RGB,
|
||||
]
|
||||
|
||||
mock_client.api_version = APIVersion(1, 7)
|
||||
@ -538,7 +541,11 @@ async def test_rgb_color_temp_light(
|
||||
supported_color_modes=color_modes,
|
||||
)
|
||||
]
|
||||
states = [LightState(key=1, state=True, brightness=100)]
|
||||
states = [
|
||||
LightState(
|
||||
key=1, state=True, brightness=100, color_mode=ESPColorMode.BRIGHTNESS
|
||||
)
|
||||
]
|
||||
user_service = []
|
||||
await mock_generic_device_entry(
|
||||
mock_client=mock_client,
|
||||
@ -561,8 +568,7 @@ async def test_rgb_color_temp_light(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.BRIGHTNESS,
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -579,8 +585,7 @@ async def test_rgb_color_temp_light(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.BRIGHTNESS,
|
||||
brightness=pytest.approx(0.4980392156862745),
|
||||
)
|
||||
]
|
||||
@ -598,9 +603,7 @@ async def test_rgb_color_temp_light(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.COLOR_TEMPERATURE,
|
||||
color_mode=ESPColorMode.COLOR_TEMPERATURE,
|
||||
color_temperature=400,
|
||||
)
|
||||
]
|
||||
@ -908,12 +911,14 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
min_mireds=153,
|
||||
max_mireds=400,
|
||||
supported_color_modes=[
|
||||
LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
ESPColorMode.RGB,
|
||||
ESPColorMode.WHITE,
|
||||
ESPColorMode.COLOR_TEMPERATURE,
|
||||
ESPColorMode.COLD_WARM_WHITE,
|
||||
ESPColorMode.ON_OFF,
|
||||
ESPColorMode.BRIGHTNESS,
|
||||
ESPColorMode.RGB_COLD_WARM_WHITE,
|
||||
ESPColorMode.RGB_WHITE,
|
||||
],
|
||||
)
|
||||
]
|
||||
@ -928,12 +933,7 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
blue=1,
|
||||
warm_white=1,
|
||||
cold_white=1,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.RGB_COLD_WARM_WHITE,
|
||||
)
|
||||
]
|
||||
user_service = []
|
||||
@ -946,7 +946,13 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
state = hass.states.get("light.test_mylight")
|
||||
assert state is not None
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == [ColorMode.RGBWW]
|
||||
assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == [
|
||||
ColorMode.COLOR_TEMP,
|
||||
ColorMode.RGB,
|
||||
ColorMode.RGBW,
|
||||
ColorMode.RGBWW,
|
||||
ColorMode.WHITE,
|
||||
]
|
||||
assert state.attributes[ATTR_COLOR_MODE] == ColorMode.RGBWW
|
||||
assert state.attributes[ATTR_RGBWW_COLOR] == (255, 255, 255, 255, 255)
|
||||
|
||||
@ -961,12 +967,7 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.RGB_COLD_WARM_WHITE,
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -983,12 +984,7 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.RGB_COLD_WARM_WHITE,
|
||||
brightness=pytest.approx(0.4980392156862745),
|
||||
)
|
||||
]
|
||||
@ -1011,14 +1007,7 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
key=1,
|
||||
state=True,
|
||||
color_brightness=1.0,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
cold_white=0,
|
||||
warm_white=0,
|
||||
color_mode=ESPColorMode.RGB,
|
||||
rgb=(pytest.approx(0.3333333333333333), 1.0, 0.0),
|
||||
brightness=pytest.approx(0.4980392156862745),
|
||||
)
|
||||
@ -1037,16 +1026,9 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_brightness=pytest.approx(0.4235294117647059),
|
||||
cold_white=1,
|
||||
warm_white=1,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
rgb=(0, pytest.approx(0.5462962962962963), 1.0),
|
||||
color_brightness=1.0,
|
||||
color_mode=ESPColorMode.RGB,
|
||||
rgb=(1.0, 1.0, 1.0),
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -1063,16 +1045,10 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_brightness=pytest.approx(0.4235294117647059),
|
||||
cold_white=1,
|
||||
warm_white=1,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
rgb=(0, pytest.approx(0.5462962962962963), 1.0),
|
||||
color_brightness=1.0,
|
||||
white=1,
|
||||
color_mode=ESPColorMode.RGB_WHITE,
|
||||
rgb=(1.0, 1.0, 1.0),
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -1095,12 +1071,7 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
color_brightness=1,
|
||||
cold_white=1,
|
||||
warm_white=1,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.RGB_COLD_WARM_WHITE,
|
||||
rgb=(1, 1, 1),
|
||||
)
|
||||
]
|
||||
@ -1118,16 +1089,8 @@ async def test_light_rgbww_with_cold_warm_white_support(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_brightness=0,
|
||||
cold_white=0,
|
||||
warm_white=100,
|
||||
color_mode=LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
| LightColorCapability.COLD_WARM_WHITE
|
||||
| LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
rgb=(0, 0, 0),
|
||||
color_temperature=400.0,
|
||||
color_mode=ESPColorMode.COLOR_TEMPERATURE,
|
||||
)
|
||||
]
|
||||
)
|
||||
@ -1733,11 +1696,16 @@ async def test_light_effects(
|
||||
max_mireds=400,
|
||||
effects=["effect1", "effect2"],
|
||||
supported_color_modes=[
|
||||
LightColorCapability.ON_OFF | LightColorCapability.BRIGHTNESS,
|
||||
ESPColorMode.ON_OFF,
|
||||
ESPColorMode.BRIGHTNESS,
|
||||
],
|
||||
)
|
||||
]
|
||||
states = [LightState(key=1, state=True, brightness=100)]
|
||||
states = [
|
||||
LightState(
|
||||
key=1, state=True, brightness=100, color_mode=ESPColorMode.BRIGHTNESS
|
||||
)
|
||||
]
|
||||
user_service = []
|
||||
await mock_generic_device_entry(
|
||||
mock_client=mock_client,
|
||||
@ -1761,8 +1729,7 @@ async def test_light_effects(
|
||||
call(
|
||||
key=1,
|
||||
state=True,
|
||||
color_mode=LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS,
|
||||
color_mode=ESPColorMode.BRIGHTNESS,
|
||||
effect="effect1",
|
||||
)
|
||||
]
|
||||
|
@ -203,7 +203,7 @@ async def test_generic_numeric_sensor_legacy_last_reset_convert(
|
||||
key=1,
|
||||
name="my sensor",
|
||||
unique_id="my_sensor",
|
||||
last_reset_type=LastResetType.AUTO,
|
||||
legacy_last_reset_type=LastResetType.AUTO,
|
||||
state_class=ESPHomeSensorStateClass.MEASUREMENT,
|
||||
)
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user