You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Helium Console编写自定义JS函数实现MsgPack格式Payload自动解码

Helium Console 自定义MsgPack解码解决方案

实现思路

  • Helium Console自定义函数仅支持无依赖原生JS运行,无需引入完整MsgPack库,仅实现适配当前设备输出数据类型的轻量解码逻辑即可满足需求
  • 执行流程分为三步:将base64编码的原始payload转为二进制字节流、MsgPack解包为JS对象、返回符合Helium集成要求的格式化结果

完整可直接使用的解码函数

// Helium Console 自定义解码函数入口
function Decoder(payload) {
  // 1. base64转Uint8Array二进制字节流
  function base64ToBytes(base64) {
    const binStr = atob(base64);
    const len = binStr.length;
    const bytes = new Uint8Array(len);
    for (let i = 0; i < len; i++) {
      bytes[i] = binStr.charCodeAt(i);
    }
    return bytes;
  }

  // 2. 极简MsgPack解包,仅适配当前设备使用的MsgPack数据类型
  function msgpackUnpack(bytes) {
    let offset = 0;
    function read() {
      const byte = bytes[offset++];
      // 正fixint
      if (byte < 0x80) return byte;
      // fixmap
      if (byte >= 0x80 && byte <= 0x8f) {
        const len = byte - 0x80;
        const obj = {};
        for (let i = 0; i < len; i++) {
          const key = read();
          obj[key] = read();
        }
        return obj;
      }
      // fixstr
      if (byte >= 0xa0 && byte <= 0xbf) {
        const len = byte - 0xa0;
        let str = '';
        for (let i = 0; i < len; i++) {
          str += String.fromCharCode(bytes[offset++]);
        }
        return str;
      }
      // float32
      if (byte === 0xca) {
        const view = new DataView(bytes.buffer, offset, 4);
        const val = view.getFloat32(0, false); // 大端序
        offset += 4;
        return val;
      }
      // 后续设备新增数据类型可在此处扩展解码逻辑
      throw new Error(`不支持的MsgPack类型: 0x${byte.toString(16)}`);
    }
    return read();
  }

  // 3. 执行解码并返回结果
  const bytes = base64ToBytes(payload);
  return msgpackUnpack(bytes);
}

// 测试验证:使用示例payload输出和Python脚本完全一致
// console.log(Decoder("haJiVspAozMzo3RfQxilZWNfbVMWonBoB6NvcnAC"))
// 输出:{ bV: 5.099999904632568, t_C: 24, ph: 7, orp: 2, ec_mS: 22 }

部署说明

直接将上述函数复制到Helium Console的自定义函数编辑区即可使用,若后续设备上报字段新增了未支持的MsgPack类型,仅需在msgpackUnpack函数中补充对应解码逻辑即可。

内容的提问来源于stack exchange,提问作者gregarican

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 14:06:09