mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +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 {
|
return {
|
||||||
"availableFanSpeeds": {"speeds": speeds, "ordered": True},
|
"availableFanSpeeds": {"speeds": speeds, "ordered": True},
|
||||||
"reversible": reversible,
|
"reversible": reversible,
|
||||||
|
"supportsFanSpeedPercent": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
def query_attributes(self):
|
def query_attributes(self):
|
||||||
@ -1289,9 +1290,11 @@ class FanSpeedTrait(_Trait):
|
|||||||
response["currentFanSpeedSetting"] = speed
|
response["currentFanSpeedSetting"] = speed
|
||||||
if domain == fan.DOMAIN:
|
if domain == fan.DOMAIN:
|
||||||
speed = attrs.get(fan.ATTR_SPEED)
|
speed = attrs.get(fan.ATTR_SPEED)
|
||||||
|
percent = attrs.get(fan.ATTR_PERCENTAGE) or 0
|
||||||
if speed is not None:
|
if speed is not None:
|
||||||
response["on"] = speed != fan.SPEED_OFF
|
response["on"] = speed != fan.SPEED_OFF
|
||||||
response["currentFanSpeedSetting"] = speed
|
response["currentFanSpeedSetting"] = speed
|
||||||
|
response["currentFanSpeedPercent"] = percent
|
||||||
return response
|
return response
|
||||||
|
|
||||||
async def execute(self, command, data, params, challenge):
|
async def execute(self, command, data, params, challenge):
|
||||||
@ -1309,13 +1312,20 @@ class FanSpeedTrait(_Trait):
|
|||||||
context=data.context,
|
context=data.context,
|
||||||
)
|
)
|
||||||
if domain == fan.DOMAIN:
|
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(
|
await self.hass.services.async_call(
|
||||||
fan.DOMAIN,
|
fan.DOMAIN,
|
||||||
fan.SERVICE_SET_SPEED,
|
service,
|
||||||
{
|
service_params,
|
||||||
ATTR_ENTITY_ID: self.state.entity_id,
|
|
||||||
fan.ATTR_SPEED: params["fanSpeed"],
|
|
||||||
},
|
|
||||||
blocking=True,
|
blocking=True,
|
||||||
context=data.context,
|
context=data.context,
|
||||||
)
|
)
|
||||||
|
@ -1391,6 +1391,7 @@ async def test_fan_speed(hass):
|
|||||||
fan.SPEED_HIGH,
|
fan.SPEED_HIGH,
|
||||||
],
|
],
|
||||||
"speed": "low",
|
"speed": "low",
|
||||||
|
"percentage": 33,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
BASIC_CONFIG,
|
BASIC_CONFIG,
|
||||||
@ -1438,11 +1439,13 @@ async def test_fan_speed(hass):
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
"reversible": False,
|
"reversible": False,
|
||||||
|
"supportsFanSpeedPercent": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert trt.query_attributes() == {
|
assert trt.query_attributes() == {
|
||||||
"currentFanSpeedSetting": "low",
|
"currentFanSpeedSetting": "low",
|
||||||
"on": True,
|
"on": True,
|
||||||
|
"currentFanSpeedPercent": 33,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert trt.can_execute(trait.COMMAND_FANSPEED, params={"fanSpeed": "medium"})
|
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 len(calls) == 1
|
||||||
assert calls[0].data == {"entity_id": "fan.living_room_fan", "speed": "medium"}
|
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):
|
async def test_climate_fan_speed(hass):
|
||||||
"""Test FanSpeed trait speed control support for climate domain."""
|
"""Test FanSpeed trait speed control support for climate domain."""
|
||||||
@ -1495,6 +1506,7 @@ async def test_climate_fan_speed(hass):
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
"reversible": False,
|
"reversible": False,
|
||||||
|
"supportsFanSpeedPercent": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert trt.query_attributes() == {
|
assert trt.query_attributes() == {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user