Skip to content

Commit d135d08

Browse files
Lower Z-Wave firmware check delay (#150411)
1 parent 9595759 commit d135d08

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
@@ -42,7 +42,7 @@
4242
PARALLEL_UPDATES = 1
4343

4444
UPDATE_DELAY_STRING = "delay"
45-
UPDATE_DELAY_INTERVAL = 5 # In minutes
45+
UPDATE_DELAY_INTERVAL = 15 # In seconds
4646
ATTR_LATEST_VERSION_FIRMWARE = "latest_version_firmware"
4747

4848

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

416-
# Spread updates out in 5 minute increments to avoid flooding the network
416+
# Spread updates out in 15 second increments
417+
# to avoid spamming the firmware server
417418
self.async_on_remove(
418419
async_call_later(self.hass, self._delay, self._async_update)
419420
)

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.
@@ -308,7 +308,7 @@ async def test_update_entity_dead(
308308

309309
client.async_send_command.return_value = FIRMWARE_UPDATES
310310

311-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
311+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
312312
await hass.async_block_till_done()
313313

314314
# Two nodes in total, the controller node and the zen_31 node.
@@ -352,14 +352,14 @@ async def test_update_entity_ha_not_running(
352352
# Update should be delayed by a day because Home Assistant is not running
353353
hass.set_state(CoreState.starting)
354354

355-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5))
355+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15))
356356
await hass.async_block_till_done()
357357

358358
assert client.async_send_command.call_count == 0
359359

360360
hass.set_state(CoreState.running)
361361

362-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
362+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
363363
await hass.async_block_till_done()
364364

365365
# Two nodes in total, the controller node and the zen_31 node.
@@ -385,7 +385,7 @@ async def test_update_entity_update_failure(
385385
assert client.async_send_command.call_count == 0
386386
client.async_send_command.side_effect = FailedZWaveCommand("test", 260, "test")
387387

388-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
388+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
389389
await hass.async_block_till_done()
390390

391391
entity_ids = (CONTROLLER_UPDATE_ENTITY, NODE_UPDATE_ENTITY)
@@ -493,7 +493,7 @@ async def test_update_entity_progress(
493493
client.async_send_command.return_value = FIRMWARE_UPDATES
494494
driver = client.driver
495495

496-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
496+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
497497
await hass.async_block_till_done()
498498

499499
state = hass.states.get(entity_id)
@@ -641,7 +641,7 @@ async def test_update_entity_install_failed(
641641
driver = client.driver
642642
client.async_send_command.return_value = FIRMWARE_UPDATES
643643

644-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
644+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
645645
await hass.async_block_till_done()
646646

647647
state = hass.states.get(entity_id)
@@ -717,7 +717,7 @@ async def test_update_entity_reload(
717717

718718
client.async_send_command.return_value = {"updates": []}
719719

720-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=1))
720+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=1))
721721
await hass.async_block_till_done()
722722

723723
state = hass.states.get(entity_id)
@@ -726,7 +726,7 @@ async def test_update_entity_reload(
726726

727727
client.async_send_command.return_value = FIRMWARE_UPDATES
728728

729-
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5, days=2))
729+
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=15, days=2))
730730
await hass.async_block_till_done()
731731

732732
state = hass.states.get(entity_id)
@@ -758,7 +758,7 @@ async def test_update_entity_reload(
758758
await hass.async_block_till_done()
759759

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

764764
state = hass.states.get(entity_id)
@@ -793,7 +793,7 @@ async def test_update_entity_delay(
793793

794794
assert client.async_send_command.call_count == 0
795795

796-
update_interval = timedelta(minutes=5)
796+
update_interval = timedelta(seconds=15)
797797
freezer.tick(update_interval)
798798
async_fire_time_changed(hass)
799799
await hass.async_block_till_done()

0 commit comments

Comments
 (0)