mirror of https://github.com/home-assistant/core
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
"""Select platform for Advantage Air integration."""
|
|
|
|
from homeassistant.components.select import SelectEntity
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|
|
|
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
|
|
from .entity import AdvantageAirAcEntity
|
|
from .models import AdvantageAirData
|
|
|
|
ADVANTAGE_AIR_INACTIVE = "Inactive"
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
config_entry: ConfigEntry,
|
|
async_add_entities: AddEntitiesCallback,
|
|
) -> None:
|
|
"""Set up AdvantageAir select platform."""
|
|
|
|
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
|
|
|
|
entities: list[SelectEntity] = []
|
|
if aircons := instance.coordinator.data.get("aircons"):
|
|
for ac_key in aircons:
|
|
entities.append(AdvantageAirMyZone(instance, ac_key))
|
|
async_add_entities(entities)
|
|
|
|
|
|
class AdvantageAirMyZone(AdvantageAirAcEntity, SelectEntity):
|
|
"""Representation of Advantage Air MyZone control."""
|
|
|
|
_attr_icon = "mdi:home-thermometer"
|
|
_attr_name = "MyZone"
|
|
|
|
def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
|
|
"""Initialize an Advantage Air MyZone control."""
|
|
super().__init__(instance, ac_key)
|
|
self._attr_unique_id += "-myzone"
|
|
self._attr_options = [ADVANTAGE_AIR_INACTIVE]
|
|
self._number_to_name = {0: ADVANTAGE_AIR_INACTIVE}
|
|
self._name_to_number = {ADVANTAGE_AIR_INACTIVE: 0}
|
|
|
|
if "aircons" in instance.coordinator.data:
|
|
for zone in instance.coordinator.data["aircons"][ac_key]["zones"].values():
|
|
if zone["type"] > 0:
|
|
self._name_to_number[zone["name"]] = zone["number"]
|
|
self._number_to_name[zone["number"]] = zone["name"]
|
|
self._attr_options.append(zone["name"])
|
|
|
|
@property
|
|
def current_option(self) -> str:
|
|
"""Return the current MyZone."""
|
|
return self._number_to_name[self._ac["myZone"]]
|
|
|
|
async def async_select_option(self, option: str) -> None:
|
|
"""Set the MyZone."""
|
|
await self.async_update_ac({"myZone": self._name_to_number[option]})
|