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[0].user_category
|
|
or device.device.components[0].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"
|