dsh-homeassistant:让 DSH 通过 Home Assistant 控制米家设备

前言

在 DSH 里给 AI 配工具时,如果想控制米家 App 里的灯、空调、风扇,常见做法是找直连小米云的脚本或模拟 App 点击。米家没有对个人开放的 API,主流第三方库(python-miio + micloud)的登录流程已被小米改动,实测会返回 MiCloudAccessDenied,密码正确也登不上。下面介绍社区插件 dsh-homeassistant:它不直连米家,而是把请求转发到本机或局域网内的 Home Assistant,再经 Xiaomi Miot Auto 集成间接控制设备。配好后,对话里可以用自然语言开关灯、调亮度、设空调温度,不靠手机、不靠模拟点击,底层是一条 HTTP 请求打到 HA 的 REST API。

这是什么

dsh-homeassistant 是 DeepSeek Harness 的联网工具类插件,维护者为 huhuai-ni,当前版本 0.2.1,许可证 MIT,源码在 GitHub,社区目录页见 SkillHub。

插件由两半组成:

半边 作用
后端(index.js) 注册 ha_* 工具,转发到 Home Assistant REST API;提供 /api/ha/* 供设置页使用
前端(client.js) 在 DSH 设置 → 插件 中增加「家庭助理」:填地址、令牌、看设备列表、直接开关、拖亮度

小米账号密码只填在 Home Assistant 的 Xiaomi Miot 集成里,本插件不保存账号密码;地址、长期令牌和别名保存在本机 ~/.dsh/homeassistant/config.json。

能控制什么

控制范围取决于 HA 里已接入的实体,README 中与米家相关的说明如下:

类型 能力概要
米家灯 开关、亮度、色温
插座 / 开关面板 开关
空调(含空调伴侣 / 红外) climate:开关、温度、模式
风扇(含红外款) fan:开关、档位
窗帘电机 cover:开 / 关
场景 / 自动化 经 ha_service 触发 scene / script
小爱音箱 部分:media_player 开关、音量;不能让它开口说话
门锁 / 摄像头 不提供相关操作

架构概览

数据流可以概括为:

DSH 插件 ──HTTP(Bearer 令牌)──▶ Home Assistant :8123 ──Xiaomi Miot──▶ 小米云 / 局域网 ──▶ 设备
         ▲
         └── 设置页(client.js)经 /api/ha/*

对话侧会调用 ha_status、ha_entities、ha_state、ha_control、ha_light、ha_all_off、ha_service 等工具;设置页通过同一后端路由管理连接与设备表格。

安装与启用

插件 README 把 Home Assistant 与 Xiaomi Miot 列为前置。下面按官方文档顺序说明;路径示例来自 README(Windows 为 F:/deepseek/ha,Linux / macOS 请换成自己的目录)。

环境要求

  • Windows / macOS / Linux(项目在 Windows 上开发测试)
  • Docker
  • DSH 桌面版或 Web 版
  • Node 22+

1、Docker 与 Home Assistant 容器

安装并启动 Docker Desktop 后,可验证:

docker info --format "{{.ServerVersion}}"

国内拉官方 ghcr.io 镜像可能较慢,README 推荐南京大学镜像:

docker pull ghcr.nju.edu.cn/home-assistant/home-assistant:stable

创建配置目录并启动容器(Linux / macOS 示例,请把卷路径改成你的实际路径):

mkdir -p /path/to/ha

docker run -d \
  --name homeassistant \
  --restart=unless-stopped \
  -v /path/to/ha:/config \
  -e TZ=Asia/Shanghai \
  -p 8123:8123 \
  ghcr.nju.edu.cn/home-assistant/home-assistant:stable

等待 1–3 分钟后在浏览器打开 http://localhost:8123,创建 HA 管理员账号。

2、安装 Xiaomi Miot 集成

方式 A(推荐,不依赖 HACS):将 hass-xiaomi-miot 的 custom_components/xiaomi_miot 复制到 HA 配置目录下的 custom_components/,然后 docker restart homeassistant。确认存在 .../custom_components/xiaomi_miot/manifest.json。

方式 B:通过 HACS 搜索 Xiaomi Miot Auto 安装并重启 HA。

在 HA 设置 → 设备与服务 → 添加集成 中搜索 Xiaomi Miot,选择添加小米账号并填写账号密码,等待设备同步。

3、创建长期访问令牌

在 HA 左下角用户名 → 安全 → 长期访问令牌 → 创建令牌,复制以 eyJ 开头的字符串。该令牌等同于控制家中设备的钥匙,勿公开传播。

4、安装 DSH 插件

官方安装命令:

dsh plugin --profile desktop add dsh-homeassistant

本地开发可链接目录:

dsh plugin --profile desktop add link:F:/deepseek/dsh-homeassistant

5、在 DSH 中填写连接

打开 设置 → 插件 → 家庭助理,填写:

HA 地址    http://localhost:8123
长期令牌   eyJ...

保存后点 测试连接。成功时会显示 HA 版本与实体数量,并出现设备表格。

典型用法

设置页

可按分页筛选全部 / 灯 / 开关 / 风扇 / 空调 / 窗帘;表格中可开 / 关,灯支持亮度滑条;顶部提供 全部关闭。

对话与工具

配好后可直接说例如「把卧室的灯关了」「灯调暗一点」「空调调到 26 度」「现在有啥设备开着」,AI 会调用对应工具执行。

工具与参数示例(摘自 README):

工具 说明
ha_status 检查连通性
ha_entities 列实体,如 { domain: "light" }
ha_state 查状态,如 { entity: "灯" }
ha_control 开 / 关 / 切换
ha_light 开关、亮度、色温,如 { entity: "灯", brightness: 60 }
ha_all_off 一键关闭可控设备
ha_service 调用任意 HA 服务

实体名解析顺序:aliases 配置别名 → 完整 entity id → 友好名称包含 → entity id 包含。固定口语映射可编辑 ~/.dsh/homeassistant/config.json:

{
  "url": "http://localhost:8123",
  "token": "eyJ...",
  "aliases": {
    "卧室灯": "light.yeelink_mbulb3_92ae_light",
    "客厅灯": "light.xxx"
  }
}

适用场景与注意

适合谁:已经在用或愿意部署 Home Assistant,且米家设备已通过 Xiaomi Miot Auto 接入 HA;希望在 DSH 对话和设置页里统一控制,而不是再维护一套直连小米云的方案。

成本:多一个 Docker 容器(README 提到约 1.5 GB 镜像、首次配置约十几分钟);收益是跟随 Xiaomi Miot Auto 维护登录,设备增减在 HA 里完成即可,插件侧不必改。

安全与权限:插件以当前 DSH 进程权限运行,持有 HA 长期令牌即可通过 REST API 操作已暴露的实体。安装前请阅读源码与 MIT 许可证;配置仅写本机 JSON,README 说明不上传、不写日志。

生态说明:DSH 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文安装命令与配置项均以 项目 README 为准。

结尾

dsh-homeassistant 把 DSH 的 ha_* 工具与「家庭助理」设置页接到 Home Assistant,在米家直连不可行的前提下,用 Xiaomi Miot Auto 作为稳定中间层,实现灯、空调、风扇、红外遥控等设备的语音化控制。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye