refactor: 全面重构腾讯云人脸识别插件

- 拆分 tencent_cloud_client.py(1311行)为 api_operations.py / image_processor.py / retry.py
- 更新 HA 废弃 API: SupportsResponse.OPTIONAL, async_unload_platforms, native_value, 移除 CONNECTION_CLASS
- 新增动态人员传感器管理(自动增/删)
- 新增 detect_face 服务定义(services.yaml)
- 移除 secret_key 持久化存储,增强安全性
- 完善错误映射前缀匹配 + 异常类型安全退避
- 修复 Coordinator 双重人员 ID 跟踪死代码
- 添加 _sanitize_error 脱敏,ImageCache LRU 缓存
- manifest.json 版本 2.1.0 + Pillow 依赖
This commit is contained in:
Hermes
2026-07-07 02:33:38 +08:00
parent 14c2e56656
commit 18a6a8ca9b
15 changed files with 1829 additions and 1345 deletions
+10 -8
View File
@@ -8,6 +8,7 @@ import voluptuous as vol
from homeassistant.core import HomeAssistant, ServiceCall
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.service import SupportsResponse
from .const import (
DOMAIN,
@@ -125,7 +126,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_FACE_SEARCH,
async_face_search_service,
schema=FACE_SEARCH_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
hass.services.async_register(
@@ -133,7 +134,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_DETECT_FACE,
async_detect_face_service,
schema=DETECT_FACE_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
hass.services.async_register(
@@ -141,7 +142,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_GET_FACE_ATTRIBUTES,
async_get_face_attributes_service,
schema=GET_FACE_ATTRIBUTES_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
hass.services.async_register(
@@ -149,7 +150,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_CREATE_PERSON,
async_create_person_service,
schema=CREATE_PERSON_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
hass.services.async_register(
@@ -157,7 +158,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_DELETE_PERSON,
async_delete_person_service,
schema=DELETE_PERSON_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
hass.services.async_register(
@@ -165,7 +166,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_CREATE_FACE,
async_create_face_service,
schema=CREATE_FACE_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
hass.services.async_register(
@@ -173,7 +174,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
SERVICE_DELETE_FACE,
async_delete_face_service,
schema=DELETE_FACE_SCHEMA,
supports_response=True
supports_response=SupportsResponse.OPTIONAL,
)
@@ -274,7 +275,8 @@ async def async_face_search_service(call: ServiceCall) -> Dict[str, Any]:
ATTR_PERSON_ID: candidate.get("person_id"),
ATTR_PERSON_NAME: candidate.get("person_name"),
"score": candidate.get("score"),
ATTR_PERSON_TAG: candidate.get("person_tag"),
ATTR_FACE_ID: candidate.get("face_id"),
"gender": candidate.get("gender"),
ATTR_GROUP_ID: group_id,
ATTR_CAMERA_ENTITY_ID: camera_entity_id,
})