Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
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.
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.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
By default, HA services are "fire-and-forget" and return empty arrays [].
Register service with supports_response: 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: curl -X POST "$HA_URL/api/services/your_domain/get_full_config?return_response"
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}
Use CaseUseDon't UseReturn complex dataHTTP ViewService (without response support)Fire-and-forget actionsServiceHTTP ViewTrigger automationsServiceHTTP ViewQuery state/configHTTP ViewInternal storage APIs
For data retrieval APIs: 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())
Never use underscore-prefixed APIs โ they're private and change between versions. โ Wrong: storage_collection = hass.data["_storage_collection"] โ Right: # Use public APIs only from homeassistant.helpers.storage import Store store = Store(hass, STORAGE_VERSION, STORAGE_KEY)
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()
Use external database or file storage, not HA storage helpers.
ChangeVersionMigrationConversation agents2025.x+Use async_process directlyService response data2023.7+Add supports_response paramConfig entry migration2022.x+Use async_migrate_entry Always check: https://www.home-assistant.io/blog/ for your target version range.
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
{ "domain": "your_domain", "name": "Your Integration", "codeowners": ["@yourusername"], "config_flow": true, "dependencies": [], "requirements": [], "version": "1.0.0" }
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
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
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.
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.