From 2f0ec0d7e5a6177e5296da5645fd1c7f9020251f Mon Sep 17 00:00:00 2001 From: Matthias Lohr Date: Thu, 25 Nov 2021 14:41:57 +0100 Subject: [PATCH] Add tolo select platform (#60326) --- .coveragerc | 1 + homeassistant/components/tolo/__init__.py | 2 +- homeassistant/components/tolo/select.py | 51 +++++++++++++++++++ .../components/tolo/strings.select.json | 8 +++ .../tolo/translations/select.en.json | 8 +++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/tolo/select.py create mode 100644 homeassistant/components/tolo/strings.select.json create mode 100644 homeassistant/components/tolo/translations/select.en.json diff --git a/.coveragerc b/.coveragerc index bee0555d865..18a4ddfbcf8 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1094,6 +1094,7 @@ omit = homeassistant/components/tolo/__init__.py homeassistant/components/tolo/climate.py homeassistant/components/tolo/light.py + homeassistant/components/tolo/select.py homeassistant/components/tolo/sensor.py homeassistant/components/tomato/device_tracker.py homeassistant/components/toon/__init__.py diff --git a/homeassistant/components/tolo/__init__.py b/homeassistant/components/tolo/__init__.py index 978bfe64ebb..2daeedaf837 100644 --- a/homeassistant/components/tolo/__init__.py +++ b/homeassistant/components/tolo/__init__.py @@ -22,7 +22,7 @@ from homeassistant.helpers.update_coordinator import ( from .const import DEFAULT_RETRY_COUNT, DEFAULT_RETRY_TIMEOUT, DOMAIN -PLATFORMS = ["climate", "light", "sensor"] +PLATFORMS = ["climate", "light", "select", "sensor"] _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/tolo/select.py b/homeassistant/components/tolo/select.py new file mode 100644 index 00000000000..1dc1f4f6163 --- /dev/null +++ b/homeassistant/components/tolo/select.py @@ -0,0 +1,51 @@ +"""TOLO Sauna Select controls.""" + +from __future__ import annotations + +from tololib.const import LampMode + +from homeassistant.components.select import SelectEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ENTITY_CATEGORY_CONFIG +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from . import ToloSaunaCoordinatorEntity, ToloSaunaUpdateCoordinator +from .const import DOMAIN + + +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up select entities for TOLO Sauna.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + async_add_entities([ToloLampModeSelect(coordinator, entry)]) + + +class ToloLampModeSelect(ToloSaunaCoordinatorEntity, SelectEntity): + """TOLO Sauna lamp mode select.""" + + _attr_device_class = "tolo__lamp_mode" + _attr_entity_category = ENTITY_CATEGORY_CONFIG + _attr_icon = "mdi:lightbulb-multiple-outline" + _attr_name = "Lamp Mode" + _attr_options = [lamp_mode.name.lower() for lamp_mode in LampMode] + + def __init__( + self, coordinator: ToloSaunaUpdateCoordinator, entry: ConfigEntry + ) -> None: + """Initialize lamp mode select entity.""" + super().__init__(coordinator, entry) + + self._attr_unique_id = f"{entry.entry_id}_lamp_mode" + + @property + def current_option(self) -> str: + """Return current lamp mode.""" + return self.coordinator.data.settings.lamp_mode.name.lower() + + def select_option(self, option: str) -> None: + """Select lamp mode.""" + self.coordinator.client.set_lamp_mode(LampMode[option.upper()]) diff --git a/homeassistant/components/tolo/strings.select.json b/homeassistant/components/tolo/strings.select.json new file mode 100644 index 00000000000..c65caaf5d2d --- /dev/null +++ b/homeassistant/components/tolo/strings.select.json @@ -0,0 +1,8 @@ +{ + "state": { + "tolo__lamp_mode": { + "automatic": "automatic", + "manual": "manual" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tolo/translations/select.en.json b/homeassistant/components/tolo/translations/select.en.json new file mode 100644 index 00000000000..ba4b0d20dbc --- /dev/null +++ b/homeassistant/components/tolo/translations/select.en.json @@ -0,0 +1,8 @@ +{ + "state": { + "tolo__lamp_mode": { + "automatic": "automatic", + "manual": "manual" + } + } +} \ No newline at end of file