Do not include unavailable entities in Google Assistant SYNC (#13358)
This commit is contained in:
parent
852eef8046
commit
cfb0b00c0c
3 changed files with 38 additions and 2 deletions
homeassistant/components
tests/components/google_assistant
|
@ -94,9 +94,16 @@ class _GoogleEntity:
|
||||||
|
|
||||||
https://developers.google.com/actions/smarthome/create-app#actiondevicessync
|
https://developers.google.com/actions/smarthome/create-app#actiondevicessync
|
||||||
"""
|
"""
|
||||||
traits = self.traits()
|
|
||||||
state = self.state
|
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
|
# Found no supported traits for this entity
|
||||||
if not traits:
|
if not traits:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -52,6 +52,7 @@ class DemoLight(Light):
|
||||||
self._white = white
|
self._white = white
|
||||||
self._effect_list = effect_list
|
self._effect_list = effect_list
|
||||||
self._effect = effect
|
self._effect = effect
|
||||||
|
self._available = True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def should_poll(self) -> bool:
|
def should_poll(self) -> bool:
|
||||||
|
@ -73,7 +74,7 @@ class DemoLight(Light):
|
||||||
"""Return availability."""
|
"""Return availability."""
|
||||||
# This demo light is always available, but well-behaving components
|
# This demo light is always available, but well-behaving components
|
||||||
# should implement this to inform Home Assistant accordingly.
|
# should implement this to inform Home Assistant accordingly.
|
||||||
return True
|
return self._available
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def brightness(self) -> int:
|
def brightness(self) -> int:
|
||||||
|
|
|
@ -259,3 +259,31 @@ def test_serialize_input_boolean():
|
||||||
'type': 'action.devices.types.SWITCH',
|
'type': 'action.devices.types.SWITCH',
|
||||||
'willReportState': False,
|
'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': []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue