mcpField
H
hass-config-flow

hass-config-flow

github.com/edmundmiller其他8046 次安装今天更新
代码仓库

关于 hass-config-flow

hass-config-flow 是用于管理 Home Assistant 的技能,涵盖实体检查、服务调用及需要配置流程的集成设置,并结合 hass-cli、REST API 操作和 NixOS 参考资料。

主要功能

  1. 01用 hass-cli 检查实体和设备
  2. 02调用 Home Assistant 服务
  3. 03启动、提交和终止配置流程
  4. 04注册应用凭据
  5. 05生成 API 令牌并查询 REST 端点

适用场景

  1. 01检查 Home Assistant 主机上的实体状态
  2. 02设置 Spotify 或 Matter 集成
  3. 03在 hass-cli 不支持时调用服务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/edmundmiller/dotfiles --skill hass-config-flow

安装后在 Claude Code 中输入/hass-config-flow确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
default-integrations.md
device-protocols.md
integration-flows.md
scripts/
ha-api.sh
ha-call.sh
ha-entities.sh
ha-flow.sh
ha-integrations.sh
ha-token.sh

详细介绍

Home Assistant REST API

文档:https://developers.home-assistant.io/docs/api/rest/

NixOS 的 extraComponents 会捆绑集成代码,但仅支持 config flow 的集成(Spotify、Matter、HomeKit Controller、Cast 等)需要通过 REST API 或 UI 完成设置。

hass-cli(检查和简单调用时优先使用)

NUC 上已安装 home-assistant-cli。列出实体、调用服务、管理设备/区域以及监听事件时,优先使用它,而不是原始 curl。

# On NUC (after getting a token):
export HASS_SERVER=http://localhost:8123
export HASS_TOKEN=<token>

hass-cli state list 'light.*'          # list entities by glob
hass-cli state get light.office        # get single entity (yaml)
hass-cli service call homeassistant.toggle --arguments entity_id=light.office
hass-cli device list                   # all devices with area
hass-cli area list                     # all areas
hass-cli device assign Kitchen --match "Kitchen Light"  # bulk assign area
hass-cli event watch                   # watch all events
hass-cli event watch deconz_event      # watch specific event type
hass-cli -o yaml state list            # yaml output
hass-cli -o json state list 'light.*' | jq '[.[] | {entity: .entity_id, name: .attributes.friendly_name, state: .state}]'
hass-cli -o json state list 'light.*' | python3 -c "import json,sys; d=json.load(sys.stdin); print([x['entity_id'] for x in d if x['state']=='on'])"

**注意:**当前 HA 中的 hass-cli info 无法使用(端点已弃用)。其他命令均可正常使用。

对于 config flow、应用凭据,以及 hass-cli 不支持的操作,请使用原始 curl(如下所示)。

查询 API(内联 SSH)

scripts/ 中的脚本仅存在于本地,无法通过路径在 NUC 上引用。请改用内联 SSH 命令。

