基于虚拟网关的农业物联网平台与第三方设备接入及其在农业灌溉上的应用

2024-01-08 04:56付佳威姚毅何雷任红蓝岚赵燕陈琦
江西农业 2023年24期
关键词:网关数据包灌溉

付佳威,姚毅*,何雷,任红,蓝岚,赵燕,陈琦

(1.南昌市农业科学院南昌市农业物联网智能装备集成开发重点实验室,江西 南昌 330038;2.江西超鼎科技有限公司,江西 南昌 330038;3.江西农业大学,江西 南昌 330038)

如何从软件层面入手设计一个交互协议,实现不同厂家设备的接入及应用?类似的问题在传统物联网系统中一直存在,导致用户使用物联网时需要在不同系统之间跳转或者针对第三方平台做定制化接入,这些操作既麻烦,也提高了开发成本。项目组针对上述问题,提出并应用了虚拟网关方案,实现了“一对多”异构系统的接入控制,在不改变双方系统功能代码的情况下,直接通过网关方案来对异构系统做接入控制,将第三方平台直接映射到系统成为一个网关,然后将该平台设备也作为网关下的子设备通过协议层交互的方式挂载上来,实现异构系统设备的接入。

1 虚拟网关接入方案的总体架构设计

本系统主要包括物联网基础平台、第三方设备供应商灌溉进排水设备云平台2 个系统,以第三方平台接入物联网基础平台为例,对该方案进行介绍说明。

该方案主要分为三块:基础平台、第三方平台、虚拟网关。物联网基础平台对外提供MQTT 设备接入服务,并需要具有支持设备类型这一特性,设备类型分为直连设备、网关设备、网关子设备三种,基础平台通过设备类型区分设备之间的关联关系及进行消息权限管控。第三方平台需要提供2 个对外接口,通过设备编号查询设备状态信息和通过设备编号控制设备执行动作。

虚拟网关则是在软件层面创建一个中间设备,通过走网关协议,模拟一个真实的网关设备与基础平台进行通信,需要支持MQTT v3.1 客户端协议,然后再模拟一个HTTP/MQTT/其他协议类型的客户端,通过第三方平台的API 与第三方平台进行上下行数据交互,从而将设备挂载到基础平台。通信架构如图1 所示。

图1 虚拟网关方案架构图

2 系统软件技术栈选型

2.1 通信协议

MQTT 是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议具有轻量、简单、开放和易于实现的特点,这些特点使它的适用范围非常广泛,甚至包括在受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居及一些小型化设备中已广泛使用。考虑到所有的交互都是长连接且需要保持连接状态及心跳监测,而在物联网中MQTT符合这一特性并且运用十分广泛,因此,使用MQTT 协议做为通信层的基础协议非常合适。

2.2 应用层协议

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,可以在多种语言之间进行数据交换,同时也易于机器解析和生成。目前在各类系统中,JSON 都作为数据传输格式得到广泛应用,本文也选用其作为数据载体进行消息通信。

2.3 编程语言及框架

Java 是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。同时Java 生态中的基于Maven 包管理的仓库具有海量的第三方工具包及扩展库,能极大减少编码强度负担,因此选用Java 作为本文中实现的编程语言,并配合Spring Boot 作为业务基础框架。

3 系统设计与实现

3.1 交互协议设计

交互协议使用MQTT 作为传输层,JSON 格式数据作为应用层来实现。每个设备都具有唯一ID 作为该设备身份标识(mqtt client_id),系统通过该标识便能索引到该设备,向其发送消息。

MQTT 基于topic 的发布订阅模式进行通信,而设备交互是上下行双向的,因此可以定义两个topic对数据进行分类。

上行topic: /iot/data/up/{clientID} 设备端发送到平台

下行topic: /iot/data/down/{clientID} 平台下发给设备端

3.1.1 数据包格式

详见下表。

?

3.1.2 数据包实例

本文为第三方排水灌溉设备定义2 个属性:一个是排水阀,使用标识符valve(true 为开启,false 为关闭);一个是阀门,当前运行状态status(正转/反转/停止)。

3.1.3 协议数据交互流程

(1)使用Java 构建MQTT 客户端,作为虚拟网关设备连接到基础平台,并订阅topic(/iot/data/up/{clientID}),网关上线。

(2)网关每隔3 分钟调用第三方平台开放接口,查询每个子设备的状态,然后将子设备状态构建出数据包,并发送到topic(/iot/data/up/{clientID}),基础平台收到后通过header 字段判断该数据包类型是网关上报子设备状态,然后通过body 字段内的子设备ID,将各个子设备状态进行提取解析。如图2 所示。

图2 定时同步第三方设备状态

(3)当需要对阀门进行控制时,基础平台构建控制指令数据包,并生成唯一消息id,将其设置到数据包id 字段,发送到topic(/iot/data/down/{clientID})并构建异步等待任务,等待虚拟网关反馈控制结果,虚拟网关将会收到该条消息,随后虚拟网关从消息内取出header 字段判断是控制指令,从extend 内取出目标子设备,然后从body 中取出要控制的灌溉设备阀门设置值,调用第三方开放接口执行控制动作,等待第三方接口返回操作结果。虚拟网关收到操作结果后,构建应答指令包,将结果反馈回基础平台,平台收到后根据消息中的id 字段,判断是哪一次的控制指令,找到对应指令的等待任务,并将其取消等待响应给基础平台的用户侧,随后虚拟网关立即再执行一次状态上报,整个控制流程结束。在本次操作中,对于用户来说全程是基于基础平台的,整个流程屏蔽了不同系统之间的交互。如图3 所示。

图3 控制操作交互流程

3.2 虚拟网关实现流程

3.2.1 开发环境

搭建开发环境包含JDK1.8、Maven3.2、MySQL8.0、InfluxDB 1.7、EMQX,使用JetBrains 的IDEA 作为IDE 开发工具对整个项目进行构建。

3.2.2 伪代码实现

为了快速实现需求,简化开发建议导入以下框架依赖:paho-mqtt、springboot 全家桶、influxdb-jdbc、mysqljdbc、hutool。框架创建过程如下:

4 结语

本文以物联网平台在农业领域接入第三方灌溉设备为例,创新性提出虚拟网关的接入方案,通过自定义一套标准的网关协议来模拟硬件设备与物联网平台交互的方案对异构系统进行设备兼容,大大提升了在农业生产中,物联网系统与各类农业环境采集、作业控制类设备的融合接入能力,相较于传统多平台模式(每个设备厂家有一套自己的系统),用户要控制灌溉设备,还需要再去打开该灌溉设备平台进行操作,而本方案集成后所有操作均可在一个统一平台进行实现。

本文所述的交互设计及实现方式,不仅适用于农业领域,在其他领域同样能应用本套设计方案,能够有效降低平台对接的开发工作量及难度,实现在不改动平台软件的前提下通过网关协议将不同系统的设备进行无缝融合。

猜你喜欢
网关数据包灌溉
苍松温室 苍松灌溉
苍松温室 苍松灌溉
苍松温室 苍松灌溉
苍松温室 苍松灌溉
SmartSniff
LTE Small Cell网关及虚拟网关技术研究
应对气候变化需要打通“网关”
一种实时高效的伺服控制网关设计
基于Zigbee与TCP的物联网网关设计
视觉注意的数据包优先级排序策略研究