Add support for Eve Degree's air pressure sensor (#53891)

This commit is contained in:
Jc2k 2021-08-03 13:30:50 +01:00 committed by GitHub
parent 1286734ce9
commit 081b2d533b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 474 additions and 4 deletions

View File

@ -45,6 +45,8 @@ HOMEKIT_ACCESSORY_DISPATCH = {
CHARACTERISTIC_PLATFORMS = {
CharacteristicsTypes.Vendor.EVE_ENERGY_WATT: "sensor",
CharacteristicsTypes.Vendor.EVE_DEGREE_AIR_PRESSURE: "sensor",
CharacteristicsTypes.Vendor.EVE_DEGREE_ELEVATION: "number",
CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY: "sensor",
CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY_2: "sensor",
CharacteristicsTypes.Vendor.VOCOLINC_HUMIDIFIER_SPRAY_LEVEL: "number",

View File

@ -3,7 +3,7 @@
"name": "HomeKit Controller",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/homekit_controller",
"requirements": ["aiohomekit==0.6.0"],
"requirements": ["aiohomekit==0.6.2"],
"zeroconf": ["_hap._tcp.local."],
"after_dependencies": ["zeroconf"],
"codeowners": ["@Jc2k", "@bdraco"],

View File

@ -15,7 +15,11 @@ NUMBER_ENTITIES = {
CharacteristicsTypes.Vendor.VOCOLINC_HUMIDIFIER_SPRAY_LEVEL: {
"name": "Spray Quantity",
"icon": "mdi:water",
}
},
CharacteristicsTypes.Vendor.EVE_DEGREE_ELEVATION: {
"name": "Elevation",
"icon": "mdi:elevation-rise",
},
}

View File

@ -9,10 +9,12 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_ILLUMINANCE,
DEVICE_CLASS_POWER,
DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_TEMPERATURE,
LIGHT_LUX,
PERCENTAGE,
POWER_WATT,
PRESSURE_HPA,
TEMP_CELSIUS,
)
from homeassistant.core import callback
@ -44,6 +46,12 @@ SIMPLE_SENSOR = {
"state_class": STATE_CLASS_MEASUREMENT,
"unit": POWER_WATT,
},
CharacteristicsTypes.Vendor.EVE_DEGREE_AIR_PRESSURE: {
"name": "Air Pressure",
"device_class": DEVICE_CLASS_PRESSURE,
"state_class": STATE_CLASS_MEASUREMENT,
"unit": PRESSURE_HPA,
},
CharacteristicsTypes.get_uuid(CharacteristicsTypes.TEMPERATURE_CURRENT): {
"name": "Current Temperature",
"device_class": DEVICE_CLASS_TEMPERATURE,

View File

@ -179,7 +179,7 @@ aioguardian==1.0.8
aioharmony==0.2.7
# homeassistant.components.homekit_controller
aiohomekit==0.6.0
aiohomekit==0.6.2
# homeassistant.components.emulated_hue
# homeassistant.components.http

View File

@ -115,7 +115,7 @@ aioguardian==1.0.8
aioharmony==0.2.7
# homeassistant.components.homekit_controller
aiohomekit==0.6.0
aiohomekit==0.6.2
# homeassistant.components.emulated_hue
# homeassistant.components.http

View File

@ -0,0 +1,74 @@
"""Make sure that Eve Degree (via Eve Extend) is enumerated properly."""
from homeassistant.helpers import device_registry as dr, entity_registry as er
from tests.components.homekit_controller.common import (
Helper,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_eve_degree_setup(hass):
"""Test that the accessory can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "eve_degree.json")
config_entry, pairing = await setup_test_accessories(hass, accessories)
entity_registry = er.async_get(hass)
device_registry = dr.async_get(hass)
sensors = [
(
"sensor.eve_degree_aa11_temperature",
"homekit-AA00A0A00000-22",
"Eve Degree AA11 Temperature",
),
(
"sensor.eve_degree_aa11_humidity",
"homekit-AA00A0A00000-27",
"Eve Degree AA11 Humidity",
),
(
"sensor.eve_degree_aa11_air_pressure",
"homekit-AA00A0A00000-aid:1-sid:30-cid:32",
"Eve Degree AA11 - Air Pressure",
),
(
"sensor.eve_degree_aa11_battery",
"homekit-AA00A0A00000-17",
"Eve Degree AA11 Battery",
),
(
"number.eve_degree_aa11",
"homekit-AA00A0A00000-aid:1-sid:30-cid:33",
"Eve Degree AA11",
),
]
device_ids = set()
for (entity_id, unique_id, friendly_name) in sensors:
entry = entity_registry.async_get(entity_id)
assert entry.unique_id == unique_id
helper = Helper(
hass,
entity_id,
pairing,
accessories[0],
config_entry,
)
state = await helper.poll_and_get_state()
assert state.attributes["friendly_name"] == friendly_name
device = device_registry.async_get(entry.device_id)
assert device.manufacturer == "Elgato"
assert device.name == "Eve Degree AA11"
assert device.model == "Eve Degree 00AAA0000"
assert device.sw_version == "1.2.8"
assert device.via_device_id is None
device_ids.add(entry.device_id)
# All entities should be part of same device
assert len(device_ids) == 1

View File

@ -0,0 +1,382 @@
[
{
"aid": 1,
"services": [
{
"characteristics": [
{
"format": "string",
"iid": 2,
"perms": [
"pr"
],
"type": "00000023-0000-1000-8000-0026BB765291",
"value": "Eve Degree AA11"
},
{
"format": "bool",
"iid": 3,
"perms": [
"pw"
],
"type": "00000014-0000-1000-8000-0026BB765291"
},
{
"format": "string",
"iid": 4,
"perms": [
"pr"
],
"type": "00000020-0000-1000-8000-0026BB765291",
"value": "Elgato"
},
{
"format": "string",
"iid": 5,
"perms": [
"pr"
],
"type": "00000021-0000-1000-8000-0026BB765291",
"value": "Eve Degree 00AAA0000"
},
{
"format": "string",
"iid": 6,
"perms": [
"pr"
],
"type": "00000030-0000-1000-8000-0026BB765291",
"value": "AA00A0A00000"
},
{
"format": "string",
"iid": 7,
"perms": [
"pr"
],
"type": "00000052-0000-1000-8000-0026BB765291",
"value": "1.2.8"
},
{
"format": "string",
"iid": 8,
"perms": [
"pr"
],
"type": "00000053-0000-1000-8000-0026BB765291",
"value": "1.0.0"
}
],
"iid": 1,
"type": "0000003E-0000-1000-8000-0026BB765291"
},
{
"characteristics": [
{
"format": "string",
"iid": 18,
"perms": [
"pr"
],
"type": "00000023-0000-1000-8000-0026BB765291",
"value": "Battery"
},
{
"format": "uint8",
"iid": 19,
"maxValue": 100,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"ev"
],
"type": "00000068-0000-1000-8000-0026BB765291",
"unit": "percentage",
"value": 65
},
{
"format": "uint8",
"iid": 20,
"maxValue": 2,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"ev"
],
"type": "0000008F-0000-1000-8000-0026BB765291",
"value": 2
},
{
"format": "uint8",
"iid": 21,
"maxValue": 1,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"ev"
],
"type": "00000079-0000-1000-8000-0026BB765291",
"value": 0
}
],
"iid": 17,
"type": "00000096-0000-1000-8000-0026BB765291"
},
{
"characteristics": [
{
"format": "string",
"iid": 23,
"perms": [
"pr"
],
"type": "00000023-0000-1000-8000-0026BB765291",
"value": "Eve Degree"
},
{
"format": "float",
"iid": 24,
"maxValue": 100,
"minStep": 0.1,
"minValue": -30,
"perms": [
"pr",
"ev"
],
"type": "00000011-0000-1000-8000-0026BB765291",
"unit": "celsius",
"value": 22.77191162109375
},
{
"format": "uint8",
"iid": 25,
"maxValue": 1,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"pw",
"ev"
],
"type": "00000036-0000-1000-8000-0026BB765291",
"value": 0
}
],
"iid": 22,
"type": "0000008A-0000-1000-8000-0026BB765291",
"primary": true
},
{
"characteristics": [
{
"format": "string",
"iid": 28,
"perms": [
"pr"
],
"type": "00000023-0000-1000-8000-0026BB765291",
"value": "Eve Degree"
},
{
"format": "float",
"iid": 29,
"maxValue": 100,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"ev"
],
"type": "00000010-0000-1000-8000-0026BB765291",
"unit": "percentage",
"value": 59.4818115234375
}
],
"iid": 27,
"type": "00000082-0000-1000-8000-0026BB765291"
},
{
"characteristics": [
{
"format": "string",
"iid": 31,
"perms": [
"pr"
],
"type": "00000023-0000-1000-8000-0026BB765291",
"value": "Eve Degree"
},
{
"format": "float",
"iid": 32,
"maxValue": 1100,
"minStep": 1,
"minValue": 870,
"perms": [
"pr"
],
"type": "E863F10F-079E-48FF-8F27-9C2605A29F52",
"value": 1005.7000122070312
},
{
"format": "float",
"iid": 33,
"maxValue": 9000,
"minStep": 1,
"minValue": -450,
"perms": [
"pr",
"pw",
"ev"
],
"type": "E863F130-079E-48FF-8F27-9C2605A29F52",
"value": 0
},
{
"format": "uint8",
"iid": 34,
"maxValue": 4,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"ev"
],
"type": "E863F135-079E-48FF-8F27-9C2605A29F52",
"value": 0
}
],
"iid": 30,
"type": "E863F00A-079E-48FF-8F27-9C2605A29F52"
},
{
"characteristics": [
{
"format": "string",
"iid": 36,
"perms": [
"pr"
],
"type": "00000023-0000-1000-8000-0026BB765291",
"value": "Logging"
},
{
"format": "data",
"iid": 37,
"perms": [
"pr",
"pw"
],
"type": "E863F11E-079E-48FF-8F27-9C2605A29F52",
"value": "HwABDh4AeAQKAIDVzj5aDMB/"
},
{
"format": "uint32",
"iid": 38,
"maxValue": 4294967295,
"minStep": 1,
"minValue": 0,
"perms": [
"pr",
"pw"
],
"type": "E863F112-079E-48FF-8F27-9C2605A29F52",
"value": 0
},
{
"format": "data",
"iid": 39,
"perms": [
"pw"
],
"type": "E863F11C-079E-48FF-8F27-9C2605A29F52"
},
{
"format": "data",
"iid": 40,
"perms": [
"pw"
],
"type": "E863F121-079E-48FF-8F27-9C2605A29F52"
},
{
"format": "data",
"iid": 41,
"perms": [
"pr"
],
"type": "E863F116-079E-48FF-8F27-9C2605A29F52",
"value": "/wkAAJEGAABnvbUmBQECAgIDAh4BJwEGAAAQuvIBAAEAAAABAA=="
},
{
"format": "data",
"iid": 42,
"perms": [
"pr"
],
"type": "E863F117-079E-48FF-8F27-9C2605A29F52",
"value": ""
},
{
"format": "tlv8",
"iid": 43,
"perms": [
"pr"
],
"type": "E863F131-079E-48FF-8F27-9C2605A29F52",
"value": "AAIeAAMCeAQEDFNVMTNHMUEwMDI4MAYCBgAHBLryAQALAgAABQEAAgTwKQAAXwQAAAAAGQIABRQBAw8EAAAAABoEAAAAACUE9griHtJHEAABQEJcLdwpUbihgRCESYX8bA7yLTF6IKhlxv5ohrqDkOEyRTNCM0VDNC1CNENCLTg0MjYtM0Q1QS0zMDJFNEIzRTZERDA="
},
{
"format": "tlv8",
"iid": 44,
"perms": [
"pw"
],
"type": "E863F11D-079E-48FF-8F27-9C2605A29F52"
}
],
"iid": 35,
"type": "E863F007-079E-48FF-8F27-9C2605A29F52",
"hidden": true
},
{
"characteristics": [
{
"format": "string",
"iid": 100001,
"perms": [
"pr"
],
"type": "E863F155-079E-48FF-8F27-9C2605A29F52",
"value": "11:11:11:11:11:11"
},
{
"format": "uint16",
"iid": 100002,
"perms": [
"pr"
],
"type": "E863F156-079E-48FF-8F27-9C2605A29F52",
"value": 10
},
{
"format": "uint8",
"iid": 100003,
"perms": [
"pr",
"ev"
],
"type": "E863F157-079E-48FF-8F27-9C2605A29F52",
"value": 1
}
],
"hidden": true,
"iid": 100000,
"type": "E863F00B-079E-48FF-8F27-9C2605A29F52"
}
]
}
]