获取令牌
TOKEN=$(ssh nuc "sudo python3 -c '
import hashlib, hmac, base64, time, json
auth = json.load(open(\"/var/lib/hass/.storage/auth\"))
for t in auth[\"data\"][\"refresh_tokens\"]:
    if t.get(\"client_name\") == \"agent-automation\":
        header = base64.urlsafe_b64encode(json.dumps({\"alg\":\"HS256\",\"typ\":\"JWT\"}).encode()).rstrip(b\"=\")
        now = int(time.time())
        payload = base64.urlsafe_b64encode(json.dumps({\"iss\":t[\"id\"],\"iat\":now,\"exp\":now+86400*365}).encode()).rstrip(b\"=\")
        sig_input = header + b\".\" + payload
        sig = base64.urlsafe_b64encode(hmac.new(t[\"jwt_key\"].encode(), sig_input, hashlib.sha256).digest()).rstrip(b\"=\")
        print((sig_input + b\".\" + sig).decode())
        break
'" 2>/dev/null)
列出实体(按域)
ssh nuc "curl -s -H 'Authorization: Bearer $TOKEN' http://localhost:8123/api/states" | python3 -c "
import json, sys
states = json.load(sys.stdin)
for s in sorted(states, key=lambda x: x['entity_id']):
    eid = s['entity_id']
    name = s['attributes'].get('friendly_name', '')
    domain = eid.split('.')[0]
    if domain in ('light', 'switch', 'cover', 'media_player', 'fan', 'binary_sensor', 'scene', 'humidifier'):
        print(f'{eid:55s} {name}')
"

根据需要修改 domain in (...) 过滤条件,或者移除该条件以列出所有实体。

调用服务
ssh nuc "curl -s -X POST -H 'Authorization: Bearer $TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{\"entity_id\": \"media_player.tv\"}' \
  http://localhost:8123/api/services/media_player/turn_off"
启动 config flow
ssh nuc "curl -s -X POST -H 'Authorization: Bearer $TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{\"handler\": \"spotify\"}' \
  http://localhost:8123/api/config/config_entries/flow"
辅助脚本(参考)

scripts/ 中的脚本可用于参考 API 模式,但必须通过 SSH 管道传输或直接内联;这些脚本不会部署到 NUC 上。

脚本用途
ha-token.sh从身份验证存储生成 JWT
ha-api.sh通用 API 包装器
ha-entities.sh按域列出实体
ha-integrations.sh列出已配置的集成
ha-call.sh在实体上调用服务
ha-flow.sh管理 config flow(启动/提交)

参考资料

请阅读以下内容以了解详细信息:

文件内容
references/integration-flows.md各集成的 config flow 行为、中止原因、mDNS 发现命令
references/default-integrations.mdNixOS 的 defaultIntegrations 列表——自动加载的内容、Nix 配置示例
references/device-protocols.md根据设备注册表识别设备协议(Matter/Zigbee/Thread/HomeKit);厂商型号命名惯例;ZHA 迁移决策树

令牌生成

HA 长期令牌是 HS256 JWT,使用 /var/lib/hass/.storage/auth 中每个令牌对应的密钥签名。请使用 scripts/ha-token.sh 或内联执行:

ssh nuc "sudo bash ha-token.sh"           # uses "agent-automation" token
ssh nuc "sudo bash ha-token.sh my-token"  # use a different token name

如果尚无令牌,请通过 HA UI 创建: 个人资料 → 安全性 → 长期访问令牌 → 创建令牌

验证:curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8123/api/ → {"message":"API running."}

API 快速参考

所有请求均发送至 http://127.0.0.1:8123,并携带 Authorization: Bearer $TOKEN。

操作方法端点请求体
健康检查GET/api/—
HA 配置GET/api/config—
列出状态GET/api/states—
获取实体状态GET/api/states/{entity_id}—
设置实体状态POST/api/states/{entity_id}{"state": "...", "attributes": {...}}
触发事件POST/api/events/{event_type}{...event_data}
调用服务POST/api/services/{domain}/{service}{"entity_id": "..."} + 服务数据
列出服务GET/api/services—
列出配置条目GET/api/config/config_entries/entry—
启动配置流程POST/api/config/config_entries/flow{"handler": "domain"}
提交流程步骤POST/api/config/config_entries/flow/{flow_id}步骤专属数据
中止流程DELETE/api/config/config_entries/flow/{flow_id}—
删除配置条目DELETE/api/config/config_entries/entry/{entry_id}—
添加应用凭据POST/api/config/application_credentials{"domain":"...","client_id":"...","client_secret":"..."}
渲染模板POST/api/template{"template": "{{ states('...') }}"}
检查配置POST/api/config/core/check_config—

关键工作流

配置流程(非 OAuth)
ha-flow.sh start cast           # auto-discovery, usually creates entry immediately
ha-flow.sh start matter         # returns form → submit with URL
ha-flow.sh submit <flow_id> '{"url":"ws://localhost:5580/ws"}'
OAuth 集成(Spotify、Google 等)
  1. 先注册应用凭据(中止原因:missing_credentials)
  2. 启动配置流程 — 返回供用户使用的授权 URL
ha-api.sh POST /api/config/application_credentials \
  '{"domain":"spotify","client_id":"ID","client_secret":"SECRET"}'
ha-flow.sh start spotify

有关各集成的详细信息,请参阅 references/integration-flows.md。

NixOS 环境

  • 身份验证存储:/var/lib/hass/.storage/auth
  • API:http://127.0.0.1:8123(仅限本地主机),通过 Tailscale serve 使用 HTTPS
  • 公共 URL:https://homeassistant.cinnamon-rooster.ts.net/
  • defaultIntegrations 会自动加载输入助手、自动化、场景、脚本等 — 请参阅 references/default-integrations.md

评论

支持 Markdown