mirror of
				https://github.com/home-assistant/core.git
				synced 2025-10-31 06:29:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Support for valves through the SmartThings cloud API."""
 | |
| 
 | |
| from __future__ import annotations
 | |
| 
 | |
| from pysmartthings import Attribute, Capability, Category, Command, SmartThings
 | |
| 
 | |
| from homeassistant.components.valve import (
 | |
|     ValveDeviceClass,
 | |
|     ValveEntity,
 | |
|     ValveEntityFeature,
 | |
| )
 | |
| from homeassistant.core import HomeAssistant
 | |
| from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
 | |
| 
 | |
| from . import FullDevice, SmartThingsConfigEntry
 | |
| from .const import MAIN
 | |
| from .entity import SmartThingsEntity
 | |
| 
 | |
| DEVICE_CLASS_MAP: dict[Category | str, ValveDeviceClass] = {
 | |
|     Category.WATER_VALVE: ValveDeviceClass.WATER,
 | |
|     Category.GAS_VALVE: ValveDeviceClass.GAS,
 | |
| }
 | |
| 
 | |
| 
 | |
| async def async_setup_entry(
 | |
|     hass: HomeAssistant,
 | |
|     entry: SmartThingsConfigEntry,
 | |
|     async_add_entities: AddConfigEntryEntitiesCallback,
 | |
| ) -> None:
 | |
|     """Add valves for a config entry."""
 | |
|     entry_data = entry.runtime_data
 | |
|     async_add_entities(
 | |
|         SmartThingsValve(entry_data.client, device)
 | |
|         for device in entry_data.devices.values()
 | |
|         if Capability.VALVE in device.status[MAIN]
 | |
|     )
 | |
| 
 | |
| 
 | |
| class SmartThingsValve(SmartThingsEntity, ValveEntity):
 | |
|     """Define a SmartThings valve."""
 | |
| 
 | |
|     _attr_supported_features = ValveEntityFeature.OPEN | ValveEntityFeature.CLOSE
 | |
|     _attr_reports_position = False
 | |
|     _attr_name = None
 | |
| 
 | |
|     def __init__(self, client: SmartThings, device: FullDevice) -> None:
 | |
|         """Init the class."""
 | |
|         super().__init__(client, device, {Capability.VALVE})
 | |
|         self._attr_device_class = DEVICE_CLASS_MAP.get(
 | |
|             device.device.components[MAIN].user_category
 | |
|             or device.device.components[MAIN].manufacturer_category
 | |
|         )
 | |
| 
 | |
|     async def async_open_valve(self) -> None:
 | |
|         """Open the valve."""
 | |
|         await self.execute_device_command(
 | |
|             Capability.VALVE,
 | |
|             Command.OPEN,
 | |
|         )
 | |
| 
 | |
|     async def async_close_valve(self) -> None:
 | |
|         """Close the valve."""
 | |
|         await self.execute_device_command(
 | |
|             Capability.VALVE,
 | |
|             Command.CLOSE,
 | |
|         )
 | |
| 
 | |
|     @property
 | |
|     def is_closed(self) -> bool:
 | |
|         """Return if the valve is closed."""
 | |
|         return self.get_attribute_value(Capability.VALVE, Attribute.VALVE) == "closed"
 | 
