iot_server/internal/dtos/thinkmodelmessage.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)
}