Skip to content

Commit

Permalink
Fast retry on read errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
janiversen committed Sep 4, 2023
1 parent fa0b61e commit 20dd816
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 10 deletions.
2 changes: 1 addition & 1 deletion homeassistant/components/modbus/base_platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ async def async_update(self, now: datetime | None = None) -> None:
def async_run(self) -> None:
"""Remote start entity."""
self.async_hold(update=False)
self._cancel_call = async_call_later(self.hass, 1, self.async_update)
async_call_later(self.hass, timedelta(milliseconds=100), self.async_update)
if self._scan_interval > 0:
self._cancel_timer = async_track_time_interval(
self.hass, self.async_update, timedelta(seconds=self._scan_interval)
Expand Down
4 changes: 3 additions & 1 deletion homeassistant/components/modbus/sensor.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Support for Modbus Register sensors."""
from __future__ import annotations

from datetime import datetime
from datetime import datetime, timedelta
import logging
from typing import Any

Expand All @@ -19,6 +19,7 @@
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.event import async_call_later
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
Expand Down Expand Up @@ -112,6 +113,7 @@ async def async_update(self, now: datetime | None = None) -> None:
if raw_result is None:
if self._lazy_errors:
self._lazy_errors -= 1
async_call_later(self.hass, timedelta(seconds=1), self.async_update)
return
self._lazy_errors = self._lazy_error_count
self._attr_available = False
Expand Down
12 changes: 4 additions & 8 deletions tests/components/modbus/test_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -914,27 +914,23 @@ async def test_wrong_unpack(hass: HomeAssistant, mock_do_cycle) -> None:
],
)
@pytest.mark.parametrize(
("register_words", "do_exception", "start_expect", "end_expect"),
("register_words", "do_exception"),
[
(
[0x8000],
True,
"17",
STATE_UNAVAILABLE,
),
],
)
async def test_lazy_error_sensor(
hass: HomeAssistant, mock_do_cycle: FrozenDateTimeFactory, start_expect, end_expect
hass: HomeAssistant, mock_do_cycle: FrozenDateTimeFactory
) -> None:
"""Run test for sensor."""
hass.states.async_set(ENTITY_ID, 17)
await hass.async_block_till_done()
assert hass.states.get(ENTITY_ID).state == start_expect
assert hass.states.get(ENTITY_ID).state == "17"
await do_next_cycle(hass, mock_do_cycle, 5)
assert hass.states.get(ENTITY_ID).state == start_expect
await do_next_cycle(hass, mock_do_cycle, 11)
assert hass.states.get(ENTITY_ID).state == end_expect
assert hass.states.get(ENTITY_ID).state == STATE_UNAVAILABLE


@pytest.mark.parametrize(
Expand Down

0 comments on commit 20dd816

Please sign in to comment.