280 lines
8.5 KiB
Go
280 lines
8.5 KiB
Go
package iot
|
||
|
||
// 子设备添加回调函数
|
||
type SubDevicesAddHandler func(devices SubDeviceInfo)
|
||
|
||
//子设备删除糊掉函数
|
||
type SubDevicesDeleteHandler func(devices SubDeviceInfo)
|
||
|
||
// 处理平台下发的命令
|
||
type CommandHandler func(Command) bool
|
||
|
||
// 设备消息
|
||
type MessageHandler func(message Message) bool
|
||
|
||
// 平台设置设备属性
|
||
type DevicePropertiesSetHandler func(message DevicePropertyDownRequest) bool
|
||
|
||
// 平台查询设备属性
|
||
type DevicePropertyQueryHandler func(query DevicePropertyQueryRequest) DevicePropertyEntry
|
||
|
||
// 设备执行软件/固件升级.upgradeType = 0 软件升级,upgradeType = 1 固件升级
|
||
type DeviceUpgradeHandler func(upgradeType byte, info UpgradeInfo) UpgradeProgress
|
||
|
||
// 设备上报软固件版本,第一个返回值为软件版本,第二个返回值为固件版本
|
||
type SwFwVersionReporter func() (string, string)
|
||
|
||
// 平台下发的升级信息
|
||
type UpgradeInfo struct {
|
||
Version string `json:"version"` //软固件包版本号
|
||
Url string `json:"url"` //软固件包下载地址
|
||
FileSize int `json:"file_size"` //软固件包文件大小
|
||
AccessToken string `json:"access_token"` //软固件包url下载地址的临时token
|
||
Expires string `json:"expires"` //access_token的超期时间
|
||
Sign string `json:"sign"` //软固件包MD5值
|
||
}
|
||
|
||
// 设备升级状态响应,用于设备向平台反馈进度,错误信息等
|
||
// ResultCode: 设备的升级状态,结果码定义如下:
|
||
// 0:处理成功
|
||
// 1:设备使用中
|
||
// 2:信号质量差
|
||
// 3:已经是最新版本
|
||
// 4:电量不足
|
||
// 5:剩余空间不足
|
||
// 6:下载超时
|
||
// 7:升级包校验失败
|
||
// 8:升级包类型不支持
|
||
// 9:内存不足
|
||
// 10:安装升级包失败
|
||
// 255: 内部异常
|
||
type UpgradeProgress struct {
|
||
ResultCode int `json:"result_code"`
|
||
Progress int `json:"progress"` // 设备的升级进度,范围:0到100
|
||
Version string `json:"version"` // 设备当前版本号
|
||
Description string `json:"description"` // 升级状态描述信息,可以返回具体升级失败原因。
|
||
}
|
||
|
||
// 设备命令
|
||
type Command struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
ServiceId string `json:"service_id""`
|
||
CommandName string `json:"command_name"`
|
||
Paras interface{} `json:"paras"`
|
||
}
|
||
|
||
type CommandResponse struct {
|
||
ResultCode byte `json:"result_code"`
|
||
ResponseName string `json:"response_name"`
|
||
Paras interface{} `json:"paras"`
|
||
}
|
||
|
||
// 消息
|
||
type Message struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Name string `json:"name"`
|
||
Id string `json:"id"`
|
||
Content string `json:"content"`
|
||
}
|
||
|
||
// 定义平台和设备之间的数据交换结构体
|
||
|
||
type Data struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Services []DataEntry `json:"services"`
|
||
}
|
||
|
||
type DataEntry struct {
|
||
ServiceId string `json:"service_id"`
|
||
EventType string `json:"event_type"`
|
||
EventTime string `json:"event_time"`
|
||
Paras interface{} `json:"paras"` // 不同类型的请求paras使用的结构体不同
|
||
}
|
||
|
||
// 网关更新子设备状态
|
||
type SubDevicesStatus struct {
|
||
DeviceStatuses []DeviceStatus `json:"device_statuses"`
|
||
}
|
||
|
||
type DeviceStatus struct {
|
||
DeviceId string `json:"device_id"`
|
||
Status string `json:"status"` // 子设备状态。 OFFLINE:设备离线 ONLINE:设备上线
|
||
}
|
||
|
||
// 添加子设备
|
||
type SubDeviceInfo struct {
|
||
Devices []DeviceInfo `json:"devices"`
|
||
Version int `json:"version"`
|
||
}
|
||
|
||
type DeviceInfo struct {
|
||
ParentDeviceId string `json:"parent_device_id,omitempty"`
|
||
NodeId string `json:"node_id,omitempty"`
|
||
DeviceId string `json:"device_id,omitempty"`
|
||
Name string `json:"name,omitempty"`
|
||
Description string `json:"description,omitempty"`
|
||
ManufacturerId string `json:"manufacturer_id,omitempty"`
|
||
Model string `json:"model,omitempty"`
|
||
ProductId string `json:"product_id"`
|
||
FwVersion string `json:"fw_version,omitempty"`
|
||
SwVersion string `json:"sw_version,omitempty"`
|
||
Status string `json:"status,omitempty"`
|
||
ExtensionInfo interface{} `json:"extension_info,omitempty"`
|
||
}
|
||
|
||
// 设备属性相关
|
||
|
||
// 设备属性
|
||
type DeviceProperties struct {
|
||
Services []DevicePropertyEntry `json:"services"`
|
||
}
|
||
|
||
// 设备的一个属性
|
||
type DevicePropertyEntry struct {
|
||
ServiceId string `json:"service_id"`
|
||
Properties interface{} `json:"properties"`
|
||
EventTime string `json:"event_time"`
|
||
}
|
||
|
||
// 平台设置设备属性==================================================
|
||
type DevicePropertyDownRequest struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Services []DevicePropertyDownRequestEntry `json:"services"`
|
||
}
|
||
|
||
type DevicePropertyDownRequestEntry struct {
|
||
ServiceId string `json:"service_id"`
|
||
Properties interface{} `json:"properties"`
|
||
}
|
||
|
||
// 平台设置设备属性==================================================
|
||
type DevicePropertyQueryRequest struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
ServiceId string `json:"service_id"`
|
||
}
|
||
|
||
// 设备获取设备影子数据
|
||
type DevicePropertyQueryResponseHandler func(response DevicePropertyQueryResponse)
|
||
|
||
type DevicePropertyQueryResponse struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Shadow []DeviceShadowData `json:"shadow"`
|
||
}
|
||
|
||
type DeviceShadowData struct {
|
||
ServiceId string `json:"service_id"`
|
||
Desired DeviceShadowPropertiesData `json:"desired"`
|
||
Reported DeviceShadowPropertiesData `json:"reported"`
|
||
Version int `json:"version"`
|
||
}
|
||
type DeviceShadowPropertiesData struct {
|
||
Properties interface{} `json:"properties"`
|
||
EventTime string `json:"event_time"`
|
||
}
|
||
|
||
// 网关批量上报子设备属性
|
||
|
||
type DevicesService struct {
|
||
Devices []DeviceService `json:"devices"`
|
||
}
|
||
|
||
type DeviceService struct {
|
||
DeviceId string `json:"device_id"`
|
||
Services []DevicePropertyEntry `json:"services"`
|
||
}
|
||
|
||
// 文件上传下载管理
|
||
func CreateFileUploadDownLoadResultResponse(filename, action string, result bool) FileResultResponse {
|
||
code := 0
|
||
if !result {
|
||
code = 1
|
||
}
|
||
|
||
paras := FileResultServiceEventParas{
|
||
ObjectName: filename,
|
||
ResultCode: code,
|
||
}
|
||
|
||
serviceEvent := FileResultResponseServiceEvent{
|
||
Paras: paras,
|
||
}
|
||
serviceEvent.ServiceId = "$file_manager"
|
||
if action == FileActionDownload {
|
||
serviceEvent.EventType = "download_result_report"
|
||
}
|
||
if action == FileActionUpload {
|
||
serviceEvent.EventType = "upload_result_report"
|
||
}
|
||
serviceEvent.EventTime = GetEventTimeStamp()
|
||
|
||
var services []FileResultResponseServiceEvent
|
||
services = append(services, serviceEvent)
|
||
|
||
response := FileResultResponse{
|
||
Services: services,
|
||
}
|
||
|
||
return response
|
||
}
|
||
|
||
// 设备获取文件上传下载请求体
|
||
type FileRequest struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Services []FileRequestServiceEvent `json:"services"`
|
||
}
|
||
|
||
// 平台下发文件上传和下载URL响应
|
||
type FileResponse struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Services []FileResponseServiceEvent `json:"services"`
|
||
}
|
||
|
||
type FileResultResponse struct {
|
||
ObjectDeviceId string `json:"object_device_id"`
|
||
Services []FileResultResponseServiceEvent `json:"services"`
|
||
}
|
||
|
||
type BaseServiceEvent struct {
|
||
ServiceId string `json:"service_id"`
|
||
EventType string `json:"event_type"`
|
||
EventTime string `json:"event_time"`
|
||
}
|
||
|
||
type FileRequestServiceEvent struct {
|
||
BaseServiceEvent
|
||
Paras FileRequestServiceEventParas `json:"paras"`
|
||
}
|
||
|
||
type FileResponseServiceEvent struct {
|
||
BaseServiceEvent
|
||
Paras FileResponseServiceEventParas `json:"paras"`
|
||
}
|
||
|
||
type FileResultResponseServiceEvent struct {
|
||
BaseServiceEvent
|
||
Paras FileResultServiceEventParas `json:"paras"`
|
||
}
|
||
|
||
// 设备获取文件上传下载URL参数
|
||
type FileRequestServiceEventParas struct {
|
||
FileName string `json:"file_name"`
|
||
FileAttributes interface{} `json:"file_attributes"`
|
||
}
|
||
|
||
// 平台下发响应参数
|
||
type FileResponseServiceEventParas struct {
|
||
Url string `json:"url"`
|
||
BucketName string `json:"bucket_name"`
|
||
ObjectName string `json:"object_name"`
|
||
Expire int `json:"expire"`
|
||
FileAttributes interface{} `json:"file_attributes"`
|
||
}
|
||
|
||
// 上报文件上传下载结果参数
|
||
type FileResultServiceEventParas struct {
|
||
ObjectName string `json:"object_name"`
|
||
ResultCode int `json:"result_code"`
|
||
StatusCode int `json:"status_code"`
|
||
StatusDescription string `json:"status_description"`
|
||
}
|