mirror of
https://github.com/home-assistant/core.git
synced 2025-11-08 02:19:31 +00:00
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
"""The select platform for the A. O. Smith integration."""
|
|
|
|
from homeassistant.components.select import SelectEntity
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
|
|
from . import AOSmithConfigEntry
|
|
from .coordinator import AOSmithStatusCoordinator
|
|
from .entity import AOSmithStatusEntity
|
|
|
|
HWP_LEVEL_HA_TO_AOSMITH = {
|
|
"off": 0,
|
|
"level1": 1,
|
|
"level2": 2,
|
|
"level3": 3,
|
|
}
|
|
HWP_LEVEL_AOSMITH_TO_HA = {value: key for key, value in HWP_LEVEL_HA_TO_AOSMITH.items()}
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
entry: AOSmithConfigEntry,
|
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
) -> None:
|
|
"""Set up A. O. Smith select platform."""
|
|
data = entry.runtime_data
|
|
|
|
async_add_entities(
|
|
AOSmithHotWaterPlusSelectEntity(data.status_coordinator, device.junction_id)
|
|
for device in data.status_coordinator.data.values()
|
|
if device.supports_hot_water_plus
|
|
)
|
|
|
|
|
|
class AOSmithHotWaterPlusSelectEntity(AOSmithStatusEntity, SelectEntity):
|
|
"""Class for the Hot Water+ select entity."""
|
|
|
|
_attr_translation_key = "hot_water_plus_level"
|
|
_attr_options = list(HWP_LEVEL_HA_TO_AOSMITH)
|
|
|
|
def __init__(self, coordinator: AOSmithStatusCoordinator, junction_id: str) -> None:
|
|
"""Initialize the entity."""
|
|
super().__init__(coordinator, junction_id)
|
|
self._attr_unique_id = f"hot_water_plus_level_{junction_id}"
|
|
|
|
@property
|
|
def suggested_object_id(self) -> str | None:
|
|
"""Override the suggested object id to make '+' get converted to 'plus' in the entity id."""
|
|
return "hot_water_plus_level"
|
|
|
|
@property
|
|
def current_option(self) -> str | None:
|
|
"""Return the current Hot Water+ mode."""
|
|
hot_water_plus_level = self.device.status.hot_water_plus_level
|
|
return (
|
|
None
|
|
if hot_water_plus_level is None
|
|
else HWP_LEVEL_AOSMITH_TO_HA.get(hot_water_plus_level)
|
|
)
|
|
|
|
async def async_select_option(self, option: str) -> None:
|
|
"""Set the Hot Water+ mode."""
|
|
aosmith_hwp_level = HWP_LEVEL_HA_TO_AOSMITH[option]
|
|
await self.client.update_mode(
|
|
junction_id=self.junction_id,
|
|
mode=self.device.status.current_mode,
|
|
hot_water_plus_level=aosmith_hwp_level,
|
|
)
|
|
|
|
await self.coordinator.async_request_refresh()
|