diff --git a/homeassistant/helpers/significant_change.py b/homeassistant/helpers/significant_change.py index 589d792f1f8..9bda3ca4eb2 100644 --- a/homeassistant/helpers/significant_change.py +++ b/homeassistant/helpers/significant_change.py @@ -147,6 +147,15 @@ def check_percentage_change( return _check_numeric_change(old_state, new_state, change, percentage_change) +def check_valid_float(value: str | int | float) -> bool: + """Check if given value is a valid float.""" + try: + float(value) + except ValueError: + return False + return True + + class SignificantlyChangedChecker: """Class to keep track of entities to see if they have significantly changed. diff --git a/tests/helpers/test_significant_change.py b/tests/helpers/test_significant_change.py index c0d9f1b3a4a..6444781aa85 100644 --- a/tests/helpers/test_significant_change.py +++ b/tests/helpers/test_significant_change.py @@ -72,3 +72,14 @@ async def test_significant_change_extra(hass: HomeAssistant, checker) -> None: State(ent_id, "200", attrs), extra_arg=1 ) assert checker.async_is_significant_change(State(ent_id, "200", attrs), extra_arg=2) + + +async def test_check_valid_float(hass: HomeAssistant) -> None: + """Test extra significant checker works.""" + assert significant_change.check_valid_float("1") + assert significant_change.check_valid_float("1.0") + assert significant_change.check_valid_float(1) + assert significant_change.check_valid_float(1.0) + assert not significant_change.check_valid_float("") + assert not significant_change.check_valid_float("invalid") + assert not significant_change.check_valid_float("1.1.1")