Merge pull request #76535 from home-assistant/rc

This commit is contained in:
Paulus Schoutsen 2022-08-09 21:55:49 -04:00 committed by GitHub
commit 0fd38ef9f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 445 additions and 33 deletions

View File

@ -15,6 +15,10 @@
"manufacturer_id": 18994, "manufacturer_id": 18994,
"service_uuid": "00008551-0000-1000-8000-00805f9b34fb" "service_uuid": "00008551-0000-1000-8000-00805f9b34fb"
}, },
{
"manufacturer_id": 818,
"service_uuid": "00008551-0000-1000-8000-00805f9b34fb"
},
{ {
"manufacturer_id": 14474, "manufacturer_id": 14474,
"service_uuid": "00008151-0000-1000-8000-00805f9b34fb" "service_uuid": "00008151-0000-1000-8000-00805f9b34fb"
@ -24,7 +28,7 @@
"service_uuid": "00008251-0000-1000-8000-00805f9b34fb" "service_uuid": "00008251-0000-1000-8000-00805f9b34fb"
} }
], ],
"requirements": ["govee-ble==0.12.6"], "requirements": ["govee-ble==0.14.0"],
"dependencies": ["bluetooth"], "dependencies": ["bluetooth"],
"codeowners": ["@bdraco"], "codeowners": ["@bdraco"],
"iot_class": "local_push" "iot_class": "local_push"

View File

@ -3,7 +3,7 @@
"name": "HomeKit Controller", "name": "HomeKit Controller",
"config_flow": true, "config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/homekit_controller", "documentation": "https://www.home-assistant.io/integrations/homekit_controller",
"requirements": ["aiohomekit==1.2.5"], "requirements": ["aiohomekit==1.2.8"],
"zeroconf": ["_hap._tcp.local.", "_hap._udp.local."], "zeroconf": ["_hap._tcp.local.", "_hap._udp.local."],
"bluetooth": [{ "manufacturer_id": 76, "manufacturer_data_start": [6] }], "bluetooth": [{ "manufacturer_id": 76, "manufacturer_data_start": [6] }],
"dependencies": ["bluetooth", "zeroconf"], "dependencies": ["bluetooth", "zeroconf"],

View File

@ -17,7 +17,7 @@ from pyicloud.services.findmyiphone import AppleDevice
from homeassistant.components.zone import async_active_zone from homeassistant.components.zone import async_active_zone
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry
from homeassistant.const import ATTR_ATTRIBUTION, CONF_USERNAME from homeassistant.const import ATTR_ATTRIBUTION, CONF_USERNAME
from homeassistant.core import HomeAssistant from homeassistant.core import CALLBACK_TYPE, HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.event import track_point_in_utc_time from homeassistant.helpers.event import track_point_in_utc_time
@ -104,6 +104,8 @@ class IcloudAccount:
self._retried_fetch = False self._retried_fetch = False
self._config_entry = config_entry self._config_entry = config_entry
self.listeners: list[CALLBACK_TYPE] = []
def setup(self) -> None: def setup(self) -> None:
"""Set up an iCloud account.""" """Set up an iCloud account."""
try: try:

View File

@ -35,7 +35,7 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up device tracker for iCloud component.""" """Set up device tracker for iCloud component."""
account = hass.data[DOMAIN][entry.unique_id] account: IcloudAccount = hass.data[DOMAIN][entry.unique_id]
tracked = set[str]() tracked = set[str]()
@callback @callback

View File

@ -20,7 +20,7 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up device tracker for iCloud component.""" """Set up device tracker for iCloud component."""
account = hass.data[DOMAIN][entry.unique_id] account: IcloudAccount = hass.data[DOMAIN][entry.unique_id]
tracked = set[str]() tracked = set[str]()
@callback @callback

View File

@ -7,9 +7,10 @@
{ "local_name": "sps" }, { "local_name": "sps" },
{ "local_name": "Inkbird*" }, { "local_name": "Inkbird*" },
{ "local_name": "iBBQ*" }, { "local_name": "iBBQ*" },
{ "local_name": "xBBQ*" },
{ "local_name": "tps" } { "local_name": "tps" }
], ],
"requirements": ["inkbird-ble==0.5.1"], "requirements": ["inkbird-ble==0.5.2"],
"dependencies": ["bluetooth"], "dependencies": ["bluetooth"],
"codeowners": ["@bdraco"], "codeowners": ["@bdraco"],
"iot_class": "local_push" "iot_class": "local_push"

