diff --git a/homeassistant/components/modbus/const.py b/homeassistant/components/modbus/const.py index dfec0dbb50a..cfda4a3863a 100644 --- a/homeassistant/components/modbus/const.py +++ b/homeassistant/components/modbus/const.py @@ -90,7 +90,6 @@ SERVICE_WRITE_REGISTER = "write_register" # integration names DEFAULT_HUB = "modbus_hub" -MINIMUM_SCAN_INTERVAL = 5 # seconds DEFAULT_SCAN_INTERVAL = 15 # seconds DEFAULT_SLAVE = 1 DEFAULT_STRUCTURE_PREFIX = ">f" diff --git a/homeassistant/components/modbus/validators.py b/homeassistant/components/modbus/validators.py index 0f376609de5..1b94010b5ef 100644 --- a/homeassistant/components/modbus/validators.py +++ b/homeassistant/components/modbus/validators.py @@ -26,7 +26,6 @@ from .const import ( DATA_TYPE_STRING, DEFAULT_SCAN_INTERVAL, DEFAULT_STRUCT_FORMAT, - MINIMUM_SCAN_INTERVAL, PLATFORMS, ) @@ -127,25 +126,28 @@ def scan_interval_validator(config: dict) -> dict: for entry in hub[conf_key]: scan_interval = entry.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL) - if scan_interval < MINIMUM_SCAN_INTERVAL: - if scan_interval == 0: - continue + if scan_interval == 0: + continue + if scan_interval < 5: _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, entry.get(CONF_NAME), scan_interval, - MINIMUM_SCAN_INTERVAL, ) - scan_interval = MINIMUM_SCAN_INTERVAL entry[CONF_SCAN_INTERVAL] = 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( "Modbus %s timeout(%d) is adjusted(%d) due to scan_interval", hub.get(CONF_NAME, ""), hub[CONF_TIMEOUT], minimum_scan_interval - 1, ) - hub[CONF_TIMEOUT] = minimum_scan_interval - 1 + hub[CONF_TIMEOUT] = minimum_scan_interval - 1 return config diff --git a/tests/components/modbus/test_init.py b/tests/components/modbus/test_init.py index 0e9bf43eec2..37cc8ae8766 100644 --- a/tests/components/modbus/test_init.py +++ b/tests/components/modbus/test_init.py @@ -457,9 +457,9 @@ async def mock_modbus_read_pymodbus( @pytest.mark.parametrize( "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_INPUT, 1], - [BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_DISCRETE, 1], + [SENSOR_DOMAIN, CONF_SENSORS, CALL_TYPE_REGISTER_HOLDING, 10], + [SENSOR_DOMAIN, CONF_SENSORS, CALL_TYPE_REGISTER_INPUT, 10], + [BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_DISCRETE, 10], [BINARY_SENSOR_DOMAIN, CONF_BINARY_SENSORS, CALL_TYPE_COIL, 1], ], )