mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +00:00
Warn if a sensor with state_class_total has a decreasing value twice (#55251)
This commit is contained in:
parent
96303a1d80
commit
0a07ff4d23
@ -108,6 +108,7 @@ UNIT_CONVERSIONS: dict[str, dict[str, Callable]] = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Keep track of entities for which a warning about decreasing value has been logged
|
# Keep track of entities for which a warning about decreasing value has been logged
|
||||||
|
SEEN_DIP = "sensor_seen_total_increasing_dip"
|
||||||
WARN_DIP = "sensor_warn_total_increasing_dip"
|
WARN_DIP = "sensor_warn_total_increasing_dip"
|
||||||
# Keep track of entities for which a warning about unsupported unit has been logged
|
# Keep track of entities for which a warning about unsupported unit has been logged
|
||||||
WARN_UNSUPPORTED_UNIT = "sensor_warn_unsupported_unit"
|
WARN_UNSUPPORTED_UNIT = "sensor_warn_unsupported_unit"
|
||||||
@ -233,7 +234,17 @@ def _normalize_states(
|
|||||||
|
|
||||||
|
|
||||||
def warn_dip(hass: HomeAssistant, entity_id: str) -> None:
|
def warn_dip(hass: HomeAssistant, entity_id: str) -> None:
|
||||||
"""Log a warning once if a sensor with state_class_total has a decreasing value."""
|
"""Log a warning once if a sensor with state_class_total has a decreasing value.
|
||||||
|
|
||||||
|
The log will be suppressed until two dips have been seen to prevent warning due to
|
||||||
|
rounding issues with databases storing the state as a single precision float, which
|
||||||
|
was fixed in recorder DB version 20.
|
||||||
|
"""
|
||||||
|
if SEEN_DIP not in hass.data:
|
||||||
|
hass.data[SEEN_DIP] = set()
|
||||||
|
if entity_id not in hass.data[SEEN_DIP]:
|
||||||
|
hass.data[SEEN_DIP].add(entity_id)
|
||||||
|
return
|
||||||
if WARN_DIP not in hass.data:
|
if WARN_DIP not in hass.data:
|
||||||
hass.data[WARN_DIP] = set()
|
hass.data[WARN_DIP] = set()
|
||||||
if entity_id not in hass.data[WARN_DIP]:
|
if entity_id not in hass.data[WARN_DIP]:
|
||||||
|
@ -371,7 +371,7 @@ def test_compile_hourly_sum_statistics_total_increasing_small_dip(
|
|||||||
"state_class": "total_increasing",
|
"state_class": "total_increasing",
|
||||||
"unit_of_measurement": unit,
|
"unit_of_measurement": unit,
|
||||||
}
|
}
|
||||||
seq = [10, 15, 20, 19, 30, 40, 50, 60, 70]
|
seq = [10, 15, 20, 19, 30, 40, 39, 60, 70]
|
||||||
|
|
||||||
four, eight, states = record_meter_states(
|
four, eight, states = record_meter_states(
|
||||||
hass, zero, "sensor.test1", attributes, seq
|
hass, zero, "sensor.test1", attributes, seq
|
||||||
@ -385,8 +385,20 @@ def test_compile_hourly_sum_statistics_total_increasing_small_dip(
|
|||||||
wait_recording_done(hass)
|
wait_recording_done(hass)
|
||||||
recorder.do_adhoc_statistics(period="hourly", start=zero + timedelta(hours=1))
|
recorder.do_adhoc_statistics(period="hourly", start=zero + timedelta(hours=1))
|
||||||
wait_recording_done(hass)
|
wait_recording_done(hass)
|
||||||
|
assert (
|
||||||
|
"Entity sensor.test1 has state class total_increasing, but its state is not "
|
||||||
|
"strictly increasing. Please create a bug report at https://github.com/"
|
||||||
|
"home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A"
|
||||||
|
"+recorder%22"
|
||||||
|
) not in caplog.text
|
||||||
recorder.do_adhoc_statistics(period="hourly", start=zero + timedelta(hours=2))
|
recorder.do_adhoc_statistics(period="hourly", start=zero + timedelta(hours=2))
|
||||||
wait_recording_done(hass)
|
wait_recording_done(hass)
|
||||||
|
assert (
|
||||||
|
"Entity sensor.test1 has state class total_increasing, but its state is not "
|
||||||
|
"strictly increasing. Please create a bug report at https://github.com/"
|
||||||
|
"home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A"
|
||||||
|
"+recorder%22"
|
||||||
|
) in caplog.text
|
||||||
statistic_ids = list_statistic_ids(hass)
|
statistic_ids = list_statistic_ids(hass)
|
||||||
assert statistic_ids == [
|
assert statistic_ids == [
|
||||||
{"statistic_id": "sensor.test1", "unit_of_measurement": native_unit}
|
{"statistic_id": "sensor.test1", "unit_of_measurement": native_unit}
|
||||||
@ -427,12 +439,6 @@ def test_compile_hourly_sum_statistics_total_increasing_small_dip(
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
assert "Error while processing event StatisticsTask" not in caplog.text
|
assert "Error while processing event StatisticsTask" not in caplog.text
|
||||||
assert (
|
|
||||||
"Entity sensor.test1 has state class total_increasing, but its state is not "
|
|
||||||
"strictly increasing. Please create a bug report at https://github.com/"
|
|
||||||
"home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A"
|
|
||||||
"+recorder%22"
|
|
||||||
) in caplog.text
|
|
||||||
|
|
||||||
|
|
||||||
def test_compile_hourly_energy_statistics_unsupported(hass_recorder, caplog):
|
def test_compile_hourly_energy_statistics_unsupported(hass_recorder, caplog):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user