View File

@ -3,6 +3,8 @@ from __future__ import annotations
import asyncio import asyncio
from datetime import timedelta from datetime import timedelta
import logging
import traceback
from typing import Any from typing import Any
from aionotion import async_get_client from aionotion import async_get_client
@ -31,7 +33,6 @@ PLATFORMS = [Platform.BINARY_SENSOR, Platform.SENSOR]
ATTR_SYSTEM_MODE = "system_mode" ATTR_SYSTEM_MODE = "system_mode"
ATTR_SYSTEM_NAME = "system_name" ATTR_SYSTEM_NAME = "system_name"
DEFAULT_ATTRIBUTION = "Data provided by Notion"
DEFAULT_SCAN_INTERVAL = timedelta(minutes=1) DEFAULT_SCAN_INTERVAL = timedelta(minutes=1)
CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False) CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False)
@ -75,6 +76,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
f"There was a Notion error while updating {attr}: {result}" f"There was a Notion error while updating {attr}: {result}"
) from result ) from result
if isinstance(result, Exception): if isinstance(result, Exception):
if LOGGER.isEnabledFor(logging.DEBUG):
LOGGER.debug("".join(traceback.format_tb(result.__traceback__)))
raise UpdateFailed( raise UpdateFailed(
f"There was an unknown error while updating {attr}: {result}" f"There was an unknown error while updating {attr}: {result}"
) from result ) from result

View File

@ -437,7 +437,7 @@ class RainMachineEntity(CoordinatorEntity):
self.async_write_ha_state() self.async_write_ha_state()
async def async_added_to_hass(self) -> None: async def async_added_to_hass(self) -> None:
"""Handle entity which will be added.""" """When entity is added to hass."""
await super().async_added_to_hass() await super().async_added_to_hass()
self.update_from_latest_data() self.update_from_latest_data()

View File

@ -77,7 +77,6 @@ BINARY_SENSOR_DESCRIPTIONS = (
name="Hourly restrictions", name="Hourly restrictions",
icon="mdi:cancel", icon="mdi:cancel",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
api_category=DATA_RESTRICTIONS_CURRENT, api_category=DATA_RESTRICTIONS_CURRENT,
data_key="hourly", data_key="hourly",
), ),
@ -86,7 +85,6 @@ BINARY_SENSOR_DESCRIPTIONS = (
name="Month restrictions", name="Month restrictions",
icon="mdi:cancel", icon="mdi:cancel",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
api_category=DATA_RESTRICTIONS_CURRENT, api_category=DATA_RESTRICTIONS_CURRENT,
data_key="month", data_key="month",
), ),
@ -95,7 +93,6 @@ BINARY_SENSOR_DESCRIPTIONS = (
name="Rain delay restrictions", name="Rain delay restrictions",
icon="mdi:cancel", icon="mdi:cancel",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
api_category=DATA_RESTRICTIONS_CURRENT, api_category=DATA_RESTRICTIONS_CURRENT,
data_key="rainDelay", data_key="rainDelay",
), ),
@ -113,7 +110,6 @@ BINARY_SENSOR_DESCRIPTIONS = (
name="Weekday restrictions", name="Weekday restrictions",
icon="mdi:cancel", icon="mdi:cancel",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
api_category=DATA_RESTRICTIONS_CURRENT, api_category=DATA_RESTRICTIONS_CURRENT,
data_key="weekDay", data_key="weekDay",
), ),

View File

