Google assistant openclose (#39612)

* Make sure we set discreteOnlyOpenClose for binary sensors

* Mark switches that are assumed state as commandOnlyOnOff

* Drop stray extra line

* Fix pylint error

Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
This commit is contained in:
Joakim Plate 2020-09-03 18:32:57 +02:00 committed by GitHub
parent 8818a5ab6c
commit d128443a2a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 3 deletions

View file

@ -315,6 +315,8 @@ class OnOffTrait(_Trait):
def sync_attributes(self):
"""Return OnOff attributes for a sync request."""
if self.state.attributes.get(ATTR_ASSUMED_STATE, False):
return {"commandOnlyOnOff": True}
return {}
def query_attributes(self):
@ -1541,6 +1543,7 @@ class OpenCloseTrait(_Trait):
response = {}
if self.state.domain == binary_sensor.DOMAIN:
response["queryOnlyOpenClose"] = True
response["discreteOnlyOpenClose"] = True
return response
def query_attributes(self):

View file

@ -795,7 +795,10 @@ async def test_device_class_binary_sensor(hass, device_class, google_type):
"agentUserId": "test-agent",
"devices": [
{
"attributes": {"queryOnlyOpenClose": True},
"attributes": {
"queryOnlyOpenClose": True,
"discreteOnlyOpenClose": True,
},
"id": "binary_sensor.demo_sensor",
"name": {"name": "Demo Sensor"},
"traits": ["action.devices.traits.OpenClose"],

View file

@ -208,6 +208,11 @@ async def test_onoff_switch(hass):
assert trt_off.query_attributes() == {"on": False}
trt_assumed = trait.OnOffTrait(
hass, State("switch.bla", STATE_OFF, {"assumed_state": True}), BASIC_CONFIG
)
assert trt_assumed.sync_attributes() == {"commandOnlyOnOff": True}
on_calls = async_mock_service(hass, switch.DOMAIN, SERVICE_TURN_ON)
await trt_on.execute(trait.COMMAND_ONOFF, BASIC_DATA, {"on": True}, {})
assert len(on_calls) == 1
@ -2022,7 +2027,10 @@ async def test_openclose_binary_sensor(hass, device_class):
BASIC_CONFIG,
)
assert trt.sync_attributes() == {"queryOnlyOpenClose": True}
assert trt.sync_attributes() == {
"queryOnlyOpenClose": True,
"discreteOnlyOpenClose": True,
}
assert trt.query_attributes() == {"openPercent": 100}
@ -2032,7 +2040,10 @@ async def test_openclose_binary_sensor(hass, device_class):
BASIC_CONFIG,
)
assert trt.sync_attributes() == {"queryOnlyOpenClose": True}
assert trt.sync_attributes() == {
"queryOnlyOpenClose": True,
"discreteOnlyOpenClose": True,
}
assert trt.query_attributes() == {"openPercent": 0}