AstrBot 米家智能家居插件
深入技术分析:AstrBot 米家智能家居插件(astrbot_plugin_mihome)
一、插件概览
astrbot_plugin_mihome 是一个为 AstrBot 框架开发的米家(Xiaomi/MiHome)智能家居控制插件。通过该插件,用户可以在即时通讯平台(如QQ、Telegram、Discord等)上,以自然语言或指令形式控制家中米家生态设备(灯、空调、窗帘、传感器等),实现真正的“说话即控制”。版本号 v7.2.1 表明该插件已经过多个迭代,相对成熟稳定。
二、技术栈与依赖
三、核心功能模块
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-miioaiohttp米家设备在局域网内(推荐)或在同一小米账号下(云模式)
快速配置
# 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"]六、优缺点分析
七、适用于Halo博客的集成思路
虽然该插件是为AstrBot设计的聊天机器人插件,但您可以在Halo博客中通过以下方式使用其技术:
发布技术教程:教读者如何部署AstrBot + 米家插件,实现家中智能设备语音控制
结合API:在Halo的插件或自定义页面中调用该插件的RESTful接口(需额外开发),实现在博客上控制设备(趣味玩法)
状态大屏:利用该插件获取的设备数据,在Halo博客首页显示温湿度、设备在线状态等(通过Halo的“自定义HTML”小部件 + 定时刷新JSON)
八、总结
astrbot_plugin_mihome 是一个功能实用、技术实现扎实的智能家居控制插件。它很好地平衡了控制效率与安全性,在AstrBot生态中为DIY智能家居玩家提供了低门槛的接入方案。如果你已经在使用AstrBot,并且家中有米家设备,强烈建议一试。对于Halo博客运营者,你完全可以将该插件的部署、使用心得写成系列文章,吸引技术型读者。
注:本文基于插件名称及AstrBot生态推测,实际功能以源码为准。如需深入分析,建议解压查看 main.py、device_manager.py 等核心文件。