Refactor esphome platform setup to reduce boilerplate (#120415)
This commit is contained in:
parent
49e6316c42
commit
4feca36ca6
17 changed files with 170 additions and 327 deletions
|
@ -2,6 +2,8 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import (
|
||||
AlarmControlPanelCommand,
|
||||
AlarmControlPanelEntityState,
|
||||
|
@ -28,8 +30,7 @@ from homeassistant.const import (
|
|||
STATE_ALARM_PENDING,
|
||||
STATE_ALARM_TRIGGERED,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import (
|
||||
EsphomeEntity,
|
||||
|
@ -37,7 +38,6 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
from .enum_mapper import EsphomeEnumMapper
|
||||
|
||||
_ESPHOME_ACP_STATE_TO_HASS_STATE: EsphomeEnumMapper[AlarmControlPanelState, str] = (
|
||||
|
@ -69,22 +69,6 @@ class EspHomeACPFeatures(APIIntEnum):
|
|||
ARM_VACATION = 32
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome switches based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=AlarmControlPanelInfo,
|
||||
entity_type=EsphomeAlarmControlPanel,
|
||||
state_type=AlarmControlPanelEntityState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeAlarmControlPanel(
|
||||
EsphomeEntity[AlarmControlPanelInfo, AlarmControlPanelEntityState],
|
||||
AlarmControlPanelEntity,
|
||||
|
@ -169,3 +153,11 @@ class EsphomeAlarmControlPanel(
|
|||
self._client.alarm_control_panel_command(
|
||||
self._key, AlarmControlPanelCommand.TRIGGER, code
|
||||
)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=AlarmControlPanelInfo,
|
||||
entity_type=EsphomeAlarmControlPanel,
|
||||
state_type=AlarmControlPanelEntityState,
|
||||
)
|
||||
|
|
|
@ -2,11 +2,12 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import ButtonInfo, EntityInfo, EntityState
|
||||
|
||||
from homeassistant.components.button import ButtonDeviceClass, ButtonEntity
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.enum import try_parse_enum
|
||||
|
||||
from .entity import (
|
||||
|
@ -14,23 +15,6 @@ from .entity import (
|
|||
convert_api_error_ha_error,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome buttons based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=ButtonInfo,
|
||||
entity_type=EsphomeButton,
|
||||
state_type=EntityState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeButton(EsphomeEntity[ButtonInfo, EntityState], ButtonEntity):
|
||||
|
@ -63,3 +47,11 @@ class EsphomeButton(EsphomeEntity[ButtonInfo, EntityState], ButtonEntity):
|
|||
async def async_press(self) -> None:
|
||||
"""Press the button."""
|
||||
self._client.button_command(self._key)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=ButtonInfo,
|
||||
entity_type=EsphomeButton,
|
||||
state_type=EntityState,
|
||||
)
|
||||
|
|
|
@ -12,27 +12,9 @@ from aiohttp import web
|
|||
|
||||
from homeassistant.components import camera
|
||||
from homeassistant.components.camera import Camera
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import EsphomeEntity, platform_async_setup_entry
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome cameras based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=CameraInfo,
|
||||
entity_type=EsphomeCamera,
|
||||
state_type=CameraState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeCamera(Camera, EsphomeEntity[CameraInfo, CameraState]):
|
||||
|
@ -95,3 +77,11 @@ class EsphomeCamera(Camera, EsphomeEntity[CameraInfo, CameraState]):
|
|||
return await camera.async_get_still_stream(
|
||||
request, stream_request, camera.DEFAULT_CONTENT_TYPE, 0.0
|
||||
)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=CameraInfo,
|
||||
entity_type=EsphomeCamera,
|
||||
state_type=CameraState,
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
from typing import Any, cast
|
||||
|
||||
from aioesphomeapi import (
|
||||
|
@ -52,8 +53,7 @@ from homeassistant.const import (
|
|||
PRECISION_WHOLE,
|
||||
UnitOfTemperature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import (
|
||||
EsphomeEntity,
|
||||
|
@ -61,28 +61,11 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
from .enum_mapper import EsphomeEnumMapper
|
||||
|
||||
FAN_QUIET = "quiet"
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome climate devices based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=ClimateInfo,
|
||||
entity_type=EsphomeClimateEntity,
|
||||
state_type=ClimateState,
|
||||
)
|
||||
|
||||
|
||||
_CLIMATE_MODES: EsphomeEnumMapper[ClimateMode, HVACMode] = EsphomeEnumMapper(
|
||||
{
|
||||
ClimateMode.OFF: HVACMode.OFF,
|
||||
|
@ -335,3 +318,11 @@ class EsphomeClimateEntity(EsphomeEntity[ClimateInfo, ClimateState], ClimateEnti
|
|||
self._client.climate_command(
|
||||
key=self._key, swing_mode=_SWING_MODES.from_hass(swing_mode)
|
||||
)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=ClimateInfo,
|
||||
entity_type=EsphomeClimateEntity,
|
||||
state_type=ClimateState,
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
from typing import Any
|
||||
|
||||
from aioesphomeapi import APIVersion, CoverInfo, CoverOperation, CoverState, EntityInfo
|
||||
|
@ -13,8 +14,7 @@ from homeassistant.components.cover import (
|
|||
CoverEntity,
|
||||
CoverEntityFeature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.enum import try_parse_enum
|
||||
|
||||
from .entity import (
|
||||
|
@ -23,23 +23,6 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome covers based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=CoverInfo,
|
||||
entity_type=EsphomeCover,
|
||||
state_type=CoverState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeCover(EsphomeEntity[CoverInfo, CoverState], CoverEntity):
|
||||
|
@ -137,3 +120,11 @@ class EsphomeCover(EsphomeEntity[CoverInfo, CoverState], CoverEntity):
|
|||
"""Move the cover tilt to a specific position."""
|
||||
tilt_position: int = kwargs[ATTR_TILT_POSITION]
|
||||
self._client.cover_command(key=self._key, tilt=tilt_position / 100)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=CoverInfo,
|
||||
entity_type=EsphomeCover,
|
||||
state_type=CoverState,
|
||||
)
|
||||
|
|
|
@ -3,31 +3,13 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import DateInfo, DateState
|
||||
|
||||
from homeassistant.components.date import DateEntity
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from .entity import EsphomeEntity, esphome_state_property, platform_async_setup_entry
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome dates based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=DateInfo,
|
||||
entity_type=EsphomeDate,
|
||||
state_type=DateState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeDate(EsphomeEntity[DateInfo, DateState], DateEntity):
|
||||
|
@ -45,3 +27,11 @@ class EsphomeDate(EsphomeEntity[DateInfo, DateState], DateEntity):
|
|||
async def async_set_value(self, value: date) -> None:
|
||||
"""Update the current date."""
|
||||
self._client.date_command(self._key, value.year, value.month, value.day)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=DateInfo,
|
||||
entity_type=EsphomeDate,
|
||||
state_type=DateState,
|
||||
)
|
||||
|
|
|
@ -3,32 +3,14 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import DateTimeInfo, DateTimeState
|
||||
|
||||
from homeassistant.components.datetime import DateTimeEntity
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
from .entity import EsphomeEntity, esphome_state_property, platform_async_setup_entry
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome datetimes based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=DateTimeInfo,
|
||||
entity_type=EsphomeDateTime,
|
||||
state_type=DateTimeState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeDateTime(EsphomeEntity[DateTimeInfo, DateTimeState], DateTimeEntity):
|
||||
|
@ -46,3 +28,11 @@ class EsphomeDateTime(EsphomeEntity[DateTimeInfo, DateTimeState], DateTimeEntity
|
|||
async def async_set_value(self, value: datetime) -> None:
|
||||
"""Update the current datetime."""
|
||||
self._client.datetime_command(self._key, int(value.timestamp()))
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=DateTimeInfo,
|
||||
entity_type=EsphomeDateTime,
|
||||
state_type=DateTimeState,
|
||||
)
|
||||
|
|
|
@ -2,31 +2,15 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import EntityInfo, Event, EventInfo
|
||||
|
||||
from homeassistant.components.event import EventDeviceClass, EventEntity
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.enum import try_parse_enum
|
||||
|
||||
from .entity import EsphomeEntity, platform_async_setup_entry
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome event based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=EventInfo,
|
||||
entity_type=EsphomeEvent,
|
||||
state_type=Event,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeEvent(EsphomeEntity[EventInfo, Event], EventEntity):
|
||||
|
@ -48,3 +32,11 @@ class EsphomeEvent(EsphomeEntity[EventInfo, Event], EventEntity):
|
|||
self._update_state_from_entry_data()
|
||||
self._trigger_event(self._state.event_type)
|
||||
self.async_write_ha_state()
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=EventInfo,
|
||||
entity_type=EsphomeEvent,
|
||||
state_type=Event,
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
import math
|
||||
from typing import Any
|
||||
|
||||
|
@ -13,8 +14,7 @@ from homeassistant.components.fan import (
|
|||
FanEntity,
|
||||
FanEntityFeature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.percentage import (
|
||||
ordered_list_item_to_percentage,
|
||||
percentage_to_ordered_list_item,
|
||||
|
@ -28,28 +28,11 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
from .enum_mapper import EsphomeEnumMapper
|
||||
|
||||
ORDERED_NAMED_FAN_SPEEDS = [FanSpeed.LOW, FanSpeed.MEDIUM, FanSpeed.HIGH]
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome fans based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=FanInfo,
|
||||
entity_type=EsphomeFan,
|
||||
state_type=FanState,
|
||||
)
|
||||
|
||||
|
||||
_FAN_DIRECTIONS: EsphomeEnumMapper[FanDirection, str] = EsphomeEnumMapper(
|
||||
{
|
||||
FanDirection.FORWARD: DIRECTION_FORWARD,
|
||||
|
@ -180,3 +163,11 @@ class EsphomeFan(EsphomeEntity[FanInfo, FanState], FanEntity):
|
|||
self._attr_speed_count = len(ORDERED_NAMED_FAN_SPEEDS)
|
||||
else:
|
||||
self._attr_speed_count = static_info.supported_speed_levels
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=FanInfo,
|
||||
entity_type=EsphomeFan,
|
||||
state_type=FanState,
|
||||
)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import lru_cache
|
||||
from functools import lru_cache, partial
|
||||
from typing import TYPE_CHECKING, Any, cast
|
||||
|
||||
from aioesphomeapi import (
|
||||
|
@ -29,8 +29,7 @@ from homeassistant.components.light import (
|
|||
LightEntity,
|
||||
LightEntityFeature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import (
|
||||
EsphomeEntity,
|
||||
|
@ -38,27 +37,10 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
FLASH_LENGTHS = {FLASH_SHORT: 2, FLASH_LONG: 10}
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome lights based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=LightInfo,
|
||||
entity_type=EsphomeLight,
|
||||
state_type=LightState,
|
||||
)
|
||||
|
||||
|
||||
_COLOR_MODE_MAPPING = {
|
||||
ColorMode.ONOFF: [
|
||||
LightColorCapability.ON_OFF,
|
||||
|
@ -437,3 +419,11 @@ class EsphomeLight(EsphomeEntity[LightInfo, LightState], LightEntity):
|
|||
if ColorMode.COLOR_TEMP in supported:
|
||||
self._attr_min_color_temp_kelvin = _mired_to_kelvin(static_info.max_mireds)
|
||||
self._attr_max_color_temp_kelvin = _mired_to_kelvin(static_info.min_mireds)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=LightInfo,
|
||||
entity_type=EsphomeLight,
|
||||
state_type=LightState,
|
||||
)
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
from typing import Any
|
||||
|
||||
from aioesphomeapi import EntityInfo, LockCommand, LockEntityState, LockInfo, LockState
|
||||
|
||||
from homeassistant.components.lock import LockEntity, LockEntityFeature
|
||||
from homeassistant.const import ATTR_CODE
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import (
|
||||
EsphomeEntity,
|
||||
|
@ -17,23 +17,6 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome switches based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=LockInfo,
|
||||
entity_type=EsphomeLock,
|
||||
state_type=LockEntityState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeLock(EsphomeEntity[LockInfo, LockEntityState], LockEntity):
|
||||
|
@ -92,3 +75,11 @@ class EsphomeLock(EsphomeEntity[LockInfo, LockEntityState], LockEntity):
|
|||
async def async_open(self, **kwargs: Any) -> None:
|
||||
"""Open the door latch."""
|
||||
self._client.lock_command(self._key, LockCommand.OPEN)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=LockInfo,
|
||||
entity_type=EsphomeLock,
|
||||
state_type=LockEntityState,
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
from typing import Any
|
||||
|
||||
from aioesphomeapi import (
|
||||
|
@ -23,9 +24,7 @@ from homeassistant.components.media_player import (
|
|||
MediaType,
|
||||
async_process_play_media_url,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import (
|
||||
EsphomeEntity,
|
||||
|
@ -35,23 +34,6 @@ from .entity import (
|
|||
)
|
||||
from .enum_mapper import EsphomeEnumMapper
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome media players based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=MediaPlayerInfo,
|
||||
entity_type=EsphomeMediaPlayer,
|
||||
state_type=MediaPlayerEntityState,
|
||||
)
|
||||
|
||||
|
||||
_STATES: EsphomeEnumMapper[EspMediaPlayerState, MediaPlayerState] = EsphomeEnumMapper(
|
||||
{
|
||||
EspMediaPlayerState.IDLE: MediaPlayerState.IDLE,
|
||||
|
@ -159,3 +141,11 @@ class EsphomeMediaPlayer(
|
|||
self._key,
|
||||
command=MediaPlayerCommand.MUTE if mute else MediaPlayerCommand.UNMUTE,
|
||||
)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=MediaPlayerInfo,
|
||||
entity_type=EsphomeMediaPlayer,
|
||||
state_type=MediaPlayerEntityState,
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
import math
|
||||
|
||||
from aioesphomeapi import (
|
||||
|
@ -12,9 +13,7 @@ from aioesphomeapi import (
|
|||
)
|
||||
|
||||
from homeassistant.components.number import NumberDeviceClass, NumberEntity, NumberMode
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.enum import try_parse_enum
|
||||
|
||||
from .entity import (
|
||||
|
@ -25,23 +24,6 @@ from .entity import (
|
|||
)
|
||||
from .enum_mapper import EsphomeEnumMapper
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome numbers based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=NumberInfo,
|
||||
entity_type=EsphomeNumber,
|
||||
state_type=NumberState,
|
||||
)
|
||||
|
||||
|
||||
NUMBER_MODES: EsphomeEnumMapper[EsphomeNumberMode, NumberMode] = EsphomeEnumMapper(
|
||||
{
|
||||
EsphomeNumberMode.AUTO: NumberMode.AUTO,
|
||||
|
@ -87,3 +69,11 @@ class EsphomeNumber(EsphomeEntity[NumberInfo, NumberState], NumberEntity):
|
|||
async def async_set_native_value(self, value: float) -> None:
|
||||
"""Update the current value."""
|
||||
self._client.number_command(self._key, value)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=NumberInfo,
|
||||
entity_type=EsphomeNumber,
|
||||
state_type=NumberState,
|
||||
)
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
from typing import Any
|
||||
|
||||
from aioesphomeapi import EntityInfo, SwitchInfo, SwitchState
|
||||
|
||||
from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.enum import try_parse_enum
|
||||
|
||||
from .entity import (
|
||||
|
@ -17,23 +17,6 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome switches based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=SwitchInfo,
|
||||
entity_type=EsphomeSwitch,
|
||||
state_type=SwitchState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeSwitch(EsphomeEntity[SwitchInfo, SwitchState], SwitchEntity):
|
||||
|
@ -64,3 +47,11 @@ class EsphomeSwitch(EsphomeEntity[SwitchInfo, SwitchState], SwitchEntity):
|
|||
async def async_turn_off(self, **kwargs: Any) -> None:
|
||||
"""Turn the entity off."""
|
||||
self._client.switch_command(self._key, False)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=SwitchInfo,
|
||||
entity_type=EsphomeSwitch,
|
||||
state_type=SwitchState,
|
||||
)
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import EntityInfo, TextInfo, TextMode as EsphomeTextMode, TextState
|
||||
|
||||
from homeassistant.components.text import TextEntity, TextMode
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .entity import (
|
||||
EsphomeEntity,
|
||||
|
@ -17,23 +17,6 @@ from .entity import (
|
|||
)
|
||||
from .enum_mapper import EsphomeEnumMapper
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome texts based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=TextInfo,
|
||||
entity_type=EsphomeText,
|
||||
state_type=TextState,
|
||||
)
|
||||
|
||||
|
||||
TEXT_MODES: EsphomeEnumMapper[EsphomeTextMode, TextMode] = EsphomeEnumMapper(
|
||||
{
|
||||
EsphomeTextMode.TEXT: TextMode.TEXT,
|
||||
|
@ -68,3 +51,11 @@ class EsphomeText(EsphomeEntity[TextInfo, TextState], TextEntity):
|
|||
async def async_set_value(self, value: str) -> None:
|
||||
"""Update the current value."""
|
||||
self._client.text_command(self._key, value)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=TextInfo,
|
||||
entity_type=EsphomeText,
|
||||
state_type=TextState,
|
||||
)
|
||||
|
|
|
@ -3,33 +3,15 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from datetime import time
|
||||
from functools import partial
|
||||
|
||||
from aioesphomeapi import TimeInfo, TimeState
|
||||
|
||||
from homeassistant.components.time import TimeEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from .entity import EsphomeEntity, esphome_state_property, platform_async_setup_entry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up esphome times based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=TimeInfo,
|
||||
entity_type=EsphomeTime,
|
||||
state_type=TimeState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeTime(EsphomeEntity[TimeInfo, TimeState], TimeEntity):
|
||||
"""A time implementation for esphome."""
|
||||
|
||||
|
@ -45,3 +27,11 @@ class EsphomeTime(EsphomeEntity[TimeInfo, TimeState], TimeEntity):
|
|||
async def async_set_value(self, value: time) -> None:
|
||||
"""Update the current time."""
|
||||
self._client.time_command(self._key, value.hour, value.minute, value.second)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=TimeInfo,
|
||||
entity_type=EsphomeTime,
|
||||
state_type=TimeState,
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
from typing import Any
|
||||
|
||||
from aioesphomeapi import EntityInfo, ValveInfo, ValveOperation, ValveState
|
||||
|
@ -11,8 +12,7 @@ from homeassistant.components.valve import (
|
|||
ValveEntity,
|
||||
ValveEntityFeature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.util.enum import try_parse_enum
|
||||
|
||||
from .entity import (
|
||||
|
@ -21,23 +21,6 @@ from .entity import (
|
|||
esphome_state_property,
|
||||
platform_async_setup_entry,
|
||||
)
|
||||
from .entry_data import ESPHomeConfigEntry
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ESPHomeConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up ESPHome valves based on a config entry."""
|
||||
await platform_async_setup_entry(
|
||||
hass,
|
||||
entry,
|
||||
async_add_entities,
|
||||
info_type=ValveInfo,
|
||||
entity_type=EsphomeValve,
|
||||
state_type=ValveState,
|
||||
)
|
||||
|
||||
|
||||
class EsphomeValve(EsphomeEntity[ValveInfo, ValveState], ValveEntity):
|
||||
|
@ -103,3 +86,11 @@ class EsphomeValve(EsphomeEntity[ValveInfo, ValveState], ValveEntity):
|
|||
async def async_set_valve_position(self, position: float) -> None:
|
||||
"""Move the valve to a specific position."""
|
||||
self._client.valve_command(key=self._key, position=position / 100)
|
||||
|
||||
|
||||
async_setup_entry = partial(
|
||||
platform_async_setup_entry,
|
||||
info_type=ValveInfo,
|
||||
entity_type=EsphomeValve,
|
||||
state_type=ValveState,
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue