金鸽BL110网关设备解析脚本
按照金鸽BL110网关文档第84、85页说明
按照数据读写标志的分类将网关分成7个子设备
如果用户使用到某个标志分类就需要创建这个分类的子设备,子设备地址的填写必须在下例中
```
DO,DI,AI,REG64,REG2000,REG20128,REG20256
```
例如:设置了AI0,就需要有子设备地址是AI的子设备;如收到数据AI0=1,在平台数据管理中显示的数据标签也是AI0,值是1
function encodeInp(msg, topic) {
// 将设备自定义msg(自定义形式)数据转换为json形式数据, 设备上报数据到物联网平台时调用
// 入参:topic string 设备上报消息的 topic
// 入参:msg byte[] 数组 不能为空
// 出参:string
// 处理完后将对象转回字符串形式
// 例,byte[]转string:var msgString = String.fromCharCode.apply(null, msg);
// 例,string转jsonObj:msgJson = JSON.parse(msgString);
// 例,jsonObj转string:msgString = JSON.stringify(msgJson);
var msgString = String.fromCharCode.apply(null, msg);
var jsonObj = JSON.parse(msgString);
var newMsg = {};
var DO = {}
var DI = {}
var AI = {}
var REG64 = {}
var REG2000 ={}
var REG20128 ={}
var REG20256 ={}
for (var key in jsonObj.sensorDatas) {
var c_key = jsonObj.sensorDatas[key].flag;
// delete jsonObj.sensorDatas[key]["flag"];
// newMsg[c_key] = jsonObj.sensorDatas[key];
if (c_key.slice(0,2) == "DO"){
DO[c_key] = jsonObj.sensorDatas[key].switcher;
}else if (c_key.slice(0,2) == "DI"){
DI[c_key] = jsonObj.sensorDatas[key].switcher;
}else if (c_key.slice(0,2) == "AI"){
AI[c_key] = jsonObj.sensorDatas[key].value;
}else if (c_key.slice(0,3) == "REG"){
num = c_key.slice(3)
if (Number(num) <=127){
REG64[c_key] = jsonObj.sensorDatas[key].switcher;
} else if (Number(num) <=20127){
REG2000[c_key] = jsonObj.sensorDatas[key].value;
} else if (Number(num) <=20254){
REG20128[c_key] = jsonObj.sensorDatas[key].value;
} else if (Number(num) <=20508){
REG20256[c_key] = jsonObj.sensorDatas[key].value;
}
}
}
newMsg["DO"] = DO
newMsg["DI"] = DI
newMsg["AI"] = AI
newMsg["REG64"] = REG64
newMsg["REG2000"] = REG2000
newMsg["REG20128"] = REG20128
newMsg["REG20256"] = REG20256
msg = JSON.stringify(newMsg);
return msg;
}
function encodeInp(msg, topic) {
//编写脚本处理从设备发来消息msg,转为平台可接收的消息规范
//将msg转为json对象,如:var jsonObj = JSON.parse(msg);
//处理完后将jsonObj转回字符串,如:msg = JSON.stringify(jsonObj);
// 将设备自定义msg(自定义形式)数据转换为json形式数据, 设备上报数据到物联网平台时调用
// 入参:topic string 设备上报消息的 topic
// 入参:msg byte[] 数组 不能为空
// 出参:string
// 处理完后将对象转回字符串形式
// 例,byte[]转string:var msgString = String.fromCharCode.apply(null, msg);
// 例,string转jsonObj:msgJson = JSON.parse(msgString);
// 例,jsonObj转string:msgString = JSON.stringify(msgJson);
var msgString = String.fromCharCode.apply(null, msg);
var jsonObj = JSON.parse(msgString);
var newMsg = {};
newMsg["sensorDatas"]=[]
for (var key in jsonObj){
for(var v_key in jsonObj[key]) {
d = {}
d["flag"] = v_key
if (v_key.slice(0,2) == "DO"){
d["switcher"] = jsonObj[key][v_key];
}else if (v_key.slice(0,2) == "DI"){
d["switcher"] = jsonObj[key][v_key];
}else if (v_key.slice(0,2) == "AI"){
d["value"] = jsonObj[key][v_key];
}else if (v_key.slice(0,3) == "REG"){
num = v_key.slice(3)
if (Number(num) <=127){
d["switcher"] = jsonObj[key][v_key];
} else {
d["value"] = jsonObj[key][v_key];
}
}
newMsg["sensorDatas"].push(d)
}
}
newMsg["down"] = "down"
msg = JSON.stringify(newMsg);
return msg;
}