Do not include unavailable entities in Google Assistant SYNC (#13358)

This commit is contained in:
Paulus Schoutsen 2018-03-20 18:09:34 -07:00 committed by GitHub
parent 852eef8046
commit cfb0b00c0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 2 deletions

View file

@ -94,9 +94,16 @@ class _GoogleEntity:
https://developers.google.com/actions/smarthome/create-app#actiondevicessync
"""
traits = self.traits()
state = self.state
# When a state is unavailable, the attributes that describe
# capabilities will be stripped. For example, a light entity will miss
# the min/max mireds. Therefore they will be excluded from a sync.
if state.state == STATE_UNAVAILABLE:
return None
traits = self.traits()
# Found no supported traits for this entity
if not traits:
return None

View file

@ -52,6 +52,7 @@ class DemoLight(Light):
self._white = white
self._effect_list = effect_list
self._effect = effect
self._available = True
@property
def should_poll(self) -> bool:
@ -73,7 +74,7 @@ class DemoLight(Light):
"""Return availability."""
# This demo light is always available, but well-behaving components
# should implement this to inform Home Assistant accordingly.
return True
return self._available
@property
def brightness(self) -> int:

View file

@ -259,3 +259,31 @@ def test_serialize_input_boolean():
'type': 'action.devices.types.SWITCH',
'willReportState': False,
}
async def test_unavailable_state_doesnt_sync(hass):
"""Test that an unavailable entity does not sync over."""
light = DemoLight(
None, 'Demo Light',
state=False,
hs_color=(180, 75),
)
light.hass = hass
light.entity_id = 'light.demo_light'
light._available = False
await light.async_update_ha_state()
result = await sh.async_handle_message(hass, BASIC_CONFIG, {
"requestId": REQ_ID,
"inputs": [{
"intent": "action.devices.SYNC"
}]
})
assert result == {
'requestId': REQ_ID,
'payload': {
'agentUserId': 'test-agent',
'devices': []
}
}