"""Support for HomematicIP Cloud valve devices.""" from homematicip.base.functionalChannels import FunctionalChannelType from homematicip.device import Device from homeassistant.components.valve import ( ValveDeviceClass, ValveEntity, ValveEntityFeature, ) from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from .entity import HomematicipGenericEntity from .hap import HomematicIPConfigEntry, HomematicipHAP async def async_setup_entry( hass: HomeAssistant, config_entry: HomematicIPConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the HomematicIP valves from a config entry.""" hap = config_entry.runtime_data entities = [ HomematicipWateringValve(hap, device, ch.index) for device in hap.home.devices for ch in device.functionalChannels if ch.functionalChannelType == FunctionalChannelType.WATERING_ACTUATOR_CHANNEL ] async_add_entities(entities) class HomematicipWateringValve(HomematicipGenericEntity, ValveEntity): """Representation of a HomematicIP valve.""" _attr_reports_position = False _attr_supported_features = ValveEntityFeature.OPEN | ValveEntityFeature.CLOSE _attr_device_class = ValveDeviceClass.WATER def __init__(self, hap: HomematicipHAP, device: Device, channel: int) -> None: """Initialize the valve.""" super().__init__( hap, device=device, channel=channel, post="watering", is_multi_channel=True ) async def async_open_valve(self) -> None: """Open the valve.""" channel = self.get_channel_or_raise() await channel.set_watering_switch_state_async(True) async def async_close_valve(self) -> None: """Close valve.""" channel = self.get_channel_or_raise() await channel.set_watering_switch_state_async(False) @property def is_closed(self) -> bool: """Return if the valve is closed.""" channel = self.get_channel_or_raise() return channel.wateringActive is False