Ditto.asByteBuffer(bytePayload)引发异常

时间:2019-01-17 12:55:55

标签: javascript eclipse-ditto eclipse-iot

eclipse-ditto映射上下文中,我将以下输入脚本放入:

function mapToDittoProtocolMsg(headers, textPayload, bytePayload, contentType) {
switch (contentType) {
    case "application/json":
        var jsonData = JSON.parse(textPayload);
        var temperature = jsonData.temp;
        var humidity = jsonData.hum;
        var path;
        var value;
        if (temperature != null && humidity != null) {
            path = "/features";
            value = {
                temperature: {
                    properties: {
                        value: temperature
                    }
                },
                humidity: {
                    properties: {
                        value: humidity
                    }
                }
            };
        } else if (temperature != null) {
            path = "/features/temperature/properties/value";
            value = temperature;
        } else if (humidity != null) {
            path = "/features/humidity/properties/value";
            value = humidity;
        }
        if (!path || !value) {
            return null;
        }
        return Ditto.buildDittoProtocolMsg("tenant_aloxy", headers["device_id"], "things", "twin", "commands", "modify", path, headers, value);
        break;
    case "application/octet-stream":
        let byteBuf = Ditto.asByteBuffer(bytePayload);
        var path = "/features/alp/properties/value";
        var value = 21;
        return Ditto.buildDittoProtocolMsg("tenant_aloxy", headers["device_id"], "things", "twin", "commands", "modify", path, headers, value);
    default:
        return null;
}

}

当我发送二进制数据时,我正在按预期达到开关的第二种情况。但是,当它尝试将传入的数据转换为字节缓冲区(Ditto.asByteBuffer(bytePayload);)时,将引发以下异常:

  

ReferenceError:未定义“ dcodeIO”。

1 个答案:

答案 0 :(得分:2)

“同上”作用域中的该辅助函数需要使用“ ByteBuffer.js”库,如文档中所述:https://www.eclipse.org/ditto/connectivity-mapping.html#bytebufferjsdcodeIO被用作该库的作用域)。

这意味着您只需启用该库即可在映射的配置中加载:https://www.eclipse.org/ditto/connectivity-mapping.html#configuration-options

{
  "incomingScript": "...",
  "outgoingScript": "...",
  "loadBytebufferJS": true,
  "loadLongJS": true
}

之后,您应该可以使用Ditto.asByteBuffer()