mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Add fan speed percentage support to google assistant (#45835)
This commit is contained in:
parent
a96a80e78d
commit
d417ee2732
@ -1276,6 +1276,7 @@ class FanSpeedTrait(_Trait):
|
||||
return {
|
||||
"availableFanSpeeds": {"speeds": speeds, "ordered": True},
|
||||
"reversible": reversible,
|
||||
"supportsFanSpeedPercent": True,
|
||||
}
|
||||
|
||||
def query_attributes(self):
|
||||
@ -1289,9 +1290,11 @@ class FanSpeedTrait(_Trait):
|
||||
response["currentFanSpeedSetting"] = speed
|
||||
if domain == fan.DOMAIN:
|
||||
speed = attrs.get(fan.ATTR_SPEED)
|
||||
percent = attrs.get(fan.ATTR_PERCENTAGE) or 0
|
||||
if speed is not None:
|
||||
response["on"] = speed != fan.SPEED_OFF
|
||||
response["currentFanSpeedSetting"] = speed
|
||||
response["currentFanSpeedPercent"] = percent
|
||||
return response
|
||||
|
||||
async def execute(self, command, data, params, challenge):
|
||||
@ -1309,13 +1312,20 @@ class FanSpeedTrait(_Trait):
|
||||
context=data.context,
|
||||
)
|
||||
if domain == fan.DOMAIN:
|
||||
service_params = {
|
||||
ATTR_ENTITY_ID: self.state.entity_id,
|
||||
}
|
||||
if "fanSpeedPercent" in params:
|
||||
service = fan.SERVICE_SET_PERCENTAGE
|
||||
service_params[fan.ATTR_PERCENTAGE] = params["fanSpeedPercent"]
|
||||
else:
|
||||
service = fan.SERVICE_SET_SPEED
|
||||
service_params[fan.ATTR_SPEED] = params["fanSpeed"]
|
||||
|
||||
await self.hass.services.async_call(
|
||||
fan.DOMAIN,
|
||||
fan.SERVICE_SET_SPEED,
|
||||
{
|
||||
ATTR_ENTITY_ID: self.state.entity_id,
|
||||
fan.ATTR_SPEED: params["fanSpeed"],
|
||||
},
|
||||
service,
|
||||
service_params,
|
||||
blocking=True,
|
||||
context=data.context,
|
||||
)
|
||||
|
@ -1391,6 +1391,7 @@ async def test_fan_speed(hass):
|
||||
fan.SPEED_HIGH,
|
||||
],
|
||||
"speed": "low",
|
||||
"percentage": 33,
|
||||
},
|
||||
),
|
||||
BASIC_CONFIG,
|
||||
@ -1438,11 +1439,13 @@ async def test_fan_speed(hass):
|
||||
],
|
||||
},
|
||||
"reversible": False,
|
||||
"supportsFanSpeedPercent": True,
|
||||
}
|
||||
|
||||
assert trt.query_attributes() == {
|
||||
"currentFanSpeedSetting": "low",
|
||||
"on": True,
|
||||
"currentFanSpeedPercent": 33,
|
||||
}
|
||||
|
||||
assert trt.can_execute(trait.COMMAND_FANSPEED, params={"fanSpeed": "medium"})
|
||||
@ -1453,6 +1456,14 @@ async def test_fan_speed(hass):
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data == {"entity_id": "fan.living_room_fan", "speed": "medium"}
|
||||
|
||||
assert trt.can_execute(trait.COMMAND_FANSPEED, params={"fanSpeedPercent": 10})
|
||||
|
||||
calls = async_mock_service(hass, fan.DOMAIN, fan.SERVICE_SET_PERCENTAGE)
|
||||
await trt.execute(trait.COMMAND_FANSPEED, BASIC_DATA, {"fanSpeedPercent": 10}, {})
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data == {"entity_id": "fan.living_room_fan", "percentage": 10}
|
||||
|
||||
|
||||
async def test_climate_fan_speed(hass):
|
||||
"""Test FanSpeed trait speed control support for climate domain."""
|
||||
@ -1495,6 +1506,7 @@ async def test_climate_fan_speed(hass):
|
||||
],
|
||||
},
|
||||
"reversible": False,
|
||||
"supportsFanSpeedPercent": True,
|
||||
}
|
||||
|
||||
assert trt.query_attributes() == {
|
||||
|
Loading…
x
Reference in New Issue
Block a user