diff --git a/.coveragerc b/.coveragerc index 0a4b3803cd2..369944d60b0 100644 --- a/.coveragerc +++ b/.coveragerc @@ -835,6 +835,7 @@ omit = homeassistant/components/nfandroidtv/__init__.py homeassistant/components/nfandroidtv/notify.py homeassistant/components/nibe_heatpump/__init__.py + homeassistant/components/nibe_heatpump/select.py homeassistant/components/nibe_heatpump/sensor.py homeassistant/components/nibe_heatpump/binary_sensor.py homeassistant/components/niko_home_control/light.py diff --git a/homeassistant/components/nibe_heatpump/__init__.py b/homeassistant/components/nibe_heatpump/__init__.py index 79b6b50e843..ed3bc649453 100644 --- a/homeassistant/components/nibe_heatpump/__init__.py +++ b/homeassistant/components/nibe_heatpump/__init__.py @@ -39,7 +39,7 @@ from .const import ( LOGGER, ) -PLATFORMS: list[Platform] = [Platform.BINARY_SENSOR, Platform.SENSOR] +PLATFORMS: list[Platform] = [Platform.BINARY_SENSOR, Platform.SELECT, Platform.SENSOR] COIL_READ_RETRIES = 5 diff --git a/homeassistant/components/nibe_heatpump/select.py b/homeassistant/components/nibe_heatpump/select.py new file mode 100644 index 00000000000..27df1980287 --- /dev/null +++ b/homeassistant/components/nibe_heatpump/select.py @@ -0,0 +1,47 @@ +"""The Nibe Heat Pump select.""" +from __future__ import annotations + +from nibe.coil import Coil + +from homeassistant.components.select import ENTITY_ID_FORMAT, SelectEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import EntityCategory +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from . import DOMAIN, CoilEntity, Coordinator + + +async def async_setup_entry( + hass: HomeAssistant, + config_entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up platform.""" + + coordinator: Coordinator = hass.data[DOMAIN][config_entry.entry_id] + + async_add_entities( + Select(coordinator, coil) + for coil in coordinator.coils + if coil.is_writable and coil.mappings and not coil.is_boolean + ) + + +class Select(CoilEntity, SelectEntity): + """Select entity.""" + + _attr_entity_category = EntityCategory.CONFIG + + def __init__(self, coordinator: Coordinator, coil: Coil) -> None: + """Initialize entity.""" + super().__init__(coordinator, coil, ENTITY_ID_FORMAT) + self._attr_options = list(coil.mappings.values()) + self._attr_current_option = None + + def _async_read_coil(self, coil: Coil) -> None: + self._attr_current_option = coil.value + + async def async_select_option(self, option: str) -> None: + """Support writing value.""" + await self._async_write_coil(option)