diff --git a/homeassistant/components/homekit/type_sensors.py b/homeassistant/components/homekit/type_sensors.py index 7e9b4cbbb31..e877ffff07a 100644 --- a/homeassistant/components/homekit/type_sensors.py +++ b/homeassistant/components/homekit/type_sensors.py @@ -56,7 +56,6 @@ from .util import ( convert_to_float, density_to_air_quality, density_to_air_quality_pm10, - density_to_air_quality_pm25, temperature_to_homekit, ) @@ -239,7 +238,7 @@ class PM25Sensor(AirQualitySensor): if self.char_density.value != density: self.char_density.set_value(density) _LOGGER.debug("%s: Set density to %d", self.entity_id, density) - air_quality = density_to_air_quality_pm25(density) + air_quality = density_to_air_quality(density) if self.char_quality.value != air_quality: self.char_quality.set_value(air_quality) _LOGGER.debug("%s: Set air_quality to %d", self.entity_id, air_quality) diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 34df1008e76..b7af7d516dd 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -400,16 +400,16 @@ def temperature_to_states(temperature: float | int, unit: str) -> float: def density_to_air_quality(density: float) -> int: - """Map PM2.5 density to HomeKit AirQuality level.""" - if density <= 35: + """Map PM2.5 µg/m3 density to HomeKit AirQuality level.""" + if density <= 12: # US AQI 0-50 (HomeKit: Excellent) return 1 - if density <= 75: + if density <= 35.4: # US AQI 51-100 (HomeKit: Good) return 2 - if density <= 115: + if density <= 55.4: # US AQI 101-150 (HomeKit: Fair) return 3 - if density <= 150: + if density <= 150.4: # US AQI 151-200 (HomeKit: Inferior) return 4 - return 5 + return 5 # US AQI 201+ (HomeKit: Poor) def density_to_air_quality_pm10(density: float) -> int: @@ -425,19 +425,6 @@ def density_to_air_quality_pm10(density: float) -> int: return 5 -def density_to_air_quality_pm25(density: float) -> int: - """Map PM2.5 density to HomeKit AirQuality level.""" - if density <= 25: - return 1 - if density <= 50: - return 2 - if density <= 100: - return 3 - if density <= 300: - return 4 - return 5 - - def get_persist_filename_for_entry_id(entry_id: str) -> str: """Determine the filename of the homekit state file.""" return f"{DOMAIN}.{entry_id}.state" diff --git a/tests/components/homekit/test_type_sensors.py b/tests/components/homekit/test_type_sensors.py index 75069ce9467..b916d447d12 100644 --- a/tests/components/homekit/test_type_sensors.py +++ b/tests/components/homekit/test_type_sensors.py @@ -126,7 +126,7 @@ async def test_air_quality(hass, hk_driver): hass.states.async_set(entity_id, "34") await hass.async_block_till_done() assert acc.char_density.value == 34 - assert acc.char_quality.value == 1 + assert acc.char_quality.value == 2 hass.states.async_set(entity_id, "200") await hass.async_block_till_done() @@ -205,7 +205,7 @@ async def test_pm25(hass, hk_driver): hass.states.async_set(entity_id, "23") await hass.async_block_till_done() assert acc.char_density.value == 23 - assert acc.char_quality.value == 1 + assert acc.char_quality.value == 2 hass.states.async_set(entity_id, "34") await hass.async_block_till_done() @@ -215,12 +215,12 @@ async def test_pm25(hass, hk_driver): hass.states.async_set(entity_id, "90") await hass.async_block_till_done() assert acc.char_density.value == 90 - assert acc.char_quality.value == 3 + assert acc.char_quality.value == 4 hass.states.async_set(entity_id, "200") await hass.async_block_till_done() assert acc.char_density.value == 200 - assert acc.char_quality.value == 4 + assert acc.char_quality.value == 5 hass.states.async_set(entity_id, "400") await hass.async_block_till_done() diff --git a/tests/components/homekit/test_util.py b/tests/components/homekit/test_util.py index 3dd30af2056..f3811ce34c5 100644 --- a/tests/components/homekit/test_util.py +++ b/tests/components/homekit/test_util.py @@ -224,12 +224,15 @@ def test_temperature_to_states(): def test_density_to_air_quality(): """Test map PM2.5 density to HomeKit AirQuality level.""" assert density_to_air_quality(0) == 1 - assert density_to_air_quality(35) == 1 - assert density_to_air_quality(35.1) == 2 - assert density_to_air_quality(75) == 2 - assert density_to_air_quality(115) == 3 - assert density_to_air_quality(150) == 4 - assert density_to_air_quality(300) == 5 + assert density_to_air_quality(12) == 1 + assert density_to_air_quality(12.1) == 2 + assert density_to_air_quality(35.4) == 2 + assert density_to_air_quality(35.5) == 3 + assert density_to_air_quality(55.4) == 3 + assert density_to_air_quality(55.5) == 4 + assert density_to_air_quality(150.4) == 4 + assert density_to_air_quality(150.5) == 5 + assert density_to_air_quality(200) == 5 async def test_async_show_setup_msg(hass, hk_driver, mock_get_source_ip):