脚本编码通过groovy语言的脚本完成了编码和解码,编码脚本实现了设备属性至透传指令的转换,解码脚本实现了上报指令至设备属性的转换。
为了规范调用,脚本编码方式的脚本内容输入输出需遵循特定的格式,如下所示:
public class Template extends AbstractSmartMessageCodec {
/**
* 将Json数据和指令编码为设备能识别的值
*
* @param source 命令/控制参数
* @return 编码后的指令
*/
@Override
public byte[] encode(JsonObject source) throws Exception {
byte[] result;
// TODO encode here
return result;
}
/**
* 将指定输入数据解码成能力模型定义的Json对象
*
* @param source 设备返回的响应结果
* @return 解码后的响应结果
*/
@Override
public JsonObject decode(byte[] source) throws Exception {
JsonObject result = new JsonObject();
// TODO decode here
return result;
}
}
# 编码脚本
编码脚本需要接收 JsonObject (opens new window) 格式的控制参数source
对象,返回byte数组作为控制指令。
示例如下:
byte[] rtn = new byte[16];
rtn[0] = 170;
rtn[1] = 85;
rtn[2] = source.getInteger("controlSrc");
rtn[3] = 2; rtn[4] = source.getInteger("menuId") & 0xFF;
// 省略部分中间转化代码
rtn[14] = source.getInteger("riceType") & 0xFF;
rtn[15] = (source.getInteger("riceType") >> 8) & 0xFF;
return rtn;
TIP
编码脚本不需要添加电控协议头 另外可以通过logout("this is a test log",scriptLogInfo);来打印需要的日志,调试台调试的时候可以显示这些日志。 其中第一个入参为打印的日志,第二个入参为固定参数,不要改动。
# 解码脚本
编码脚本需要接收byte数组格式的二进制报文source
,返回json对象作为控制结果。示例如下:
JsonObject rtn = new JsonObject();
rtn.put("controlSrc", source[12]);
rtn.put("workStatus", source[18]);
rtn.put("menuId", source[14] + source[15]>>8);
// 省略部分中间转化代码
rtn.put("topTemperature", source[30]);
rtn.put("bottomTemperature", source[31]);
return rtn;
TIP
解码脚本中的source数组包含电控协议头 另外可以通过logout("this is a test log",scriptLogInfo);来打印需要的日志,调试台调试的时候可以显示这些日志。 其中第一个入参为打印的日志,第二个入参为固定参数,不要改动。