mirror of
https://github.com/home-assistant/core.git
synced 2026-05-21 07:50:23 +01:00
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
"""Select platform for Zinvolt integration."""
|
|
|
|
from zinvolt.models import SmartMode
|
|
|
|
from homeassistant.components.select import SelectEntity
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
|
|
from .coordinator import ZinvoltConfigEntry, ZinvoltDeviceCoordinator
|
|
from .entity import ZinvoltEntity
|
|
|
|
MODE_MAP = {
|
|
SmartMode.DYNAMIC: "dynamic",
|
|
SmartMode.SELF_USE: "self_use",
|
|
SmartMode.PERFORMANCE: "fast_discharge",
|
|
SmartMode.CHARGED: "fast_charge",
|
|
SmartMode.FEED: "connected_solar_panels",
|
|
}
|
|
|
|
HA_TO_MODE = {v: k for k, v in MODE_MAP.items()}
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
entry: ZinvoltConfigEntry,
|
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
) -> None:
|
|
"""Initialize the entries."""
|
|
|
|
async_add_entities(
|
|
ZinvoltBatteryMode(coordinator) for coordinator in entry.runtime_data.values()
|
|
)
|
|
|
|
|
|
class ZinvoltBatteryMode(ZinvoltEntity, SelectEntity):
|
|
"""Zinvolt select."""
|
|
|
|
_attr_options = list(HA_TO_MODE.keys())
|
|
_attr_translation_key = "battery_mode"
|
|
|
|
def __init__(self, coordinator: ZinvoltDeviceCoordinator) -> None:
|
|
"""Initialize the select."""
|
|
super().__init__(coordinator)
|
|
self._attr_unique_id = f"{coordinator.data.battery.serial_number}.mode"
|
|
|
|
@property
|
|
def current_option(self) -> str | None:
|
|
"""Return the current battery mode."""
|
|
return MODE_MAP.get(self.coordinator.data.battery.smart_mode)
|
|
|
|
async def async_select_option(self, option: str) -> None:
|
|
"""Set battery mode."""
|
|
await self.coordinator.client.set_smart_mode(
|
|
self.coordinator.battery.identifier, HA_TO_MODE[option]
|
|
)
|
|
await self.coordinator.async_request_refresh()
|