机智云相关的控制协议和上报协议简介

大家好,今天小编给大家介绍一些机智云通信协议相关的基础知识,欢迎一起交流学习。

1、gagent目录

该目录下的文件为机智云设备接入协议库文件,包括mqttlib.o,mqttgat.o等mqtt(Message Queuing Telemetry Transport,遥信消息队列传输协议)相关的协议实现。

2、gizwits目录介绍

gizwits_product.c,该文件为平台相关处理文件,存放事件处理API接口函数,即 gizwitsEventProcess();

gizwits_product.h,该文件为 gizwits_product.c 的头文件,存放产品相关宏定义如: HARDWARE_VERSION 、SOFTWARE_VERSION

gizwits_protocol.c,该文件为协议实现文件,存放 SDK API 接口函数

gizwits_protocol.h,该文件为 gizwits_protocol.c 对应头文件,协议相关宏定义以及 API 接口声明均在此文件中。

3、控制协议流程

与控制型协议相关的函数调用流程如下:

                 

相关API介绍:

giziIssuedProces,该函数被gagent调用,接收来自云端或app端下发的相关协议数据

ACTION_CONTROL_DEVICE,进行“控制型协议”的相关处理

gizDataPoint2Event,根据协议生成“控制型事件”,并完成相应数据类型的转换

gizwitsEventProcess,根据已生成的“控制型事件”进行相应事件处理(即调用相应的驱动函数)

4、上报协议流程

与上报协议相关的函数调用流程如下:

                  

相关API介绍

userTimerFunc,获取用户区的上报型数据

gizwitsHandle,用户调用该接口可以完成设备数据的变化上报

gizCheckReport,判断是否上报当前状态的数据

gizDataPoints2ReportData,完成用户区数据到上报型数据的转换

gagentUploadData,将上报数据发送给bg96模组

并不是每次获取到的数据都需要上报,而是满足如下条件:(满足其中之一即上报)

a. 控制型数据发生状态变化,立刻主动上报当前状态

b. 用户触发或环境变化所产生的, 其发送的频率不能快于6秒每次

具体判断逻辑可以参考gizwits_protocol.c文件中的gizCheckReport接口。

5、只读型数据处理

获得到用户区的原始数据后,在传输到云端前要进行相应的数据转换,所以要在gizDataPoints2ReportData中完成相应的数据的转换。

相关API

gizDataPoints2ReportData,完成传输数据的压缩处理。(gizwits_protocol.c)

gizY2X,将用户区数据转化为传输数据。(Utils/dataPointTools.c)

a. 机智云为使设备功能定义更加简单直接,使用户输入的数值转换成设备能够识别的uint类型,这套算法的核心公式是:y=kx+m (y:显示值;x:传输值;k:分辨率;m:增量

对于:gizY2X:x=(y - m)/k,可知是将用户区数据转化为传输数据。

gizX2Y: y=kx+m ,可知是将传输数据转换成APP UI界面的显示值。

b. 数据压缩与解压缩处理

设备端与自云端的数据交互过程中,一些特殊类型(bool和enum类型)的数据点原始数据只有被特殊处理后才可被云端解析,所以设备端在接收云端数据时要进行数据的解压处理;在向云端发送数据时进行数据的压缩处理。

相关API: (Utils/dataPointTools.c)

gizStandardCompressValue, bool和enum类型数据点数据解压。

gizCompressValue, bool和enum类型数据点数据压缩。

详细逻辑可以查看源码中APi定义。

6. 总结

本篇主要介绍gizwits相关的控制协议和上报协议的大致流程,更多具体细节可以查看代码流程。

猜你喜欢

转载自blog.csdn.net/weixin_38498942/article/details/87601653