1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 12:59:34 +00:00

Allow selecting display unit when fetching statistics (#78578)

This commit is contained in:
Erik Montnemery
2022-09-20 23:43:57 +02:00
committed by GitHub
parent 3f512e38db
commit dae00c70de
8 changed files with 1231 additions and 241 deletions

View File

@@ -76,20 +76,20 @@ def set_time_zone():
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,mean,min,max",
"device_class, state_unit, display_unit, statistics_unit, unit_class, mean, min, max",
[
(None, "%", "%", "%", 13.050847, -10, 30),
("battery", "%", "%", "%", 13.050847, -10, 30),
("battery", None, None, None, 13.050847, -10, 30),
("humidity", "%", "%", "%", 13.050847, -10, 30),
("humidity", None, None, None, 13.050847, -10, 30),
("pressure", "Pa", "Pa", "Pa", 13.050847, -10, 30),
("pressure", "hPa", "hPa", "Pa", 13.050847, -10, 30),
("pressure", "mbar", "mbar", "Pa", 13.050847, -10, 30),
("pressure", "inHg", "inHg", "Pa", 13.050847, -10, 30),
("pressure", "psi", "psi", "Pa", 13.050847, -10, 30),
("temperature", "°C", "°C", "°C", 13.050847, -10, 30),
("temperature", "°F", "°F", "°C", 13.050847, -10, 30),
(None, "%", "%", "%", None, 13.050847, -10, 30),
("battery", "%", "%", "%", None, 13.050847, -10, 30),
("battery", None, None, None, None, 13.050847, -10, 30),
("humidity", "%", "%", "%", None, 13.050847, -10, 30),
("humidity", None, None, None, None, 13.050847, -10, 30),
("pressure", "Pa", "Pa", "Pa", "pressure", 13.050847, -10, 30),
("pressure", "hPa", "hPa", "Pa", "pressure", 13.050847, -10, 30),
("pressure", "mbar", "mbar", "Pa", "pressure", 13.050847, -10, 30),
("pressure", "inHg", "inHg", "Pa", "pressure", 13.050847, -10, 30),
("pressure", "psi", "psi", "Pa", "pressure", 13.050847, -10, 30),
("temperature", "°C", "°C", "°C", "temperature", 13.050847, -10, 30),
("temperature", "°F", "°F", "°C", "temperature", 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics(
@@ -99,6 +99,7 @@ def test_compile_hourly_statistics(
state_unit,
display_unit,
statistics_unit,
unit_class,
mean,
min,
max,
@@ -129,6 +130,7 @@ def test_compile_hourly_statistics(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -151,13 +153,19 @@ def test_compile_hourly_statistics(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit",
"device_class, state_unit, display_unit, statistics_unit, unit_class",
[
(None, "%", "%", "%"),
(None, "%", "%", "%", None),
],
)
def test_compile_hourly_statistics_purged_state_changes(
hass_recorder, caplog, device_class, state_unit, display_unit, statistics_unit
hass_recorder,
caplog,
device_class,
state_unit,
display_unit,
statistics_unit,
unit_class,
):
"""Test compiling hourly statistics."""
zero = dt_util.utcnow()
@@ -197,6 +205,7 @@ def test_compile_hourly_statistics_purged_state_changes(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -266,6 +275,7 @@ def test_compile_hourly_statistics_unsupported(hass_recorder, caplog, attributes
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "°C",
"unit_class": "temperature",
},
{
"statistic_id": "sensor.test6",
@@ -275,6 +285,7 @@ def test_compile_hourly_statistics_unsupported(hass_recorder, caplog, attributes
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "°C",
"unit_class": "temperature",
},
{
"statistic_id": "sensor.test7",
@@ -284,6 +295,7 @@ def test_compile_hourly_statistics_unsupported(hass_recorder, caplog, attributes
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "°C",
"unit_class": "temperature",
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -333,20 +345,20 @@ def test_compile_hourly_statistics_unsupported(hass_recorder, caplog, attributes
@pytest.mark.parametrize("state_class", ["total"])
@pytest.mark.parametrize(
"units,device_class,state_unit,display_unit,statistics_unit,factor",
"units, device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
(IMPERIAL_SYSTEM, "energy", "kWh", "kWh", "kWh", 1),
(IMPERIAL_SYSTEM, "energy", "Wh", "kWh", "kWh", 1 / 1000),
(IMPERIAL_SYSTEM, "monetary", "EUR", "EUR", "EUR", 1),
(IMPERIAL_SYSTEM, "monetary", "SEK", "SEK", "SEK", 1),
(IMPERIAL_SYSTEM, "gas", "", "ft³", "", 35.314666711),
(IMPERIAL_SYSTEM, "gas", "ft³", "ft³", "", 1),
(METRIC_SYSTEM, "energy", "kWh", "kWh", "kWh", 1),
(METRIC_SYSTEM, "energy", "Wh", "kWh", "kWh", 1 / 1000),
(METRIC_SYSTEM, "monetary", "EUR", "EUR", "EUR", 1),
(METRIC_SYSTEM, "monetary", "SEK", "SEK", "SEK", 1),
(METRIC_SYSTEM, "gas", "", "", "", 1),
(METRIC_SYSTEM, "gas", "ft³", "m³", "", 0.0283168466),
(IMPERIAL_SYSTEM, "energy", "kWh", "kWh", "kWh", "energy", 1),
(IMPERIAL_SYSTEM, "energy", "Wh", "Wh", "kWh", "energy", 1),
(IMPERIAL_SYSTEM, "monetary", "EUR", "EUR", "EUR", None, 1),
(IMPERIAL_SYSTEM, "monetary", "SEK", "SEK", "SEK", None, 1),
(IMPERIAL_SYSTEM, "gas", "", "m³", "", "volume", 1),
(IMPERIAL_SYSTEM, "gas", "ft³", "ft³", "", "volume", 1),
(METRIC_SYSTEM, "energy", "kWh", "kWh", "kWh", "energy", 1),
(METRIC_SYSTEM, "energy", "Wh", "Wh", "kWh", "energy", 1),
(METRIC_SYSTEM, "monetary", "EUR", "EUR", "EUR", None, 1),
(METRIC_SYSTEM, "monetary", "SEK", "SEK", "SEK", None, 1),
(METRIC_SYSTEM, "gas", "", "", "", "volume", 1),
(METRIC_SYSTEM, "gas", "ft³", "ft³", "", "volume", 1),
],
)
async def test_compile_hourly_sum_statistics_amount(
@@ -360,6 +372,7 @@ async def test_compile_hourly_sum_statistics_amount(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics."""
@@ -405,6 +418,7 @@ async def test_compile_hourly_sum_statistics_amount(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, period0, period="5minute")
@@ -478,6 +492,7 @@ async def test_compile_hourly_sum_statistics_amount(
"statistic_id": "sensor.test1",
"start_time": period1.isoformat(),
"adjustment": 100.0,
"display_unit": display_unit,
}
)
response = await client.receive_json()
@@ -497,6 +512,7 @@ async def test_compile_hourly_sum_statistics_amount(
"statistic_id": "sensor.test1",
"start_time": period2.isoformat(),
"adjustment": -400.0,
"display_unit": display_unit,
}
)
response = await client.receive_json()
@@ -511,14 +527,14 @@ async def test_compile_hourly_sum_statistics_amount(
@pytest.mark.parametrize("state_class", ["total"])
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
("energy", "kWh", "kWh", "kWh", 1),
("energy", "Wh", "kWh", "kWh", 1 / 1000),
("monetary", "EUR", "EUR", "EUR", 1),
("monetary", "SEK", "SEK", "SEK", 1),
("gas", "", "", "", 1),
("gas", "ft³", "m³", "", 0.0283168466),
("energy", "kWh", "kWh", "kWh", "energy", 1),
("energy", "Wh", "Wh", "kWh", "energy", 1),
("monetary", "EUR", "EUR", "EUR", None, 1),
("monetary", "SEK", "SEK", "SEK", None, 1),
("gas", "", "", "", "volume", 1),
("gas", "ft³", "ft³", "", "volume", 1),
],
)
def test_compile_hourly_sum_statistics_amount_reset_every_state_change(
@@ -529,6 +545,7 @@ def test_compile_hourly_sum_statistics_amount_reset_every_state_change(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics."""
@@ -594,6 +611,7 @@ def test_compile_hourly_sum_statistics_amount_reset_every_state_change(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -630,9 +648,9 @@ def test_compile_hourly_sum_statistics_amount_reset_every_state_change(
@pytest.mark.parametrize("state_class", ["total"])
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
("energy", "kWh", "kWh", "kWh", 1),
("energy", "kWh", "kWh", "kWh", "energy", 1),
],
)
def test_compile_hourly_sum_statistics_amount_invalid_last_reset(
@@ -643,6 +661,7 @@ def test_compile_hourly_sum_statistics_amount_invalid_last_reset(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics."""
@@ -693,6 +712,7 @@ def test_compile_hourly_sum_statistics_amount_invalid_last_reset(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -717,9 +737,9 @@ def test_compile_hourly_sum_statistics_amount_invalid_last_reset(
@pytest.mark.parametrize("state_class", ["total"])
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
("energy", "kWh", "kWh", "kWh", 1),
("energy", "kWh", "kWh", "kWh", "energy", 1),
],
)
def test_compile_hourly_sum_statistics_nan_inf_state(
@@ -730,6 +750,7 @@ def test_compile_hourly_sum_statistics_nan_inf_state(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics with nan and inf states."""
@@ -776,6 +797,7 @@ def test_compile_hourly_sum_statistics_nan_inf_state(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -819,9 +841,9 @@ def test_compile_hourly_sum_statistics_nan_inf_state(
)
@pytest.mark.parametrize("state_class", ["total_increasing"])
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
("energy", "kWh", "kWh", "kWh", 1),
("energy", "kWh", "kWh", "kWh", "energy", 1),
],
)
def test_compile_hourly_sum_statistics_negative_state(
@@ -835,6 +857,7 @@ def test_compile_hourly_sum_statistics_negative_state(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics with negative states."""
@@ -889,6 +912,7 @@ def test_compile_hourly_sum_statistics_negative_state(
"source": "recorder",
"statistic_id": entity_id,
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
} in statistic_ids
stats = statistics_during_period(hass, zero, period="5minute")
assert stats[entity_id] == [
@@ -916,14 +940,14 @@ def test_compile_hourly_sum_statistics_negative_state(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
("energy", "kWh", "kWh", "kWh", 1),
("energy", "Wh", "kWh", "kWh", 1 / 1000),
("monetary", "EUR", "EUR", "EUR", 1),
("monetary", "SEK", "SEK", "SEK", 1),
("gas", "", "", "", 1),
("gas", "ft³", "m³", "", 0.0283168466),
("energy", "kWh", "kWh", "kWh", "energy", 1),
("energy", "Wh", "Wh", "kWh", "energy", 1),
("monetary", "EUR", "EUR", "EUR", None, 1),
("monetary", "SEK", "SEK", "SEK", None, 1),
("gas", "", "", "", "volume", 1),
("gas", "ft³", "ft³", "", "volume", 1),
],
)
def test_compile_hourly_sum_statistics_total_no_reset(
@@ -933,6 +957,7 @@ def test_compile_hourly_sum_statistics_total_no_reset(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics."""
@@ -975,6 +1000,7 @@ def test_compile_hourly_sum_statistics_total_no_reset(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, period0, period="5minute")
@@ -1019,12 +1045,12 @@ def test_compile_hourly_sum_statistics_total_no_reset(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[
("energy", "kWh", "kWh", "kWh", 1),
("energy", "Wh", "kWh", "kWh", 1 / 1000),
("gas", "", "", "", 1),
("gas", "ft³", "m³", "", 0.0283168466),
("energy", "kWh", "kWh", "kWh", "energy", 1),
("energy", "Wh", "Wh", "kWh", "energy", 1),
("gas", "", "", "", "volume", 1),
("gas", "ft³", "ft³", "", "volume", 1),
],
)
def test_compile_hourly_sum_statistics_total_increasing(
@@ -1034,6 +1060,7 @@ def test_compile_hourly_sum_statistics_total_increasing(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test compiling hourly statistics."""
@@ -1076,6 +1103,7 @@ def test_compile_hourly_sum_statistics_total_increasing(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, period0, period="5minute")
@@ -1123,8 +1151,8 @@ def test_compile_hourly_sum_statistics_total_increasing(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,factor",
[("energy", "kWh", "kWh", "kWh", 1)],
"device_class, state_unit, display_unit, statistics_unit, unit_class, factor",
[("energy", "kWh", "kWh", "kWh", "energy", 1)],
)
def test_compile_hourly_sum_statistics_total_increasing_small_dip(
hass_recorder,
@@ -1133,6 +1161,7 @@ def test_compile_hourly_sum_statistics_total_increasing_small_dip(
state_unit,
display_unit,
statistics_unit,
unit_class,
factor,
):
"""Test small dips in sensor readings do not trigger a reset."""
@@ -1188,6 +1217,7 @@ def test_compile_hourly_sum_statistics_total_increasing_small_dip(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
stats = statistics_during_period(hass, period0, period="5minute")
@@ -1282,6 +1312,7 @@ def test_compile_hourly_energy_statistics_unsupported(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "kWh",
"unit_class": "energy",
}
]
stats = statistics_during_period(hass, period0, period="5minute")
@@ -1374,6 +1405,7 @@ def test_compile_hourly_energy_statistics_multiple(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "kWh",
"unit_class": "energy",
},
{
"statistic_id": "sensor.test2",
@@ -1383,15 +1415,17 @@ def test_compile_hourly_energy_statistics_multiple(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "kWh",
"unit_class": "energy",
},
{
"statistic_id": "sensor.test3",
"display_unit_of_measurement": "kWh",
"display_unit_of_measurement": "Wh",
"has_mean": False,
"has_sum": True,
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "kWh",
"unit_class": "energy",
},
]
stats = statistics_during_period(hass, period0, period="5minute")
@@ -1475,8 +1509,8 @@ def test_compile_hourly_energy_statistics_multiple(hass_recorder, caplog):
"mean": None,
"min": None,
"last_reset": process_timestamp_to_utc_isoformat(period0),
"state": approx(5.0 / 1000),
"sum": approx(5.0 / 1000),
"state": approx(5.0),
"sum": approx(5.0),
},
{
"statistic_id": "sensor.test3",
@@ -1486,8 +1520,8 @@ def test_compile_hourly_energy_statistics_multiple(hass_recorder, caplog):
"mean": None,
"min": None,
"last_reset": process_timestamp_to_utc_isoformat(four),
"state": approx(50.0 / 1000),
"sum": approx(60.0 / 1000),
"state": approx(50.0),
"sum": approx(60.0),
},
{
"statistic_id": "sensor.test3",
@@ -1497,8 +1531,8 @@ def test_compile_hourly_energy_statistics_multiple(hass_recorder, caplog):
"mean": None,
"min": None,
"last_reset": process_timestamp_to_utc_isoformat(four),
"state": approx(90.0 / 1000),
"sum": approx(100.0 / 1000),
"state": approx(90.0),
"sum": approx(100.0),
},
],
}
@@ -1666,31 +1700,31 @@ def test_compile_hourly_statistics_fails(hass_recorder, caplog):
@pytest.mark.parametrize(
"state_class,device_class,state_unit,display_unit,statistics_unit,statistic_type",
"state_class, device_class, state_unit, display_unit, statistics_unit, unit_class, statistic_type",
[
("measurement", "battery", "%", "%", "%", "mean"),
("measurement", "battery", None, None, None, "mean"),
("total", "energy", "Wh", "kWh", "kWh", "sum"),
("total", "energy", "kWh", "kWh", "kWh", "sum"),
("measurement", "energy", "Wh", "kWh", "kWh", "mean"),
("measurement", "energy", "kWh", "kWh", "kWh", "mean"),
("measurement", "humidity", "%", "%", "%", "mean"),
("measurement", "humidity", None, None, None, "mean"),
("total", "monetary", "USD", "USD", "USD", "sum"),
("total", "monetary", "None", "None", "None", "sum"),
("total", "gas", "", "", "", "sum"),
("total", "gas", "ft³", "", "", "sum"),
("measurement", "monetary", "USD", "USD", "USD", "mean"),
("measurement", "monetary", "None", "None", "None", "mean"),
("measurement", "gas", "", "", "", "mean"),
("measurement", "gas", "ft³", "", "", "mean"),
("measurement", "pressure", "Pa", "Pa", "Pa", "mean"),
("measurement", "pressure", "hPa", "hPa", "Pa", "mean"),
("measurement", "pressure", "mbar", "mbar", "Pa", "mean"),
("measurement", "pressure", "inHg", "inHg", "Pa", "mean"),
("measurement", "pressure", "psi", "psi", "Pa", "mean"),
("measurement", "temperature", "°C", "°C", "°C", "mean"),
("measurement", "temperature", "°F", "°F", "°C", "mean"),
("measurement", "battery", "%", "%", "%", None, "mean"),
("measurement", "battery", None, None, None, None, "mean"),
("total", "energy", "Wh", "Wh", "kWh", "energy", "sum"),
("total", "energy", "kWh", "kWh", "kWh", "energy", "sum"),
("measurement", "energy", "Wh", "Wh", "kWh", "energy", "mean"),
("measurement", "energy", "kWh", "kWh", "kWh", "energy", "mean"),
("measurement", "humidity", "%", "%", "%", None, "mean"),
("measurement", "humidity", None, None, None, None, "mean"),
("total", "monetary", "USD", "USD", "USD", None, "sum"),
("total", "monetary", "None", "None", "None", None, "sum"),
("total", "gas", "", "", "", "volume", "sum"),
("total", "gas", "ft³", "ft³", "", "volume", "sum"),
("measurement", "monetary", "USD", "USD", "USD", None, "mean"),
("measurement", "monetary", "None", "None", "None", None, "mean"),
("measurement", "gas", "", "", "", "volume", "mean"),
("measurement", "gas", "ft³", "ft³", "", "volume", "mean"),
("measurement", "pressure", "Pa", "Pa", "Pa", "pressure", "mean"),
("measurement", "pressure", "hPa", "hPa", "Pa", "pressure", "mean"),
("measurement", "pressure", "mbar", "mbar", "Pa", "pressure", "mean"),
("measurement", "pressure", "inHg", "inHg", "Pa", "pressure", "mean"),
("measurement", "pressure", "psi", "psi", "Pa", "pressure", "mean"),
("measurement", "temperature", "°C", "°C", "°C", "temperature", "mean"),
("measurement", "temperature", "°F", "°F", "°C", "temperature", "mean"),
],
)
def test_list_statistic_ids(
@@ -1701,6 +1735,7 @@ def test_list_statistic_ids(
state_unit,
display_unit,
statistics_unit,
unit_class,
statistic_type,
):
"""Test listing future statistic ids."""
@@ -1724,6 +1759,7 @@ def test_list_statistic_ids(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
},
]
for stat_type in ["mean", "sum", "dogs"]:
@@ -1738,6 +1774,7 @@ def test_list_statistic_ids(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
},
]
else:
@@ -1772,12 +1809,12 @@ def test_list_statistic_ids_unsupported(hass_recorder, caplog, _attributes):
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,mean,min,max",
"device_class, state_unit, display_unit, statistics_unit, unit_class, mean, min, max",
[
(None, None, None, None, 13.050847, -10, 30),
(None, "%", "%", "%", 13.050847, -10, 30),
("battery", "%", "%", "%", 13.050847, -10, 30),
("battery", None, None, None, 13.050847, -10, 30),
(None, None, None, None, None, 13.050847, -10, 30),
(None, "%", "%", "%", None, 13.050847, -10, 30),
("battery", "%", "%", "%", None, 13.050847, -10, 30),
("battery", None, None, None, None, 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics_changing_units_1(
@@ -1787,6 +1824,7 @@ def test_compile_hourly_statistics_changing_units_1(
state_unit,
display_unit,
statistics_unit,
unit_class,
mean,
min,
max,
@@ -1827,6 +1865,7 @@ def test_compile_hourly_statistics_changing_units_1(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -1862,6 +1901,7 @@ def test_compile_hourly_statistics_changing_units_1(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -1884,12 +1924,12 @@ def test_compile_hourly_statistics_changing_units_1(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,mean,min,max",
"device_class, state_unit, display_unit, statistics_unit, unit_class, mean, min, max",
[
(None, None, None, None, 13.050847, -10, 30),
(None, "%", "%", "%", 13.050847, -10, 30),
("battery", "%", "%", "%", 13.050847, -10, 30),
("battery", None, None, None, 13.050847, -10, 30),
(None, None, None, None, None, 13.050847, -10, 30),
(None, "%", "%", "%", None, 13.050847, -10, 30),
("battery", "%", "%", "%", None, 13.050847, -10, 30),
("battery", None, None, None, None, 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics_changing_units_2(
@@ -1899,6 +1939,7 @@ def test_compile_hourly_statistics_changing_units_2(
state_unit,
display_unit,
statistics_unit,
unit_class,
mean,
min,
max,
@@ -1936,6 +1977,7 @@ def test_compile_hourly_statistics_changing_units_2(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "cats",
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -1945,12 +1987,12 @@ def test_compile_hourly_statistics_changing_units_2(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,mean,min,max",
"device_class, state_unit, display_unit, statistics_unit, unit_class, mean, min, max",
[
(None, None, None, None, 13.050847, -10, 30),
(None, "%", "%", "%", 13.050847, -10, 30),
("battery", "%", "%", "%", 13.050847, -10, 30),
("battery", None, None, None, 13.050847, -10, 30),
(None, None, None, None, None, 13.050847, -10, 30),
(None, "%", "%", "%", None, 13.050847, -10, 30),
("battery", "%", "%", "%", None, 13.050847, -10, 30),
("battery", None, None, None, None, 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics_changing_units_3(
@@ -1960,6 +2002,7 @@ def test_compile_hourly_statistics_changing_units_3(
state_unit,
display_unit,
statistics_unit,
unit_class,
mean,
min,
max,
@@ -2000,6 +2043,7 @@ def test_compile_hourly_statistics_changing_units_3(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -2035,6 +2079,7 @@ def test_compile_hourly_statistics_changing_units_3(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -2057,13 +2102,21 @@ def test_compile_hourly_statistics_changing_units_3(
@pytest.mark.parametrize(
"device_class,state_unit,statistic_unit,mean,min,max",
"device_class, state_unit, statistic_unit, unit_class, mean, min, max",
[
("power", "kW", "W", 13.050847, -10, 30),
("power", "kW", "W", None, 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics_changing_device_class_1(
hass_recorder, caplog, device_class, state_unit, statistic_unit, mean, min, max
hass_recorder,
caplog,
device_class,
state_unit,
statistic_unit,
unit_class,
mean,
min,
max,
):
"""Test compiling hourly statistics where device class changes from one hour to the next."""
zero = dt_util.utcnow()
@@ -2091,6 +2144,7 @@ def test_compile_hourly_statistics_changing_device_class_1(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": state_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -2140,6 +2194,7 @@ def test_compile_hourly_statistics_changing_device_class_1(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": state_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -2162,9 +2217,9 @@ def test_compile_hourly_statistics_changing_device_class_1(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistic_unit,mean,min,max",
"device_class, state_unit, display_unit, statistic_unit, unit_class, mean, min, max",
[
("power", "kW", "kW", "W", 13.050847, -10, 30),
("power", "kW", "kW", "W", "power", 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics_changing_device_class_2(
@@ -2174,6 +2229,7 @@ def test_compile_hourly_statistics_changing_device_class_2(
state_unit,
display_unit,
statistic_unit,
unit_class,
mean,
min,
max,
@@ -2205,6 +2261,7 @@ def test_compile_hourly_statistics_changing_device_class_2(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistic_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -2254,6 +2311,7 @@ def test_compile_hourly_statistics_changing_device_class_2(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": statistic_unit,
"unit_class": unit_class,
},
]
stats = statistics_during_period(hass, zero, period="5minute")
@@ -2276,9 +2334,9 @@ def test_compile_hourly_statistics_changing_device_class_2(
@pytest.mark.parametrize(
"device_class,state_unit,display_unit,statistics_unit,mean,min,max",
"device_class, state_unit, display_unit, statistics_unit, unit_class, mean, min, max",
[
(None, None, None, None, 13.050847, -10, 30),
(None, None, None, None, None, 13.050847, -10, 30),
],
)
def test_compile_hourly_statistics_changing_statistics(
@@ -2288,6 +2346,7 @@ def test_compile_hourly_statistics_changing_statistics(
state_unit,
display_unit,
statistics_unit,
unit_class,
mean,
min,
max,
@@ -2322,6 +2381,7 @@ def test_compile_hourly_statistics_changing_statistics(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": None,
"unit_class": None,
},
]
metadata = get_metadata(hass, statistic_ids=("sensor.test1",))
@@ -2358,6 +2418,7 @@ def test_compile_hourly_statistics_changing_statistics(
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": None,
"unit_class": None,
},
]
metadata = get_metadata(hass, statistic_ids=("sensor.test1",))
@@ -2552,6 +2613,7 @@ def test_compile_statistics_hourly_daily_monthly_summary(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "%",
"unit_class": None,
},
{
"statistic_id": "sensor.test2",
@@ -2561,6 +2623,7 @@ def test_compile_statistics_hourly_daily_monthly_summary(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "%",
"unit_class": None,
},
{
"statistic_id": "sensor.test3",
@@ -2570,6 +2633,7 @@ def test_compile_statistics_hourly_daily_monthly_summary(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "%",
"unit_class": None,
},
{
"statistic_id": "sensor.test4",
@@ -2579,6 +2643,7 @@ def test_compile_statistics_hourly_daily_monthly_summary(hass_recorder, caplog):
"name": None,
"source": "recorder",
"statistics_unit_of_measurement": "EUR",
"unit_class": None,
},
]
@@ -2588,7 +2653,7 @@ def test_compile_statistics_hourly_daily_monthly_summary(hass_recorder, caplog):
for i in range(13, 24):
expected_sums["sensor.test4"][i] += sum_adjustment
instance.async_adjust_statistics(
"sensor.test4", sum_adjustement_start, sum_adjustment
"sensor.test4", sum_adjustement_start, sum_adjustment, "EUR"
)
wait_recording_done(hass)