mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Update HomeKit PM2.5 mappings to US AQI (#76358)
This commit is contained in:
parent
cefc535edb
commit
01de1c6304
@ -56,7 +56,6 @@ from .util import (
|
|||||||
convert_to_float,
|
convert_to_float,
|
||||||
density_to_air_quality,
|
density_to_air_quality,
|
||||||
density_to_air_quality_pm10,
|
density_to_air_quality_pm10,
|
||||||
density_to_air_quality_pm25,
|
|
||||||
temperature_to_homekit,
|
temperature_to_homekit,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -239,7 +238,7 @@ class PM25Sensor(AirQualitySensor):
|
|||||||
if self.char_density.value != density:
|
if self.char_density.value != density:
|
||||||
self.char_density.set_value(density)
|
self.char_density.set_value(density)
|
||||||
_LOGGER.debug("%s: Set density to %d", self.entity_id, 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:
|
if self.char_quality.value != air_quality:
|
||||||
self.char_quality.set_value(air_quality)
|
self.char_quality.set_value(air_quality)
|
||||||
_LOGGER.debug("%s: Set air_quality to %d", self.entity_id, 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:
|
def density_to_air_quality(density: float) -> int:
|
||||||
"""Map PM2.5 density to HomeKit AirQuality level."""
|
"""Map PM2.5 µg/m3 density to HomeKit AirQuality level."""
|
||||||
if density <= 35:
|
if density <= 12: # US AQI 0-50 (HomeKit: Excellent)
|
||||||
return 1
|
return 1
|
||||||
if density <= 75:
|
if density <= 35.4: # US AQI 51-100 (HomeKit: Good)
|
||||||
return 2
|
return 2
|
||||||
if density <= 115:
|
if density <= 55.4: # US AQI 101-150 (HomeKit: Fair)
|
||||||
return 3
|
return 3
|
||||||
if density <= 150:
|
if density <= 150.4: # US AQI 151-200 (HomeKit: Inferior)
|
||||||
return 4
|
return 4
|
||||||
return 5
|
return 5 # US AQI 201+ (HomeKit: Poor)
|
||||||
|
|
||||||
|
|
||||||
def density_to_air_quality_pm10(density: float) -> int:
|
def density_to_air_quality_pm10(density: float) -> int:
|
||||||
@ -425,19 +425,6 @@ def density_to_air_quality_pm10(density: float) -> int:
|
|||||||
return 5
|
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:
|
def get_persist_filename_for_entry_id(entry_id: str) -> str:
|
||||||
"""Determine the filename of the homekit state file."""
|
"""Determine the filename of the homekit state file."""
|
||||||
return f"{DOMAIN}.{entry_id}.state"
|
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")
|
hass.states.async_set(entity_id, "34")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert acc.char_density.value == 34
|
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")
|
hass.states.async_set(entity_id, "200")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -205,7 +205,7 @@ async def test_pm25(hass, hk_driver):
|
|||||||
hass.states.async_set(entity_id, "23")
|
hass.states.async_set(entity_id, "23")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert acc.char_density.value == 23
|
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")
|
hass.states.async_set(entity_id, "34")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -215,12 +215,12 @@ async def test_pm25(hass, hk_driver):
|
|||||||
hass.states.async_set(entity_id, "90")
|
hass.states.async_set(entity_id, "90")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert acc.char_density.value == 90
|
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")
|
hass.states.async_set(entity_id, "200")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert acc.char_density.value == 200
|
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")
|
hass.states.async_set(entity_id, "400")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -224,12 +224,15 @@ def test_temperature_to_states():
|
|||||||
def test_density_to_air_quality():
|
def test_density_to_air_quality():
|
||||||
"""Test map PM2.5 density to HomeKit AirQuality level."""
|
"""Test map PM2.5 density to HomeKit AirQuality level."""
|
||||||
assert density_to_air_quality(0) == 1
|
assert density_to_air_quality(0) == 1
|
||||||
assert density_to_air_quality(35) == 1
|
assert density_to_air_quality(12) == 1
|
||||||
assert density_to_air_quality(35.1) == 2
|
assert density_to_air_quality(12.1) == 2
|
||||||
assert density_to_air_quality(75) == 2
|
assert density_to_air_quality(35.4) == 2
|
||||||
assert density_to_air_quality(115) == 3
|
assert density_to_air_quality(35.5) == 3
|
||||||
assert density_to_air_quality(150) == 4
|
assert density_to_air_quality(55.4) == 3
|
||||||
assert density_to_air_quality(300) == 5
|
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):
|
async def test_async_show_setup_msg(hass, hk_driver, mock_get_source_ip):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user