mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Allow unlimited scan_interval in modbus (#51471)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
This commit is contained in:
parent
e41e153220
commit
5e067c2631
@ -90,7 +90,6 @@ SERVICE_WRITE_REGISTER = "write_register"
|
|||||||
|
|
||||||
# integration names
|
# integration names
|
||||||
DEFAULT_HUB = "modbus_hub"
|
DEFAULT_HUB = "modbus_hub"
|
||||||
MINIMUM_SCAN_INTERVAL = 5 # seconds
|
|
||||||
DEFAULT_SCAN_INTERVAL = 15 # seconds
|
DEFAULT_SCAN_INTERVAL = 15 # seconds
|
||||||
DEFAULT_SLAVE = 1
|
DEFAULT_SLAVE = 1
|
||||||
DEFAULT_STRUCTURE_PREFIX = ">f"
|
DEFAULT_STRUCTURE_PREFIX = ">f"
|
||||||
|
@ -26,7 +26,6 @@ from .const import (
|
|||||||
DATA_TYPE_STRING,
|
DATA_TYPE_STRING,
|
||||||
DEFAULT_SCAN_INTERVAL,
|
DEFAULT_SCAN_INTERVAL,
|
||||||
DEFAULT_STRUCT_FORMAT,
|
DEFAULT_STRUCT_FORMAT,
|
||||||
MINIMUM_SCAN_INTERVAL,
|
|
||||||
PLATFORMS,
|
PLATFORMS,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -127,25 +126,28 @@ def scan_interval_validator(config: dict) -> dict:
|
|||||||
|
|
||||||
for entry in hub[conf_key]:
|
for entry in hub[conf_key]:
|
||||||
scan_interval = entry.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
|
scan_interval = entry.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
|
||||||
if scan_interval < MINIMUM_SCAN_INTERVAL:
|
if scan_interval == 0:
|
||||||
if scan_interval == 0:
|
continue
|
||||||
continue
|
if scan_interval < 5:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"%s %s scan_interval(%d) is adjusted to minimum(%d)",
|
"%s %s scan_interval(%d) is lower than 5 seconds, "
|
||||||
|
"which may cause Home Assistant stability issues",
|
||||||
component,
|
component,
|
||||||
entry.get(CONF_NAME),
|
entry.get(CONF_NAME),
|
||||||
scan_interval,
|
scan_interval,
|
||||||
MINIMUM_SCAN_INTERVAL,
|
|
||||||
)
|
)
|
||||||
scan_interval = MINIMUM_SCAN_INTERVAL
|
|
||||||
entry[CONF_SCAN_INTERVAL] = scan_interval
|
entry[CONF_SCAN_INTERVAL] = scan_interval
|
||||||
minimum_scan_interval = min(scan_interval, minimum_scan_interval)
|
minimum_scan_interval = min(scan_interval, minimum_scan_interval)
|
||||||
if CONF_TIMEOUT in hub and hub[CONF_TIMEOUT] > minimum_scan_interval - 1:
|
if (
|
||||||
|
CONF_TIMEOUT in hub
|
||||||
|
and hub[CONF_TIMEOUT] > minimum_scan_interval - 1
|
||||||
|
and minimum_scan_interval > 1
|
||||||
|
):
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"Modbus %s timeout(%d) is adjusted(%d) due to scan_interval",
|
"Modbus %s timeout(%d) is adjusted(%d) due to scan_interval",
|
||||||
hub.get(CONF_NAME, ""),
|
hub.get(CONF_NAME, ""),
|
||||||
hub[CONF_TIMEOUT],
|
hub[CONF_TIMEOUT],
|
||||||
minimum_scan_interval - 1,
|
minimum_scan_interval - 1,
|
||||||
)
|
)
|
||||||
hub[CONF_TIMEOUT] = minimum_scan_interval - 1
|
hub[CONF_TIMEOUT] = minimum_scan_interval - 1
|
||||||
return config
|
return config
|
||||||
|
@ -457,9 +457,9 @@ async def mock_modbus_read_pymodbus(
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"do_domain, do_group,do_type,do_scan_interval",
|
"do_domain, do_group,do_type,do_scan_interval",
|
||||||
[
|
[
|
||||||
[SENSOR_DOMAIN, CONF_SENSORS, CALL_TYPE_REGISTER_HOLDING, 1],
|
[SENSOR_DOMAIN, CONF_SENSORS, CALL_TYPE_REGISTER_HOLDING, 10],
|
||||||
[SENSOR_DOMAIN, CONF_SENSORS, CALL_TYPE_REGISTER_INPUT, 1],
|
[SENSOR_DOMAIN, CONF_SENSORS, CALL_TYPE_REGISTER_INPUT, 10],
|
||||||
[BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_DISCRETE, 1],
|
[BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_DISCRETE, 10],
|
||||||
[BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_COIL, 1],
|
[BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_COIL, 1],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user