mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Fix dsmr zero reconnect interval option could crash HA (#104900)
* Fix dsmr zero interval option could crash HA * No change change the options
This commit is contained in:
parent
559e8dfc69
commit
5106dd173c
@ -12,7 +12,6 @@ LOGGER = logging.getLogger(__package__)
|
|||||||
PLATFORMS = [Platform.SENSOR]
|
PLATFORMS = [Platform.SENSOR]
|
||||||
CONF_DSMR_VERSION = "dsmr_version"
|
CONF_DSMR_VERSION = "dsmr_version"
|
||||||
CONF_PROTOCOL = "protocol"
|
CONF_PROTOCOL = "protocol"
|
||||||
CONF_RECONNECT_INTERVAL = "reconnect_interval"
|
|
||||||
CONF_PRECISION = "precision"
|
CONF_PRECISION = "precision"
|
||||||
CONF_TIME_BETWEEN_UPDATE = "time_between_update"
|
CONF_TIME_BETWEEN_UPDATE = "time_between_update"
|
||||||
|
|
||||||
|
@ -48,7 +48,6 @@ from .const import (
|
|||||||
CONF_DSMR_VERSION,
|
CONF_DSMR_VERSION,
|
||||||
CONF_PRECISION,
|
CONF_PRECISION,
|
||||||
CONF_PROTOCOL,
|
CONF_PROTOCOL,
|
||||||
CONF_RECONNECT_INTERVAL,
|
|
||||||
CONF_SERIAL_ID,
|
CONF_SERIAL_ID,
|
||||||
CONF_SERIAL_ID_GAS,
|
CONF_SERIAL_ID_GAS,
|
||||||
CONF_TIME_BETWEEN_UPDATE,
|
CONF_TIME_BETWEEN_UPDATE,
|
||||||
@ -647,9 +646,7 @@ async def async_setup_entry(
|
|||||||
update_entities_telegram(None)
|
update_entities_telegram(None)
|
||||||
|
|
||||||
# throttle reconnect attempts
|
# throttle reconnect attempts
|
||||||
await asyncio.sleep(
|
await asyncio.sleep(DEFAULT_RECONNECT_INTERVAL)
|
||||||
entry.data.get(CONF_RECONNECT_INTERVAL, DEFAULT_RECONNECT_INTERVAL)
|
|
||||||
)
|
|
||||||
|
|
||||||
except (serial.serialutil.SerialException, OSError):
|
except (serial.serialutil.SerialException, OSError):
|
||||||
# Log any error while establishing connection and drop to retry
|
# Log any error while establishing connection and drop to retry
|
||||||
@ -663,9 +660,7 @@ async def async_setup_entry(
|
|||||||
update_entities_telegram(None)
|
update_entities_telegram(None)
|
||||||
|
|
||||||
# throttle reconnect attempts
|
# throttle reconnect attempts
|
||||||
await asyncio.sleep(
|
await asyncio.sleep(DEFAULT_RECONNECT_INTERVAL)
|
||||||
entry.data.get(CONF_RECONNECT_INTERVAL, DEFAULT_RECONNECT_INTERVAL)
|
|
||||||
)
|
|
||||||
except CancelledError:
|
except CancelledError:
|
||||||
# Reflect disconnect state in devices state by setting an
|
# Reflect disconnect state in devices state by setting an
|
||||||
# None telegram resulting in `unavailable` states
|
# None telegram resulting in `unavailable` states
|
||||||
|
@ -475,7 +475,6 @@ async def test_options_flow(hass: HomeAssistant) -> None:
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
|
@ -99,7 +99,6 @@ async def test_migrate_unique_id(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": dsmr_version,
|
"dsmr_version": dsmr_version,
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
},
|
},
|
||||||
|
@ -30,7 +30,6 @@ async def test_migrate_gas_to_mbus(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5B",
|
"dsmr_version": "5B",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "37464C4F32313139303333373331",
|
"serial_id_gas": "37464C4F32313139303333373331",
|
||||||
},
|
},
|
||||||
@ -128,7 +127,6 @@ async def test_migrate_gas_to_mbus_exists(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5B",
|
"dsmr_version": "5B",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "37464C4F32313139303333373331",
|
"serial_id_gas": "37464C4F32313139303333373331",
|
||||||
},
|
},
|
||||||
|
@ -52,7 +52,6 @@ async def test_default_setup(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -190,7 +189,6 @@ async def test_setup_only_energy(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
}
|
}
|
||||||
entry_options = {
|
entry_options = {
|
||||||
@ -246,7 +244,6 @@ async def test_v4_meter(hass: HomeAssistant, dsmr_connection_fixture) -> None:
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "4",
|
"dsmr_version": "4",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -335,7 +332,6 @@ async def test_v5_meter(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5",
|
"dsmr_version": "5",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -411,7 +407,6 @@ async def test_luxembourg_meter(hass: HomeAssistant, dsmr_connection_fixture) ->
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5L",
|
"dsmr_version": "5L",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -515,7 +510,6 @@ async def test_belgian_meter(hass: HomeAssistant, dsmr_connection_fixture) -> No
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5B",
|
"dsmr_version": "5B",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": None,
|
"serial_id_gas": None,
|
||||||
}
|
}
|
||||||
@ -717,7 +711,6 @@ async def test_belgian_meter_alt(hass: HomeAssistant, dsmr_connection_fixture) -
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5B",
|
"dsmr_version": "5B",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": None,
|
"serial_id_gas": None,
|
||||||
}
|
}
|
||||||
@ -880,7 +873,6 @@ async def test_belgian_meter_mbus(hass: HomeAssistant, dsmr_connection_fixture)
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5B",
|
"dsmr_version": "5B",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": None,
|
"serial_id_gas": None,
|
||||||
}
|
}
|
||||||
@ -992,7 +984,6 @@ async def test_belgian_meter_low(hass: HomeAssistant, dsmr_connection_fixture) -
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5B",
|
"dsmr_version": "5B",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -1047,7 +1038,6 @@ async def test_swedish_meter(hass: HomeAssistant, dsmr_connection_fixture) -> No
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "5S",
|
"dsmr_version": "5S",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": None,
|
"serial_id": None,
|
||||||
"serial_id_gas": None,
|
"serial_id_gas": None,
|
||||||
}
|
}
|
||||||
@ -1122,7 +1112,6 @@ async def test_easymeter(hass: HomeAssistant, dsmr_connection_fixture) -> None:
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "Q3D",
|
"dsmr_version": "Q3D",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": None,
|
"serial_id": None,
|
||||||
"serial_id_gas": None,
|
"serial_id_gas": None,
|
||||||
}
|
}
|
||||||
@ -1196,7 +1185,6 @@ async def test_tcp(hass: HomeAssistant, dsmr_connection_fixture) -> None:
|
|||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"protocol": "dsmr_protocol",
|
"protocol": "dsmr_protocol",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -1224,7 +1212,6 @@ async def test_rfxtrx_tcp(hass: HomeAssistant, rfxtrx_dsmr_connection_fixture) -
|
|||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"protocol": "rfxtrx_dsmr_protocol",
|
"protocol": "rfxtrx_dsmr_protocol",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -1242,6 +1229,7 @@ async def test_rfxtrx_tcp(hass: HomeAssistant, rfxtrx_dsmr_connection_fixture) -
|
|||||||
assert connection_factory.call_args_list[0][0][1] == "1234"
|
assert connection_factory.call_args_list[0][0][1] == "1234"
|
||||||
|
|
||||||
|
|
||||||
|
@patch("homeassistant.components.dsmr.sensor.DEFAULT_RECONNECT_INTERVAL", 0)
|
||||||
async def test_connection_errors_retry(
|
async def test_connection_errors_retry(
|
||||||
hass: HomeAssistant, dsmr_connection_fixture
|
hass: HomeAssistant, dsmr_connection_fixture
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -1252,7 +1240,6 @@ async def test_connection_errors_retry(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 0,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -1281,6 +1268,7 @@ async def test_connection_errors_retry(
|
|||||||
assert first_fail_connection_factory.call_count >= 2, "connecting not retried"
|
assert first_fail_connection_factory.call_count >= 2, "connecting not retried"
|
||||||
|
|
||||||
|
|
||||||
|
@patch("homeassistant.components.dsmr.sensor.DEFAULT_RECONNECT_INTERVAL", 0)
|
||||||
async def test_reconnect(hass: HomeAssistant, dsmr_connection_fixture) -> None:
|
async def test_reconnect(hass: HomeAssistant, dsmr_connection_fixture) -> None:
|
||||||
"""If transport disconnects, the connection should be retried."""
|
"""If transport disconnects, the connection should be retried."""
|
||||||
from dsmr_parser.obis_references import (
|
from dsmr_parser.obis_references import (
|
||||||
@ -1295,7 +1283,6 @@ async def test_reconnect(hass: HomeAssistant, dsmr_connection_fixture) -> None:
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 0,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
@ -1378,7 +1365,6 @@ async def test_gas_meter_providing_energy_reading(
|
|||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"dsmr_version": "2.2",
|
"dsmr_version": "2.2",
|
||||||
"precision": 4,
|
"precision": 4,
|
||||||
"reconnect_interval": 30,
|
|
||||||
"serial_id": "1234",
|
"serial_id": "1234",
|
||||||
"serial_id_gas": "5678",
|
"serial_id_gas": "5678",
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user