在IoT 物联网场景中,对我们的终端设备本身无连接互联网能力时,那么数据如何上云呢?
IoT物联网平台支持设备 MQTT 直连,也支持的设备挂载到网关上,作为网关的子设备,由网关代理接入IoT物联网平台。这样只需要网关建立一条 MQTT 长连接通道,所有子设备可以复用网关的 MQTT 通道,高效传输数据到云端。
这时候网关设备除了自身作为IoT网关设备(拥有身份三元组)与IoT物联网平台建立MQTT连接,收发数据,还要负责子设备管理,包括:
-
网关添加子设备网络拓扑关系
-
子设备复用网关mqtt连接通道上线
-
网关把子设备数据上报到云端
-
网关接收指令,并转发给子设备
-
网关上报子设备下线
-
网关删除子设备网络拓扑关系
网关和子设备通信的协议由本地网络决定,可以是 http、mqtt、ZigBee、Modbus、BLE、OPC-UA等,这部分逻辑由网关实现。整体架构如下:
我们以Java版本LinkKit SDK为例进行开发实战讲解。
1.创建网关产品
创建网关产品时,需要选择节点类型:网关,即指可以挂载子设备的直连设备。网关需要管理子设备、维持与子设备的拓扑关系,并将该拓扑关系同步到云端。
基于此网关产品注册一台网关设备,并获得身份认证三元组。
2.网关设备上线
使用网关设备三元组身份,建立端到云上的 MQTT 长连接,逻辑如下:
LinkKitInitParams params = new LinkKitInitParams();
DeviceInfo gatewayInfo = new DeviceInfo();
gatewayInfo.productKey = gateway.productKey;
gatewayInfo.deviceName = gateway.deviceName;
gatewayInfo.deviceSecret = gateway.deviceSecret;
params.deviceInfo = gatewayInfo;
LinkKit.getInstance().init(params, ILinkKitConnectListener)
此时,我们在控制台查看网关设备状态为:在线
3.添加网络拓扑关系
接下来,我们在 IoT 物联网控制台,创建水泵产品,并注册设备,获取身份三元组。
当子设备水泵通过本地协议接入网关后,我们需要同步网络拓扑关系到云端,也就是添加子设备到这个网络里。代码逻辑如下:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewayAddSubDevice(
deviceInfo, //子设备身份
SubDeviceConnectListener)
添加成功后,我们在控制台网关设备详情,可以看到关联的子设备列表,如下:
4.子设备上线
添加网络拓扑关系后,我们需要把子设备在本地网络的状态同步到云端。
子设备上线代码逻辑如下:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewaySubDeviceLogin(
deviceInfo, //子设备身份
ISubDeviceActionListener)
子设备成功上线后,我们在网关设备详情,可以查看到子设备状态为: 在线
在设备详情页面,可以查看到接入的网关信息,如下图:
5.子设备上报数据
子设备在线的情况下,可以发布数据到IoT物联网平台。
子设备上报数据代码逻辑如下:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewaySubDevicePublish(
topic, //子设备topic
data, //数据
deviceInfo, //子设备身份
ISubDeviceActionListener)
日志服务查看子设备上报数据的日志如下:
6.子设备订阅主题
子设备同样也可以接收云端指令,首先要订阅对应的Topic,代码逻辑如下:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewaySubDeviceSubscribe(
topic, //子设备订阅Topic
deviceInfo, //子设备身份
ISubDeviceActionListener)
7.子设备下线
子设备和本地网关断开连接时,我们需要把离线状态同步到云端,代码逻辑如下:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewaySubDeviceLogout(
deviceInfo, //子设备身份
ISubDeviceActionListener)
8.子设备网络拓扑删除
子设备完全从本地网络移除是,我们需要删除设备的网络拓扑关系,代码逻辑如下:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewayDeleteSubDevice(
deviceInfo, //子设备身份
ISubDeviceRemoveListener)
至此,我们掌握了网关和子设备的开发过程。如果网关设备采用C,或者Python开发,背后交互逻辑相同,具体可以参考阿里云 IoT 云产品开发文档。
【往期回顾】
1、39张IoT传感器工作原理GIF图汇总
2、自建MQTT集群迁移阿里云IoT实践
3、智能手持测温枪开发实践
4、JMeter压测MQTT服务性能实战
5、IoT物联网平台日志服务详解
6、工业Modbus电力104规约接入IoT平台
本文章来源于互联网,如有侵权,请联系删除!原文地址:IoT 物联网场景中,网关与子设备上云开发实战
相关推荐: 免费开源一套农业物联网云平台(Version:3.0.1.1)
鲸哩农业SaaS系统(Version:3.0.1) 体验地址, V3 star star : (请您先体验V2) 体验地址, V2 star star : 点我访问 一、简介 鲸哩农业SaaS系统,从(设备端-APP端-平台端-管理端)全业务场景包含设备采集系…