diff --git a/.coveragerc b/.coveragerc index 140d8cd7349..14257c0289e 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1456,6 +1456,7 @@ omit = homeassistant/components/yamaha_musiccast/media_player.py homeassistant/components/yamaha_musiccast/number.py homeassistant/components/yamaha_musiccast/select.py + homeassistant/components/yamaha_musiccast/switch.py homeassistant/components/yandex_transport/* homeassistant/components/yeelightsunflower/light.py homeassistant/components/yi/camera.py diff --git a/homeassistant/components/yamaha_musiccast/__init__.py b/homeassistant/components/yamaha_musiccast/__init__.py index e28712cdf21..a3362e0558a 100644 --- a/homeassistant/components/yamaha_musiccast/__init__.py +++ b/homeassistant/components/yamaha_musiccast/__init__.py @@ -30,7 +30,7 @@ from .const import ( ENTITY_CATEGORY_MAPPING, ) -PLATFORMS = [Platform.MEDIA_PLAYER, Platform.NUMBER, Platform.SELECT] +PLATFORMS = [Platform.MEDIA_PLAYER, Platform.NUMBER, Platform.SELECT, Platform.SWITCH] _LOGGER = logging.getLogger(__name__) SCAN_INTERVAL = timedelta(seconds=60) diff --git a/homeassistant/components/yamaha_musiccast/switch.py b/homeassistant/components/yamaha_musiccast/switch.py new file mode 100644 index 00000000000..f48e7c11713 --- /dev/null +++ b/homeassistant/components/yamaha_musiccast/switch.py @@ -0,0 +1,52 @@ +"""The switch entities for musiccast.""" +from typing import Any + +from aiomusiccast.capabilities import BinarySetter + +from homeassistant.components.switch import SwitchEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from . import DOMAIN, MusicCastCapabilityEntity, MusicCastDataUpdateCoordinator + + +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up MusicCast sensor based on a config entry.""" + coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + + switch_entities = [] + + for capability in coordinator.data.capabilities: + if isinstance(capability, BinarySetter): + switch_entities.append(SwitchCapability(coordinator, capability)) + + for zone, data in coordinator.data.zones.items(): + for capability in data.capabilities: + if isinstance(capability, BinarySetter): + switch_entities.append(SwitchCapability(coordinator, capability, zone)) + + async_add_entities(switch_entities) + + +class SwitchCapability(MusicCastCapabilityEntity, SwitchEntity): + """Representation of a MusicCast switch entity.""" + + capability: BinarySetter + + @property + def is_on(self) -> bool: + """Return the current status.""" + return self.capability.current + + async def async_turn_on(self, **kwargs: Any) -> None: + """Turn on the capability.""" + await self.capability.set(True) + + async def async_turn_off(self, **kwargs: Any) -> None: + """Turn off the capability.""" + await self.capability.set(False)