小米有格局——官方正式开源「Home Assistant米家集成」,让用户更“开放”地使用小米IoT智能设备

小米在 GitHub 开源了「Home Assistant 米家集成」(Xiaomi Home Integration)项目,这是一个由小米官方提供支持的 Home Assistant 的集成组件,它可以让用户在 Home Assistant 中使用小米 IoT 智能设备。

Home Assistant 是一个基于 Python 3 开发的开源家庭自动化平台,可以跟踪和控制家庭中的所有设备,并实现自动化控制。

图片

开源地址:https://github.com/XiaoMi/ha_xiaomi_home

项目介绍显示,米家集成及其使用的云端接口由小米官方提供。用户需要使用小米账号登录以获取设备列表。

米家集成使用 OAuth 2.0 的登录方式,不会在 Home Assistant 中保存用户的小米账号密码。

但由于 Home Assistant 平台的限制,登录成功后,用户的小米用户信息(包括设备信息、证书、 token 等)会明文保存在 Home Assistant 的配置文件中。

因此,用户需要保管好自己 Home Assistant 配置文件。一旦该文件泄露,其他人可能会冒用用户的身份登录。

消息收发原理

  • 云端控制

图片

图 1:云端控制架构

米家集成向小米云 MQTT Broker 订阅关注的设备消息。当设备属性发生改变或产生设备事件时,设备向小米云发送上行消息, MQTT Broker 向米家集成推送订阅的设备消息。

由于米家集成不需要向云端轮询以获取设备当前的属性值,因此米家集成能第一时间获知设备属性变化或事件发生。

得益于消息订阅机制,米家集成只在配置完成时向云端查询一次所有的设备属性,对云端产生的访问压力很小。

米家集成需要控制设备时,通过小米云 HTTP 接口向设备发送控制消息。设备收到小米云发来的下行消息后做出响应。

  • 本地控制

图片

图 2:本地控制架构

小米中枢网关内包含一个标准的 MQTT Broker ,实现了完整的订阅发布机制。

米家集成向小米中枢网关订阅关注的设备消息。当设备属性发生改变或产生设备事件时,设备向小米中枢网关发送上行消息, MQTT Broker 向米家集成推送订阅的设备消息。

米家集成需要控制设备时,向 MQTT Broker 发布设备控制消息,再经由小米中枢网关转发给设备。设备收到小米中枢网关发来的下行消息后做出响应。

米家集成的 Home Assistant 版本要求:

  • Core ≥ 2024.11.0

  • Operating System ≥ 13.0


  • 米家集成是否支持所有的小米米家设备?

米家集成目前支持大部分米家设备品类,但仍有一小部分设备品类(蓝牙、红外及虚拟设备)并不支持。

  • 米家集成是否可以同时使用多个小米账号?

是的,米家集成支持多个小米账号同时登录。另外,米家集成还支持不同账号的米家设备添加至同一个 Home Assistant 区域。

  • 米家集成是否支持本地化控制?

米家集成支持通过小米中枢网关(固件版本 3.4.0_000 以上)或内置中枢网关(软件版本 0.8.0 以上)的米家设备实现本地化控制。如果没有小米中枢网关或其他带中枢网关功能的设备,那么所有控制指令都会通过小米云发送。支持 Home Assistant 本地化控制的小米中枢网关(含内置中枢网关)的固件尚未发布,固件升级计划请参阅 MIoT 团队的通知。

小米中枢网关仅在中国大陆可用,在其他地区不可用。

米家集成也能通过开启小米局域网控制功能实现部分本地化控制效果。小米局域网控制功能只能控制与 Home Assistant 处于同一局域网内的 IP 设备(使用 WiFi、网线连接路由器的设备),无法控制蓝牙 Mesh、ZigBee 等协议接入的设备。该功能可能会引起一些异常,我们建议不要使用该功能。小米局域网控制功能开启方法:设置 > 设备与服务 > 已配置 > Xiaomi Home > 配置 > 更新局域网控制配置。

小米局域网控制功能不受地区限制,在全球范围内均可用。如果 Home Assistant 所在的局域网内存在中枢网关,那么即便米家集成开启了小米局域网控制功能,该功能也不会生效。

  • 米家集成在哪些地区可用?

米家集成所用的云服务接口已部署在中国大陆、欧洲、印度、俄罗斯、新加坡、美国共六个地区的机房。

由于用户数据在不同地区的小米云上相互隔离,您需要在配置 Home Assistant 时选择用户所在地区,才能导入相应的米家设备。

米家集成支持将不同地区的米家设备添加至同一个 Home Assistant 区域。

Home Assistant 米家集成安装方法:
https://github.com/XiaoMi/ha_xiaomi_home/blob/main/doc/README_zh.md



说到这,不得不提某家厂商了:

图片

图片