@ -20,31 +20,32 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
def get_service(hass, config, discovery_info=None): def get_service(hass, config, discovery_info=None):
"""Get the SMS notification service.""" """Get the SMS notification service."""
if SMS_GATEWAY not in hass.data[DOMAIN]:
_LOGGER.error("SMS gateway not found, cannot initialize service")
return
gateway = hass.data[DOMAIN][SMS_GATEWAY][GATEWAY]
if discovery_info is None: if discovery_info is None:
number = config[CONF_RECIPIENT] number = config[CONF_RECIPIENT]
else: else:
number = discovery_info[CONF_RECIPIENT] number = discovery_info[CONF_RECIPIENT]
return SMSNotificationService(gateway, number) return SMSNotificationService(hass, number)
class SMSNotificationService(BaseNotificationService): class SMSNotificationService(BaseNotificationService):
"""Implement the notification service for SMS.""" """Implement the notification service for SMS."""
def __init__(self, gateway, number): def __init__(self, hass, number):
"""Initialize the service.""" """Initialize the service."""
self.gateway = gateway
self.hass = hass
self.number = number self.number = number
async def async_send_message(self, message="", **kwargs): async def async_send_message(self, message="", **kwargs):
"""Send SMS message.""" """Send SMS message."""
if SMS_GATEWAY not in self.hass.data[DOMAIN]:
_LOGGER.error("SMS gateway not found, cannot send message")
return
gateway = self.hass.data[DOMAIN][SMS_GATEWAY][GATEWAY]
targets = kwargs.get(CONF_TARGET, [self.number]) targets = kwargs.get(CONF_TARGET, [self.number])
smsinfo = { smsinfo = {
"Class": -1, "Class": -1,
@ -67,6 +68,6 @@ class SMSNotificationService(BaseNotificationService):
encoded_message["Number"] = target encoded_message["Number"] = target
try: try:
# Actually send the message # Actually send the message
await self.gateway.send_sms_async(encoded_message) await gateway.send_sms_async(encoded_message)
except gammu.GSMError as exc: except gammu.GSMError as exc:
_LOGGER.error("Sending to %s failed: %s", target, exc) _LOGGER.error("Sending to %s failed: %s", target, exc)

View File

@ -3,7 +3,7 @@
"name": "UniFi Protect", "name": "UniFi Protect",
"config_flow": true, "config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/unifiprotect", "documentation": "https://www.home-assistant.io/integrations/unifiprotect",
"requirements": ["pyunifiprotect==4.0.11", "unifi-discovery==1.1.5"], "requirements": ["pyunifiprotect==4.0.12", "unifi-discovery==1.1.5"],
"dependencies": ["http"], "dependencies": ["http"],
"codeowners": ["@briis", "@AngellusMortis", "@bdraco"], "codeowners": ["@briis", "@AngellusMortis", "@bdraco"],
"quality_scale": "platinum", "quality_scale": "platinum",

View File

@ -7,7 +7,7 @@ from .backports.enum import StrEnum
MAJOR_VERSION: Final = 2022 MAJOR_VERSION: Final = 2022
MINOR_VERSION: Final = 8 MINOR_VERSION: Final = 8
PATCH_VERSION: Final = "2" PATCH_VERSION: Final = "3"
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
__version__: Final = f"{__short_version__}.{PATCH_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}"
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0)

View File

@ -41,6 +41,11 @@ BLUETOOTH: list[dict[str, str | int | list[int]]] = [
"manufacturer_id": 18994, "manufacturer_id": 18994,
"service_uuid": "00008551-0000-1000-8000-00805f9b34fb" "service_uuid": "00008551-0000-1000-8000-00805f9b34fb"
}, },
{
"domain": "govee_ble",
"manufacturer_id": 818,
"service_uuid": "00008551-0000-1000-8000-00805f9b34fb"
},
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 14474, "manufacturer_id": 14474,
@ -70,6 +75,10 @@ BLUETOOTH: list[dict[str, str | int | list[int]]] = [
"domain": "inkbird", "domain": "inkbird",
"local_name": "iBBQ*" "local_name": "iBBQ*"
}, },
{
"domain": "inkbird",
"local_name": "xBBQ*"
},
{ {
"domain": "inkbird", "domain": "inkbird",
"local_name": "tps" "local_name": "tps"

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "homeassistant" name = "homeassistant"
version = "2022.8.2" version = "2022.8.3"
license = {text = "Apache-2.0"} license = {text = "Apache-2.0"}
description = "Open-source home automation platform running on Python 3." description = "Open-source home automation platform running on Python 3."
readme = "README.rst" readme = "README.rst"

View File

@ -168,7 +168,7 @@ aioguardian==2022.07.0
aioharmony==0.2.9 aioharmony==0.2.9
# homeassistant.components.homekit_controller # homeassistant.components.homekit_controller
aiohomekit==1.2.5 aiohomekit==1.2.8
# homeassistant.components.emulated_hue # homeassistant.components.emulated_hue
# homeassistant.components.http # homeassistant.components.http
@ -760,7 +760,7 @@ googlemaps==2.5.1
goslide-api==0.5.1 goslide-api==0.5.1
# homeassistant.components.govee_ble # homeassistant.components.govee_ble
govee-ble==0.12.6 govee-ble==0.14.0
# homeassistant.components.remote_rpi_gpio # homeassistant.components.remote_rpi_gpio
gpiozero==1.6.2 gpiozero==1.6.2
@ -902,7 +902,7 @@ influxdb-client==1.24.0
influxdb==5.3.1 influxdb==5.3.1
# homeassistant.components.inkbird # homeassistant.components.inkbird
inkbird-ble==0.5.1 inkbird-ble==0.5.2
# homeassistant.components.insteon # homeassistant.components.insteon
insteon-frontend-home-assistant==0.2.0 insteon-frontend-home-assistant==0.2.0
@ -2003,7 +2003,7 @@ pytrafikverket==0.2.0.1
pyudev==0.23.2 pyudev==0.23.2
# homeassistant.components.unifiprotect # homeassistant.components.unifiprotect
pyunifiprotect==4.0.11 pyunifiprotect==4.0.12
# homeassistant.components.uptimerobot # homeassistant.components.uptimerobot
pyuptimerobot==22.2.0 pyuptimerobot==22.2.0

View File

@ -152,7 +152,7 @@ aioguardian==2022.07.0
aioharmony==0.2.9 aioharmony==0.2.9
# homeassistant.components.homekit_controller # homeassistant.components.homekit_controller
aiohomekit==1.2.5 aiohomekit==1.2.8
# homeassistant.components.emulated_hue # homeassistant.components.emulated_hue
# homeassistant.components.http # homeassistant.components.http
@ -561,7 +561,7 @@ google-nest-sdm==2.0.0
googlemaps==2.5.1 googlemaps==2.5.1
# homeassistant.components.govee_ble # homeassistant.components.govee_ble
govee-ble==0.12.6 govee-ble==0.14.0
# homeassistant.components.gree # homeassistant.components.gree
greeclimate==1.3.0 greeclimate==1.3.0
@ -655,7 +655,7 @@ influxdb-client==1.24.0
influxdb==5.3.1 influxdb==5.3.1
# homeassistant.components.inkbird # homeassistant.components.inkbird
inkbird-ble==0.5.1 inkbird-ble==0.5.2
# homeassistant.components.insteon # homeassistant.components.insteon
insteon-frontend-home-assistant==0.2.0 insteon-frontend-home-assistant==0.2.0
@ -1354,7 +1354,7 @@ pytrafikverket==0.2.0.1
pyudev==0.23.2 pyudev==0.23.2
# homeassistant.components.unifiprotect # homeassistant.components.unifiprotect
pyunifiprotect==4.0.11 pyunifiprotect==4.0.12
# homeassistant.components.uptimerobot # homeassistant.components.uptimerobot
pyuptimerobot==22.2.0 pyuptimerobot==22.2.0

View File

@ -0,0 +1,356 @@
[
{
"aid": 1,
"services": [
{
"iid": 1,
"type": "0000003E-0000-1000-8000-0026BB765291",
"characteristics": [
{
"type": "00000020-0000-1000-8000-0026BB765291",
"iid": 4,
"perms": ["pr"],
"format": "string",
"value": "Schlage ",
"description": "Manufacturer",
"maxLen": 64
},
{
"type": "00000021-0000-1000-8000-0026BB765291",
"iid": 5,
"perms": ["pr"],
"format": "string",
"value": "BE479CAM619",
"description": "Model",
"maxLen": 64
},
{
"type": "00000023-0000-1000-8000-0026BB765291",
"iid": 6,
"perms": ["pr"],
"format": "string",
"value": "SENSE ",
"description": "Name",
"maxLen": 64
},
{
"type": "00000030-0000-1000-8000-0026BB765291",
"iid": 7,
"perms": ["pr"],
"format": "string",
"value": "AAAAAAA000",
"description": "Serial Number",
"maxLen": 64
},
{
"type": "00000014-0000-1000-8000-0026BB765291",
"iid": 3,
"perms": ["pw"],
"format": "bool",
"description": "Identify"
},
{
"type": "00000052-0000-1000-8000-0026BB765291",
"iid": 8,
"perms": ["pr"],
"format": "string",
"value": "004.027.000",
"description": "Firmware Revision",
"maxLen": 64
},
{
"type": "00000053-0000-1000-8000-0026BB765291",
"iid": 51,
"perms": ["pr"],
"format": "string",
"value": "1.3.0",
"description": "Hardware Revision",
"maxLen": 64
},
{
"type": "00000054-0000-1000-8000-0026BB765291",
"iid": 50,
"perms": ["pr"],
"format": "string",
"value": "002.001.000",
"maxLen": 64
}
]
},
{
"iid": 10,
"type": "7F0DEE73-4A3F-4103-98E6-A46CD301BDFB",
"characteristics": [
{
"type": "44FF6853-58DB-4956-B298-5F6650DD61F6",
"iid": 25,
"perms": ["pw"],
"format": "data"
},
{
"type": "CF68C40F-DC6F-4F7E-918C-4C536B643A2B",
"iid": 26,
"perms": ["pr", "pw"],
"format": "uint8",
"value": 0,
"minValue": 0,
"maxValue": 3,
"minStep": 1
},
{
"type": "4058C2B8-4545-4E77-B6B7-157C38F9718B",
"iid": 27,
"perms": ["pr", "pw"],
"format": "uint8",
"value": 0,
"minValue": 1,
"maxValue": 5,
"minStep": 1
},
{
"type": "B498F4B5-6364-4F79-B5CC-1563ADE070DF",
"iid": 28,
"perms": ["pr", "pw"],
"format": "uint8",
"value": 1,
"minValue": 0,
"maxValue": 1
},
{
"type": "AFAE7AD2-8DD3-4B20-BAE0-C0B18B79EDB5",
"iid": 29,
"perms": ["pw"],
"format": "data"
},
{
"type": "87D91EC6-C508-4CAD-89F1-A21B0BF179A0",
"iid": 30,
"perms": ["pr"],
"format": "data",
"value": "000a00000000000000000000"
},
{
"type": "4C3E2641-F57F-11E3-A3AC-0800200C9A66",
"iid": 31,
"perms": ["pr"],
"format": "uint64",
"value": 3468600224
},
{
"type": "EEC26990-F628-11E3-A3AC-0800200C9A66",
"iid": 32,
"perms": ["pr", "pw"],
"format": "uint8",
"value": 4,
"minValue": 4,
"maxValue": 8,
"minStep": 1
},
{
"type": "BCDE3B9E-3963-4123-B24D-42ECCBB3A9C4",
"iid": 33,
"perms": ["pr"],
"format": "data",
"value": "4e6f6e65"
},
{
"type": "A9464D14-6806-4375-BA53-E14F7E0A6BEE",
"iid": 34,
"perms": ["pr", "pw"],
"format": null,
"value": "ff"
},
{
"type": "00000023-0000-1000-8000-0026BB765291",
"iid": 35,
"perms": ["pr"],
"format": "string",
"value": "Additional Settings",
"description": "Name",
"maxLen": 64
},
{
"type": "63D23C2F-2FBB-45E8-8540-47CC26C517D0",
"iid": 36,
"perms": ["pr"],
"format": "uint8",
"value": 100
}
]
},
{
"iid": 23,
"type": "00000044-0000-1000-8000-0026BB765291",
"characteristics": [
{
"type": "00000019-0000-1000-8000-0026BB765291",
"iid": 16,
"perms": ["pw"],
"format": "data",
"description": "Lock Control Point"
},
{
"type": "00000037-0000-1000-8000-0026BB765291",
"iid": 17,
"perms": ["pr"],
"format": "string",
"value": "02.00.00",
"description": "Version",
"maxLen": 64
},
{
"type": "0000001F-0000-1000-8000-0026BB765291",
"iid": 18,
"perms": ["pr"],
"format": "data",
"value": "012431443133423434392d423941312d334135392d463042412d3245393030304233453430450208000000000000000003010404030001ff",
"description": "Logs"
},
{
"type": "00000005-0000-1000-8000-0026BB765291",
"iid": 19,
"perms": ["pr", "pw"],
"format": "bool",
"value": true,
"description": "Audio Feedback"
},
{
"type": "0000001A-0000-1000-8000-0026BB765291",
"iid": 20,
"perms": ["pr", "pw"],
"format": "uint32",
"value": 0,
"description": "Lock Management Auto Security Timeout",
"unit": "seconds"
},
{
"type": "00000001-0000-1000-8000-0026BB765291",
"iid": 21,
"perms": ["pr", "pw"],
"format": "bool",
"value": false,
"description": "Administrator Only Access"
}
]
},
{
"iid": 30,
"type": "00000045-0000-1000-8000-0026BB765291",
"characteristics": [
{
"type": "0000001D-0000-1000-8000-0026BB765291",
"iid": 11,
"perms": ["pr", "ev"],
"format": "uint8",
"value": 3,
"description": "Lock Current State",
"minValue": 0,
"maxValue": 3,
"minStep": 1
},
{
"type": "0000001E-0000-1000-8000-0026BB765291",
"iid": 12,
"perms": ["pr", "pw", "ev"],
"format": "uint8",
"value": 1,
"description": "Lock Target State",
"minValue": 0,
"maxValue": 1,
"minStep": 1
},
{
"type": "00000023-0000-1000-8000-0026BB765291",
"iid": 13,
"perms": ["pr"],
"format": "string",
"value": "Lock Mechanism",
"description": "Name",
"maxLen": 64
}
]
},
{
"iid": 34,
"type": "1F6B43AA-94DE-4BA9-981C-DA38823117BD",
"characteristics": [
{
"type": "048D8799-695B-4A7F-A7F7-A4A1301587FE",
"iid": 39,
"perms": ["pw"],
"format": "data"
},
{
"type": "66B7C7FD-95A7-4F89-B0AD-38073A67C46C",
"iid": 40,
"perms": ["pw"],
"format": "data"
},
{
"type": "507EFC3F-9231-438C-976A-FA04427F1F8F",
"iid": 41,
"perms": ["pw"],
"format": "data"
},
{
"type": "1DC15719-0882-4BAD-AB0F-9AEAB0600C90",
"iid": 42,
"perms": ["pr"],
"format": "data",
"value": "03"
}
]
},
{
"iid": 39,
"type": "00000055-0000-1000-8000-0026BB765291",
"characteristics": [
{
"type": "0000004C-0000-1000-8000-0026BB765291",
"iid": 45,
"perms": [],
"format": "data",
"description": "Pair Setup"
},
{
"type": "0000004E-0000-1000-8000-0026BB765291",
"iid": 46,
"perms": [],
"format": "data",
"description": "Pair Verify"
},
{
"type": "0000004F-0000-1000-8000-0026BB765291",
"iid": 47,
"perms": [],
"format": "uint8",
"description": "Pairing Features"
},
{
"type": "00000050-0000-1000-8000-0026BB765291",
"iid": 48,
"perms": ["pr", "pw"],
"format": "data",
"value": null,
"description": "Pairing Pairings"
}
]
},
{
"iid": 44,
"type": "000000A2-0000-1000-8000-0026BB765291",
"characteristics": [
{
"type": "00000037-0000-1000-8000-0026BB765291",
"iid": 62,
"perms": ["pr"],
"format": "string",
"value": "02.00.00",
"description": "Version",
"maxLen": 64
}
]
}
]
}
]

View File

@ -0,0 +1,40 @@
"""Make sure that Schlage Sense is enumerated properly."""
from tests.components.homekit_controller.common import (
HUB_TEST_ACCESSORY_ID,
DeviceTestInfo,
EntityTestInfo,
assert_devices_and_entities_created,
setup_accessories_from_file,
setup_test_accessories,
)
async def test_schlage_sense_setup(hass):
"""Test that the accessory can be correctly setup in HA."""
accessories = await setup_accessories_from_file(hass, "schlage_sense.json")
await setup_test_accessories(hass, accessories)
await assert_devices_and_entities_created(
hass,
DeviceTestInfo(
unique_id=HUB_TEST_ACCESSORY_ID,
name="SENSE ",
model="BE479CAM619",
manufacturer="Schlage ",
sw_version="004.027.000",
hw_version="1.3.0",
serial_number="AAAAAAA000",
devices=[],
entities=[
EntityTestInfo(
entity_id="lock.sense_lock_mechanism",
friendly_name="SENSE Lock Mechanism",
unique_id="homekit-AAAAAAA000-30",
supported_features=0,
state="unknown",
),
],
),
)