返回顶部
h

ha-integration-patterns

Home Assistant custom integration patterns and architectural decisions. Use when building HACS integrations, custom components, or API bridges for Home Assistant. Covers service response data, HTTP views, storage APIs, and integration architecture.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
1,007
下载量
0
收藏
概述
安装方式
版本历史

ha-integration-patterns

# Home Assistant Integration Patterns ## Service Response Data Pattern ### The Problem By default, HA services are "fire-and-forget" and return empty arrays `[]`. ### The Solution (HA 2023.7+) Register service with `supports_response`: ```python from homeassistant.helpers.service import SupportsResponse hass.services.async_register( domain, "get_full_config", handle_get_full_config, schema=GET_CONFIG_SCHEMA, supports_response=SupportsResponse.ONLY, # ← KEY PARAMETER ) ``` Call with `?return_response` flag: ```bash curl -X POST "$HA_URL/api/services/your_domain/get_full_config?return_response" ``` ### Response Handler ```python async def handle_get_full_config(hass: HomeAssistant, call: ServiceCall): """Handle the service call and return data.""" # ... your logic ... return {"entities": entity_data, "automations": automation_data} ``` --- ## HTTP View vs Service: When to Use Each | Use Case | Use | Don't Use | |----------|-----|-----------| | Return complex data | HTTP View | Service (without response support) | | Fire-and-forget actions | Service | HTTP View | | Trigger automations | Service | HTTP View | | Query state/config | HTTP View | Internal storage APIs | ### HTTP View Pattern For data retrieval APIs: ```python from homeassistant.components.http import HomeAssistantView class OpenClawConfigView(HomeAssistantView): """HTTP view for retrieving config.""" url = "/api/openclaw/config" name = "api:openclaw:config" requires_auth = True async def get(self, request): hass = request.app["hass"] config = await get_config_data(hass) return json_response(config) # Register in async_setup: hass.http.register_view(OpenClawConfigView()) ``` --- ## Critical: Avoid Internal APIs **Never use underscore-prefixed APIs** — they're private and change between versions. ❌ **Wrong:** ```python storage_collection = hass.data["_storage_collection"] ``` ✅ **Right:** ```python # Use public APIs only from homeassistant.helpers.storage import Store store = Store(hass, STORAGE_VERSION, STORAGE_KEY) ``` --- ## Storage Patterns ### For Small Data (Settings, Cache) ```python from homeassistant.helpers.storage import Store STORAGE_KEY = "your_domain.storage" STORAGE_VERSION = 1 store = Store(hass, STORAGE_VERSION, STORAGE_KEY) # Save data = {"entities": modified_entities} await store.async_save(data) # Load data = await store.async_load() ``` ### For Large Data (History, Logs) Use external database or file storage, not HA storage helpers. --- ## Breaking Changes to Watch | Change | Version | Migration | |--------|---------|-----------| | Conversation agents | 2025.x+ | Use `async_process` directly | | Service response data | 2023.7+ | Add `supports_response` param | | Config entry migration | 2022.x+ | Use `async_migrate_entry` | **Always check:** https://www.home-assistant.io/blog/ for your target version range. --- ## HACS Integration Structure ``` custom_components/your_domain/ ├── __init__.py # async_setup_entry ├── config_flow.py # UI configuration ├── manifest.json # Dependencies, version ├── services.yaml # Service definitions └── storage_services.py # Your storage logic ``` ### Minimal manifest.json ```json { "domain": "your_domain", "name": "Your Integration", "codeowners": ["@yourusername"], "config_flow": true, "dependencies": [], "requirements": [], "version": "1.0.0" } ``` --- ## Testing Checklist - [ ] Service calls return expected data (with `?return_response`) - [ ] HTTP views accessible with auth token - [ ] No underscore-prefixed API usage - [ ] Storage persists across restarts - [ ] Config flow creates config entry - [ ] Error handling returns meaningful messages --- ## Documentation Resources - Integration basics: `developers.home-assistant.io/docs/creating_integration_index` - Service calls: `developers.home-assistant.io/docs/dev_101_services` - HTTP views: `developers.home-assistant.io/docs/api/webserver` - Breaking changes: `home-assistant.io/blog/` (filter by version) - HACS guidelines: `hacs.xyz/docs/publish/start` --- ## Lesson Learned From HA-OpenClaw Bridge attempt: > *"80% of our issues were discoverable with 30-60 minutes of upfront docs reading. We jumped straight to coding based on assumptions rather than reading how HA actually works."* Use `skills/pre-coding-research/` methodology before starting.

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 ha-integration-patterns-1776420052 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 ha-integration-patterns-1776420052 技能

通过命令行安装

skillhub install ha-integration-patterns-1776420052

下载 Zip 包

⬇ 下载 ha-integration-patterns v1.0.0

文件大小: 2.76 KB | 发布时间: 2026-4-17 19:59

v1.0.0 最新 2026-4-17 19:59
Initial release of Home Assistant Integration Patterns documentation.

- Provides architectural guidance for Home Assistant custom integrations, HACS components, and API bridges.
- Explains how to return data from services with the new `supports_response` parameter.
- Details when to use HTTP views versus services, with code samples.
- Highlights safe use of storage APIs, avoiding internal/private APIs.
- Includes HACS integration file structure and minimal `manifest.json` example.
- Features a practical testing checklist and documentation links.
- Summarizes key lessons learned from real integration scenarios.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部