<think>好的,用户想了解如何开发自定义设备接入小米智能居网关,特别是中枢网关。我需要先回顾现有的信息,然后结合引用中的内容来构建回答。 首先,引用[1]提到MiHomeLib是一个C#库,支持与小米网关第二版的交互,包括传感器和其他设备。这可能意味着小米的网关开发可能需要使用特定的库或SDK。而引用[2]提到了Python的miio库连接小米Aqara网关,说明可能有不同的开发工具和语言支持。引用[3]是关于涂鸦IoT平台的,可能和第三方集成有关,但用户的问题是关于小米自己的中枢网关,所以可能需要专注于小米官方文档和现有库。 用户可能需要知道开发流程,比如使用什么协议(比如UDP多播,如引用[1]中提到的实时通信协议)、需要哪些API、是否需要注册开发者账号,以及具体的步骤,比如设备认证、数据格式等。另外,可能涉及设备注册到网关下的过程,如引用[2]中提到的添加设备到网关下,需要重启设备才能显示。 需要考虑小米中枢网关是否与之前的Aqara网关兼容,或者是否有新的API。可能需要建议用户查阅官方文档,或者使用现有的开源库如miio或MiHomeLib作为参考。此外,可能需要提到小米的开发者平台,是否有开放的API文档,或者是否需要特定的认证流程,比如OAuth。 另外,用户的问题提到“自定义设备”,所以可能需要设备符合小米的通信协议,比如使用Zigbee、蓝牙Mesh或Wi-Fi等,以及如何在这些协议上实现与网关的通信。例如,引用[2]中的设备包括门窗传感器、人体传感器等,可能都是通过Zigbee连接到网关的,因此自定义设备可能需要支持相应的协议,并在网关中进行配对。 可能还需要提到安全机制,比如设备如何认证,密钥交换过程,数据加密等,确保设备能够安全接入网关。引用[1]中提到MiHomeLib支持实时通信,可能涉及UDP协议的具体实现细节,如多播地址和端口的设置。 总结回答的结构应该包括:开发前的准备(如了解协议、获取API文档)、使用现有库(如miio或MiHomeLib)、设备认证与注册流程、通信协议的具体实现(如UDP多播)、数据格式(可能使用JSON或特定结构),以及测试和调试的方法。同时,需要指出可能的资源,如GitHub上的开源项目、官方开发者平台等,并引用提供的参考文献中的相关内容。</think>### 开发自定义设备接入小米智能居网关的方法 #### 1. **开发前准备** - **协议与接口**:小米智能居网关通常基于私有协议或开放协议(如Zigbee、Wi-Fi)实现设备通信。中枢网关可能支持多种协议,需根据设备类型选择对应通信方式。例如,引用[1]中提到MiHomeLib利用UDP多播协议与网关通信,实现状态新和控制指令[^1]。 - **API文档获取**:小米官方未完全公开中枢网关的API文档,但可通过以下途径获取信息: - **开源库参考**:如Python的`miio`库(引用[2])或C#的`MiHomeLib`(引用[1])提供了与网关交互的代码示例。 - **逆向工程**:通过抓包分析现有设备(如门窗传感器、智能插座)与网关的通信流程[^2]。 #### 2. **设备认证与注册** - **密钥协商**:设备需通过网关的认证流程,通常涉及预共享密钥(如Token)或动态密钥交换。例如,`miio`库中需通过设备IP和Token初始化连接。 - **注册到网关**:设备需发送特定格式的广播消息或响应网关的发现请求。引用[2]提到添加设备到网关后需重启以生效[^2]。 #### 3. **通信实现** - **UDP多播通信**:如引用[1]所述,网关通过UDP多播(地址如`224.0.0.50`)广播状态和控制指令。自定义设备需监听并响应多播消息。 - **数据格式**:消息体通常为JSON或二进制格式,包含设备ID、状态字段等。例如: ```json {"cmd":"report", "model":"sensor_motion", "data":{"status":"motion"}} ``` - **心跳机制**:设备需定期发送心跳包以维持在线状态。 #### 4. **功能开发示例(基于Python `miio`)** ```python from miio import Gateway, Device # 初始化网关连接 gateway = Gateway(ip="192.168.1.100", token="your_token") # 添加自定义设备(模拟传感器) class CustomSensor(Device): def __init__(self, device_id): super().__init__(device_id) def report_status(self, data): self.send("status_report", data) sensor = CustomSensor("light_sensor_001") gateway.register_device(sensor) ``` #### 5. **测试与调试** - **日志分析**:通过Wireshark抓包验证通信流程。 - **模拟工具**:使用`miio`命令行工具或`MiHomeLib`的调试接口测试指令交互[^1]。 #### 6. **参考资源** - **开源项目**:GitHub上的`miio`库和`MiHomeLib`源码。 - **小米开发者平台**:部分API可通过申请开发者账号获取[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值