268 lines
7.6 KiB
Go
268 lines
7.6 KiB
Go
/*******************************************************************************
|
|
* Copyright 2017 Dell Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
* in compliance with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
* or implied. See the License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*******************************************************************************/
|
|
|
|
package dtos
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/winc-link/edge-driver-proto/drivercommon"
|
|
"github.com/winc-link/edge-driver-proto/thingmodel"
|
|
)
|
|
|
|
type ThingModelMessage struct {
|
|
BaseRequest *drivercommon.BaseRequestMessage
|
|
Cid string `json:"cid"` // 下发的目标设备id
|
|
OpType int32 `json:"op_type"` // 消息类型
|
|
Data string `json:"data"` // 云端下发消息内容
|
|
}
|
|
|
|
func (m *ThingModelMessage) String() string {
|
|
b, _ := json.Marshal(m)
|
|
return string(b)
|
|
}
|
|
|
|
type MessageBus struct {
|
|
DeviceId string `json:"deviceId"`
|
|
MessageType string `json:"messageType"`
|
|
Data interface{} `json:"data"`
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageBus() []byte {
|
|
var messageBus MessageBus
|
|
messageBus.DeviceId = m.Cid
|
|
messageBus.MessageType = thingmodel.OperationType_name[m.OpType]
|
|
data := make(map[string]interface{})
|
|
err := json.Unmarshal([]byte(m.Data), &data)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
messageBus.Data = data["data"]
|
|
b, _ := json.Marshal(messageBus)
|
|
return b
|
|
}
|
|
|
|
func (m *ThingModelMessage) GetOpType() thingmodel.OperationType {
|
|
return thingmodel.OperationType(m.OpType)
|
|
}
|
|
|
|
func (m *ThingModelMessage) IsPersistent() bool {
|
|
var isPersistent bool
|
|
switch m.GetOpType() {
|
|
case thingmodel.OperationType_PROPERTY_REPORT, thingmodel.OperationType_EVENT_REPORT:
|
|
isPersistent = true
|
|
default:
|
|
return isPersistent
|
|
}
|
|
return isPersistent
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataBySetProperty() (DevicePropertySetResponse, error) {
|
|
var dataMsg DevicePropertySetResponse
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataByGetProperty() (DeviceGetPropertyResponse, error) {
|
|
var dataMsg DeviceGetPropertyResponse
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataByProperty() (DevicePropertyReport, error) {
|
|
var dataMsg DevicePropertyReport
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataByEvent() (EdgeXDeviceEventReport, error) {
|
|
var dataMsg EdgeXDeviceEventReport
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataByService() (SaveServiceIssueData, error) {
|
|
var dataMsg SaveServiceIssueData
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataByServiceExec() (ServiceExecResponse, error) {
|
|
var dataMsg ServiceExecResponse
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func (m *ThingModelMessage) TransformMessageDataByBatchReport() (DeviceBatchReport, error) {
|
|
var dataMsg DeviceBatchReport
|
|
err := json.Unmarshal([]byte(m.Data), &dataMsg)
|
|
return dataMsg, err
|
|
}
|
|
|
|
func ThingModelMessageFromThingModelMsg(msg *thingmodel.ThingModelMsg) ThingModelMessage {
|
|
return ThingModelMessage{
|
|
BaseRequest: msg.BaseRequest,
|
|
Cid: msg.DeviceId,
|
|
OpType: int32(msg.OperationType),
|
|
Data: msg.Data,
|
|
}
|
|
}
|
|
|
|
type DevicePropertyReport struct {
|
|
MsgId string `json:"msgId"`
|
|
Version string `json:"version"`
|
|
//Time int64 `json:"time"`
|
|
Sys struct {
|
|
Ack int `json:"ack"`
|
|
} `json:"sys"`
|
|
Data map[string]ReportData `json:"data"`
|
|
}
|
|
|
|
type DeviceGetPropertyResponse struct {
|
|
MsgId string `json:"msgId"`
|
|
Data []EffectivePropertyData `json:"data"`
|
|
}
|
|
|
|
type DevicePropertySetResponse struct {
|
|
MsgId string `json:"msgId"`
|
|
Data DevicePropertySetData `json:"data"`
|
|
}
|
|
|
|
type DevicePropertySetData struct {
|
|
ErrorMessage string `json:"errorMessage"`
|
|
Code uint32 `json:"code"`
|
|
Success bool `json:"success"`
|
|
}
|
|
|
|
type DeviceBatchReport struct {
|
|
MsgId string `json:"msgId"`
|
|
Version string `json:"version"`
|
|
Time int64 `json:"time"`
|
|
Sys struct {
|
|
Ack int `json:"ack"`
|
|
} `json:"sys"`
|
|
Data BatchData `json:"data"`
|
|
}
|
|
|
|
type BatchData struct {
|
|
Properties map[string]BatchProperty `json:"properties"`
|
|
Events map[string]BatchEvent `json:"events"`
|
|
}
|
|
|
|
type BatchProperty struct {
|
|
Value interface{} `json:"value"`
|
|
//Time int64 `json:"time"`
|
|
}
|
|
type BatchEvent struct {
|
|
//EventTime int64 `json:"eventTime"`
|
|
OutputParams map[string]interface{} `json:"outputParams"`
|
|
}
|
|
|
|
type ReportData struct {
|
|
Value interface{} `json:"value"`
|
|
Time int64 `json:"time"`
|
|
}
|
|
|
|
func (r *ReportData) Marshal() ([]byte, error) {
|
|
return json.Marshal(r)
|
|
}
|
|
|
|
type EdgeXDeviceEventReport struct {
|
|
MsgId string `json:"msgId"`
|
|
Version string `json:"version"`
|
|
Sys struct {
|
|
Ack int `json:"ack"`
|
|
} `json:"sys"`
|
|
Data EventData `json:"data"`
|
|
}
|
|
|
|
type EventData struct {
|
|
EventCode string `json:"eventCode"`
|
|
EventTime int64 `json:"eventTime"`
|
|
OutputParams map[string]interface{} `json:"outputParams"`
|
|
}
|
|
|
|
func (r *EventData) Marshal() ([]byte, error) {
|
|
return json.Marshal(r)
|
|
}
|
|
|
|
//operationType:SERVICE_EXECUTE data:"topic:\"/sys/hq85KDcqGI6/test_008/thing/service/DeleteAlgorithmModel\"
|
|
//message:\"{\\\"id\\\":\\\"2130175210\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"code\\\":\\\"DeleteAlgorithmModel\\\",\\\"params\\\":{\\\"ForceDelete\\\":3}}\""
|
|
type InvokeDeviceService struct {
|
|
MsgId string `json:"msgId"`
|
|
Version string `json:"version"`
|
|
Time int64 `json:"time"`
|
|
Data ServiceData `json:"data"`
|
|
}
|
|
|
|
type ServiceData struct {
|
|
Code string `json:"code"`
|
|
InputParams map[string]interface{} `json:"inputParams"`
|
|
}
|
|
|
|
func (r *ServiceData) Marshal() ([]byte, error) {
|
|
return json.Marshal(r)
|
|
}
|
|
|
|
func (r *InvokeDeviceService) ToString() string {
|
|
s, _ := json.Marshal(r)
|
|
return string(s)
|
|
}
|
|
|
|
type DeviceGetPropertyData struct {
|
|
MsgId string `json:"msgId"`
|
|
Version string `json:"version"`
|
|
Time int64 `json:"time"`
|
|
Data []string `json:"data"`
|
|
}
|
|
|
|
func (r *DeviceGetPropertyData) ToString() string {
|
|
s, _ := json.Marshal(r)
|
|
return string(s)
|
|
}
|
|
|
|
type SaveServiceIssueData struct {
|
|
MsgId string `json:"msgId"`
|
|
Code string `json:"code"`
|
|
Time int64 `json:"time"`
|
|
InputParams map[string]interface{} `json:"inputParams"`
|
|
OutputParams map[string]interface{} `json:"outputParams"`
|
|
}
|
|
|
|
func (r *SaveServiceIssueData) Marshal() ([]byte, error) {
|
|
return json.Marshal(r)
|
|
}
|
|
|
|
type ServiceExecResponse struct {
|
|
MsgId string `json:"msgId"`
|
|
Code string `json:"code"`
|
|
Time int64 `json:"time"`
|
|
OutputParams map[string]interface{} `json:"data"`
|
|
}
|
|
|
|
func (r *ServiceExecResponse) Marshal() ([]byte, error) {
|
|
return json.Marshal(r)
|
|
}
|
|
|
|
type PropertySet struct {
|
|
Version string `json:"version"`
|
|
MsgId string `json:"msgId"`
|
|
Time int64 `json:"time"`
|
|
Params map[string]interface{} `json:"data"`
|
|
}
|
|
|
|
func (r *PropertySet) ToString() string {
|
|
s, _ := json.Marshal(r)
|
|
return string(s)
|
|
}
|