mirror of
https://github.com/home-assistant/core.git
synced 2025-11-14 05:20:17 +00:00
Improve unit handling in recorder (#153941)
This commit is contained in:
@@ -241,10 +241,25 @@ async def assert_validation_result(
|
||||
),
|
||||
[
|
||||
(None, "%", "%", "%", "unitless", 13.050847, -10, 30),
|
||||
(None, "ppm", "ppm", "ppm", "unitless", 13.050847, -10, 30),
|
||||
(None, "g/m³", "g/m³", "g/m³", "concentration", 13.050847, -10, 30),
|
||||
(None, "mg/m³", "mg/m³", "mg/m³", "concentration", 13.050847, -10, 30),
|
||||
("area", "m²", "m²", "m²", "area", 13.050847, -10, 30),
|
||||
("area", "mi²", "mi²", "mi²", "area", 13.050847, -10, 30),
|
||||
("battery", "%", "%", "%", "unitless", 13.050847, -10, 30),
|
||||
("battery", None, None, None, "unitless", 13.050847, -10, 30),
|
||||
# We can't yet convert carbon_monoxide
|
||||
(
|
||||
"carbon_monoxide",
|
||||
"mg/m³",
|
||||
"mg/m³",
|
||||
"mg/m³",
|
||||
"concentration",
|
||||
13.050847,
|
||||
-10,
|
||||
30,
|
||||
),
|
||||
("carbon_monoxide", "ppm", "ppm", "ppm", "unitless", 13.050847, -10, 30),
|
||||
("distance", "m", "m", "m", "distance", 13.050847, -10, 30),
|
||||
("distance", "mi", "mi", "mi", "distance", 13.050847, -10, 30),
|
||||
("humidity", "%", "%", "%", "unitless", 13.050847, -10, 30),
|
||||
@@ -3261,6 +3276,9 @@ async def test_list_statistic_ids_unsupported(
|
||||
(None, "ft³", "ft3", "volume", 13.050847, -10, 30),
|
||||
(None, "ft³/min", "ft³/m", "volume_flow_rate", 13.050847, -10, 30),
|
||||
(None, "m³", "m3", "volume", 13.050847, -10, 30),
|
||||
# Can't yet convert carbon_monoxide
|
||||
("carbon_monoxide", "ppm", "mg/m³", "unitless", 13.050847, -10, 30),
|
||||
("carbon_monoxide", "mg/m³", "ppm", "concentration", 13.050847, -10, 30),
|
||||
],
|
||||
)
|
||||
async def test_compile_hourly_statistics_changing_units_1(
|
||||
@@ -3589,17 +3607,30 @@ async def test_compile_hourly_statistics_changing_units_3(
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("state_unit_1", "state_unit_2", "unit_class", "mean", "min", "max", "factor"),
|
||||
(
|
||||
"device_class",
|
||||
"state_unit_1",
|
||||
"state_unit_2",
|
||||
"unit_class",
|
||||
"mean",
|
||||
"min",
|
||||
"max",
|
||||
"factor",
|
||||
),
|
||||
[
|
||||
(None, "%", "unitless", 13.050847, -10, 30, 100),
|
||||
("%", None, "unitless", 13.050847, -10, 30, 0.01),
|
||||
("W", "kW", "power", 13.050847, -10, 30, 0.001),
|
||||
("kW", "W", "power", 13.050847, -10, 30, 1000),
|
||||
(None, None, "%", "unitless", 13.050847, -10, 30, 100),
|
||||
(None, None, "ppm", "unitless", 13.050847, -10, 30, 1000000),
|
||||
(None, "g/m³", "mg/m³", "concentration", 13.050847, -10, 30, 1000),
|
||||
(None, "mg/m³", "g/m³", "concentration", 13.050847, -10, 30, 0.001),
|
||||
(None, "%", None, "unitless", 13.050847, -10, 30, 0.01),
|
||||
(None, "W", "kW", "power", 13.050847, -10, 30, 0.001),
|
||||
(None, "kW", "W", "power", 13.050847, -10, 30, 1000),
|
||||
],
|
||||
)
|
||||
async def test_compile_hourly_statistics_convert_units_1(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
device_class,
|
||||
state_unit_1,
|
||||
state_unit_2,
|
||||
unit_class,
|
||||
@@ -3617,7 +3648,7 @@ async def test_compile_hourly_statistics_convert_units_1(
|
||||
# Wait for the sensor recorder platform to be added
|
||||
await async_recorder_block_till_done(hass)
|
||||
attributes = {
|
||||
"device_class": None,
|
||||
"device_class": device_class,
|
||||
"state_class": "measurement",
|
||||
"unit_of_measurement": state_unit_1,
|
||||
}
|
||||
@@ -4441,6 +4472,7 @@ async def test_compile_hourly_statistics_changing_state_class(
|
||||
"name": None,
|
||||
"source": "recorder",
|
||||
"statistic_id": "sensor.test1",
|
||||
"unit_class": unit_class,
|
||||
"unit_of_measurement": None,
|
||||
},
|
||||
)
|
||||
@@ -4485,6 +4517,7 @@ async def test_compile_hourly_statistics_changing_state_class(
|
||||
"name": None,
|
||||
"source": "recorder",
|
||||
"statistic_id": "sensor.test1",
|
||||
"unit_class": unit_class,
|
||||
"unit_of_measurement": None,
|
||||
},
|
||||
)
|
||||
@@ -5936,6 +5969,7 @@ async def test_validate_statistics_other_domain(
|
||||
"name": None,
|
||||
"source": RECORDER_DOMAIN,
|
||||
"statistic_id": "number.test",
|
||||
"unit_class": None,
|
||||
"unit_of_measurement": None,
|
||||
}
|
||||
statistics: StatisticData = {
|
||||
|
||||
Reference in New Issue
Block a user