Skip to content

Commit dc5d159

Browse files
MartinHjelmarefrenck
authored andcommitted
Lower Z-Wave firmware check delay (home-assistant#150411)
1 parent 5fdd04b commit dc5d159

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

homeassistant/components/zwave_js/update.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
PARALLEL_UPDATES = 1
4444

4545
UPDATE_DELAY_STRING = "delay"
46-
UPDATE_DELAY_INTERVAL = 5 # In minutes
46+
UPDATE_DELAY_INTERVAL = 15 # In seconds
4747
ATTR_LATEST_VERSION_FIRMWARE = "latest_version_firmware"
4848

4949

@@ -130,11 +130,11 @@ async def async_setup_entry(
130130
@callback
131131
def async_add_firmware_update_entity(node: ZwaveNode) -> None:
132132
"""Add firmware update entity."""
133-
# We need to delay the first update of each entity to avoid flooding the network
134-
# so we maintain a counter to schedule first update in UPDATE_DELAY_INTERVAL
135-
# minute increments.
133+
# Delay the first update of each entity to avoid spamming the firmware server.
134+
# Maintain a counter to schedule first update in UPDATE_DELAY_INTERVAL
135+
# second increments.
136136
cnt[UPDATE_DELAY_STRING] += 1
137-
delay = timedelta(minutes=(cnt[UPDATE_DELAY_STRING] * UPDATE_DELAY_INTERVAL))
137+
delay = timedelta(seconds=(cnt[UPDATE_DELAY_STRING] * UPDATE_DELAY_INTERVAL))
138138
driver = client.driver
139139
assert driver is not None # Driver is ready before platforms are loaded.
140140
if node.is_controller_node:
@@ -429,7 +429,8 @@ async def async_added_to_hass(self) -> None:
429429
):
430430
self._attr_latest_version = self._attr_installed_version
431431

432-
# Spread updates out in 5 minute increments to avoid flooding the network
432+
# Spread updates out in 15 second increments
433+
# to avoid spamming the firmware server
433434
self.async_on_remove(
434435
async_call_later(self.hass, self._delay, self._async_update)
435436
)

tests/components/zwave_js/test_discovery.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,13 @@
2828
DynamicCurrentTempClimateDataTemplate,
2929
)
3030
from homeassistant.config_entries import RELOAD_AFTER_UPDATE_DELAY
31-
from homeassistant.const import ATTR_ENTITY_ID, STATE_OFF, STATE_UNKNOWN, EntityCategory
31+
from homeassistant.const import (
32+
ATTR_ENTITY_ID,
33+
STATE_OFF,
34+
STATE_UNKNOWN,
35+
EntityCategory,
36+
Platform,
37+
)
3238
from homeassistant.core import HomeAssistant
3339
from homeassistant.helpers import device_registry as dr, entity_registry as er
3440
from homeassistant.util import dt as dt_util
@@ -253,6 +259,7 @@ async def test_merten_507801_disabled_enitites(
253259
assert updated_entry.disabled is False
254260

255261

262+
@pytest.mark.parametrize("platforms", [[Platform.BUTTON, Platform.NUMBER]])
256263
async def test_zooz_zen72(
257264
hass: HomeAssistant,
258265
entity_registry: er.EntityRegistry,
@@ -324,6 +331,9 @@ async def test_zooz_zen72(
324331
assert args["value"] is True
325332

326333

334+
@pytest.mark.parametrize(
335+
"platforms", [[Platform.BINARY_SENSOR, Platform.SENSOR, Platform.SWITCH]]
336+
)
327337
async def test_indicator_test(
328338
hass: HomeAssistant,
329339
device_registry: dr.DeviceRegistry,

tests/components/zwave_js/test_update.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ async def test_update_entity_states(
167167

168168
client.async_send_command.return_value = {"updates": []}
169169

170-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
170+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
171171
await hass.async_block_till_done()
172172

173173
state = hass.states.get(entity_id)
@@ -186,7 +186,7 @@ async def test_update_entity_states(
186186

187187
client.async_send_command.return_value = FIRMWARE_UPDATES
188188

189-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=2))
189+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=2))
190190
await hass.async_block_till_done()
191191

192192
state = hass.states.get(entity_id)
@@ -224,7 +224,7 @@ async def test_update_entity_states(
224224

225225
client.async_send_command.return_value = {"updates": []}
226226

227-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=3))
227+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=3))
228228
await hass.async_block_till_done()
229229

