Update HomeKit PM2.5 mappings to US AQI (#76358)
This commit is contained in:
parent
cefc535edb
commit
01de1c6304
4 changed files with 20 additions and 31 deletions
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue