nuciotsdk

module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 21, 2021 License: Apache-2.0

README

Golang SDK

说明

提供了注册设备、上传设备运行信息、上传设备状态的接,内部封装实现了获取注册设备资源占用情况的功能。并支持设备上传文件,接收平台下发指令功能等,便于开发者二次开发。

SDK 获取

环境要求

操作系统:win7,win10,Ubuntu,Centos

Golang SDK目录结构


|--cert mqtt连接所需证书
|--client 主程序
|--utils 工具帮助类,包括数据加密工具类、格式化工具类、时间转换工具类
|--models 项目依赖实体类,包括设备运行信息类、设备状态类、设备注册类、文件信息类、基础信息类
|--demo.go 示例程序,模拟开发者基于SDK进行开发。示例包括设备注册、设备发送状态、设备发送运行信息、设备上传文件以及对应回调函数的使用

SDK 功能列表


模块功能 功能点
设备注册 注册设备相关平台至物联网平台
自动重连 由于网络等原因,设备存在掉线的可能,SDK内置封装自动连接云平台
状态上报 向特定 topic 上报设备状态数据
信息上报 向特定 topic 上报设备运行信息
文件上传 上传文件至物联网S3平台
注册事件 为了满足业务开发者使用,可自行注册事件以便进行回调处理

SDK API 列表


函数 功能
NewIotClient 实例化SDK Client 相关选项
Configure 配置初始化
SendRegistration 设备注册
SendDeviceData 上报设备运行信息
SendDeviceStat 上报设备状态
SendFileInfo 上传文件信息
UploadFile2S3 上传文件到S3
RegisterEvent 注册事件

SDK 方法调用&数据类


NewIotClient
  • 描述:新建IoT客户端实例,并初始化
  • 输入参数
参数名称 参数数据类型 备注
DeviceReg DeviceRegistrationReq 注册信息
MqttInfo MqttBrokerInfo mqtt信息
DeviceStg DeviceStorage 存储信息
  • 返回值
返回值数据类型 备注
*nucIotClient IoT客户端实例
DeviceRegistrationReq
  • 描述:设备注册请求
成员名称 成员数据类型 备注
ProtocolVersion string 协议版本
1.1.1
DeveloperId string 开发者ID,由平台提供
ProductKey string 产品标识,如安检机、闸机、毫米波等等
DeviceId string 设备唯一标识
如芯片号、MAC地址、设备序列号,需唯一确定
DeviceType string 设备型号
DeviceIp string 设备IP地址
MqttBrokerInfo
  • 描述:Mqtt信息
成员名称 成员数据类型 备注
BrokerUrl string broker地址
MqttUsername string mqtt用户名
MqttPass string mqtt密码
Port int broker端口
IsCert bool 是否开启证书
DeviceStorage
  • 描述:设备存储信息
成员名称 成员数据类型 备注
S3Bucket string S3Bucket
S3AccessId string S3AccessId
S3AccessSecret string S3秘钥
LocalStoragePath string 共享目录url
LocalStorageUserName string 共享目录用户名
LocalStoragePass string 共享目录密码
SendRegistration
  • 描述:注册设备
  • 返回值
返回值数据类型 备注
int 返回码
0:成功
其他:失败(具体失败原因参考错误码列表)
SendDeviceStat
  • 描述:上传设备状态
  • 输入参数
参数名称 参数数据类型 备注
deviceId string 所注册设备的唯一标识
stat int 所注册设备的状态
0:初始化
1:正常
2:故障
3:诊断
4:关机
UploadFile2S3
  • 描述:上传文件到S3
  • 输入参数
参数名称 参数数据类型 备注
deviceId string 设备标识
filePath string 文件本地路径
contentType string 数据类型,可遵循 Web 数据格式,如【image/png】,【text/plain】等
fileType EnumFileType 文件类型 具体类型参考文件类型列表
SendFileInfo
  • 描述:上传成功后上报文件信息,可通过订阅上传成功回调获取上传成功的文件属性
  • 输入参数
参数名称 参数数据类型 备注
deviceId string 所注册设备的唯一标识
fileName string 文件名称
可通过 OnUploadComplete 上传文件接口的回调方法中的 IotFileInfo 获取,对应成员为 FileName
fileType EnumFileType 文件类型
可通过 OnUploadComplete 上传文件接口的回调方法中的 IotFileInfo 获取,对应成员为 FileType
filePath string 文件路径
可通过 OnUploadComplete 上传文件接口的回调方法中的 IotFileInfo 获取,对应成员为 Url
fileSize int 文件大小
可通过 OnUploadComplete 上传文件接口的回调方法中的 IotFileInfo 获取,对应成员为 FileSize

方法事件

ErrorEvent
  • 描述:IoT 客户端调用任意接口发生错误事件
  • 回调参数
参数名称 参数数据类型 备注
arg1 IotErrorInfo 错误信息
IotErrorInfo
  • 描述:错误信息
成员名称 成员数据类型 备注
Code int 错误码,具体参考错误码列表
Msg string 错误内容
包含封装所给出的错误相关数据信息、文件信息,找到对应出错的标识性内容。还可能包含错误发生时,运行时抛出的异常信息。
UploadCompleteEvent
  • 描述:IoT 客户端调用上传文件接口上传完成事件
  • 回调参数
参数名称 参数数据类型 备注
arg1 IotFileInfo 文件信息
arg2 bool 文件上传是否成功
false:失败
true:成功
IotFileInfo
  • 描述:文件信息,上传成功时应有对应的文件信息
