Set required_features field when registering fan services (#30516)
* Set required_features on fan services * Fix mqtt fan test * Update fan.pypull/30524/head
parent
a58c796641
commit
8257ea30c0
|
@ -79,17 +79,22 @@ async def async_setup(hass, config: dict):
|
||||||
component.async_register_entity_service(SERVICE_TURN_OFF, {}, "async_turn_off")
|
component.async_register_entity_service(SERVICE_TURN_OFF, {}, "async_turn_off")
|
||||||
component.async_register_entity_service(SERVICE_TOGGLE, {}, "async_toggle")
|
component.async_register_entity_service(SERVICE_TOGGLE, {}, "async_toggle")
|
||||||
component.async_register_entity_service(
|
component.async_register_entity_service(
|
||||||
SERVICE_SET_SPEED, {vol.Required(ATTR_SPEED): cv.string}, "async_set_speed"
|
SERVICE_SET_SPEED,
|
||||||
|
{vol.Required(ATTR_SPEED): cv.string},
|
||||||
|
"async_set_speed",
|
||||||
|
[SUPPORT_SET_SPEED],
|
||||||
)
|
)
|
||||||
component.async_register_entity_service(
|
component.async_register_entity_service(
|
||||||
SERVICE_OSCILLATE,
|
SERVICE_OSCILLATE,
|
||||||
{vol.Required(ATTR_OSCILLATING): cv.boolean},
|
{vol.Required(ATTR_OSCILLATING): cv.boolean},
|
||||||
"async_oscillate",
|
"async_oscillate",
|
||||||
|
[SUPPORT_OSCILLATE],
|
||||||
)
|
)
|
||||||
component.async_register_entity_service(
|
component.async_register_entity_service(
|
||||||
SERVICE_SET_DIRECTION,
|
SERVICE_SET_DIRECTION,
|
||||||
{vol.Optional(ATTR_DIRECTION): cv.string},
|
{vol.Optional(ATTR_DIRECTION): cv.string},
|
||||||
"async_set_direction",
|
"async_set_direction",
|
||||||
|
[SUPPORT_DIRECTION],
|
||||||
)
|
)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -121,45 +121,42 @@ class BaseHomeKitFan(HomeKitEntity, FanEntity):
|
||||||
|
|
||||||
async def async_set_direction(self, direction):
|
async def async_set_direction(self, direction):
|
||||||
"""Set the direction of the fan."""
|
"""Set the direction of the fan."""
|
||||||
if self.supported_features & SUPPORT_DIRECTION:
|
await self._accessory.put_characteristics(
|
||||||
await self._accessory.put_characteristics(
|
[
|
||||||
[
|
{
|
||||||
{
|
"aid": self._aid,
|
||||||
"aid": self._aid,
|
"iid": self._chars["rotation.direction"],
|
||||||
"iid": self._chars["rotation.direction"],
|
"value": DIRECTION_TO_HK[direction],
|
||||||
"value": DIRECTION_TO_HK[direction],
|
}
|
||||||
}
|
]
|
||||||
]
|
)
|
||||||
)
|
|
||||||
|
|
||||||
async def async_set_speed(self, speed):
|
async def async_set_speed(self, speed):
|
||||||
"""Set the speed of the fan."""
|
"""Set the speed of the fan."""
|
||||||
if speed == SPEED_OFF:
|
if speed == SPEED_OFF:
|
||||||
return await self.async_turn_off()
|
return await self.async_turn_off()
|
||||||
|
|
||||||
if self.supported_features & SUPPORT_SET_SPEED:
|
await self._accessory.put_characteristics(
|
||||||
await self._accessory.put_characteristics(
|
[
|
||||||
[
|
{
|
||||||
{
|
"aid": self._aid,
|
||||||
"aid": self._aid,
|
"iid": self._chars["rotation.speed"],
|
||||||
"iid": self._chars["rotation.speed"],
|
"value": SPEED_TO_PCNT[speed],
|
||||||
"value": SPEED_TO_PCNT[speed],
|
}
|
||||||
}
|
]
|
||||||
]
|
)
|
||||||
)
|
|
||||||
|
|
||||||
async def async_oscillate(self, oscillating: bool):
|
async def async_oscillate(self, oscillating: bool):
|
||||||
"""Oscillate the fan."""
|
"""Oscillate the fan."""
|
||||||
if self.supported_features & SUPPORT_OSCILLATE:
|
await self._accessory.put_characteristics(
|
||||||
await self._accessory.put_characteristics(
|
[
|
||||||
[
|
{
|
||||||
{
|
"aid": self._aid,
|
||||||
"aid": self._aid,
|
"iid": self._chars["swing-mode"],
|
||||||
"iid": self._chars["swing-mode"],
|
"value": 1 if oscillating else 0,
|
||||||
"value": 1 if oscillating else 0,
|
}
|
||||||
}
|
]
|
||||||
]
|
)
|
||||||
)
|
|
||||||
|
|
||||||
async def async_turn_on(self, speed=None, **kwargs):
|
async def async_turn_on(self, speed=None, **kwargs):
|
||||||
"""Turn the specified fan on."""
|
"""Turn the specified fan on."""
|
||||||
|
|
|
@ -171,9 +171,11 @@ async def test_sending_mqtt_commands_and_optimistic(hass, mqtt_mock):
|
||||||
"payload_off": "StAtE_OfF",
|
"payload_off": "StAtE_OfF",
|
||||||
"payload_on": "StAtE_On",
|
"payload_on": "StAtE_On",
|
||||||
"oscillation_command_topic": "oscillation-command-topic",
|
"oscillation_command_topic": "oscillation-command-topic",
|
||||||
|
"oscillation_state_topic": "oscillation-state-topic",
|
||||||
"payload_oscillation_off": "OsC_OfF",
|
"payload_oscillation_off": "OsC_OfF",
|
||||||
"payload_oscillation_on": "OsC_On",
|
"payload_oscillation_on": "OsC_On",
|
||||||
"speed_command_topic": "speed-command-topic",
|
"speed_command_topic": "speed-command-topic",
|
||||||
|
"speed_state_topic": "speed-state-topic",
|
||||||
"payload_off_speed": "speed_OfF",
|
"payload_off_speed": "speed_OfF",
|
||||||
"payload_low_speed": "speed_lOw",
|
"payload_low_speed": "speed_lOw",
|
||||||
"payload_medium_speed": "speed_mEdium",
|
"payload_medium_speed": "speed_mEdium",
|
||||||
|
|
Loading…
Reference in New Issue