diff --git a/docs/core/entity/valve.md b/docs/core/entity/valve.md new file mode 100644 index 00000000..13236fd6 --- /dev/null +++ b/docs/core/entity/valve.md @@ -0,0 +1,113 @@ +--- +title: Valve Entity +sidebar_label: Valve +--- + +A valve entity controls valve devices such as the water or gas valves in your home. Derive a platform entity from [`homeassistant.components.valve.ValveEntity`](https://github.com/home-assistant/core/blob/dev/homeassistant/components/valve/__init__.py). + +## Properties + +:::tip +Properties should always only return information from memory and not do I/O (like network requests). Implement `update()` or `async_update()` to fetch data. +::: + +| Name | Type | Default | Description +| ----------------------- | ---- | ------- | ----------- +| current_valve_position | int | None | `None` | The current position of the valve where 0 means closed and 100 is fully open. This attribute is required on valves with `reports_position = True`, where it's used to determine state. +| is_closed | bool | None | `None` | If the valve is closed or not. Used to determine `state` for valves that don't report position. +| is_closing | bool | None | `None` | If the valve is closing or not. Used to determine `state`. +| is_opening | bool | None | `None` | If the valve is opening or not. Used to determine `state`. +| reports_position | bool | **Required** | If the valve knows its position or not. + +### Device Classes + +| Constant | Description +|----------|-----------------------| +| `ValveDeviceClass.WATER` | Control of a water valve. +| `ValveDeviceClass.GAS` | Control of a gas valve. + + +### States + +| Constant | Description +|----------|------------------------| +| `STATE_OPENING` | The valve is in the process of opening to reach a set position. +| `STATE_OPEN` | The valve has reached the open position. +| `STATE_CLOSING` | The valve is in the process of closing to reach a set position. +| `STATE_CLOSED` | The valve has reach the closed position. + +## Supported Features + +Supported features are defined by using values in the `ValveEntityFeature` enum +and are combined using the bitwise or (`|`) operator. + +| Value | Description | +| ------------------- | -------------------------------------------------------------------------------- | +| `OPEN` | The valve supports being opened. | +| `CLOSE` | The valve supports being closed. | +| `SET_POSITION` | The valve supports moving to a specific position between opened and closed. | +| `STOP` | The valve supports stopping the current action (open, close, set position) | + +## Methods + +### Open valve + +Only implement this method if the flag `SUPPORT_OPEN` is set. For valves that +can set position, this method should be left unimplemented and only `set_valve_position` is required. + +```python +class MyValve(ValveEntity): + # Implement one of these methods. + + def open_valve(self) -> None: + """Open the valve.""" + + async def async_open_valve(self) -> None: + """Open the valve.""" +``` + +### Close valve + +Only implement this method if the flag `SUPPORT_CLOSE` is set. For valves that +can set position, this method should be left unimplemented and only `set_valve_position` is required. + +```python +class MyValve(ValveEntity): + # Implement one of these methods. + + def close_valve(self) -> None: + """Close valve.""" + + async def async_close_valve(self) -> None: + """Close valve.""" +``` + +### Set valve position + +Only implement this method if the flag `SUPPORT_SET_POSITION` is set. This method must be implemented in valves that can set position. + +```python +class MyValve(ValveEntity): + # Implement one of these methods. + + def set_valve_position(self, position: int) -> None: + """Move the valve to a specific position.""" + + async def async_set_valve_position(self, position: int) -> None: + """Move the valve to a specific position.""" +``` + +### Stop valve + +Only implement this method if the flag `SUPPORT_STOP` is set. + +```python +class MyValve(ValveEntity): + # Implement one of these methods. + + def stop_valve(self) -> None: + """Stop the valve.""" + + async def async_stop_valve(self) -> None: + """Stop the valve.""" +```