成员名称 成员数据类型 备注
DeviceId string 设备标识
FileName string 文件名称
FileSize int 文件大小
FileType EnumFileType 文件类型
Url string 文件在 S3 上的路径
UserData string 用户自定义内容
UploadRequestEvent
  • 描述:IoT 客户端收到文件上传请求事件
  • 回调参数
参数名称 参数数据类型 备注
uploadReq UploadReq 文件上传请求
UploadReq
  • 描述:文件信息,上传成功时应有对应的文件信息
成员名称 成员数据类型 备注
StartTime long 开始时间
EndTime long 结束时间
FileType EnumFileType 文件类型

错误码

封装库内所包含的数据结构 EnumErrorType 所对应的内容,用于枚举错误码。

错误码 错误描述 枚举名称
1000 消息订阅错误 SubscribeError
1001 注册错误 RegistrationError
1002 消息加密错误 AesError
1003 S3处理错误 S3Error
1004 与云端建立通讯错误 UnConnected
1005 消息组装错误 SetupContentError
1006 消息反序列化错误 DeserializeError
1007 消息队列处理错误 QueueError
1008 本地存储错误 LocalStorageError
1009 数据合法性错误 DataValidityError

文件类型

封装库内所包含的数据结构 EnumFileType 所对应的内容,用于枚举错误码。

文件类型 枚举类型
日志 Log
图像 Img
视频 Video
其他 Other

代码示例


package main

import (
	"fmt"
	"time"

	"gitee.com/magicyu90/nuciotsdk/client"
	"gitee.com/magicyu90/nuciotsdk/models"
	"gitee.com/magicyu90/nuciotsdk/utils"
)

// 错误回调
func OnError(args ...interface{}) {
	e := args[0].(*models.IotErrorInfo)
	fmt.Printf("OnError,code:%d,message:%s\n", e.Code, e.Message)
}

// 完成上传回调
func OnUploadComplete(args ...interface{}) {
	fmt.Println("OnUploadComplete...")
	// 发送文件信息
	ok := args[0].(bool)
	iotFileInfo := args[1].(*models.IotFileInfo)
	if ok {
		fmt.Printf("文件:%s上传1成功,上传文件信息...\n", iotFileInfo.FileName)
		n.SendFileInfo(iotFileInfo.DeviceId, iotFileInfo.FileName, iotFileInfo.Url, iotFileInfo.FileSize, iotFileInfo.FileType, iotFileInfo.UserData)
	} else {
		fmt.Printf("文件:%s上传失败...\n", iotFileInfo.FileName)
	}

}

var deviceId = "TFNBZ-XII-A01"

// 设备信息
var deviceInfo = models.DeviceRegistrationReq{
	DeveloperId:     "30b899f332114432b86da2045cc9c11b", //开发者ID
	ProtocolVersion: "1.1.1",
	DeviceId:        deviceId, //设备编号
	DeviceType:      "2000DC", //设备型号
	ProductKey:      "tr1",    //产品类型
	DeviceIp:        "192.168.1.1",
}

// mqtt信息
var mqttInfo = models.MqttBrokerInfo{
	BrokerUrl: "iot.nuctech.com", //mqtt地址
	//BrokerUrl:    "218.93.19.170",
	Port:         10884,           //mqtt端口
	MqttUsername: "tr",            //mqtt用户名
	MqttPass:     "NucTr#2020iot", //mqtt密码
	IsCert:       false,           //是否开启证书
}

// 存储信息
var storageInfo = models.DeviceStorage{
	S3Bucket:             "iot-tr",                                   //s3 bucket
	S3AccessId:           "QQRDE2APOUE0QUFDJ9A2",                     //s3 accessId
	S3AccessSecret:       "KShpiw4Y3ncrbyfzPurNMTJ3WCKAp8NidQUpwqbW", //s3 accesstoken
	LocalStoragePath:     "\\10.15.123.114\\share\\iot",              //共享目录
	LocalStorageUserName: "root",                                     //共享目录用户名
	LocalStoragePass:     "root123456",                               //共享目录密码
}

// 初始化客户端
var n = client.NewIotClient(deviceInfo, storageInfo, mqttInfo)

// 主函数
func main() {
	// 初始化配置
	n.Configure()
	// 注册错误事件
	n.RegisterEvent(models.ErrorEvent, OnError)
	// 注册上传完成事件
	n.RegisterEvent(models.UploadCompleteEvent, OnUploadComplete)

	retryTimes := 1
	// 设备注册
	for {
		fmt.Printf("开始进行第%d次注册...\n", retryTimes)
		result := n.SendRegistration()
		fmt.Printf("注册结果:%d\n", result)
		if result == 0 {
			break
		}
		retryTimes += 1
		time.Sleep(time.Duration(2) * time.Second)
	}
	fmt.Println("上报设备状态")
	go func() {
		for {
			// 发送设备状态
			n.SendDeviceStat(deviceId, 1)
			time.Sleep(time.Duration(2) * time.Second)
		}
	}()

	fmt.Println("上报设备运行信息")
	go func() {
		for {
			// 发送设备状态
			n.SendDeviceStat(deviceId, 1)
			dataItems := [2]models.DataItem{
				{DataKey: "k1", DataValue: "10", Clock: utils.GetCurrentTimestamp()},
				{DataKey: "k2", DataValue: "20", Clock: utils.GetCurrentTimestamp()}}
			n.SendDeviceData(deviceId, dataItems[:])
			time.Sleep(time.Duration(2) * time.Second)
		}
	}()

	fmt.Println("上传图片至s3")
	n.UploadFile2S3(deviceId, "C:/Users/hugonuc/Pictures/lake.jpg", models.Img, "")

	select {} // 阻塞
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL