67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
"""Support for Hydrawise sprinkler valves."""
 | 
						|
 | 
						|
from __future__ import annotations
 | 
						|
 | 
						|
from typing import Any
 | 
						|
 | 
						|
from pydrawise.schema import Zone
 | 
						|
 | 
						|
from homeassistant.components.valve import (
 | 
						|
    ValveDeviceClass,
 | 
						|
    ValveEntity,
 | 
						|
    ValveEntityDescription,
 | 
						|
    ValveEntityFeature,
 | 
						|
)
 | 
						|
from homeassistant.config_entries import ConfigEntry
 | 
						|
from homeassistant.core import HomeAssistant
 | 
						|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
 | 
						|
 | 
						|
from .const import DOMAIN
 | 
						|
from .coordinator import HydrawiseDataUpdateCoordinator
 | 
						|
from .entity import HydrawiseEntity
 | 
						|
 | 
						|
VALVE_TYPES: tuple[ValveEntityDescription, ...] = (
 | 
						|
    ValveEntityDescription(
 | 
						|
        key="zone",
 | 
						|
        device_class=ValveDeviceClass.WATER,
 | 
						|
    ),
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
async def async_setup_entry(
 | 
						|
    hass: HomeAssistant,
 | 
						|
    config_entry: ConfigEntry,
 | 
						|
    async_add_entities: AddEntitiesCallback,
 | 
						|
) -> None:
 | 
						|
    """Set up the Hydrawise valve platform."""
 | 
						|
    coordinator: HydrawiseDataUpdateCoordinator = hass.data[DOMAIN][
 | 
						|
        config_entry.entry_id
 | 
						|
    ]
 | 
						|
    async_add_entities(
 | 
						|
        HydrawiseValve(coordinator, description, controller, zone_id=zone.id)
 | 
						|
        for controller in coordinator.data.controllers.values()
 | 
						|
        for zone in controller.zones
 | 
						|
        for description in VALVE_TYPES
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
class HydrawiseValve(HydrawiseEntity, ValveEntity):
 | 
						|
    """A Hydrawise valve."""
 | 
						|
 | 
						|
    _attr_name = None
 | 
						|
    _attr_reports_position = False
 | 
						|
    _attr_supported_features = ValveEntityFeature.OPEN | ValveEntityFeature.CLOSE
 | 
						|
    zone: Zone
 | 
						|
 | 
						|
    async def async_open_valve(self, **kwargs: Any) -> None:
 | 
						|
        """Open the valve."""
 | 
						|
        await self.coordinator.api.start_zone(self.zone)
 | 
						|
 | 
						|
    async def async_close_valve(self) -> None:
 | 
						|
        """Close the valve."""
 | 
						|
        await self.coordinator.api.stop_zone(self.zone)
 | 
						|
 | 
						|
    def _update_attrs(self) -> None:
 | 
						|
        """Update state attributes."""
 | 
						|
        self._attr_is_closed = self.zone.scheduled_runs.current_run is None
 |