1 """Support for ESPHome valves."""
3 from __future__
import annotations
5 from functools
import partial
8 from aioesphomeapi
import EntityInfo, ValveInfo, ValveOperation, ValveState
20 convert_api_error_ha_error,
21 esphome_state_property,
22 platform_async_setup_entry,
27 """A valve implementation for ESPHome."""
31 """Set attrs from static info."""
34 flags = ValveEntityFeature.OPEN | ValveEntityFeature.CLOSE
35 if static_info.supports_stop:
36 flags |= ValveEntityFeature.STOP
37 if static_info.supports_position:
38 flags |= ValveEntityFeature.SET_POSITION
41 ValveDeviceClass, static_info.device_class
47 @esphome_state_property
49 """Return if the valve is closed or not."""
50 return self.
_state_state.position == 0.0
53 @esphome_state_property
55 """Return if the valve is opening or not."""
56 return self.
_state_state.current_operation
is ValveOperation.IS_OPENING
59 @esphome_state_property
61 """Return if the valve is closing or not."""
62 return self.
_state_state.current_operation
is ValveOperation.IS_CLOSING
65 @esphome_state_property
67 """Return current position of valve. 0 is closed, 100 is open."""
68 return round(self.
_state_state.position * 100.0)
70 @convert_api_error_ha_error
73 self.
_client_client.valve_command(key=self.
_key_key, position=1.0)
75 @convert_api_error_ha_error
78 self.
_client_client.valve_command(key=self.
_key_key, position=0.0)
80 @convert_api_error_ha_error
83 self.
_client_client.valve_command(key=self.
_key_key, stop=
True)
85 @convert_api_error_ha_error
87 """Move the valve to a specific position."""
88 self.
_client_client.valve_command(key=self.
_key_key, position=position / 100)
91 async_setup_entry = partial(
92 platform_async_setup_entry,
94 entity_type=EsphomeValve,
95 state_type=ValveState,
None _on_static_info_update(self, EntityInfo static_info)
int|None current_valve_position(self)
None async_set_valve_position(self, float position)
None async_stop_valve(self, **Any kwargs)
None async_close_valve(self, **Any kwargs)
None async_open_valve(self, **Any kwargs)