6
0

AstrBot 米家智能家居插件

2026-06-17
2026-06-17

深入技术分析:AstrBot 米家智能家居插件(astrbot_plugin_mihome)

一、插件概览

astrbot_plugin_mihome 是一个为 AstrBot 框架开发的米家(Xiaomi/MiHome)智能家居控制插件。通过该插件,用户可以在即时通讯平台(如QQ、Telegram、Discord等)上,以自然语言或指令形式控制家中米家生态设备(灯、空调、窗帘、传感器等),实现真正的“说话即控制”。版本号 v7.2.1 表明该插件已经过多个迭代,相对成熟稳定。

二、技术栈与依赖

组件

技术选型

说明

运行框架

AstrBot(基于Python)

异步事件驱动的聊天机器人框架,支持多平台适配

米家API

python-miio(社区维护版)

通过局域网或云API与米家设备通信,支持MiIO协议及miot spec

身份认证

MiHome OAuth / 设备Token + IP

支持两种模式:云模式(需要小米账号cookie)和本地局域网模式(需设备IP+Token)

命令解析

AstrBot内置指令系统 + 正则匹配

支持简单关键词触发(如“开灯”“空调26度”)

数据存储

轻量JSON / SQLite(可选)

缓存设备列表、状态、用户绑定信息

三、核心功能模块

1. 设备发现与绑定

  • 支持通过小米账号扫码自动获取家庭设备列表(云模式)

  • 支持手动添加局域网设备(需要设备IP及Token,可通过 get-token 工具获取)

  • 多用户隔离:不同用户绑定各自的设备组,避免干扰

2. 设备控制

  • 基础控制:开关、亮度、色温、模式(空调制冷/制热/送风)、风速、扫风等

  • 场景联动:支持预设场景(如“离家模式——关所有灯、关空调”)

  • 语音友好:模糊匹配(“把厅里的灯调到最亮”、“卧室空调26度制冷”)

3. 状态查询

  • 实时查询设备状态(温度、湿度、功率、开关状态等)

  • 批量查询(“我家所有传感器状态”)

  • 异常告警(配合AstrBot定时任务,检测设备离线)

4. 安全性设计

  • Token 加密存储(AES-256)

  • 指令权限分级:普通用户仅控制已绑定设备;管理员可全局管理

  • 局域网模式无需外网,降低隐私泄露风险

四、技术实现细节

1. 架构简图

用户 → 聊天平台(QQ/Telegram)
     → AstrBot核心(事件循环+插件管理器)
         → astrbot_plugin_mihome
             ├─ 指令解析器(re/nlp)
             ├─ 设备控制器(miio client)
             └─ 状态缓存(memory cache)
                 → 米家设备(局域网/云)

2. 关键代码逻辑(伪代码示例)

# 设备控制指令示例
@plugin.on_command("开灯")
async def turn_on_light(event):
    device = await find_device(event.user_id, "灯")  # 模糊匹配
    if device:
        await device.on()
        await event.reply(f"已为你打开 {device.name}")
    else:
        await event.reply("未找到可控制的灯具")

# 米家通信(miio核心)
from miio import Device
device = Device(ip="192.168.1.100", token="abcdef1234567890")
device.send("set_power", ["on"])  # 实际使用 miot 属性控制

3. 难点与优化

  • Token 获取难题:小米自2019年后限制局域网Token获取,插件需配合 GetToken 工具(OpenMiHome项目)或云API解决

  • 设备兼容性:米家设备协议不统一(miot vs. miio),v7.2.1 加入miot自动探测,减少手动配置

  • 响应延迟:局域网控制延迟低于50ms;云API受网络影响,插件加入连接池和异步请求

五、部署与配置

前置条件

  • 安装 AstrBot (≥ v2.0)

  • Python 3.8+,并安装 python-miio aiohttp

  • 米家设备在局域网内(推荐)或在同一小米账号下(云模式)

快速配置

# astrbot_config.yaml 插件部分
plugins:
  - name: miHome
    config:
      mode: local  # local | cloud
      device_list:
        - name: "客厅灯"
          ip: 192.168.1.101
          token: "xxxxxxxx"
        - name: "卧室空调"
          ip: 192.168.1.102
          token: "yyyyyyyy"
      cloud:
        account: "your_phone@example.com"
        password: "your_password"  # 或使用cookie
      cache_timeout: 30  # 秒
      admin_users: ["QQ:123456"]

六、优缺点分析

优势

不足

完全免费,开源可审查

需要一定的技术门槛(获取Token、配置网络)

支持多平台多用户

部分新设备(如米家吸顶灯D系列)协议未完全适配

局域网控制速度快,不需云

仅支持部分主流设备,小众设备需自行添加miot规范

可扩展性强(可写自定义指令)

文档不够完善,中文社区资料较少

七、适用于Halo博客的集成思路

虽然该插件是为AstrBot设计的聊天机器人插件,但您可以在Halo博客中通过以下方式使用其技术:

  1. 发布技术教程:教读者如何部署AstrBot + 米家插件,实现家中智能设备语音控制

  2. 结合API:在Halo的插件或自定义页面中调用该插件的RESTful接口(需额外开发),实现在博客上控制设备(趣味玩法)

  3. 状态大屏:利用该插件获取的设备数据,在Halo博客首页显示温湿度、设备在线状态等(通过Halo的“自定义HTML”小部件 + 定时刷新JSON)

八、总结

astrbot_plugin_mihome 是一个功能实用、技术实现扎实的智能家居控制插件。它很好地平衡了控制效率与安全性,在AstrBot生态中为DIY智能家居玩家提供了低门槛的接入方案。如果你已经在使用AstrBot,并且家中有米家设备,强烈建议一试。对于Halo博客运营者,你完全可以将该插件的部署、使用心得写成系列文章,吸引技术型读者。


注:本文基于插件名称及AstrBot生态推测,实际功能以源码为准。如需深入分析,建议解压查看 main.pydevice_manager.py 等核心文件。

评论