Report unavailable entities to google (#28501)

* Report unavailable entites to google.

Entities should only removed when removed from HA. Removing a temporarily unavailable entity from google causes it to need to re-configured once it become available again.

* Fix test for unavailable entities
This commit is contained in:
Joakim Plate 2019-12-03 07:14:16 +01:00 committed by Paulus Schoutsen
parent 32e04e1dce
commit 4191d9ca8d
2 changed files with 35 additions and 5 deletions

View file

@ -336,7 +336,7 @@ class GoogleEntity:
@callback @callback
def is_supported(self) -> bool: def is_supported(self) -> bool:
"""Return if the entity is supported by Google.""" """Return if the entity is supported by Google."""
return self.state.state != STATE_UNAVAILABLE and bool(self.traits()) return bool(self.traits())
@callback @callback
def might_2fa(self) -> bool: def might_2fa(self) -> bool:

View file

@ -466,14 +466,17 @@ async def test_serialize_input_boolean(hass):
} }
async def test_unavailable_state_doesnt_sync(hass): async def test_unavailable_state_does_sync(hass):
"""Test that an unavailable entity does not sync over.""" """Test that an unavailable entity does sync over."""
light = DemoLight(None, "Demo Light", state=False) light = DemoLight(None, "Demo Light", state=False, hs_color=(180, 75))
light.hass = hass light.hass = hass
light.entity_id = "light.demo_light" light.entity_id = "light.demo_light"
light._available = False # pylint: disable=protected-access light._available = False # pylint: disable=protected-access
await light.async_update_ha_state() await light.async_update_ha_state()
events = []
hass.bus.async_listen(EVENT_SYNC_RECEIVED, events.append)
result = await sh.async_handle_message( result = await sh.async_handle_message(
hass, hass,
BASIC_CONFIG, BASIC_CONFIG,
@ -483,8 +486,35 @@ async def test_unavailable_state_doesnt_sync(hass):
assert result == { assert result == {
"requestId": REQ_ID, "requestId": REQ_ID,
"payload": {"agentUserId": "test-agent", "devices": []}, "payload": {
"agentUserId": "test-agent",
"devices": [
{
"id": "light.demo_light",
"name": {"name": "Demo Light"},
"traits": [
trait.TRAIT_BRIGHTNESS,
trait.TRAIT_ONOFF,
trait.TRAIT_COLOR_SETTING,
],
"type": const.TYPE_LIGHT,
"willReportState": False,
"attributes": {
"colorModel": "hsv",
"colorTemperatureRange": {
"temperatureMinK": 2000,
"temperatureMaxK": 6535,
},
},
}
],
},
} }
await hass.async_block_till_done()
assert len(events) == 1
assert events[0].event_type == EVENT_SYNC_RECEIVED
assert events[0].data == {"request_id": REQ_ID}
@pytest.mark.parametrize( @pytest.mark.parametrize(