IoT 物联网场景中,网关与子设备上云开发实战

IoT 物联网场景中,网关与子设备上云开发实战

在IoT 物联网场景中,对我们的终端设备本身无连接互联网能力时,那么数据如何上云呢?

IoT物联网平台支持设备 MQTT 直连,也支持的设备挂载到网关上,作为网关的子设备,由网关代理接入IoT物联网平台。这样只需要网关建立一条 MQTT 长连接通道,所有子设备可以复用网关的 MQTT 通道,高效传输数据到云端。

这时候网关设备除了自身作为IoT网关设备(拥有身份三元组)与IoT物联网平台建立MQTT连接,收发数据,还要负责子设备管理,包括:

  • 网关添加子设备网络拓扑关系

  • 子设备复用网关mqtt连接通道上线

  • 网关把子设备数据上报到云端

  • 网关接收指令,并转发给子设备

  • 网关上报子设备下线

  • 网关删除子设备网络拓扑关系

网关和子设备通信的协议由本地网络决定,可以是 http、mqtt、ZigBee、Modbus、BLE、OPC-UA等,这部分逻辑由网关实现。整体架构如下:

IoT 物联网场景中,网关与子设备上云开发实战

我们以Java版本LinkKit SDK为例进行开发实战讲解。

1.创建网关产品

创建网关产品时,需要选择节点类型:网关,即指可以挂载子设备的直连设备。网关需要管理子设备、维持与子设备的拓扑关系,并将该拓扑关系同步到云端。

IoT 物联网场景中,网关与子设备上云开发实战

基于此网关产品注册一台网关设备,并获得身份认证三元组。

IoT 物联网场景中,网关与子设备上云开发实战

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)

此时,我们在控制台查看网关设备状态为:在线

IoT 物联网场景中,网关与子设备上云开发实战

3.添加网络拓扑关系

接下来,我们在 IoT 物联网控制台,创建水泵产品,并注册设备,获取身份三元组。

IoT 物联网场景中,网关与子设备上云开发实战

当子设备水泵通过本地协议接入网关后,我们需要同步网络拓扑关系到云端,也就是添加子设备到这个网络里。代码逻辑如下:

DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewayAddSubDevice(
    deviceInfo, //子设备身份
    SubDeviceConnectListener)

添加成功后,我们在控制台网关设备详情,可以看到关联的子设备列表,如下:

IoT 物联网场景中,网关与子设备上云开发实战

4.子设备上线

添加网络拓扑关系后,我们需要把子设备在本地网络的状态同步到云端。

子设备上线代码逻辑如下:

DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewaySubDeviceLogin(
    deviceInfo,  //子设备身份
    ISubDeviceActionListener)

子设备成功上线后,我们在网关设备详情,可以查看到子设备状态为: 在线

IoT 物联网场景中,网关与子设备上云开发实战

在设备详情页面,可以查看到接入的网关信息,如下图:

IoT 物联网场景中,网关与子设备上云开发实战

5.子设备上报数据

子设备在线的情况下,可以发布数据到IoT物联网平台。

子设备上报数据代码逻辑如下:

DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
LinkKit.getInstance().getGateway().gatewaySubDevicePublish(
    topic, //子设备topic
    data, //数据
    deviceInfo, //子设备身份
    ISubDeviceActionListener)

日志服务查看子设备上报数据的日志如下:

IoT 物联网场景中,网关与子设备上云开发实战

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 物联网场景中,网关与子设备上云开发实战

本文章来源于互联网,如有侵权,请联系删除!原文地址:IoT 物联网场景中,网关与子设备上云开发实战

相关推荐: 免费开源一套农业物联网云平台(Version:3.0.1.1)

鲸哩农业SaaS系统(Version:3.0.1) 体验地址, V3 star star : (请您先体验V2) 体验地址, V2 star star : 点我访问 一、简介 鲸哩农业SaaS系统,从(设备端-APP端-平台端-管理端)全业务场景包含设备采集系…