Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-script
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
twb
cloud-script
Commits
c9620c5e
Commit
c9620c5e
authored
Jun 29, 2020
by
twb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add new file
parent
4866dd4b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1046 additions
and
0 deletions
+1046
-0
1.0.2.js
+1046
-0
No files found.
1.0.2.js
0 → 100644
View file @
c9620c5e
var
UP_RAW_VERSION
=
0x00
;
//上报的版本
var
UP_RAW_CMD
=
0x12
;
//上报的指令
var
DOWN_RAW_VERSION
=
0x00
;
//下发的版本
var
DOWN_RAW_CMD
=
0x11
;
//下发的指令
var
UP_RAW_HEAD
=
0xd0
;
//下发指令头部
var
DOWN_RAW_HEAD
=
0xd1
;
//上报指令头部
var
THING_ATTRIBUTE_GET_CMD
=
0x00
,
THING_ATTRIBUTE_GET
=
"thing.attribute.get"
;
var
THING_ATTRIBUTE_SET_CMD
=
0x01
,
THING_ATTRIBUTE_SET
=
"thing.attribute.set"
;
var
THING_ATTRIBUTE_POST_CMD
=
0x02
,
THING_ATTRIBUTE_POST
=
"thing.attribute.post"
;
var
THING_ATTRIBUTE_ADJUST_CMD
=
0x03
,
THING_ATTRIBUTE_ADJUST
=
"thing.attribute.adjust"
;
var
THING_EVENT_POST_CMD
=
0x04
,
THING_EVENT_POST
=
"thing.event.post"
;
var
THING_SERVICE_INVOKE_CMD
=
0x05
,
THING_SERVICE_INVOKE
=
"thing.service.invoke"
;
var
THING_SERVICE_RESPONSE_CMD
=
0x06
,
THING_SERVICE_RESPONSE
=
"thing.service.response"
;
var
VERSION
=
'1.0.0'
;
var
structStartId
=
30
;
var
PP_TYPE
=
{
PROTOCOL_PROP_TYPE_BOOL
:
0
,
PROTOCOL_PROP_TYPE_INT8
:
1
,
PROTOCOL_PROP_TYPE_UINT8
:
2
,
PROTOCOL_PROP_TYPE_INT16
:
3
,
PROTOCOL_PROP_TYPE_UINT16
:
4
,
PROTOCOL_PROP_TYPE_INT32
:
5
,
PROTOCOL_PROP_TYPE_UINT32
:
6
,
PROTOCOL_PROP_TYPE_INT64
:
7
,
PROTOCOL_PROP_TYPE_UINT64
:
8
,
PROTOCOL_PROP_TYPE_FLOAT32
:
9
,
PROTOCOL_PROP_TYPE_FLOAT64
:
10
,
PROTOCOL_PROP_TYPE_STRING
:
11
,
PROTOCOL_PROP_TYPE_DATE
:
12
,
PROTOCOL_PROP_TYPE_STRUCT
:
13
};
var
g_attrAry
=
[
"powerstate"
,
"mode"
,
"localRecipe"
,
"lefttime"
,
"ReserveLeftTime"
,
"keepWarmTime"
,
"errorCode"
,
"workstatus"
,
"Time"
,
"steamingTime"
,
"mixingTime"
,
"temperature"
,
"targetTemperature"
,
"workSwitch"
,
"cloudRecipeStatus"
,
"runTime"
,
"opreationName"
,
];
var
g_attrTypeMap
=
{
powerstate
:{
attrID
:
0
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_BOOL
},
mode
:{
attrID
:
1
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
,
swap
:{
//mcu属性值与天猫精灵属性值的映射关系
0
:
332
,
//待机模式:332
1
:
161
,
//清洗模式:161
2
:
503
,
//自动搅拌模式:503
3
:
492
,
//蒸煮模式:492
4
:
376
,
//煮沸模式:376
5
:
477
,
//辅食模式:477
6
:
494
,
//米糊模式:494
7
:
502
,
//全自动蒸煮搅拌模式:502
}
},
localRecipe
:{
attrID
:
2
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
,
swap
:{
//mcu属性值与天猫精灵属性值的映射关系
0
:
0
,
//无:0
1
:
11
,
//宝宝粥:11
2
:
120
,
//米糊:120
3
:
369
,
//萝卜泥:369
4
:
370
,
//苹果泥:370
5
:
371
,
//香蕉泥:371
6
:
372
,
//土豆牛肉泥:372
7
:
373
,
//菠萝泥:373
8
:
374
,
//牛奶香蕉泥:374
9
:
375
,
//海鲜虾泥:375
10
:
376
,
//田园土豆泥:376
11
:
377
,
//菠菜南瓜泥:377
12
:
378
,
//淮山玉米泥:378
13
:
379
,
//冬瓜肉泥粥:379
14
:
380
,
//猪肝青菜粥:380
15
:
381
,
//牛肉燕麦粥:381
16
:
386
,
//果泥:386
17
:
387
,
//菜泥:387
18
:
388
,
//鱼泥:388
19
:
389
,
//瓜泥:389
20
:
390
,
//肉泥:390
21
:
18
,
//煮米饭:18
}
},
lefttime
:{
attrID
:
3
,
length
:
2
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
},
ReserveLeftTime
:{
attrID
:
4
,
length
:
2
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
},
keepWarmTime
:{
attrID
:
5
,
length
:
2
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT64
,
precise
:
null
},
errorCode
:{
attrID
:
6
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
},
workstatus
:{
attrID
:
7
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
,
swap
:{
//mcu属性值与天猫精灵属性值的映射关系
0
:
3
,
//待机:3
1
:
29
,
//工作:29
2
:
5
,
//预约:5
3
:
6
,
//保温:6
4
:
22
,
//预热:22
5
:
25
,
//加热:25
6
:
50
,
//缺水:50
7
:
89
,
//蒸食中:89
8
:
90
,
//蒸食完成:90
9
:
91
,
//搅拌中:91
10
:
92
,
//搅拌完成:92
}
},
Time
:{
attrID
:
8
,
length
:
2
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
},
steamingTime
:{
attrID
:
9
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
},
mixingTime
:{
attrID
:
10
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
},
targetTemperature
:{
attrID
:
11
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT64
,
precise
:
null
},
temperature
:{
attrID
:
12
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT64
,
precise
:
null
},
workSwitch
:{
attrID
:
13
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
,
swap
:{
//mcu属性值与天猫精灵属性值的映射关系
0
:
0
,
//关闭:0
1
:
1
,
//打开:1
2
:
2
,
//暂停:2
3
:
3
,
//继续:3
4
:
4
,
//寻找:4
}
},
cloudRecipeStatus
:{
attrID
:
14
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
,
swap
:{
//mcu属性值与天猫精灵属性值的映射关系
0
:
0
,
//结束:0
1
:
1
,
//开始:1
}
},
runTime
:{
attrID
:
15
,
length
:
3
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
},
opreationName
:{
attrID
:
16
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
},
};
var
g_serviceArray
=
[];
var
g_serviceDataMap
=
{
};
var
g_eventArray
=
[
"hardwareReset"
,
"cloudRecipeStepDoneEvent"
,
"deviceSideOperationEvent"
];
var
g_eventDataMap
=
{
hardwareReset
:{
outputData
:{
},
eventID
:
0
,
outputArray
:[]
},
cloudRecipeStepDoneEvent
:{
outputData
:{
},
eventID
:
1
,
outputArray
:[]
},
deviceSideOperationEvent
:{
outputData
:{
"opreationName"
:
{
attrID
:
16
,
size
:
1
,
protocolType
:
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
}
},
eventID
:
2
,
outputArray
:[
"opreationName"
]
},
};
var
g_structDataMap
=
{
};
function
protocolToRawData
(
json
)
{
log
(
'------------------------ protocolToRawData start ------------------------'
);
var
params
=
json
[
'params'
];
var
method
=
json
[
'method'
];
var
id
=
json
[
'id'
];
var
attrID
=
[
0
],
v
,
string
=
''
,
charList
=
''
,
type
=
0
;
var
attrKey
=
[]
var
payloadArray
=
[];
console
.
log
(
'method'
,
method
,
THING_ATTRIBUTE_GET
,
attrID
,
params
)
if
(
method
==
THING_ATTRIBUTE_GET
)
{
payloadArray
.
push
(
THING_ATTRIBUTE_GET_CMD
);
// GET BYTE -> 0x01
payloadArray
=
payloadArray
.
concat
(
buffer_uint32
(
id
));
// ID UINT32 -> id
for
(
var
i
=
0
;
i
<
params
.
length
;
i
++
)
{
attrID
[
i
]
=
g_attrTypeMap
[
params
[
i
]].
attrID
;
attrKey
[
i
]
=
g_attrTypeMap
[
params
[
i
]];
payloadArray
.
push
(
attrID
);
log
(
params
[
i
]
+
" "
+
attrID
);
}
}
else
if
(
method
==
THING_ATTRIBUTE_SET
)
{
// payloadArray.push(THING_ATTRIBUTE_SET_CMD); //payload cmd
// payloadArray = payloadArray.concat(buffer_uint32(id)); // ID UINT32 -> id
// {
// var key = params[index];
// }
for
(
var
key
in
params
)
// for (var index = 0; index < params.length; index++)
{
// var key = params[index];
let
index
=
Object
.
keys
(
params
).
indexOf
(
key
);
log
(
'g_attrTypeMap[key]'
,
g_attrTypeMap
,
key
)
type
=
g_attrTypeMap
[
key
].
protocolType
;
attrID
[
index
]
=
g_attrTypeMap
[
key
].
attrID
;
v
=
params
[
key
].
toString
(
10
)
if
(
g_attrTypeMap
[
key
].
hasOwnProperty
(
'swap'
)){
v
=
byte_swap
(
g_attrTypeMap
[
key
].
swap
,
v
);
}
// if (type == PP_TYPE.PROTOCOL_PROP_TYPE_UINT16)
// {
// var strVal = [];
// var v_tostring = parseInt(v).toString(16);
// var v_repair = PrefixZero(v_tostring,4);
// var strVal1 = hex2int(v_repair.slice(0,2))
// var strVal2 = hex2int(v_repair.slice(2,4))
// payloadArray = payloadArray.concat(strVal1)
// payloadArray = payloadArray.concat(strVal2)
// // log("v_repair",v_repair)
// // log("payloadArray",payloadArray)
// }else{
// payloadArray = payloadArray.concat(v);
// }
if
(
type
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRUCT
)
{
var
strVal
=
[];
var
strJson
=
params
[
key
];
var
structMemb
=
g_structDataMap
[
key
];
var
itemData
=
structMemb
.
item
;
var
itemArray
=
structMemb
.
itemArray
;
for
(
var
i
=
0
;
i
<
itemArray
.
length
;
i
++
)
{
var
elemName
=
itemArray
[
i
];
var
item
=
itemData
[
elemName
];
var
ptype
=
item
.
protocolType
;
/* string固定字节 */
if
(
ptype
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
)
{
string
=
unescape
(
encodeURIComponent
(
strJson
[
elemName
]));
charList
=
string
.
split
(
''
);
var
uint8Arrays
=
[];
for
(
var
j
=
0
;
j
<
charList
.
length
;
j
++
)
{
uint8Arrays
.
push
(
charList
[
j
].
charCodeAt
(
0
));
}
for
(;
j
<
item
.
size
;
j
++
)
{
uint8Arrays
.
push
(
0
);
}
strVal
=
strVal
.
concat
(
uint8Arrays
);
}
else
{
v
=
buffer_dynamic
(
strJson
[
elemName
],
ptype
);
// log(elemName + " : " + typeof(strJson[elemName]) + " " + strJson[elemName]);
// log(ptype + " " + attrID + " " + v.toString('hex'));
strVal
=
strVal
.
concat
(
v
);
}
}
payloadArray
.
push
(
type
);
payloadArray
.
push
(
attrID
[
index
]);
payloadArray
=
payloadArray
.
concat
(
strVal
);
continue
;
}
if
(
key
!=
'localRecipe'
)
{
v
=
Number
(
v
).
toString
(
16
)
}
payloadArray
=
payloadArray
.
concat
(
v
);
log
(
"v"
,
v
,
key
,
payloadArray
)
}
}
else
if
(
method
==
THING_SERVICE_INVOKE
)
{
payloadArray
.
push
(
THING_SERVICE_INVOKE_CMD
);
//payload cmd
payloadArray
=
payloadArray
.
concat
(
buffer_uint32
(
id
));
// ID UINT32 -> id
var
serviceName
=
json
[
'serviceName'
];
var
inputData
=
params
;
var
serviceItem
=
g_serviceDataMap
[
serviceName
];
var
inputArray
=
serviceItem
.
inputArray
;
var
inputData
=
serviceItem
.
inputData
;
payloadArray
.
push
(
serviceItem
.
serviceID
);
for
(
var
key
in
serviceItem
.
inputArray
)
{
var
strval
=
[];
var
inputparamName
=
inputArray
[
key
];
type
=
inputData
[
inputparamName
].
protocolType
;
if
(
type
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
)
{
string
=
unescape
(
encodeURIComponent
(
inputData
[
inputparamName
]));
charList
=
string
.
split
(
''
);
var
uint8Array
=
[];
for
(
var
j
=
0
;
j
<
charList
.
length
;
j
++
)
{
uint8Array
.
push
(
charList
[
j
].
charCodeAt
(
0
));
}
for
(;
j
<
params
[
key
].
size
;
j
++
)
{
uint8Array
.
push
(
0
);
}
strval
=
strval
.
concat
(
uint8Array
);
}
else
{
var
value
=
buffer_dynamic
(
inputData
[
inputparamName
],
type
);
log
(
key
+
" : "
+
value
+
" "
+
params
[
key
]);
log
(
type
+
" "
+
" 0x"
+
value
.
toString
(
'hex'
));
strval
=
strval
.
concat
(
value
);
}
payloadArray
=
payloadArray
.
concat
(
strval
);
}
}
else
{
//do nothing
return
;
}
var
str
=
[]
for
(
let
i
=
0
;
i
<
payloadArray
.
length
;
i
++
)
{
if
(
payloadArray
[
i
].
length
%
2
)
{
payloadArray
[
i
]
=
(
Array
(
payloadArray
[
i
].
length
+
1
).
join
(
0
)
+
payloadArray
[
i
]).
slice
(
-
payloadArray
[
i
].
length
-
1
);
}
}
// var a = payloadArray[0];
// if(a.length%2!=0){
// a = (Array(a.length+1).join(0) + a).slice(-a.length-1)
// }
// log('a===================',a)
// for(var i=0,len=a.length/2;i<len;i++) {
// str[i] = a.substr(i*2,2);
// payloadArray[i] = str[i];
// }
log
(
'payloadArray'
,
payloadArray
,
attrID
)
let
retBufferLength
=
1
;
for
(
const
attrkey
of
attrID
)
{
log
(
'attrkey'
,
attrkey
)
if
(
attrkey
==
4
)
{
retBufferLength
=
retBufferLength
+
3
}
else
if
(
attrkey
==
15
)
{
retBufferLength
=
retBufferLength
+
4
}
else
{
retBufferLength
=
retBufferLength
+
2
}
}
log
(
'retBufferLength'
,
retBufferLength
,
attrID
)
var
retBuffer
=
new
Uint8Array
(
retBufferLength
);
//head length ver cmd payload checksum
//var dv = new DataView(retBuffer.buffer, 0);
// retBuffer[0] = id; //云端tid
// retBuffer[1] = attrID; //attrID
// retBuffer[0] = attrID; //attrID
// log("v1",retBuffer)
// for (var i = 0; i < payloadArray.length; i++){
// payloadArray[i] = parseInt(payloadArray[i],16)
// retBuffer[i + 1] = payloadArray[i];
// }
log
(
"v1"
,
attrID
)
log
(
"v1"
,
payloadArray
)
let
attr_id
=
0
var
messageLength
=
0
;
var
arrtLength
=
0
;
retBuffer
[
0
]
=
id
;
for
(
var
i
=
0
;
i
<
attrID
.
length
;
i
++
){
retBuffer
[
i
+
arrtLength
+
1
]
=
parseInt
(
attrID
[
i
],
16
);
// retBuffer[i+arrtLength+1] = attrID[i];
// payloadArray[i] = parseInt(payloadArray[i],16)
log
(
"payloadArray[i]================"
,
attrID
[
i
],
payloadArray
[
i
],
payloadArray
[
i
].
length
)
if
(
payloadArray
[
i
].
length
/
2
>
1
)
{
for
(
let
j
=
0
;
j
<
payloadArray
[
i
].
length
/
2
;
j
++
)
{
if
(
attrID
[
i
]
==
15
)
{
retBuffer
[
i
+
arrtLength
+
j
+
3
]
=
parseInt
(
payloadArray
[
i
].
substr
(
j
*
2
,
2
),
16
);
}
else
{
retBuffer
[
i
+
arrtLength
+
j
+
2
]
=
parseInt
(
payloadArray
[
i
].
substr
(
j
*
2
,
2
),
16
);
}
}
}
else
{
if
(
attrID
[
i
]
==
4
)
{
retBuffer
[
i
+
arrtLength
+
2
]
=
parseInt
(
0
,
16
);
retBuffer
[
i
+
arrtLength
+
3
]
=
parseInt
(
payloadArray
[
i
],
16
);
}
else
if
(
attrID
[
i
]
==
15
)
{
retBuffer
[
i
+
arrtLength
+
2
]
=
parseInt
(
0
,
16
);
retBuffer
[
i
+
arrtLength
+
3
]
=
parseInt
(
0
,
16
);
retBuffer
[
i
+
arrtLength
+
4
]
=
parseInt
(
payloadArray
[
i
],
16
);
}
else
{
retBuffer
[
i
+
arrtLength
+
2
]
=
parseInt
(
payloadArray
[
i
],
16
);
}
}
// retBuffer[i+messageLength + 1] = payloadArray[i];
if
(
attrID
[
i
]
==
4
)
{
arrtLength
++
}
attr_id
++
arrtLength
++
// log("payloadArray[i]",arrtLength)
// if (i==arrtLength) {
// retBuffer[i] = attrID[attr_id];
// if (attrID[attr_id]==4) {
// arrtLength=arrtLength+2
// }
// log("arrtLength1===========================",attrID[attr_id],arrtLength)
// attr_id++
// arrtLength++
// // payloadArray[i] = parseInt(payloadArray[i],16)
// // retBuffer[i+messageLength + 1] = payloadArray[i];
// // // messageLength++
// // if (attrID[i+messageLength]==4) {
// // messageLength= messageLength+2
// // } else {
// // messageLength++
// // }
// } else {
// log("arrtLength2++++++++++++++++++++++++++++++++",arrtLength)
// payloadArray[i] = parseInt(payloadArray[i],16)
// retBuffer[i] = payloadArray[i];
// }
}
// var messageLength=0;
// for (var i = 0; i < payloadArray.length; i++){
// log("i+messageLength",i+messageLength)
// log("payloadArray[i]",messageLength,payloadArray[messageLength])
// retBuffer[i+messageLength] = attrID[i+messageLength];
// payloadArray[i] = parseInt(payloadArray[i],16)
// retBuffer[i+messageLength + 1] = payloadArray[i];
// // messageLength++
// if (attrID[i+messageLength]==4) {
// messageLength= messageLength+2
// } else {
// messageLength++
// }
// // log("v1",retBuffer)
// }
log
(
"3124124124124123"
,
retBuffer
)
// return [].slice.call(retBuffer);
let
test
=
[].
slice
.
call
(
retBuffer
);
test
.
unshift
(
id
);
return
test
;
}
//02属性 04事件
// var bytes = [0xC3,0x04,0x01,0x01];
// var bytes = [0xC3,0x04,0x01,0x01];
// var bytes = [0xC3,0x04,0x02,0x30,0x04];
// var bytes = [0xC3,0x02,0x01,0x03,0x00,0xff,0x01,0x01,0x86,0xa0,0x01,0x86,0x9f,0xff,0xff,0xff,0xff,0xc8,0x95];
// var test_printf = rawDataToProtocol(bytes)
// log(test_printf)
function
rawDataToProtocol
(
bytes
)
{
//log('------------------------ rawDataToProtocol start ------------------------');
var
itype
=
0
;
var
new_array
=
[];
var
params
=
{};
new_array
=
[].
slice
.
call
(
bytes
);
//转换为可操作的数组
log
(
'new_array.length'
,
new_array
.
length
)
// var buffer = new Uint8Array(new_array.length);
var
buffer
=
new
Uint8Array
(
new_array
.
length
-
1
);
// for (var i = 0; i < new_array.length; i++)
// {
// buffer[i] = new_array[i] & 0xff;
// }
buffer
[
0
]
=
new_array
[
0
]
&
0xff
;
for
(
var
i
=
2
;
i
<
new_array
.
length
;
i
++
)
{
buffer
[
i
-
1
]
=
new_array
[
i
]
&
0xff
;
}
var
dv
=
new
DataView
(
buffer
.
buffer
,
0
);
var
c_id
=
buffer
[
0
];
//tid
var
c_length
=
bytes
.
length
-
1
;
var
jsonMap
=
new
Object
();
var
c_method
=
new_array
[
1
];
var
offset
=
1
;
//payload data域
// var c_method = 2;
console
.
log
(
'c_method'
,
c_method
,
buffer
)
if
(
c_method
==
THING_ATTRIBUTE_GET_CMD
)
//GET
{
jsonMap
[
'method'
]
=
THING_ATTRIBUTE_POST
;
var
params
=
{};
var
loop
=
c_length
;
if
(
loop
==
0
)
{
log
(
'data input err.'
);
return
null
;
}
jsonMap
[
'params'
]
=
params
;
}
else
if
(
c_method
==
THING_ATTRIBUTE_POST_CMD
)
//report
{
params
[
g_attrAry
[
0
]]
=
buffer
[
1
];
//powerstate
params
[
g_attrAry
[
1
]]
=
json_swap
(
g_attrTypeMap
.
mode
.
swap
,
buffer
[
2
]);
//mode
params
[
g_attrAry
[
2
]]
=
json_swap
(
g_attrTypeMap
.
localRecipe
.
swap
,
buffer
[
3
]);
//localRecipe
params
[
g_attrAry
[
3
]]
=
dv
.
getUint16
(
4
,
0
);
//lefttime
params
[
g_attrAry
[
4
]]
=
dv
.
getUint16
(
6
,
0
);
//ReserveLeftTime
params
[
g_attrAry
[
5
]]
=
dv
.
getUint16
(
12
,
0
);
//keepWarmTime
params
[
g_attrAry
[
6
]]
=
buffer
[
8
];
//errorCode
params
[
g_attrAry
[
7
]]
=
json_swap
(
g_attrTypeMap
.
workstatus
.
swap
,
buffer
[
9
]);
//workstatus
params
[
g_attrAry
[
8
]]
=
dv
.
getUint16
(
10
,
0
);
//Time
params
[
g_attrAry
[
9
]]
=
buffer
[
14
];
//steamingTime
params
[
g_attrAry
[
10
]]
=
buffer
[
15
];
//mixingTime
params
[
g_attrAry
[
11
]]
=
buffer
[
16
];
//temperature
params
[
g_attrAry
[
12
]]
=
buffer
[
17
];
//targetTemperature
console
.
log
(
'temperature'
,
g_attrAry
[
12
],
buffer
[
17
]);
params
[
g_attrAry
[
13
]]
=
buffer
[
18
];
//workSwitch
params
[
g_attrAry
[
14
]]
=
buffer
[
19
];
//cloudRecipeStatus
jsonMap
[
'method'
]
=
THING_ATTRIBUTE_POST
;
var
loop
=
c_length
;
if
(
loop
==
0
)
{
log
(
'data input err'
);
return
null
;
}
jsonMap
[
'params'
]
=
params
;
}
else
if
(
c_method
==
THING_SERVICE_RESPONSE_CMD
)
//service
{
var
serviceID
=
buffer
[
offset
++
];
var
serviceName
=
g_serviceArray
[
serviceID
];
var
serviceData
=
g_serviceDataMap
[
serviceName
];
var
outputData
=
serviceItem
.
outputData
;
var
outputArray
=
serviceData
.
outputArray
;
var
outputDataJson
=
{};
for
(
var
i
=
0
;
i
<
outputArray
.
length
;
i
++
)
{
var
itemName
=
outputArray
[
i
];
var
item
=
outputData
[
itemName
];
itype
=
item
.
protocolType
;
if
(
itype
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
)
{
var
string_v
=
type_string
(
buffer
,
offset
,
item
.
size
);
outputDataJson
[
itemName
]
=
string_v
.
value
;
offset
+=
item
.
size
;
}
else
{
var
payloadObj
=
type_dynamic_with_param
(
buffer
,
dv
,
offset
,
itype
,
item
.
precise
);
offset
+=
payloadObj
.
length
;
if
(
itype
>=
PP_TYPE
.
PROTOCOL_PROP_TYPE_BOOL
&&
itype
<=
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT64
)
{
outputDataJson
[
itemName
]
=
parseInt
(
payloadObj
.
value
.
toString
());
}
else
{
outputDataJson
[
itemName
]
=
payloadObj
.
value
;
}
}
}
jsonMap
[
'method'
]
=
THING_SERVICE_RESPONSE
;
jsonMap
[
'serviceName'
]
=
serviceName
;
jsonMap
[
'params'
]
=
outputDataJson
;
}
else
if
(
c_method
==
THING_EVENT_POST_CMD
)
{
var
evntID
=
buffer
[
offset
++
];
var
eventName
=
g_eventArray
[
evntID
];
log
(
'eventName'
,
eventName
)
var
eventItem
=
g_eventDataMap
[
eventName
];
var
outputData
=
eventItem
.
outputData
;
var
outputArray
=
eventItem
.
outputArray
;
var
outputDataJson
=
{};
for
(
var
i
=
0
;
i
<
outputArray
.
length
;
i
++
)
{
var
itemName
=
outputArray
[
i
];
var
item
=
outputData
[
itemName
];
itype
=
item
.
protocolType
;
if
(
itype
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
)
{
console
.
log
(
buffer
,
offset
,
item
);
var
string_v
=
type_string
(
buffer
,
offset
,
item
.
size
);
console
.
log
(
string_v
);
outputDataJson
[
itemName
]
=
string_v
.
value
;
offset
+=
item
.
size
;
}
else
{
var
payloadObj
=
type_dynamic_with_param
(
buffer
,
dv
,
offset
,
itype
,
item
.
precise
);
offset
+=
payloadObj
.
length
;
if
(
itype
>=
PP_TYPE
.
PROTOCOL_PROP_TYPE_BOOL
&&
itype
<=
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT64
)
{
outputDataJson
[
itemName
]
=
parseInt
(
payloadObj
.
value
.
toString
());
}
else
{
outputDataJson
[
itemName
]
=
payloadObj
.
value
;
}
}
}
jsonMap
[
'method'
]
=
THING_EVENT_POST
;
jsonMap
[
'eventName'
]
=
eventName
;
jsonMap
[
'params'
]
=
outputDataJson
;
}
else
{
//do nothing
return
null
;
}
jsonMap
[
'id'
]
=
''
+
c_id
;
jsonMap
[
'version'
]
=
VERSION
;
log
(
"finished: "
+
JSON
.
stringify
(
jsonMap
));
log
(
'------------------------ rawDataToProtocol end ------------------------'
);
return
jsonMap
;
}
function
log
(){
try
{
console
.
log
.
apply
(
console
,
arguments
);
}
catch
(
e
){
}
try
{
print
.
apply
(
print
,
arguments
);
}
catch
(
e
){
}
};
function
json_swap
(
map
,
v
){
//byte->json
var
_swap
=
{}
_swap
=
map
[
v
]
return
_swap
}
function
byte_swap
(
map
,
v
){
//json->byte
var
_swap
=
{}
for
(
var
key
in
map
){
_swap
[
map
[
key
]]
=
key
}
_swap
=
_swap
[
v
]
return
_swap
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function
type_uint8
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getUint8
(
offset
),
"length"
:
1
};}
function
type_int8
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getInt8
(
offset
),
"length"
:
1
};}
function
type_uint16
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getUint16
(
offset
),
"length"
:
2
};}
function
type_int16
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getInt16
(
offset
),
"length"
:
2
};}
function
type_int32
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getInt32
(
offset
),
"length"
:
4
};}
function
type_uint32
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getUint32
(
offset
),
"length"
:
4
};}
function
type_int64
(
dv
,
offset
)
{
var
low
=
dv
.
getUint32
(
offset
+
4
);
var
n
=
dv
.
getUint32
(
offset
)
*
4294967296.0
+
low
;
if
(
low
<
0
)
n
+=
4294967296
;
return
{
"value"
:
n
,
"length"
:
8
};
}
function
type_uint64
(
dv
,
offset
)
{
var
low
=
dv
.
getUint32
(
offset
+
4
);
var
n
=
dv
.
getUint32
(
offset
)
*
4294967296.0
+
low
;
if
(
low
<
0
)
n
+=
4294967296
;
return
{
"value"
:
n
,
"length"
:
8
};
}
function
type_float
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getFloat32
(
offset
),
"length"
:
4
};
}
function
type_double
(
dv
,
offset
)
{
return
{
"value"
:
dv
.
getFloat64
(
offset
),
"length"
:
8
};
}
function
type_string
(
bytes
,
offset
,
length
)
{
var
value
=
String
.
fromCharCode
.
apply
(
null
,
bytes
.
subarray
(
offset
,
offset
+
length
));
var
endIndex
=
value
.
indexOf
(
'
\
u0000'
,
0
);
if
(
endIndex
>=
0
)
value
=
value
.
substr
(
0
,
endIndex
);
return
{
"value"
:
value
,
"length"
:
length
};
}
// [typeID -> byte] [attrID -> byte] [value -> dynamic]
// [typeID -> byte] [attrID -> byte] [length -> int16] [value -> dynamic]
function
type_dynamic_with_param
(
bytes
,
dataview
,
offset
,
typeID
,
precise
)
{
var
tmpOffset
=
offset
;
var
value
=
null
,
v
=
0
;
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_BOOL
)
{
v
=
type_uint8
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
)
{
v
=
type_int8
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT8
)
{
v
=
type_uint8
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT16
)
{
v
=
type_int16
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT16
)
{
v
=
type_uint16
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT32
)
{
v
=
type_int32
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT32
)
{
v
=
type_uint32
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT32
)
{
v
=
type_float
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
parseFloat
(
v
.
value
.
toFixed
(
precise
));
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT64
)
{
v
=
type_double
(
dataview
,
tmpOffset
);
tmpOffset
+=
v
.
length
;
value
=
parseFloat
(
v
.
value
.
toFixed
(
precise
));
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
)
{
var
strLength
=
type_int16
(
dataview
,
tmpOffset
);
tmpOffset
+=
strLength
.
length
;
var
string_v
=
type_string
(
bytes
,
tmpOffset
,
strLength
.
value
);
value
=
string_v
.
value
;
tmpOffset
+=
string_v
.
length
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
)
{
var
timestamp_v
=
type_int64
(
dataview
,
tmpOffset
);
tmpOffset
+=
timestamp_v
.
length
;
value
=
timestamp_v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT64
)
{
var
timestamp_v
=
type_uint64
(
dataview
,
tmpOffset
);
tmpOffset
+=
timestamp_v
.
length
;
value
=
timestamp_v
.
value
;
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_DATE
)
{
var
date_v
=
type_uint64
(
dataview
,
tmpOffset
);
tmpOffset
+=
date_v
.
length
;
value
=
date_v
.
value
.
toString
();
}
return
{
"value"
:
value
,
"length"
:
tmpOffset
-
offset
};
}
function
type_dynamic
(
bytes
,
dataview
,
offset
)
{
var
tmpOffset
=
new
Number
(
offset
);
var
attrID
=
bytes
[
tmpOffset
++
];
var
attribute
=
g_attrAry
[
attrID
];
var
typeID
=
g_attrTypeMap
[
attribute
].
protocolType
;
var
precise
=
0
;
var
attrName
=
g_attrAry
[
attrID
];
var
attrItem
=
g_attrTypeMap
[
attrName
];
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT32
||
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT64
)
{
precise
=
2
;
//默认2位
}
var
v
=
type_dynamic_with_param
(
bytes
,
dataview
,
tmpOffset
,
typeID
,
precise
);
if
(
typeID
>=
PP_TYPE
.
PROTOCOL_PROP_TYPE_BOOL
&&
typeID
<=
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT64
)
{
return
{
"value"
:
parseInt
(
v
.
value
.
toString
()),
"length"
:(
2
+
v
.
length
),
attrID
:
attrID
};
}
else
{
return
{
"value"
:
v
.
value
,
"length"
:(
2
+
v
.
length
),
attrID
:
attrID
};
}
}
function
buffer_uint8
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
1
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setUint8
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_int8
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
1
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setInt8
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_int16
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
2
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setInt16
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_uint16
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
2
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setUint16
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_uint32
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
4
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setUint32
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_int32
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
4
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setInt32
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_int64
(
value
)
{
//Number.MAX_SAFE_INTEGER
var
local_MAX_UINT32
=
0xFFFFFFFF
;
var
big
=
~~
(
value
/
local_MAX_UINT32
);
var
low
=
(
value
%
local_MAX_UINT32
)
-
big
;
var
uint8Array
=
new
Uint8Array
(
8
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setInt32
(
0
,
big
);
dv
.
setInt32
(
4
,
low
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_uint64
(
value
)
{
//Number.MAX_SAFE_INTEGER
var
local_MAX_UINT32
=
0xFFFFFFFF
;
var
big
=
~~
(
value
/
local_MAX_UINT32
);
var
low
=
(
value
%
local_MAX_UINT32
)
-
big
;
var
uint8Array
=
new
Uint8Array
(
8
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setUint32
(
0
,
big
);
dv
.
setUint32
(
4
,
low
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_float
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
4
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setFloat32
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_double
(
value
)
{
var
uint8Array
=
new
Uint8Array
(
8
);
var
dv
=
new
DataView
(
uint8Array
.
buffer
,
0
);
dv
.
setFloat64
(
0
,
value
);
return
[].
slice
.
call
(
uint8Array
);
}
function
buffer_string
(
value
)
{
var
string
=
unescape
(
encodeURIComponent
(
value
));
var
charList
=
string
.
split
(
''
);
var
uint8Array
=
new
Array
();
for
(
var
i
=
0
;
i
<
charList
.
length
;
i
++
)
{
uint8Array
.
push
(
charList
[
i
].
charCodeAt
(
0
));
}
var
byteLength
=
uint8Array
.
length
;
return
[].
concat
(
buffer_int16
(
byteLength
),
uint8Array
);
}
function
buffer_dynamic
(
value
,
typeID
)
{
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_BOOL
)
{
return
buffer_uint8
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT8
)
{
return
buffer_int8
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT8
)
{
return
buffer_uint8
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT16
)
{
return
buffer_int16
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT16
)
{
return
buffer_uint16
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT32
)
{
return
buffer_int32
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT32
)
{
return
buffer_uint32
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_INT64
)
{
return
buffer_int64
(
value
);
}
else
if
((
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_UINT64
)
||
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_DATE
))
{
return
buffer_uint64
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT32
)
{
return
buffer_float
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_FLOAT64
)
{
return
buffer_double
(
value
);
}
else
if
(
typeID
==
PP_TYPE
.
PROTOCOL_PROP_TYPE_STRING
)
{
return
buffer_string
(
value
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment