Add EntityFeature enum to Cover (#69088)
parent
93571c2d01
commit
330c931067
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
|||
|
||||
from dataclasses import dataclass
|
||||
from datetime import timedelta
|
||||
from enum import IntEnum
|
||||
import functools as ft
|
||||
import logging
|
||||
from typing import Any, final
|
||||
|
@ -79,6 +80,22 @@ DEVICE_CLASS_SHADE = CoverDeviceClass.SHADE.value
|
|||
DEVICE_CLASS_SHUTTER = CoverDeviceClass.SHUTTER.value
|
||||
DEVICE_CLASS_WINDOW = CoverDeviceClass.WINDOW.value
|
||||
|
||||
|
||||
class CoverEntityFeature(IntEnum):
|
||||
"""Supported features of the cover entity."""
|
||||
|
||||
OPEN = 1
|
||||
CLOSE = 2
|
||||
SET_POSITION = 4
|
||||
STOP = 8
|
||||
OPEN_TILT = 16
|
||||
CLOSE_TILT = 32
|
||||
STOP_TILT = 64
|
||||
SET_TILT_POSITION = 128
|
||||
|
||||
|
||||
# These SUPPORT_* constants are deprecated as of Home Assistant 2022.5.
|
||||
# Please use the CoverEntityFeature enum instead.
|
||||
SUPPORT_OPEN = 1
|
||||
SUPPORT_CLOSE = 2
|
||||
SUPPORT_SET_POSITION = 4
|
||||
|
@ -109,11 +126,11 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||
await component.async_setup(config)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_OPEN_COVER, {}, "async_open_cover", [SUPPORT_OPEN]
|
||||
SERVICE_OPEN_COVER, {}, "async_open_cover", [CoverEntityFeature.OPEN]
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_CLOSE_COVER, {}, "async_close_cover", [SUPPORT_CLOSE]
|
||||
SERVICE_CLOSE_COVER, {}, "async_close_cover", [CoverEntityFeature.CLOSE]
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
|
@ -124,27 +141,39 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||
)
|
||||
},
|
||||
"async_set_cover_position",
|
||||
[SUPPORT_SET_POSITION],
|
||||
[CoverEntityFeature.SET_POSITION],
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_STOP_COVER, {}, "async_stop_cover", [SUPPORT_STOP]
|
||||
SERVICE_STOP_COVER, {}, "async_stop_cover", [CoverEntityFeature.STOP]
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_TOGGLE, {}, "async_toggle", [SUPPORT_OPEN | SUPPORT_CLOSE]
|
||||
SERVICE_TOGGLE,
|
||||
{},
|
||||
"async_toggle",
|
||||
[CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE],
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_OPEN_COVER_TILT, {}, "async_open_cover_tilt", [SUPPORT_OPEN_TILT]
|
||||
SERVICE_OPEN_COVER_TILT,
|
||||
{},
|
||||
"async_open_cover_tilt",
|
||||
[CoverEntityFeature.OPEN_TILT],
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_CLOSE_COVER_TILT, {}, "async_close_cover_tilt", [SUPPORT_CLOSE_TILT]
|
||||
SERVICE_CLOSE_COVER_TILT,
|
||||
{},
|
||||
"async_close_cover_tilt",
|
||||
[CoverEntityFeature.CLOSE_TILT],
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_STOP_COVER_TILT, {}, "async_stop_cover_tilt", [SUPPORT_STOP_TILT]
|
||||
SERVICE_STOP_COVER_TILT,
|
||||
{},
|
||||
"async_stop_cover_tilt",
|
||||
[CoverEntityFeature.STOP_TILT],
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
|
@ -155,14 +184,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||
)
|
||||
},
|
||||
"async_set_cover_tilt_position",
|
||||
[SUPPORT_SET_TILT_POSITION],
|
||||
[CoverEntityFeature.SET_TILT_POSITION],
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
SERVICE_TOGGLE_COVER_TILT,
|
||||
{},
|
||||
"async_toggle_tilt",
|
||||
[SUPPORT_OPEN_TILT | SUPPORT_CLOSE_TILT],
|
||||
[CoverEntityFeature.OPEN_TILT | CoverEntityFeature.CLOSE_TILT],
|
||||
)
|
||||
|
||||
return True
|
||||
|
@ -262,17 +291,19 @@ class CoverEntity(Entity):
|
|||
if self._attr_supported_features is not None:
|
||||
return self._attr_supported_features
|
||||
|
||||
supported_features = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_STOP
|
||||
supported_features = (
|
||||
CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE | CoverEntityFeature.STOP
|
||||
)
|
||||
|
||||
if self.current_cover_position is not None:
|
||||
supported_features |= SUPPORT_SET_POSITION
|
||||
supported_features |= CoverEntityFeature.SET_POSITION
|
||||
|
||||
if self.current_cover_tilt_position is not None:
|
||||
supported_features |= (
|
||||
SUPPORT_OPEN_TILT
|
||||
| SUPPORT_CLOSE_TILT
|
||||
| SUPPORT_STOP_TILT
|
||||
| SUPPORT_SET_TILT_POSITION
|
||||
CoverEntityFeature.OPEN_TILT
|
||||
| CoverEntityFeature.CLOSE_TILT
|
||||
| CoverEntityFeature.STOP_TILT
|
||||
| CoverEntityFeature.SET_TILT_POSITION
|
||||
)
|
||||
|
||||
return supported_features
|
||||
|
@ -395,7 +426,7 @@ class CoverEntity(Entity):
|
|||
await self.async_close_cover_tilt(**kwargs)
|
||||
|
||||
def _get_toggle_function(self, fns):
|
||||
if SUPPORT_STOP | self.supported_features and (
|
||||
if CoverEntityFeature.STOP | self.supported_features and (
|
||||
self.is_closing or self.is_opening
|
||||
):
|
||||
return fns["stop"]
|
||||
|
|
|
@ -4,14 +4,9 @@ from __future__ import annotations
|
|||
from homeassistant.components.cover import (
|
||||
ATTR_POSITION,
|
||||
ATTR_TILT_POSITION,
|
||||
SUPPORT_CLOSE,
|
||||
SUPPORT_CLOSE_TILT,
|
||||
SUPPORT_OPEN,
|
||||
SUPPORT_OPEN_TILT,
|
||||
SUPPORT_SET_TILT_POSITION,
|
||||
SUPPORT_STOP_TILT,
|
||||
CoverDeviceClass,
|
||||
CoverEntity,
|
||||
CoverEntityFeature,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
|
@ -40,7 +35,7 @@ async def async_setup_platform(
|
|||
"cover_4",
|
||||
"Garage Door",
|
||||
device_class=CoverDeviceClass.GARAGE,
|
||||
supported_features=(SUPPORT_OPEN | SUPPORT_CLOSE),
|
||||
supported_features=(CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE),
|
||||
),
|
||||
DemoCover(
|
||||
hass,
|
||||
|
@ -48,10 +43,10 @@ async def async_setup_platform(
|
|||
"Pergola Roof",
|
||||
tilt_position=60,
|
||||
supported_features=(
|
||||
SUPPORT_OPEN_TILT
|
||||
| SUPPORT_STOP_TILT
|
||||
| SUPPORT_CLOSE_TILT
|
||||
| SUPPORT_SET_TILT_POSITION
|
||||
CoverEntityFeature.OPEN_TILT
|
||||
| CoverEntityFeature.STOP_TILT
|
||||
| CoverEntityFeature.CLOSE_TILT
|
||||
| CoverEntityFeature.SET_TILT_POSITION
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue