mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 09:47:13 +00:00
Use EntityFeature in homekit_controller (#69404)
This commit is contained in:
parent
999e2f3bf0
commit
a5b919ec6b
@ -6,11 +6,9 @@ from typing import Any
|
|||||||
from aiohomekit.model.characteristics import CharacteristicsTypes
|
from aiohomekit.model.characteristics import CharacteristicsTypes
|
||||||
from aiohomekit.model.services import Service, ServicesTypes
|
from aiohomekit.model.services import Service, ServicesTypes
|
||||||
|
|
||||||
from homeassistant.components.alarm_control_panel import AlarmControlPanelEntity
|
from homeassistant.components.alarm_control_panel import (
|
||||||
from homeassistant.components.alarm_control_panel.const import (
|
AlarmControlPanelEntity,
|
||||||
SUPPORT_ALARM_ARM_AWAY,
|
AlarmControlPanelEntityFeature,
|
||||||
SUPPORT_ALARM_ARM_HOME,
|
|
||||||
SUPPORT_ALARM_ARM_NIGHT,
|
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -67,6 +65,12 @@ async def async_setup_entry(
|
|||||||
class HomeKitAlarmControlPanelEntity(HomeKitEntity, AlarmControlPanelEntity):
|
class HomeKitAlarmControlPanelEntity(HomeKitEntity, AlarmControlPanelEntity):
|
||||||
"""Representation of a Homekit Alarm Control Panel."""
|
"""Representation of a Homekit Alarm Control Panel."""
|
||||||
|
|
||||||
|
_attr_supported_features = (
|
||||||
|
AlarmControlPanelEntityFeature.ARM_HOME
|
||||||
|
| AlarmControlPanelEntityFeature.ARM_AWAY
|
||||||
|
| AlarmControlPanelEntityFeature.ARM_NIGHT
|
||||||
|
)
|
||||||
|
|
||||||
def get_characteristic_types(self) -> list[str]:
|
def get_characteristic_types(self) -> list[str]:
|
||||||
"""Define the homekit characteristics the entity cares about."""
|
"""Define the homekit characteristics the entity cares about."""
|
||||||
return [
|
return [
|
||||||
@ -87,11 +91,6 @@ class HomeKitAlarmControlPanelEntity(HomeKitEntity, AlarmControlPanelEntity):
|
|||||||
self.service.value(CharacteristicsTypes.SECURITY_SYSTEM_STATE_CURRENT)
|
self.service.value(CharacteristicsTypes.SECURITY_SYSTEM_STATE_CURRENT)
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
|
||||||
def supported_features(self) -> int:
|
|
||||||
"""Return the list of supported features."""
|
|
||||||
return SUPPORT_ALARM_ARM_HOME | SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_NIGHT
|
|
||||||
|
|
||||||
async def async_alarm_disarm(self, code: str | None = None) -> None:
|
async def async_alarm_disarm(self, code: str | None = None) -> None:
|
||||||
"""Send disarm command."""
|
"""Send disarm command."""
|
||||||
await self.set_alarm_state(STATE_ALARM_DISARMED, code)
|
await self.set_alarm_state(STATE_ALARM_DISARMED, code)
|
||||||
|
@ -20,6 +20,7 @@ from homeassistant.components.climate import (
|
|||||||
DEFAULT_MAX_TEMP,
|
DEFAULT_MAX_TEMP,
|
||||||
DEFAULT_MIN_TEMP,
|
DEFAULT_MIN_TEMP,
|
||||||
ClimateEntity,
|
ClimateEntity,
|
||||||
|
ClimateEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.components.climate.const import (
|
from homeassistant.components.climate.const import (
|
||||||
ATTR_HVAC_MODE,
|
ATTR_HVAC_MODE,
|
||||||
@ -33,10 +34,6 @@ from homeassistant.components.climate.const import (
|
|||||||
HVAC_MODE_HEAT,
|
HVAC_MODE_HEAT,
|
||||||
HVAC_MODE_HEAT_COOL,
|
HVAC_MODE_HEAT_COOL,
|
||||||
HVAC_MODE_OFF,
|
HVAC_MODE_OFF,
|
||||||
SUPPORT_SWING_MODE,
|
|
||||||
SUPPORT_TARGET_HUMIDITY,
|
|
||||||
SUPPORT_TARGET_TEMPERATURE,
|
|
||||||
SUPPORT_TARGET_TEMPERATURE_RANGE,
|
|
||||||
SWING_OFF,
|
SWING_OFF,
|
||||||
SWING_VERTICAL,
|
SWING_VERTICAL,
|
||||||
)
|
)
|
||||||
@ -304,7 +301,7 @@ class HomeKitHeaterCoolerEntity(HomeKitEntity, ClimateEntity):
|
|||||||
def swing_mode(self) -> str:
|
def swing_mode(self) -> str:
|
||||||
"""Return the swing setting.
|
"""Return the swing setting.
|
||||||
|
|
||||||
Requires SUPPORT_SWING_MODE.
|
Requires ClimateEntityFeature.SWING_MODE.
|
||||||
"""
|
"""
|
||||||
value = self.service.value(CharacteristicsTypes.SWING_MODE)
|
value = self.service.value(CharacteristicsTypes.SWING_MODE)
|
||||||
return SWING_MODE_HOMEKIT_TO_HASS[value]
|
return SWING_MODE_HOMEKIT_TO_HASS[value]
|
||||||
@ -313,7 +310,7 @@ class HomeKitHeaterCoolerEntity(HomeKitEntity, ClimateEntity):
|
|||||||
def swing_modes(self) -> list[str]:
|
def swing_modes(self) -> list[str]:
|
||||||
"""Return the list of available swing modes.
|
"""Return the list of available swing modes.
|
||||||
|
|
||||||
Requires SUPPORT_SWING_MODE.
|
Requires ClimateEntityFeature.SWING_MODE.
|
||||||
"""
|
"""
|
||||||
valid_values = clamp_enum_to_char(
|
valid_values = clamp_enum_to_char(
|
||||||
SwingModeValues,
|
SwingModeValues,
|
||||||
@ -333,13 +330,13 @@ class HomeKitHeaterCoolerEntity(HomeKitEntity, ClimateEntity):
|
|||||||
features = 0
|
features = 0
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD):
|
if self.service.has(CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD):
|
||||||
features |= SUPPORT_TARGET_TEMPERATURE
|
features |= ClimateEntityFeature.TARGET_TEMPERATURE
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD):
|
if self.service.has(CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD):
|
||||||
features |= SUPPORT_TARGET_TEMPERATURE
|
features |= ClimateEntityFeature.TARGET_TEMPERATURE
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.SWING_MODE):
|
if self.service.has(CharacteristicsTypes.SWING_MODE):
|
||||||
features |= SUPPORT_SWING_MODE
|
features |= ClimateEntityFeature.SWING_MODE
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
|
||||||
@ -384,7 +381,9 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
(mode == HVAC_MODE_HEAT_COOL)
|
(mode == HVAC_MODE_HEAT_COOL)
|
||||||
and (SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features)
|
and (
|
||||||
|
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features
|
||||||
|
)
|
||||||
and heat_temp
|
and heat_temp
|
||||||
and cool_temp
|
and cool_temp
|
||||||
):
|
):
|
||||||
@ -429,7 +428,9 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
||||||
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT, HVAC_MODE_COOL}) or (
|
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT, HVAC_MODE_COOL}) or (
|
||||||
(MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL})
|
(MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL})
|
||||||
and not (SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features)
|
and not (
|
||||||
|
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features
|
||||||
|
)
|
||||||
):
|
):
|
||||||
return self.service.value(CharacteristicsTypes.TEMPERATURE_TARGET)
|
return self.service.value(CharacteristicsTypes.TEMPERATURE_TARGET)
|
||||||
return None
|
return None
|
||||||
@ -439,7 +440,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
"""Return the highbound target temperature we try to reach."""
|
"""Return the highbound target temperature we try to reach."""
|
||||||
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
||||||
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
||||||
SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features
|
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features
|
||||||
):
|
):
|
||||||
return self.service.value(
|
return self.service.value(
|
||||||
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD
|
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD
|
||||||
@ -451,7 +452,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
"""Return the lowbound target temperature we try to reach."""
|
"""Return the lowbound target temperature we try to reach."""
|
||||||
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
||||||
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
||||||
SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features
|
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features
|
||||||
):
|
):
|
||||||
return self.service.value(
|
return self.service.value(
|
||||||
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD
|
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD
|
||||||
@ -463,7 +464,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
"""Return the minimum target temp."""
|
"""Return the minimum target temp."""
|
||||||
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
||||||
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
||||||
SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features
|
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features
|
||||||
):
|
):
|
||||||
min_temp = self.service[
|
min_temp = self.service[
|
||||||
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD
|
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD
|
||||||
@ -485,7 +486,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
"""Return the maximum target temp."""
|
"""Return the maximum target temp."""
|
||||||
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET)
|
||||||
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and (
|
||||||
SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features
|
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features
|
||||||
):
|
):
|
||||||
max_temp = self.service[
|
max_temp = self.service[
|
||||||
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD
|
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD
|
||||||
@ -566,15 +567,15 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity):
|
|||||||
features = 0
|
features = 0
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.TEMPERATURE_TARGET):
|
if self.service.has(CharacteristicsTypes.TEMPERATURE_TARGET):
|
||||||
features |= SUPPORT_TARGET_TEMPERATURE
|
features |= ClimateEntityFeature.TARGET_TEMPERATURE
|
||||||
|
|
||||||
if self.service.has(
|
if self.service.has(
|
||||||
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD
|
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD
|
||||||
) and self.service.has(CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD):
|
) and self.service.has(CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD):
|
||||||
features |= SUPPORT_TARGET_TEMPERATURE_RANGE
|
features |= ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET):
|
if self.service.has(CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET):
|
||||||
features |= SUPPORT_TARGET_HUMIDITY
|
features |= ClimateEntityFeature.TARGET_HUMIDITY
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
|
||||||
|
@ -9,15 +9,9 @@ from aiohomekit.model.services import Service, ServicesTypes
|
|||||||
from homeassistant.components.cover import (
|
from homeassistant.components.cover import (
|
||||||
ATTR_POSITION,
|
ATTR_POSITION,
|
||||||
ATTR_TILT_POSITION,
|
ATTR_TILT_POSITION,
|
||||||
SUPPORT_CLOSE,
|
|
||||||
SUPPORT_CLOSE_TILT,
|
|
||||||
SUPPORT_OPEN,
|
|
||||||
SUPPORT_OPEN_TILT,
|
|
||||||
SUPPORT_SET_POSITION,
|
|
||||||
SUPPORT_SET_TILT_POSITION,
|
|
||||||
SUPPORT_STOP,
|
|
||||||
CoverDeviceClass,
|
CoverDeviceClass,
|
||||||
CoverEntity,
|
CoverEntity,
|
||||||
|
CoverEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import STATE_CLOSED, STATE_CLOSING, STATE_OPEN, STATE_OPENING
|
from homeassistant.const import STATE_CLOSED, STATE_CLOSING, STATE_OPEN, STATE_OPENING
|
||||||
@ -65,6 +59,7 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverEntity):
|
|||||||
"""Representation of a HomeKit Garage Door."""
|
"""Representation of a HomeKit Garage Door."""
|
||||||
|
|
||||||
_attr_device_class = CoverDeviceClass.GARAGE
|
_attr_device_class = CoverDeviceClass.GARAGE
|
||||||
|
_attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
|
||||||
|
|
||||||
def get_characteristic_types(self) -> list[str]:
|
def get_characteristic_types(self) -> list[str]:
|
||||||
"""Define the homekit characteristics the entity cares about."""
|
"""Define the homekit characteristics the entity cares about."""
|
||||||
@ -74,11 +69,6 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverEntity):
|
|||||||
CharacteristicsTypes.OBSTRUCTION_DETECTED,
|
CharacteristicsTypes.OBSTRUCTION_DETECTED,
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
|
||||||
def supported_features(self) -> int:
|
|
||||||
"""Flag supported features."""
|
|
||||||
return SUPPORT_OPEN | SUPPORT_CLOSE
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _state(self) -> str:
|
def _state(self) -> str:
|
||||||
"""Return the current state of the garage door."""
|
"""Return the current state of the garage door."""
|
||||||
@ -143,10 +133,14 @@ class HomeKitWindowCover(HomeKitEntity, CoverEntity):
|
|||||||
@property
|
@property
|
||||||
def supported_features(self) -> int:
|
def supported_features(self) -> int:
|
||||||
"""Flag supported features."""
|
"""Flag supported features."""
|
||||||
features = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_SET_POSITION
|
features = (
|
||||||
|
CoverEntityFeature.OPEN
|
||||||
|
| CoverEntityFeature.CLOSE
|
||||||
|
| CoverEntityFeature.SET_POSITION
|
||||||
|
)
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.POSITION_HOLD):
|
if self.service.has(CharacteristicsTypes.POSITION_HOLD):
|
||||||
features |= SUPPORT_STOP
|
features |= CoverEntityFeature.STOP
|
||||||
|
|
||||||
supports_tilt = any(
|
supports_tilt = any(
|
||||||
(
|
(
|
||||||
@ -157,7 +151,9 @@ class HomeKitWindowCover(HomeKitEntity, CoverEntity):
|
|||||||
|
|
||||||
if supports_tilt:
|
if supports_tilt:
|
||||||
features |= (
|
features |= (
|
||||||
SUPPORT_OPEN_TILT | SUPPORT_CLOSE_TILT | SUPPORT_SET_TILT_POSITION
|
CoverEntityFeature.OPEN_TILT
|
||||||
|
| CoverEntityFeature.CLOSE_TILT
|
||||||
|
| CoverEntityFeature.SET_TILT_POSITION
|
||||||
)
|
)
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
@ -9,10 +9,8 @@ from aiohomekit.model.services import Service, ServicesTypes
|
|||||||
from homeassistant.components.fan import (
|
from homeassistant.components.fan import (
|
||||||
DIRECTION_FORWARD,
|
DIRECTION_FORWARD,
|
||||||
DIRECTION_REVERSE,
|
DIRECTION_REVERSE,
|
||||||
SUPPORT_DIRECTION,
|
|
||||||
SUPPORT_OSCILLATE,
|
|
||||||
SUPPORT_SET_SPEED,
|
|
||||||
FanEntity,
|
FanEntity,
|
||||||
|
FanEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
@ -76,13 +74,13 @@ class BaseHomeKitFan(HomeKitEntity, FanEntity):
|
|||||||
features = 0
|
features = 0
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.ROTATION_DIRECTION):
|
if self.service.has(CharacteristicsTypes.ROTATION_DIRECTION):
|
||||||
features |= SUPPORT_DIRECTION
|
features |= FanEntityFeature.DIRECTION
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.ROTATION_SPEED):
|
if self.service.has(CharacteristicsTypes.ROTATION_SPEED):
|
||||||
features |= SUPPORT_SET_SPEED
|
features |= FanEntityFeature.SET_SPEED
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.SWING_MODE):
|
if self.service.has(CharacteristicsTypes.SWING_MODE):
|
||||||
features |= SUPPORT_OSCILLATE
|
features |= FanEntityFeature.OSCILLATE
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
|
||||||
@ -127,7 +125,10 @@ class BaseHomeKitFan(HomeKitEntity, FanEntity):
|
|||||||
if not self.is_on:
|
if not self.is_on:
|
||||||
characteristics[self.on_characteristic] = True
|
characteristics[self.on_characteristic] = True
|
||||||
|
|
||||||
if percentage is not None and self.supported_features & SUPPORT_SET_SPEED:
|
if (
|
||||||
|
percentage is not None
|
||||||
|
and self.supported_features & FanEntityFeature.SET_SPEED
|
||||||
|
):
|
||||||
characteristics[CharacteristicsTypes.ROTATION_SPEED] = percentage
|
characteristics[CharacteristicsTypes.ROTATION_SPEED] = percentage
|
||||||
|
|
||||||
if characteristics:
|
if characteristics:
|
||||||
|
@ -6,13 +6,16 @@ from typing import Any
|
|||||||
from aiohomekit.model.characteristics import CharacteristicsTypes
|
from aiohomekit.model.characteristics import CharacteristicsTypes
|
||||||
from aiohomekit.model.services import Service, ServicesTypes
|
from aiohomekit.model.services import Service, ServicesTypes
|
||||||
|
|
||||||
from homeassistant.components.humidifier import HumidifierDeviceClass, HumidifierEntity
|
from homeassistant.components.humidifier import (
|
||||||
|
HumidifierDeviceClass,
|
||||||
|
HumidifierEntity,
|
||||||
|
HumidifierEntityFeature,
|
||||||
|
)
|
||||||
from homeassistant.components.humidifier.const import (
|
from homeassistant.components.humidifier.const import (
|
||||||
DEFAULT_MAX_HUMIDITY,
|
DEFAULT_MAX_HUMIDITY,
|
||||||
DEFAULT_MIN_HUMIDITY,
|
DEFAULT_MIN_HUMIDITY,
|
||||||
MODE_AUTO,
|
MODE_AUTO,
|
||||||
MODE_NORMAL,
|
MODE_NORMAL,
|
||||||
SUPPORT_MODES,
|
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
@ -20,8 +23,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|||||||
|
|
||||||
from . import KNOWN_DEVICES, HomeKitEntity
|
from . import KNOWN_DEVICES, HomeKitEntity
|
||||||
|
|
||||||
SUPPORT_FLAGS = 0
|
|
||||||
|
|
||||||
HK_MODE_TO_HA = {
|
HK_MODE_TO_HA = {
|
||||||
0: "off",
|
0: "off",
|
||||||
1: MODE_AUTO,
|
1: MODE_AUTO,
|
||||||
@ -40,6 +41,7 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
"""Representation of a HomeKit Controller Humidifier."""
|
"""Representation of a HomeKit Controller Humidifier."""
|
||||||
|
|
||||||
_attr_device_class = HumidifierDeviceClass.HUMIDIFIER
|
_attr_device_class = HumidifierDeviceClass.HUMIDIFIER
|
||||||
|
_attr_supported_features = HumidifierEntityFeature.MODES
|
||||||
|
|
||||||
def get_characteristic_types(self) -> list[str]:
|
def get_characteristic_types(self) -> list[str]:
|
||||||
"""Define the homekit characteristics the entity cares about."""
|
"""Define the homekit characteristics the entity cares about."""
|
||||||
@ -50,11 +52,6 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
CharacteristicsTypes.RELATIVE_HUMIDITY_HUMIDIFIER_THRESHOLD,
|
CharacteristicsTypes.RELATIVE_HUMIDITY_HUMIDIFIER_THRESHOLD,
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
|
||||||
def supported_features(self) -> int:
|
|
||||||
"""Return the list of supported features."""
|
|
||||||
return SUPPORT_FLAGS | SUPPORT_MODES
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_on(self) -> bool:
|
def is_on(self) -> bool:
|
||||||
"""Return true if device is on."""
|
"""Return true if device is on."""
|
||||||
@ -79,7 +76,7 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
def mode(self) -> str | None:
|
def mode(self) -> str | None:
|
||||||
"""Return the current mode, e.g., home, auto, baby.
|
"""Return the current mode, e.g., home, auto, baby.
|
||||||
|
|
||||||
Requires SUPPORT_MODES.
|
Requires HumidifierEntityFeature.MODES.
|
||||||
"""
|
"""
|
||||||
mode = self.service.value(
|
mode = self.service.value(
|
||||||
CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE
|
CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE
|
||||||
@ -90,7 +87,7 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
def available_modes(self) -> list[str] | None:
|
def available_modes(self) -> list[str] | None:
|
||||||
"""Return a list of available modes.
|
"""Return a list of available modes.
|
||||||
|
|
||||||
Requires SUPPORT_MODES.
|
Requires HumidifierEntityFeature.MODES.
|
||||||
"""
|
"""
|
||||||
available_modes = [
|
available_modes = [
|
||||||
MODE_NORMAL,
|
MODE_NORMAL,
|
||||||
@ -147,6 +144,7 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
"""Representation of a HomeKit Controller Humidifier."""
|
"""Representation of a HomeKit Controller Humidifier."""
|
||||||
|
|
||||||
_attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER
|
_attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER
|
||||||
|
_attr_supported_features = HumidifierEntityFeature.MODES
|
||||||
|
|
||||||
def get_characteristic_types(self) -> list[str]:
|
def get_characteristic_types(self) -> list[str]:
|
||||||
"""Define the homekit characteristics the entity cares about."""
|
"""Define the homekit characteristics the entity cares about."""
|
||||||
@ -158,11 +156,6 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
CharacteristicsTypes.RELATIVE_HUMIDITY_DEHUMIDIFIER_THRESHOLD,
|
CharacteristicsTypes.RELATIVE_HUMIDITY_DEHUMIDIFIER_THRESHOLD,
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
|
||||||
def supported_features(self) -> int:
|
|
||||||
"""Return the list of supported features."""
|
|
||||||
return SUPPORT_FLAGS | SUPPORT_MODES
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_on(self) -> bool:
|
def is_on(self) -> bool:
|
||||||
"""Return true if device is on."""
|
"""Return true if device is on."""
|
||||||
@ -187,7 +180,7 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
def mode(self) -> str | None:
|
def mode(self) -> str | None:
|
||||||
"""Return the current mode, e.g., home, auto, baby.
|
"""Return the current mode, e.g., home, auto, baby.
|
||||||
|
|
||||||
Requires SUPPORT_MODES.
|
Requires HumidifierEntityFeature.MODES.
|
||||||
"""
|
"""
|
||||||
mode = self.service.value(
|
mode = self.service.value(
|
||||||
CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE
|
CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE
|
||||||
@ -198,7 +191,7 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity):
|
|||||||
def available_modes(self) -> list[str] | None:
|
def available_modes(self) -> list[str] | None:
|
||||||
"""Return a list of available modes.
|
"""Return a list of available modes.
|
||||||
|
|
||||||
Requires SUPPORT_MODES.
|
Requires HumidifierEntityFeature.MODES.
|
||||||
"""
|
"""
|
||||||
available_modes = [
|
available_modes = [
|
||||||
MODE_NORMAL,
|
MODE_NORMAL,
|
||||||
|
@ -15,12 +15,7 @@ from aiohomekit.utils import clamp_enum_to_char
|
|||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
MediaPlayerDeviceClass,
|
MediaPlayerDeviceClass,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
)
|
MediaPlayerEntityFeature,
|
||||||
from homeassistant.components.media_player.const import (
|
|
||||||
SUPPORT_PAUSE,
|
|
||||||
SUPPORT_PLAY,
|
|
||||||
SUPPORT_SELECT_SOURCE,
|
|
||||||
SUPPORT_STOP,
|
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -89,23 +84,23 @@ class HomeKitTelevision(HomeKitEntity, MediaPlayerEntity):
|
|||||||
features = 0
|
features = 0
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.ACTIVE_IDENTIFIER):
|
if self.service.has(CharacteristicsTypes.ACTIVE_IDENTIFIER):
|
||||||
features |= SUPPORT_SELECT_SOURCE
|
features |= MediaPlayerEntityFeature.SELECT_SOURCE
|
||||||
|
|
||||||
if self.service.has(CharacteristicsTypes.TARGET_MEDIA_STATE):
|
if self.service.has(CharacteristicsTypes.TARGET_MEDIA_STATE):
|
||||||
if TargetMediaStateValues.PAUSE in self.supported_media_states:
|
if TargetMediaStateValues.PAUSE in self.supported_media_states:
|
||||||
features |= SUPPORT_PAUSE
|
features |= MediaPlayerEntityFeature.PAUSE
|
||||||
|
|
||||||
if TargetMediaStateValues.PLAY in self.supported_media_states:
|
if TargetMediaStateValues.PLAY in self.supported_media_states:
|
||||||
features |= SUPPORT_PLAY
|
features |= MediaPlayerEntityFeature.PLAY
|
||||||
|
|
||||||
if TargetMediaStateValues.STOP in self.supported_media_states:
|
if TargetMediaStateValues.STOP in self.supported_media_states:
|
||||||
features |= SUPPORT_STOP
|
features |= MediaPlayerEntityFeature.STOP
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self.service.has(CharacteristicsTypes.REMOTE_KEY)
|
self.service.has(CharacteristicsTypes.REMOTE_KEY)
|
||||||
and RemoteKeyValues.PLAY_PAUSE in self.supported_remote_keys
|
and RemoteKeyValues.PLAY_PAUSE in self.supported_remote_keys
|
||||||
):
|
):
|
||||||
features |= SUPPORT_PAUSE | SUPPORT_PLAY
|
features |= MediaPlayerEntityFeature.PAUSE | MediaPlayerEntityFeature.PLAY
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user