小米 ZigBee 设备接入 ThingsCloud 物联网平台实战

智能家居场景中,我们通过架设自己的 Zigbee 网关,可以将米家的 Zigbee 设备轻松接入 ThingsCloud。借助 ThingsCloud 平台的内置应用和开放性,我们可以在很多行业项目和应用场景中灵活自如的发挥 Zigbee 无线设备的优势。例如:楼宇办公、温室大棚、小型仓库、环境监测、工业控制等一些非家居场景。 

01.

开源项目 Zigbee2MQTT

这里要用到开源项目 Zigbee2MQTT ,它采用 NodeJS 编写,可以运行在 Linux/Windows 下,详细的搭建过程这里略过,官网有详细的介绍。

0636129e491002ed60133de000450f55.jpeg

Zigbee2MQTT 支持的 Zigbee 设备多大2000多种。

9ad2c98adfa1741d5b051dc9e0b531c6.jpeg

通常来说,搭建 Zigbee2MQTT 网关需要以下硬件:

  • Linux 小型主机,可通过 WiFi/以太网/4G 连接互联网,支持 USB 接口。我们这里以树莓派为例。

  • Zigbee 适配器,支持 USB 或以太网接口。采用 CC25xx 或 CC26xx 的 Zigbee 芯片。CC26xx 具有更远的传输距离和更好的稳定性。

ee22f8333629b3a56e4e21ff886675a7.jpeg

树莓派 4B + USB Zigbee 适配器

12e784d41156e5c81981ec3d44c9de6b.png

树莓派 Zero + USB Zigbee 适配器

ce6a02e5d1351d0f87059abfce682272.jpeg

02.

Zigbee 的优势

Zigbee 无线设备的主要优势包括:

  • 低功耗:例如小米温湿度传感器使用 3V 纽扣锂电池,可以续航长达一年多时间。

  • 低延迟:设备响应速度快,从睡眠状态切换到工作状态通常仅需要 15ms,节点访问网络仅需要 30ms,从而进一步节省了电量。

  • 容量大:Zigbee 可以采用星状,片状和网状的网络结构,最多可以形成 65000 个节点的大型网络。

  • 低成本:Zigbee 协议免专利费,且市面上支持 Zigbee 标准协议的传感器、灯、开关、电源等产品非常多,价格低廉。仅 Zigbee2MQTT 支持的设备就有超过 2000 多种,包括小米、绿米、宜家、飞利浦等。

03.

Zigbee 接入 ThingsCloud

Zigbee2MQTT 网关准备好后,我们来重点介绍 ThingsCloud 平台的接入和应用,对于其它 Zigbee 网关的接入同样具有参考意义。 

创建项目

打开 ThingsCloud 控制台,如果还没有创建项目,先创建一个项目。

创建设备类型

为了定义网关设备的功能,我们需要先创建一个设备类型,这里可以直接使用我们已经发布的模板,创建类型时选择产品类型,输入产品 ID:7892219658。如下图:

9c95cc85198c7789755972d46b2b2a01.png

这样会自动生成一些规则,用来解析网关和子设备的消息,直接使用即可。

3775467c89cf7e31381cce7fb2d27608.png

同时还有自动生成的自定义数据流,支持 Zigbee2MQTT 的 MQTT 主题。

12016f277d9c4dee4ad15c67510d7439.jpeg

注册网关设备

接下来,我们注册一个网关设备,绑定到刚创建的设备类型下。进入设备>连接,可以看到设备证书和 MQTT 连接地址,稍后会用到。

787c177d3565f4b5d2716bf5af616e5b.jpeg

编辑 Zigbee2MQTT 配置

接下来配置 Zigbee2MQTT,以默认安装路径为例,打开配置文件:

nano /opt/zigbee2mqtt/data/configuration.yaml

需要注意的几点:

  • base_topic:必须修改为 data/zigbee2mqtt

  • server:修改为从网关设备页面复制的 MQTT 接入点完整地址,例如 mqtt://xxx.iot-api.com:1883

  • user:修改为从网关设备页面复制的 AccessToken

  • password:修改为从网关设备页面复制的 ProjectKey

  • homeassistant:设置为 false

  • permit_join:当需要添加子设备时,设置为 true

保存配置文件,重启 Zigbee2MQTT,网关设备连接成功,会上报网关的基本信息。

ddae38c1c8e9fe741e13d0cf82408079.jpeg

创建子设备

所有 Zigbee 设备都是网关的子设备,我们以温湿度传感器为例,创建一个子设备类型。然后在该类型下创建多个温湿度传感器设备。

d0833b7eaf4aa91191641bf6914ce09f.jpeg

添加子设备到网关上

最后,进入网关设备的子设备管理列表,将创建好的多个子设备添加到网关下,并且设置子设备地址。

子设备地址可以有两种方式找到:

  • 在 Zigbee2MQTT 的本地日志中,可以找到类似 data/zigbee2mqtt/0xXXXXXXXXXXXXXXXX 的主题,这里的 0xXXXXXXXXXXXXXXXX 就是子设备地址。

  • 或者在 ThingsCloud 网关设备的调试消息历史中,查看自定义上报消息的详情,也可以找到如上设备地址。

9806d82cef4d82ce8c42edaeba90f918.jpeg

配置子设备地址后,就可以立即看到传感器上报的数据被网关设备转发到了子设备,子设备显示在线状态。

f6ab698d05f7d9e3f5e11718a9ee6f9c.png

04.

在 ThingsCloud 查看设备数据

