hass-core/homeassistant/components/overkiz/scene.py
Mick Vleeshouwer b4187540c0
Improve typing for Overkiz integration and address late feedback (#63483)
* Bump pyoverkiz to 1.0.2

* Remove cast for str enum.

* Address feedback on coordinator

* Change datatype to Callable

* Address feedback

* Move scenarios to seperate list

* Cast Device to avoid issues with DataUpdateCoordinator default

* Remove unnecessary casts and improve type notation

* Check if state.value exists

* Fix last mypy error (thanks @epenet)

* Remove extra string cast

* Improve sensor typing

* Update pyoverkiz and remove typing

* Small code improvement

* Fix assert to reflect real world

* Properly type Callable to not return Any

* Remove unnecessary cast

* Add OverkizStateType

* Bugfix

* Address feedback - multiline lambda

* Pylint fix

* Remove added binary sensor
2022-01-08 10:53:15 +01:00

43 lines
1.3 KiB
Python

"""Support for Overkiz scenes."""
from __future__ import annotations
from typing import Any
from pyoverkiz.client import OverkizClient
from pyoverkiz.models import Scenario
from homeassistant.components.scene import Scene
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import HomeAssistantOverkizData
from .const import DOMAIN
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Overkiz scenes from a config entry."""
data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
OverkizScene(scene, data.coordinator.client) for scene in data.scenarios
)
class OverkizScene(Scene):
"""Representation of an Overkiz Scene."""
def __init__(self, scenario: Scenario, client: OverkizClient) -> None:
"""Initialize the scene."""
self.scenario = scenario
self.client = client
self._attr_name = self.scenario.label
self._attr_unique_id = self.scenario.oid
async def async_activate(self, **kwargs: Any) -> None:
"""Activate the scene."""
await self.client.execute_scenario(self.scenario.oid)