mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 16:57:10 +00:00
Add volatile organic compounds to homekit_controller (#55093)
This commit is contained in:
parent
4ef376a971
commit
0065bbc56d
@ -50,8 +50,23 @@ CHARACTERISTIC_PLATFORMS = {
|
|||||||
CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY: "sensor",
|
CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY: "sensor",
|
||||||
CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY_2: "sensor",
|
CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY_2: "sensor",
|
||||||
CharacteristicsTypes.Vendor.VOCOLINC_HUMIDIFIER_SPRAY_LEVEL: "number",
|
CharacteristicsTypes.Vendor.VOCOLINC_HUMIDIFIER_SPRAY_LEVEL: "number",
|
||||||
CharacteristicsTypes.get_uuid(CharacteristicsTypes.TEMPERATURE_CURRENT): "sensor",
|
CharacteristicsTypes.TEMPERATURE_CURRENT: "sensor",
|
||||||
CharacteristicsTypes.get_uuid(
|
CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT: "sensor",
|
||||||
CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT
|
CharacteristicsTypes.AIR_QUALITY: "sensor",
|
||||||
): "sensor",
|
CharacteristicsTypes.DENSITY_PM25: "sensor",
|
||||||
|
CharacteristicsTypes.DENSITY_PM10: "sensor",
|
||||||
|
CharacteristicsTypes.DENSITY_OZONE: "sensor",
|
||||||
|
CharacteristicsTypes.DENSITY_NO2: "sensor",
|
||||||
|
CharacteristicsTypes.DENSITY_SO2: "sensor",
|
||||||
|
CharacteristicsTypes.DENSITY_VOC: "sensor",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# For legacy reasons, "built-in" characteristic types are in their short form
|
||||||
|
# And vendor types don't have a short form
|
||||||
|
# This means long and short forms get mixed up in this dict, and comparisons
|
||||||
|
# don't work!
|
||||||
|
# We call get_uuid on *every* type to normalise them to the long form
|
||||||
|
# Eventually aiohomekit will use the long form exclusively amd this can be removed.
|
||||||
|
for k, v in list(CHARACTERISTIC_PLATFORMS.items()):
|
||||||
|
value = CHARACTERISTIC_PLATFORMS.pop(k)
|
||||||
|
CHARACTERISTIC_PLATFORMS[CharacteristicsTypes.get_uuid(k)] = value
|
||||||
|
@ -18,6 +18,7 @@ from homeassistant.const import (
|
|||||||
DEVICE_CLASS_PRESSURE,
|
DEVICE_CLASS_PRESSURE,
|
||||||
DEVICE_CLASS_SULPHUR_DIOXIDE,
|
DEVICE_CLASS_SULPHUR_DIOXIDE,
|
||||||
DEVICE_CLASS_TEMPERATURE,
|
DEVICE_CLASS_TEMPERATURE,
|
||||||
|
DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS,
|
||||||
LIGHT_LUX,
|
LIGHT_LUX,
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
POWER_WATT,
|
POWER_WATT,
|
||||||
@ -114,6 +115,12 @@ SIMPLE_SENSOR = {
|
|||||||
"state_class": STATE_CLASS_MEASUREMENT,
|
"state_class": STATE_CLASS_MEASUREMENT,
|
||||||
"unit": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
"unit": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
},
|
},
|
||||||
|
CharacteristicsTypes.DENSITY_VOC: {
|
||||||
|
"name": "Volatile Organic Compound Density",
|
||||||
|
"device_class": DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS,
|
||||||
|
"state_class": STATE_CLASS_MEASUREMENT,
|
||||||
|
"unit": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
# For legacy reasons, "built-in" characteristic types are in their short form
|
# For legacy reasons, "built-in" characteristic types are in their short form
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
from aiohomekit.model.characteristics import CharacteristicsTypes
|
from aiohomekit.model.characteristics import CharacteristicsTypes
|
||||||
from aiohomekit.model.services import ServicesTypes
|
from aiohomekit.model.services import ServicesTypes
|
||||||
|
|
||||||
|
from homeassistant.const import CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
|
||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
|
|
||||||
from tests.components.homekit_controller.common import setup_test_component
|
from tests.components.homekit_controller.common import setup_test_component
|
||||||
@ -53,3 +54,47 @@ async def test_air_quality_sensor_read_state(hass, utcnow):
|
|||||||
assert state.attributes["particulate_matter_2_5"] == 4444
|
assert state.attributes["particulate_matter_2_5"] == 4444
|
||||||
assert state.attributes["particulate_matter_10"] == 5555
|
assert state.attributes["particulate_matter_10"] == 5555
|
||||||
assert state.attributes["volatile_organic_compounds"] == 6666
|
assert state.attributes["volatile_organic_compounds"] == 6666
|
||||||
|
|
||||||
|
|
||||||
|
async def test_air_quality_sensor_read_state_even_if_air_quality_off(hass, utcnow):
|
||||||
|
"""The air quality entity is disabled by default, the replacement sensors should always be available."""
|
||||||
|
await setup_test_component(hass, create_air_quality_sensor_service)
|
||||||
|
|
||||||
|
entity_registry = er.async_get(hass)
|
||||||
|
|
||||||
|
sensors = [
|
||||||
|
{"entity_id": "sensor.testdevice_air_quality"},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_pm10_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_pm2_5_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_pm10_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_ozone_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_sulphur_dioxide_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_nitrogen_dioxide_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity_id": "sensor.testdevice_volatile_organic_compound_density",
|
||||||
|
"units": CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
for sensor in sensors:
|
||||||
|
entry = entity_registry.async_get(sensor["entity_id"])
|
||||||
|
assert entry is not None
|
||||||
|
assert entry.unit_of_measurement == sensor.get("units")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user