230230
state = hass.states.get(entity_id)
@@ -246,7 +246,7 @@ async def test_update_entity_install_raises(
246246
"""Test update entity install raises exception."""
247247
client.async_send_command.return_value = FIRMWARE_UPDATES
248248

249-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
249+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
250250
await hass.async_block_till_done()
251251

252252
# Test failed installation by driver
@@ -279,7 +279,7 @@ async def test_update_entity_sleep(
279279

280280
client.async_send_command.return_value = FIRMWARE_UPDATES
281281

282-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
282+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
283283
await hass.async_block_till_done()
284284

285285
# Two nodes in total, the controller node and the zen_31 node.
@@ -324,7 +324,7 @@ async def test_update_entity_dead(
324324

325325
client.async_send_command.return_value = FIRMWARE_UPDATES
326326

327-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
327+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
328328
await hass.async_block_till_done()
329329

330330
# Two nodes in total, the controller node and the zen_31 node.
@@ -368,14 +368,14 @@ async def test_update_entity_ha_not_running(
368368
# Update should be delayed by a day because Home Assistant is not running
369369
hass.set_state(CoreState.starting)
370370

371-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5))
371+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15))
372372
await hass.async_block_till_done()
373373

374374
assert client.async_send_command.call_count == 0
375375

376376
hass.set_state(CoreState.running)
377377

378-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
378+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
379379
await hass.async_block_till_done()
380380

381381
# Two nodes in total, the controller node and the zen_31 node.
@@ -401,7 +401,7 @@ async def test_update_entity_update_failure(
401401
assert client.async_send_command.call_count == 0
402402
client.async_send_command.side_effect = FailedZWaveCommand("test", 260, "test")
403403

404-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
404+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
405405
await hass.async_block_till_done()
406406

407407
entity_ids = (CONTROLLER_UPDATE_ENTITY, NODE_UPDATE_ENTITY)
@@ -509,7 +509,7 @@ async def test_update_entity_progress(
509509
client.async_send_command.return_value = FIRMWARE_UPDATES
510510
driver = client.driver
511511

512-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
512+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
513513
await hass.async_block_till_done()
514514

515515
state = hass.states.get(entity_id)
@@ -657,7 +657,7 @@ async def test_update_entity_install_failed(
657657
driver = client.driver
658658
client.async_send_command.return_value = FIRMWARE_UPDATES
659659

660-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
660+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
661661
await hass.async_block_till_done()
662662

663663
state = hass.states.get(entity_id)
@@ -733,7 +733,7 @@ async def test_update_entity_reload(
733733

734734
client.async_send_command.return_value = {"updates": []}
735735

736-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
736+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
737737
await hass.async_block_till_done()
738738

739739
state = hass.states.get(entity_id)
@@ -742,7 +742,7 @@ async def test_update_entity_reload(
742742

743743
client.async_send_command.return_value = FIRMWARE_UPDATES
744744

745-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=2))
745+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=2))
746746
await hass.async_block_till_done()
747747

748748
state = hass.states.get(entity_id)
@@ -774,7 +774,7 @@ async def test_update_entity_reload(
774774
await hass.async_block_till_done()
775775

776776
# Trigger another update and make sure the skipped version is still skipped
777-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=4))
777+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=4))
778778
await hass.async_block_till_done()
779779

780780
state = hass.states.get(entity_id)
@@ -809,7 +809,7 @@ async def test_update_entity_delay(
809809

810810
assert client.async_send_command.call_count == 0
811811

812-
update_interval = timedelta(minutes=5)
812+
update_interval = timedelta(seconds=15)
813813
freezer.tick(update_interval)
814814
async_fire_time_changed(hass)
815815
await hass.async_block_till_done()

0 commit comments

Comments
 (0)