mirror of
https://github.com/home-assistant/core
synced 2024-09-09 12:51:22 +02:00
Optimize update calls for AVM Fritz!Smarthome devices (#57579)
This commit is contained in:
parent
e395e33663
commit
a6aff613d7
@ -66,9 +66,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
devices = fritz.get_devices()
|
devices = fritz.get_devices()
|
||||||
|
|
||||||
data = {}
|
data = {}
|
||||||
|
fritz.update_devices()
|
||||||
for device in devices:
|
for device in devices:
|
||||||
device.update()
|
|
||||||
|
|
||||||
# assume device as unavailable, see #55799
|
# assume device as unavailable, see #55799
|
||||||
if (
|
if (
|
||||||
device.has_powermeter
|
device.has_powermeter
|
||||||
@ -78,6 +77,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
and device.power <= 0
|
and device.power <= 0
|
||||||
and device.energy <= 0
|
and device.energy <= 0
|
||||||
):
|
):
|
||||||
|
LOGGER.debug("Assume device %s as unavailable", device.name)
|
||||||
device.present = False
|
device.present = False
|
||||||
|
|
||||||
data[device.ain] = device
|
data[device.ain] = device
|
||||||
|
@ -70,14 +70,14 @@ async def test_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
|
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
@ -89,12 +89,12 @@ async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
|||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
|
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
@ -134,7 +134,7 @@ async def test_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
state = hass.states.get(ENTITY_ID)
|
state = hass.states.get(ENTITY_ID)
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert state
|
assert state
|
||||||
assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 19
|
assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 19
|
||||||
assert state.attributes[ATTR_TEMPERATURE] == 20
|
assert state.attributes[ATTR_TEMPERATURE] == 20
|
||||||
@ -143,19 +143,19 @@ async def test_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
||||||
"""Test update with error."""
|
"""Test update with error."""
|
||||||
device = FritzDeviceClimateMock()
|
device = FritzDeviceClimateMock()
|
||||||
device.update.side_effect = HTTPError("Boom")
|
fritz().update_devices.side_effect = HTTPError("Boom")
|
||||||
assert not await setup_config_entry(
|
assert not await setup_config_entry(
|
||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
|
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 2
|
assert fritz().login.call_count == 2
|
||||||
|
|
||||||
|
|
||||||
@ -299,7 +299,7 @@ async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
state = hass.states.get(ENTITY_ID)
|
state = hass.states.get(ENTITY_ID)
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert state
|
assert state
|
||||||
assert state.attributes[ATTR_PRESET_MODE] == PRESET_COMFORT
|
assert state.attributes[ATTR_PRESET_MODE] == PRESET_COMFORT
|
||||||
|
|
||||||
@ -310,6 +310,6 @@ async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
state = hass.states.get(ENTITY_ID)
|
state = hass.states.get(ENTITY_ID)
|
||||||
|
|
||||||
assert device.update.call_count == 3
|
assert fritz().update_devices.call_count == 3
|
||||||
assert state
|
assert state
|
||||||
assert state.attributes[ATTR_PRESET_MODE] == PRESET_ECO
|
assert state.attributes[ATTR_PRESET_MODE] == PRESET_ECO
|
||||||
|
@ -70,30 +70,30 @@ async def test_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
assert await setup_config_entry(
|
assert await setup_config_entry(
|
||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
||||||
"""Test update with error."""
|
"""Test update with error."""
|
||||||
device = FritzDeviceSensorMock()
|
device = FritzDeviceSensorMock()
|
||||||
device.update.side_effect = HTTPError("Boom")
|
fritz().update_devices.side_effect = HTTPError("Boom")
|
||||||
assert not await setup_config_entry(
|
assert not await setup_config_entry(
|
||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 2
|
assert fritz().login.call_count == 2
|
||||||
|
@ -114,32 +114,32 @@ async def test_update(hass: HomeAssistant, fritz: Mock):
|
|||||||
assert await setup_config_entry(
|
assert await setup_config_entry(
|
||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
async def test_update_error(hass: HomeAssistant, fritz: Mock):
|
||||||
"""Test update with error."""
|
"""Test update with error."""
|
||||||
device = FritzDeviceSwitchMock()
|
device = FritzDeviceSwitchMock()
|
||||||
device.update.side_effect = HTTPError("Boom")
|
fritz().update_devices.side_effect = HTTPError("Boom")
|
||||||
assert not await setup_config_entry(
|
assert not await setup_config_entry(
|
||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
assert device.update.call_count == 1
|
assert fritz().update_devices.call_count == 1
|
||||||
assert fritz().login.call_count == 1
|
assert fritz().login.call_count == 1
|
||||||
|
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert device.update.call_count == 2
|
assert fritz().update_devices.call_count == 2
|
||||||
assert fritz().login.call_count == 2
|
assert fritz().login.call_count == 2
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user