Files
tencent_face_recognition/__init__.py
T
zimonianhua 14c2e56656 refactor: 重构服务层代码结构并优化性能
- 提取公共服务方法 _get_face_recognition、_check_result、_call_service
- 添加 HTTP Session 池化与 LRU 图片缓存
- 完善 create_person 错误处理,返回统一格式
- 卸载时正确关闭 client 连接释放资源
- 传感器适配 API 返回结构变化
- 全面更新 README 文档,补充服务说明与示例
2026-05-02 00:18:57 +08:00

81 lines
2.4 KiB
Python

"""
腾讯云人脸识别Home Assistant插件
"""
import logging
from typing import Dict, Any
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from .const import (
DOMAIN,
PLATFORMS,
CONF_SECRET_ID,
CONF_SECRET_KEY,
CONF_REGION,
CONF_PERSON_GROUP_ID,
get_entry_value,
)
from .tencent_cloud_client import TencentCloudClient
from .face_recognition import FaceRecognition
from .services import async_setup_services, async_unload_services
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""设置配置项"""
_LOGGER.info("设置腾讯云人脸识别插件")
secret_id = entry.data.get(CONF_SECRET_ID)
secret_key = entry.data.get(CONF_SECRET_KEY)
region = get_entry_value(entry, CONF_REGION, "ap-shanghai")
person_group_id = get_entry_value(entry, CONF_PERSON_GROUP_ID, "Hass")
try:
client = TencentCloudClient(secret_id, secret_key, region)
except Exception as ex:
_LOGGER.error("创建腾讯云客户端失败")
raise ConfigEntryNotReady(f"创建腾讯云客户端失败: {ex}")
face_recognition = FaceRecognition(hass, client)
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
"entry": entry,
"client": client,
"face_recognition": face_recognition,
"secret_id": secret_id,
"secret_key": secret_key,
"region": region,
"person_group_id": person_group_id
}
await async_setup_services(hass)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""卸载配置项"""
_LOGGER.info("卸载腾讯云人脸识别插件")
unload_ok = await hass.config_entries.async_forward_entry_unload(entry, "sensor")
if unload_ok:
await async_unload_services(hass)
entry_data = hass.data[DOMAIN].pop(entry.entry_id, None)
if entry_data and "client" in entry_data:
client = entry_data["client"]
await hass.async_add_executor_job(client.close)
return unload_ok
async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
"""移除配置项"""
_LOGGER.info("移除腾讯云人脸识别插件配置")