Files
koolnova-BMS-Integration/custom_components/select.py
T

134 lines
4.3 KiB
Python

""" for select component """
# pylint: disable = too-few-public-methods
import logging
from homeassistant.core import HomeAssistant
from homeassistant.config_entries import ConfigEntry
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.components.select import SelectEntity
from homeassistant.util import Throttle
from .const import (
DOMAIN,
MIN_TIME_BETWEEN_UPDATES,
GLOBAL_MODES,
GLOBAL_MODE_TRANSLATION,
EFF_MODES,
EFF_TRANSLATION,
)
from homeassistant.const import UnitOfTime
from .koolnova.device import Koolnova
from .koolnova.const import (
GlobalMode,
Efficiency,
)
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant,
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback):
"""Setup select entries"""
for device in hass.data[DOMAIN]:
_LOGGER.debug("Device: {}".format(device))
entities = [
GlobalModeSelect(device),
EfficiencySelect(device),
]
async_add_entities(entities)
class GlobalModeSelect(SelectEntity):
"""Select component to set Global Mode """
def __init__(self,
device: Koolnova,
) -> None:
super().__init__()
self._attr_options = GLOBAL_MODES
self._device = device
self._attr_name = f"{device.name} Global Mode"
self._attr_device_info = device.device_info
self._attr_icon = "mdi:cog-clockwise"
self._attr_unique_id = f"{DOMAIN}-GlobalMode-select"
self.select_option(
GLOBAL_MODE_TRANSLATION[int(self._device.global_mode)]
)
def _update_state(self) -> None:
""" update global mode """
_LOGGER.debug("[GLOBAL MODE] _update_state")
self.select_option(
GLOBAL_MODE_TRANSLATION[int(self._device.global_mode)]
)
def select_option(self, option: str) -> None:
"""Change the selected option."""
_LOGGER.debug("[GLOBAL MODE] select_option: {}".format(option))
self._attr_current_option = option
async def async_select_option(self, option: str) -> None:
"""Change the selected option."""
_LOGGER.debug("[GLOBAL_MODE] async_select_option: {}".format(option))
opt = 0
for k,v in GLOBAL_MODE_TRANSLATION.items():
if v == option:
opt = k
break
await self._device.set_global_mode(GlobalMode(opt))
self.select_option(option)
@Throttle(MIN_TIME_BETWEEN_UPDATES)
async def async_update(self):
"""Retrieve latest state."""
_LOGGER.debug("[GLOBAL MODE] async_update")
#await self._device.update()
self._update_state()
class EfficiencySelect(SelectEntity):
"""Select component to set Efficiency """
def __init__(self,
device: Koolnova,
) -> None:
super().__init__()
self._attr_options = EFF_MODES
self._device = device
self._attr_name = f"{device.name} Efficiency"
self._attr_device_info = device.device_info
self._attr_icon = "mdi:wind-power-outline"
self._attr_unique_id = f"{DOMAIN}-Efficiency-select"
self.select_option(
EFF_TRANSLATION[int(self._device.efficiency)]
)
def _update_state(self) -> None:
""" update efficiency """
_LOGGER.debug("[EFF] _update_state")
self.select_option(
EFF_TRANSLATION[int(self._device.efficiency)]
)
def select_option(self, option: str) -> None:
"""Change the selected option."""
_LOGGER.debug("[EFF] select_option: {}".format(option))
self._attr_current_option = option
async def async_select_option(self, option: str) -> None:
"""Change the selected option."""
_LOGGER.debug("[EFF] async_select_option: {}".format(option))
opt = 0
for k,v in EFF_TRANSLATION.items():
if v == option:
opt = k
break
await self._device.set_efficiency(Efficiency(opt))
self.select_option(option)
@Throttle(MIN_TIME_BETWEEN_UPDATES)
async def async_update(self):
"""Retrieve latest state."""
_LOGGER.debug("[EFF] async_update")
#await self._device.update()
self._update_state()