iotkit-parent/data/converters/6260396d67aced2696184053/converter.js

169 lines
3.7 KiB
JavaScript
Raw Normal View History

2022-06-15 02:07:28 +00:00
var mid=1;
function getMid(){
mid++;
if(mid>10000){
mid=1;
}
return mid+"";
}
this.decode = function (msg) {
//对msg进行解析并返回物模型数据
var content=msg.content;
var topic = content.topic;
var payload = content.payload;
var identifier = topic.substring(topic.lastIndexOf("/") + 1);
//透传上报
if(topic.endsWith("/event/rawReport")){
var rst= component.transparentDecode(payload.params);
if(!rst){
return null;
}
rst.occur=new Date().getTime();
rst.time=new Date().getTime();
return rst;
}
if (topic.endsWith("/property/post")) {
//属性上报
return {
mid: msg.mid,
productKey: msg.productKey,
deviceName: msg.deviceName,
type:"property",
identifier: "report", //属性上报
occur: new Date().getTime(), //时间戳,设备上的事件或数据产生的本地时间
time: new Date().getTime(), //时间戳,消息上报时间
data: payload.params,
};
} else if (topic.indexOf("/event/") > 0) {
//事件上报
return {
mid: msg.mid,
productKey: msg.productKey,
deviceName: msg.deviceName,
type:"event",
identifier: identifier,
occur: new Date().getTime(),
time: new Date().getTime(),
data: payload.params,
};
}else if(topic.endsWith("/service/property/set_reply")){
//属性设置回复
return {
mid: msg.mid,
productKey: msg.productKey,
deviceName: msg.deviceName,
type:"property",
identifier: identifier,
occur: new Date().getTime(),
time: new Date().getTime(),
code: payload.code
};
2022-07-04 03:27:21 +00:00
}else if(topic.endsWith("/config/set_reply")){
//设备配置设置回复
return {
mid: msg.mid,
productKey: msg.productKey,
deviceName: msg.deviceName,
type:"config",
identifier: "set_reply",
occur: new Date().getTime(),
time: new Date().getTime(),
code: payload.code
};
}else if(topic.endsWith("/config/get")){
//设备配置获取
return {
mid: msg.mid,
productKey: msg.productKey,
deviceName: msg.deviceName,
type:"config",
identifier: "get",
occur: new Date().getTime(),
time: new Date().getTime(),
data: {},
};
2022-06-15 02:07:28 +00:00
} else if (topic.endsWith("_reply")) {
//服务回复
return {
mid: msg.mid,
productKey: msg.productKey,
deviceName: msg.deviceName,
type:"service",
identifier: identifier,
occur: new Date().getTime(),
time: new Date().getTime(),
code: payload.code,
data: payload.data,
};
}
return null;
};
this.encode = function (service,device) {
var deviceMid=getMid();
var method="thing.service.";
var topic="/sys/"+service.productKey+"/"+service.deviceName+"/c/service/";
var params={};
//透传下发
if(device.transparent){
var rst=component.transparentEncode(service,device);
topic="/sys/"+rst.productKey+"/"+rst.deviceName+"/c/service/rawSend";
params.model=rst.content.model;
params.mac=rst.content.mac;
params.data=rst.content.data;
return {
productKey:rst.productKey,
deviceName:rst.deviceName,
mid:rst.mid,
content:{
topic:topic,
payload:JSON.stringify({
id:rst.mid,
method:method+"rawSend",
params:params
})
}
}
}
var type=service.type;
var identifier=service.identifier;
if(type=="property"){
method+="property."+identifier;
topic+="property/"+identifier;
}else if(type=="service"){
method+=identifier;
topic+=identifier;
2022-07-04 03:27:21 +00:00
}else if(type=="config"){
//设备配置下发
method+=identifier;
topic="/sys/"+service.productKey+"/"+service.deviceName+"/c/config/"+identifier;
2022-06-15 02:07:28 +00:00
}
2022-07-04 03:27:21 +00:00
2022-06-15 02:07:28 +00:00
for(var p in service.params){
params[p]=service.params[p];
}
return {
productKey:service.productKey,
deviceName:service.deviceName,
mid:deviceMid,
content:{
topic:topic,
payload:JSON.stringify({
id:deviceMid,
method:method,
params:params
})
}
}
};