在 ThingsCloud 控制台进入不同的子设备,可以看到 Zigbee 设备的当前属性数据。

15fa907a7707b8e21e279a3ad52c8728.jpeg

9a5c06e91af9117130951377a1c5826c.jpeg

3e9c1ea49db521f9c717996cb52d365e.jpeg

1fd02bd9fa0c3ba6a8ff12e9931a15ad.jpeg

b94ce9435bc33eb9efb779c61b307c7b.jpeg

进入设备页面,对于数值型属性,直接点击属性面板上的历史数据图标,即可打开历史数据曲线图。

9e3ba98764d1895c729b801053e949ba.jpeg

05.

远程控制设备

一些 Zigbee 设备具备控制功能,例如小米智能电源,可以从云平台下发指令控制电源开关,从而控制使用市电的设备,相当于继电器。 

在智能电源设备类型中定义开关量属性,并且使用设备云端共享的属性类型,这样该属性既可以由智能电源上报,也可以通过控制台、App 或调用 API 下发给设备。

ac4c5be7e889f33da673a42ee9294a10.gif

在设备调试消息中,可以看到下发的 JSON 指令,同时设备更新状态后会立即上报一条最新 JSON 属性数据。从消息时间可见,Zigbee 的传输延迟非常低。

1eab41517d8051a1860afa2b91c9716a.jpeg

06.

可视化大屏

通过不同的看板组件,可以将不同设备的不同属性,以可视化的形式呈现出来。

44200f7483c02324080f28abed33da83.jpeg

07.

移动App展示

到目前为止,我们已经通过 ThingsCloud 获取所有 Zigbee 子设备的状态数据,并可以对一些设备下发实时控制指令。

接下来,我们来为生成用户 App 做一些准备,对于不同的设备类型,我们编辑相应的 App 设备面板。

e0baf0a3acedff566c3e4b5cc6d8d301.png

d1d3f302460d37b0be9443e880d91b0a.png

29b370b4f44e63ba821ab2673caebcec.png

5af896531139bb57c9acc4f97d37fd00.jpeg

2313a4b2ee00230c99106179465d1e0d.jpeg

对设备类型完成 App 界面设计后,我们来创建用户应用,即可获得支持多个移动平台的用户 App,如下图:

c865c88e0d7329d4595acb74195c7f31.jpeg

接下来创建用户账号,用来登录用户 App。然后为用户关联多个设备。当用户登录后,便可以查看或控制这些设备。

往期推荐

☞ 中国云计算第一股关停 IoT云服务

☞ 国内 IoT 物联网平台终局的思考

☞ 2022年IoT平台趋势:私有化部署

☞ 5个值得分享的物联网创业失败教训

☞ 国内 4 大 IoT物联网平台选型对比

☞ 云厂商的 [IoT物联网平台] 不香了吗?

33b54514a60936fef549e18b6969f9cf.png

03429f446aeb7de7299af00ad1fbaff9.gif

2a284cd8f8e0b3299ca5795f0774891e.gif

8d5f495d37a5f95da64dff5c1571ab05.gif

7bd645dd2d6bd4e70cf71f9a36865cf1.gif

<think>嗯,用户想查找ThingsCloud的代码示例或项目源代码。首先,我需要确认ThingsCloud是什么。可能是一个物联网平台,类似AWS IoT或者阿里云IoT之类的。用户需要具体的代码示例或者项目源码,可能需要连接到该平台的API,或者使用他们的SDK。 不过,根据我现有的知识库,可能没有具体的关于ThingsCloud的信息。这时候应该建议用户查阅官方文档,因为大多数云服务提供商都会在文档中提供SDK安装指南、API调用示例和教程。另外,GitHub、GitLab这样的代码托管平台也是查找开源项目的好地方,用户可以搜索“ThingsCloud”相关的仓库。 如果用户需要更具体的帮助,可能需要他们提供更多细节,比如他们使用的编程语言,或者想要实现的功能,比如设备连接、数据上传、实时监控等。这样我可以给出更针对性的建议,比如使用MQTT库进行连接,或者使用HTTP API发送数据。 另外,提醒用户注意API密钥和认证信息的安全,避免在公共代码库中泄露敏感信息。这也是开发中常见的注意事项。</think>关于ThingsCloud的代码示例和项目源代码,建议通过以下方式获取: 1. **官方文档与SDK** 官方文档通常包含API调用示例和SDK使用指南,建议优先查看ThingsCloud开发者门户: ```python # 示例:使用Python SDK连接设备 from thingscloud import DeviceClient client = DeviceClient( device_id="YOUR_DEVICE_ID", api_key="YOUR_API_KEY" ) client.connect() client.publish_data({"temp": 25.6}) ``` 2. **GitHub开源项目** 在GitHub搜索关键词`ThingsCloud`可找到社区项目,例如: ```bash # 查找相关仓库 gh repo search ThingsCloud --limit 10 ``` 3. **物联网通用开发模式** 典型实现包含以下要素: - MQTT协议连接:使用`paho-mqtt`库建立通信 - 数据序列化:JSON或Protocol Buffers格式处理 - OTA升级:通过Webhook实现固件更新 ```python # 通用MQTT连接示例 import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("device/status") client = mqtt.Client() client.on_connect = on_connect client.connect("mqtt.thingscloud.com", 1883, 60) client.loop_forever() ``` 建议特别注意: - 设备认证采用TLS双向认证时需加载证书[^1] - 高并发场景建议使用异步IO框架 - 生产环境应实现断线重连机制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值