脚本编码通过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);来打印需要的日志,调试台调试的时候可以显示这些日志。 其中第一个入参为打印的日志,第二个入参为固定参数,不要改动。

最后修改于: 2021-11-22