Skip to content

Commit d629909

Browse files
epenetfrenck
authored andcommitted
Fix _is_valid_suggested_unit in sensor platform (home-assistant#151912)
1 parent 087d9d3 commit d629909

File tree

3 files changed

+233
-1
lines changed

3 files changed

+233
-1
lines changed

homeassistant/components/sensor/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ def _is_valid_suggested_unit(self, suggested_unit_of_measurement: str) -> bool:
365365
unit converter supports both the native and the suggested units of measurement.
366366
"""
367367
# Make sure we can convert the units
368-
if (
368+
if self.native_unit_of_measurement != suggested_unit_of_measurement and (
369369
(unit_converter := UNIT_CONVERTERS.get(self.device_class)) is None
370370
or self.__native_unit_of_measurement_compat
371371
not in unit_converter.VALID_UNITS

tests/components/sensor/test_init.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from homeassistant.config_entries import ConfigEntry, ConfigFlow
3333
from homeassistant.const import (
3434
ATTR_UNIT_OF_MEASUREMENT,
35+
CONCENTRATION_PARTS_PER_MILLION,
3536
PERCENTAGE,
3637
STATE_UNKNOWN,
3738
EntityCategory,
@@ -2938,6 +2939,13 @@ async def test_suggested_unit_guard_invalid_unit(
29382939
UnitOfDataRate.BITS_PER_SECOND,
29392940
10000,
29402941
),
2942+
(
2943+
SensorDeviceClass.CO2,
2944+
CONCENTRATION_PARTS_PER_MILLION,
2945+
10,
2946+
CONCENTRATION_PARTS_PER_MILLION,
2947+
10,
2948+
),
29412949
],
29422950
)
29432951
async def test_suggested_unit_guard_valid_unit(

tests/components/tuya/snapshots/test_sensor.ambr

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,62 @@
400400
'state': '100.0',
401401
})
402402
# ---
403+
# name: test_platform_setup_and_discovery[sensor.aqi_carbon_dioxide-entry]
404+
EntityRegistryEntrySnapshot({
405+
'aliases': set({
406+
}),
407+
'area_id': None,
408+
'capabilities': dict({
409+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
410+
}),
411+
'config_entry_id': <ANY>,
412+
'config_subentry_id': <ANY>,
413+
'device_class': None,
414+
'device_id': <ANY>,
415+
'disabled_by': None,
416+
'domain': 'sensor',
417+
'entity_category': None,
418+
'entity_id': 'sensor.aqi_carbon_dioxide',
419+
'has_entity_name': True,
420+
'hidden_by': None,
421+
'icon': None,
422+
'id': <ANY>,
423+
'labels': set({
424+
}),
425+
'name': None,
426+
'options': dict({
427+
'sensor.private': dict({
428+
'suggested_unit_of_measurement': 'ppm',
429+
}),
430+
}),
431+
'original_device_class': <SensorDeviceClass.CO2: 'carbon_dioxide'>,
432+
'original_icon': None,
433+
'original_name': 'Carbon dioxide',
434+
'platform': 'tuya',
435+
'previous_unique_id': None,
436+
'suggested_object_id': None,
437+
'supported_features': 0,
438+
'translation_key': 'carbon_dioxide',
439+
'unique_id': 'tuya.iks13mcaiyie3rryjb2occo2_value',
440+
'unit_of_measurement': 'ppm',
441+
})
442+
# ---
443+
# name: test_platform_setup_and_discovery[sensor.aqi_carbon_dioxide-state]
444+
StateSnapshot({
445+
'attributes': ReadOnlyDict({
446+
'device_class': 'carbon_dioxide',
447+
'friendly_name': 'AQI Carbon dioxide',
448+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
449+
'unit_of_measurement': 'ppm',
450+
}),
451+
'context': <ANY>,
452+
'entity_id': 'sensor.aqi_carbon_dioxide',
453+
'last_changed': <ANY>,
454+
'last_reported': <ANY>,
455+
'last_updated': <ANY>,
456+
'state': '541.0',
457+
})
458+
# ---
403459
# name: test_platform_setup_and_discovery[sensor.aqi_formaldehyde-entry]
404460
EntityRegistryEntrySnapshot({
405461
'aliases': set({
@@ -505,6 +561,62 @@
505561
'state': '53.0',
506562
})
507563
# ---
564+
# name: test_platform_setup_and_discovery[sensor.aqi_pm2_5-entry]
565+
EntityRegistryEntrySnapshot({
566+
'aliases': set({
567+
}),
568+
'area_id': None,
569+
'capabilities': dict({
570+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
571+
}),
572+
'config_entry_id': <ANY>,
573+
'config_subentry_id': <ANY>,
574+
'device_class': None,
575+
'device_id': <ANY>,
576+
'disabled_by': None,
577+
'domain': 'sensor',
578+
'entity_category': None,
579+
'entity_id': 'sensor.aqi_pm2_5',
580+
'has_entity_name': True,
581+
'hidden_by': None,
582+
'icon': None,
583+
'id': <ANY>,
584+
'labels': set({
585+
}),
586+
'name': None,
587+
'options': dict({
588+
'sensor.private': dict({
589+
'suggested_unit_of_measurement': 'μg/m³',
590+
}),
591+
}),
592+
'original_device_class': <SensorDeviceClass.PM25: 'pm25'>,
593+
'original_icon': None,
594+
'original_name': 'PM2.5',
595+
'platform': 'tuya',
596+
'previous_unique_id': None,
597+
'suggested_object_id': None,
598+
'supported_features': 0,
599+
'translation_key': 'pm25',
600+
'unique_id': 'tuya.iks13mcaiyie3rryjb2ocpm25_value',
601+
'unit_of_measurement': 'μg/m³',
602+
})
603+
# ---
604+
# name: test_platform_setup_and_discovery[sensor.aqi_pm2_5-state]
605+
StateSnapshot({
606+
'attributes': ReadOnlyDict({
607+
'device_class': 'pm25',
608+
'friendly_name': 'AQI PM2.5',
609+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
610+
'unit_of_measurement': 'μg/m³',
611+
}),
612+
'context': <ANY>,
613+
'entity_id': 'sensor.aqi_pm2_5',
614+
'last_changed': <ANY>,
615+
'last_reported': <ANY>,
616+
'last_updated': <ANY>,
617+
'state': '17.0',
618+
})
619+
# ---
508620
# name: test_platform_setup_and_discovery[sensor.aqi_temperature-entry]
509621
EntityRegistryEntrySnapshot({
510622
'aliases': set({
@@ -7063,6 +7175,62 @@
70637175
'state': '42.0',
70647176
})
70657177
# ---
7178+
# name: test_platform_setup_and_discovery[sensor.kalado_air_purifier_pm2_5-entry]
7179+
EntityRegistryEntrySnapshot({
7180+
'aliases': set({
7181+
}),
7182+
'area_id': None,
7183+
'capabilities': dict({
7184+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
7185+
}),
7186+
'config_entry_id': <ANY>,
7187+
'config_subentry_id': <ANY>,
7188+
'device_class': None,
7189+
'device_id': <ANY>,
7190+
'disabled_by': None,
7191+
'domain': 'sensor',
7192+
'entity_category': None,
7193+
'entity_id': 'sensor.kalado_air_purifier_pm2_5',
7194+
'has_entity_name': True,
7195+
'hidden_by': None,
7196+
'icon': None,
7197+
'id': <ANY>,
7198+
'labels': set({
7199+
}),
7200+
'name': None,
7201+
'options': dict({
7202+
'sensor.private': dict({
7203+
'suggested_unit_of_measurement': 'μg/m³',
7204+
}),
7205+
}),
7206+
'original_device_class': <SensorDeviceClass.PM25: 'pm25'>,
7207+
'original_icon': None,
7208+
'original_name': 'PM2.5',
7209+
'platform': 'tuya',
7210+
'previous_unique_id': None,
7211+
'suggested_object_id': None,
7212+
'supported_features': 0,
7213+
'translation_key': 'pm25',
7214+
'unique_id': 'tuya.yo2karkjuhzztxsfjkpm25',
7215+
'unit_of_measurement': 'μg/m³',
7216+
})
7217+
# ---
7218+
# name: test_platform_setup_and_discovery[sensor.kalado_air_purifier_pm2_5-state]
7219+
StateSnapshot({
7220+
'attributes': ReadOnlyDict({
7221+
'device_class': 'pm25',
7222+
'friendly_name': 'Kalado Air Purifier PM2.5',
7223+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
7224+
'unit_of_measurement': 'μg/m³',
7225+
}),
7226+
'context': <ANY>,
7227+
'entity_id': 'sensor.kalado_air_purifier_pm2_5',
7228+
'last_changed': <ANY>,
7229+
'last_reported': <ANY>,
7230+
'last_updated': <ANY>,
7231+
'state': '3.0',
7232+
})
7233+
# ---
70667234
# name: test_platform_setup_and_discovery[sensor.keller_current-entry]
70677235
EntityRegistryEntrySnapshot({
70687236
'aliases': set({
@@ -11232,6 +11400,62 @@
1123211400
'state': '97.0',
1123311401
})
1123411402
# ---
11403+
# name: test_platform_setup_and_discovery[sensor.smogo_carbon_monoxide-entry]
11404+
EntityRegistryEntrySnapshot({
11405+
'aliases': set({
11406+
}),
11407+
'area_id': None,
11408+
'capabilities': dict({
11409+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
11410+
}),
11411+
'config_entry_id': <ANY>,
11412+
'config_subentry_id': <ANY>,
11413+
'device_class': None,
11414+
'device_id': <ANY>,
11415+
'disabled_by': None,
11416+
'domain': 'sensor',
11417+
'entity_category': None,
11418+
'entity_id': 'sensor.smogo_carbon_monoxide',
11419+
'has_entity_name': True,
11420+
'hidden_by': None,
11421+
'icon': None,
11422+
'id': <ANY>,
11423+
'labels': set({
11424+
}),
11425+
'name': None,
11426+
'options': dict({
11427+
'sensor.private': dict({
11428+
'suggested_unit_of_measurement': 'ppm',
11429+
}),
11430+
}),
11431+
'original_device_class': <SensorDeviceClass.CO: 'carbon_monoxide'>,
11432+
'original_icon': None,
11433+
'original_name': 'Carbon monoxide',
11434+
'platform': 'tuya',
11435+
'previous_unique_id': None,
11436+
'suggested_object_id': None,
11437+
'supported_features': 0,
11438+
'translation_key': 'carbon_monoxide',
11439+
'unique_id': 'tuya.swhtzki3qrz5ydchjbocco_value',
11440+
'unit_of_measurement': 'ppm',
11441+
})
11442+
# ---
11443+
# name: test_platform_setup_and_discovery[sensor.smogo_carbon_monoxide-state]
11444+
StateSnapshot({
11445+
'attributes': ReadOnlyDict({
11446+
'device_class': 'carbon_monoxide',
11447+
'friendly_name': 'Smogo Carbon monoxide',
11448+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
11449+
'unit_of_measurement': 'ppm',
11450+
}),
11451+
'context': <ANY>,
11452+
'entity_id': 'sensor.smogo_carbon_monoxide',
11453+
'last_changed': <ANY>,
11454+
'last_reported': <ANY>,
11455+
'last_updated': <ANY>,
11456+
'state': '0.0',
11457+
})
11458+
# ---
1123511459
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_battery-entry]
1123611460
EntityRegistryEntrySnapshot({
1123711461
'aliases': set({

0 commit comments

Comments
 (0)