Lorawan Sensor Code

Hello,
i got a Milesight UG65 Gateway to receive Lorawan Payloads from a heat meter.
The Gateway needs a payload decoder looks like that:

/**
 * Payload Decoder for Chirpstack and Milesight network server
 * 
 * Copyright 2022 Milesight IoT
 * 
 * @product EM300-TH
 * @params
 *     - fPort: 85
 *     - bytes: [0x01, 0x75, 0x64]
 */
function Decode(fPort, bytes) {
    var decoded = {};

    for (var i = 0; i < bytes.length;) {
        var channel_id = bytes[i++];
        var channel_type = bytes[i++];

        // BATTERY
        if (channel_id === 0x01 && channel_type === 0x75) {
            decoded.battery = bytes[i];
            i += 1;
        }
        // TEMPERATURE
        else if (channel_id === 0x03 && channel_type === 0x67) {
            // ℃
            decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10;
            i += 2;
        }
        // HUMIDITY
        else if (channel_id === 0x04 && channel_type === 0x68) {
            decoded.humidity = bytes[i] / 2;
            i += 1;
        } else {
            break;
        }
    }

    return decoded;
}

/* ******************************************
 * bytes to number
 ********************************************/
function readUInt16LE(bytes) {
    var value = (bytes[1] << 8) + bytes[0];
    return value & 0xffff;
}

function readInt16LE(bytes) {
    var ref = readUInt16LE(bytes);
    return ref > 0x7fff ? ref - 0x10000 : ref;
}

when i paste the Code and a Payload like this 03 67 AD 00 04 68 73 into this site https://tools.connect2lora.com/payload-decoder-ide/ the output is

{
“temperature”: 17.3,
“humidity”: 57.5
}

This is a working Payload Decoder from the Milesight Library.

Now i would like to create a Code for the Third Party Sensor i bought from Elvaco (CMI4140).
I got some code from Elvaco which works in “The ThingsNetwork” but not in my Milesight Gateway.
Here is the Code i got from Elvaco:

function readPlaintext(data) {
    return String.fromCharCode.apply(null, data);
}
function readInt(bytes, data) {
    return data.splice(0, bytes).reduce(function(a, v, i) {
        return a | (v << (8*i));
    }, 0) >>> 0;
}
function readBcd(digits, data) {
    return data.splice(0, digits/2).reduce(function(a, v, i) {
        var f = 1;
        if ((v & 0xF0) == 0xF0) { f = -1; v = v & 0x0F; }
        return f * (a + ((((v >> 4) & 0x0F) * 10) + (v & 0x0F)) * Math.pow(100, i));
    }, 0);
}
function readDatetime(data) {
    if (data[1] & 0x01) return "INVALID";
    var year = 1900 + 100 * (data[1] >> 5);
    year += ((data[3] >> 4) << 3) | (data[2] >> 5);
    return year + "-" +
        ('0' + (data[3] & 0x0f)).substr(-2) + "-" +
        ('0' + (data[2] & 0x1f)).substr(-2) + "T" +
        ('0' + (data[1] & 0x1f)).substr(-2) + ":" +
        ('0' + (data[0] & 0x7f)).substr(-2) + "Z";
}
function scaledValue(v, e, u, o) {
    return {
        p: function(d, s, r) { return r(d) * Math.pow(10, v + o); }
    };
}
function hexBytes() {
    return { p: function(d) {
        return '0x' + d.map(function(b) {
            return ('0' + (b & 0xFF).toString(16)).slice(-2);
        }).join('');
    } };
}
function scaledUnit(v, e, u, o) {
    var prefix = "";
    var scale = v + (!isNaN(o) ? o : 0);

    // Determine units based on VIF scaling only
    if (scale >= 9){
        scale -= 9;
        prefix = "G";
    } else if (scale >= 6) {
        scale -= 6;
        prefix = "M";
    } else if (scale >= 3) {
        scale -= 3;
        prefix = "k";
    }

    // Check for VIF extensions modifying the scale of the value
    for (var i = 0; i < e.length; i++) {
        if (e[i] >= 0x70 && e[i] < 0x78) {
            scale += (e[i] & 0x07) - 6;
            break;
        }
    }
    if (e.indexOf(0x7D) >= 0) scale += 3;

    return {
        p: function(d, s, r) { return r(d) * Math.pow(10, scale); },
        u: prefix + u
    };
}
function pfttParser(v, e) {
    return { p: function(d) {
        var ft = readInt(2, d) * 0.01;
        var rt = readInt(2, d) * 0.01;
        var flow = readInt(2, d) * Math.pow(10, (e[3] & 0x0F) - 6);
        var power = readInt(2, d) * Math.pow(10, (e[3] & 0xF0 >> 4) - 3);
        return {
            ft: ft, ftUnit: '°C',
            rt: rt, rtUnit: '°C',
            flow: flow, flowUnit: 'm³/h',
            power: power, powerUnit: 'W'
        };
    } };
}
function miefParser() {
    return { p: function(d, s, r) {
        var meterIdDigits = s == 8 || s == 6 ? 8 : 16;
        return {
            errorflags: '0x' + d.splice(0, d.length - (meterIdDigits/2))
                .map(function (b) {
                    return ('0' + (b & 0xFF).toString(16)).slice(-2);
                }).join(''),
            meterid: readBcd(meterIdDigits, d)
        };
    } };
}
function onTimeUnit(v) {
    return {
        u: ["seconds", "minutes", "hours", "days"][v],
        p: function(d, s, r) { return r(d); },
    };
}
function dateTimeParser() {
    return { p: function(d, s) {
        if (s == 4) {
            return readDatetime(d);
        } else if (s == 2) {
            return readDate(d);
        }
    } };
}
function passthroughParser() {
    return { p: function(d, s, r) { return r(d); } };
}
function parseVifBytes(vif, vife) {
  var vifs = {
    251: [
      { k: 5, b: 0x7e, v: 0x0, u: "MWh", p: scaledValue, pa: [-1] },
      { k: 5, b: 0x7e, v: 0x8, u: "GJ", p: scaledValue, pa: [-1] },
      { k: 5, b: 0x7c, v: 0xc, u: "MCal", p: scaledValue, pa: [-1] },
      { k: 6, b: 0x7e, v: 0x10, u: "m³", p: scaledValue, pa: [2] },
      { k: 90, b: 0x7e, v: 0x1a, u: "%", p: scaledValue, pa: [-1] },
      { k: 6, b: 0x7f, v: 0x20, u: "feet³", p: scaledValue, pa: [0] },
      { k: 6, b: 0x7f, v: 0x21, u: "feet³", p: scaledValue, pa: [-1] },
      { k: 10, b: 0x7e, v: 0x28, u: "MW", p: scaledValue, pa: [-1] },
      { k: 10, b: 0x7e, v: 0x30, u: "GJ/h", p: scaledValue, pa: [-1] }
    ],
    253: [
      { k: 4, b: 0x7f, v: 0x17, u: undefined, p: hexBytes, pa: [] }
    ],
    255: [
      { k: 0, b: 0x7f, v: 0x7, u: "m³ * °C", p: scaledUnit, pa: [0] },
      { k: 1, b: 0x7f, v: 0x8, u: "m³ * °C", p: scaledUnit, pa: [0] },
      { k: 2, b: 0x7f, v: 0x20, u: undefined, p: pfttParser, pa: [] },
      { k: 3, b: 0x7f, v: 0x21, u: undefined, p: miefParser, pa: [] }
    ],
    p: [
      { k: 5, b: 0x78, v: 0x0, u: "Wh", p: scaledUnit, pa: [-3] },
      { k: 5, b: 0x78, v: 0x8, u: "J", p: scaledUnit, pa: [0] },
      { k: 6, b: 0x78, v: 0x10, u: "m³", p: scaledValue, pa: [-6] },
      { k: 8, b: 0x7c, v: 0x20, u: undefined, p: onTimeUnit, pa: [] },
      { k: 10, b: 0x78, v: 0x28, u: "W", p: scaledUnit, pa: [-3] },
      { k: 10, b: 0x78, v: 0x30, u: "J/h", p: scaledUnit, pa: [0] },
      { k: 11, b: 0x78, v: 0x38, u: "m³/h", p: scaledValue, pa: [-6] },
      { k: 14, b: 0x7c, v: 0x58, u: "°C", p: scaledValue, pa: [-3] },
      { k: 15, b: 0x7c, v: 0x5c, u: "°C", p: scaledValue, pa: [-3] },
      { k: 17, b: 0x7c, v: 0x64, u: "°C", p: scaledValue, pa: [-3] },
      { k: 20, b: 0x7f, v: 0x6d, u: undefined, p: dateTimeParser, pa: [] },
      { k: 26, b: 0x7f, v: 0x78, u: undefined, p: passthroughParser, pa: [] },
      { k: 27, b: 0x7f, v: 0x79, u: undefined, p: passthroughParser, pa: [] }
    ],
  };

  function checkTable(b, k) {
    for (var i = 0; i < vifs[k].length; i++) {
      var item = vifs[k][i];
      if ((b & item.b) == item.v) {
        var obj = { k: item.k, u: item.u };
        var repl = item.p.apply(null,
          [b & ~item.b & 0x7F, vife, item.u].concat(item.pa));
        for (var x in repl) { obj[x] = repl[x]; }
        return obj;
      }
    }
  }

  var entry = {};
  if (vif == 253) { entry = checkTable(vife[0], 253); }
  else if (vif == 251) { entry = checkTable(vife[0], 251); }
  else if (vif == 255) { entry = checkTable(vife[0], 255); }
  else { entry = checkTable(vif, 'p'); }

  var manSpec = vife.indexOf(0xFF);
  if (manSpec >= 0) {
    entry.m = vife.slice(manSpec+1);
  }

  return entry;
}
function parseDibs(data) {
  var dibs = [];
  while (data.length > 0) {
    var dif = data.shift();
    var error = (dif & 0x30) == 0x30;
    var b;

    if ((dif & 0x0F) == 0x0F) {
      if (dif == 0x0F || dif == 0x1F) break;
      continue;
    }

    var storagenumber = (dif & 0x40) >> 6;
    var ext = (dif & 0x80) == 0x80;
    var dife = [];
    while (ext && dife.length < 10) {
      b = data.shift();
      ext = (b & 0x80) == 0x80;
      storagenumber |= (b & 0x0F) << ((dife.length * 4) + 1);
      dife.push(b);
    }

    var datatype = dif & 0x0F;
    var datasize = [0,1,2,3,4,4,5,8,1,1,2,3,4,0,6][datatype];
    var vif = data.shift();

    var vext = (vif & 0x80) == 0x80;
    var vife = [];
    while (vext && vife.length < 10) {
      b = data.shift();
      vext = (b & 0x80) == 0x80;
      vife.push(b);
    }

    var reader = function(a) { return a; };
    if ((datatype > 0 && datatype < 5) || datatype == 6) {
      reader = readInt.bind(null, datatype);
    } else if (datatype == 7) {
      reader = readInt.bind(null, 8);
    } else if (datatype > 8 && datatype < 13) {
      reader = readBcd.bind(null, (datatype - 8)*2);
    } else if (datatype == 14) {
      reader = readBcd.bind(null, 12);
    }

    var vifData = parseVifBytes(vif, vife);
    if ((dif & 0x0F) == 13) {
       b = data.shift();
       if (b <= 0xBF) {
         datasize = b;
         reader = readPlaintext;
       } else if (b >= 0xC0 && b <= 0xC9) {
         datasize = (b - 0xC0);
         reader = readBcd.bind(null, datasize*2);
       } else if (b >= 0xD0 && b <= 0xD9) {
         datasize = (b - 0xD0);
         reader = readBcd.bind(null, datasize*2);
       } else if (b >= 0xE0 && b <= 0xEF) {
         datasize = (b - 0xE0);
         reader = readInt.bind(null, datasize);
       } else if (b >= 0xF0 && b <= 0xF4) {
         datasize = 4*(b - 0xEC);
         reader = readInt.bind(null, datasize);
       } else if (b == 0xF5) {
         datasize = 48;
         reader = readInt.bind(null, datasize);
       } else if (b == 0xF6) {
         datasize = 64;
         reader = readInt.bind(null, datasize);
       }
    }

    var value = vifData.p(data.splice(0, datasize), datasize, reader);

    dibs.push({
      key: vifData.k,
      value: value,
      unit: vifData.u,
      error: error,
      manufacturer: vifData.m,
      storagenumber: storagenumber,
    });
  }
  return dibs;
}
function findDib(p, dibs) {
  if (typeof p != "object") { p = { key: p }; }
  function compareObj(a, b) {
    return Object.keys(a).every(function(k) {
      if (typeof a[k] == "object") {
        if (typeof b[k] == "object") { return compareObj(a[k], b[k]); }
        else { return false; }
      } else { return a[k] == b[k]; }
    });
  }
  for (var i = 0; i < dibs.length; i++) {
    if (compareObj(p, dibs[i])) {
      return dibs[i];
    }
  }
  return {};
}
function transpile0(data) {
  var dibs = parseDibs(data);
  var et = findDib(17, dibs);
  var rh = findDib(90, dibs);
  return {
    T: et.error ? null : et.value,
    H: rh.error ? null : rh.value,
  };
}
function transpile1(data) {
  var temp = readInt(2, data) * 0.01;
  var humidity = readInt(1, data);
  return {
    T: temp,
    H: humidity,
  };
}
function transpile2(data) {
  return JSON.parse(readPlaintext(data));
}
function transpile3(data) {
  var dibs = parseDibs(data);
  var ts = findDib(20, dibs);
  return {
    TS: ts.value,
  };
}
function transpile4(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var volume = findDib(6, dibs);
  var power = findDib(10, dibs);
  var volumeflow = findDib(11, dibs);
  var ft = findDib(14, dibs);
  var rt = findDib(15, dibs);
  var meterid = findDib(26, dibs);
  var ef = findDib(4, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    ID: meterid.error ? null : meterid.value,
    P: power.error ? null : power.value,
    PU: power.error ? null : power.unit,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    F: volumeflow.error ? null : volumeflow.value,
    FU: volumeflow.error ? null : volumeflow.unit,
    FT: ft.error ? null : ft.value,
    FTU: ft.error ? null : ft.unit,
    RT: rt.error ? null : rt.value,
    RTU: rt.error ? null : rt.unit,
    EF: ef.value,
  };
}
function transpile5(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var meterid = findDib(26, dibs);
  var ef = findDib(4, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    ID: meterid.error ? null : meterid.value,
    EF: ef.value,
  };
}
function transpile6(data) {
  function nonSiUnits(d) {
    if (d.error) { return { unit: null, value: null }; }
    else if (d.unit == "kWh") { return { unit: "MWh", value: d.value * 0.001 }; }
    else if (d.unit == "MJ") { return { unit: "GJ", value: d.value * 0.001 }; }
    return d;
  }
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var meterid = findDib(26, dibs);
  var ef = findDib(4, dibs);
  var ts = findDib(20, dibs);
  var midnight = findDib({key: "5", storagenumber: 1}, dibs);
  return {
    E: nonSiUnits(energy).value,
    U: nonSiUnits(energy).unit,
    TS: ts.error ? null : ts.value,
    ID: meterid.error ? null : meterid.value,
    EF: ef.value,
    ME: nonSiUnits(midnight).value,
    MEU: nonSiUnits(midnight).unit,
  };
}
function transpile7(data) {
  function nonSiUnits(d) {
    if (d.error) { return { unit: null, value: null }; }
    else if (d.unit == "kWh") { return { unit: "MWh", value: d.value * 0.001 }; }
    else if (d.unit == "MJ") { return { unit: "GJ", value: d.value * 0.001 }; }
    return d;
  }
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var volume = findDib(6, dibs);
  var power = findDib(10, dibs);
  var flow = findDib(11, dibs);
  var ft = findDib(14, dibs);
  var rt = findDib(15, dibs);
  var id = findDib(26, dibs);
  var ts = findDib(20, dibs);
  var ef = findDib(4, dibs);
  return {
    E: nonSiUnits(energy).value,
    U: nonSiUnits(energy).unit,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    P: power.error ? null : power.value,
    PU: power.error ? null : power.unit,
    F: flow.error ? null : flow.value,
    FU: flow.error ? null : flow.unit,
    FT: ft.error ? null : ft.value,
    TU: ft.error ? null : ft.unit,
    RT: rt.error ? null : rt.value,
    RU: rt.error ? null : rt.unit,
    EF: ef.value,
    TS: ts.error ? null : ts.value,
    ID: id.value,
  };
}
function transpile8(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var volume = findDib(6, dibs);
  var meterid = findDib(27, dibs);
  var ef = findDib(4, dibs);
  var ts = findDib(20, dibs);
  var midnight = findDib({key: "5", storagenumber: 1}, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    TS: ts.error ? null : ts.value,
    ID: meterid.error ? null : meterid.value,
    EF: ef.value,
    ME: midnight.error ? null : midnight.value,
    MEU: midnight.error ? null : midnight.unit,
  };
}
function transpile9(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var volume = findDib(6, dibs);
  var pftt = findDib(2, dibs);
  var mief = findDib(3, dibs);
  var ts = findDib(20, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    TS: ts.error ? null : ts.value,
    ID: mief.error ? null : (mief.value||{}).meterid,
    EF: mief.error ? null : (mief.value||{}).errorflags,
    P: pftt.error ? null : (pftt.value||{}).power,
    PU: pftt.error ? null : (pftt.value||{}).powerUnit,
    F: pftt.error ? null : (pftt.value||{}).flow,
    FU: pftt.error ? null : (pftt.value||{}).flowUnit,
    FT: pftt.error ? null : (pftt.value||{}).ft,
    FTU: pftt.error ? null : (pftt.value||{}).ftUnit,
    RT: pftt.error ? null : (pftt.value||{}).rt,
    RTU: pftt.error ? null : (pftt.value||{}).rtUnit,
  };
}
function transpile10(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var secEnergy = findDib({key: "5", manufacturer: [2]}, dibs);
  var volume = findDib(6, dibs);
  var flow = findDib(14, dibs);
  var rt = findDib(15, dibs);
  var meterid = findDib(27, dibs);
  var ef = findDib(4, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    SE: secEnergy.error ? null : secEnergy.value,
    SEU: secEnergy.error ? null : secEnergy.unit,
    ID: meterid.error ? null : meterid.value,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    F: flow.error ? null : flow.value,
    FU: flow.error ? null : flow.unit,
    RT: rt.error ? null : rt.value,
    RTU: rt.error ? null : rt.unit,
    EF: ef.value,
  };
}
function transpile11(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var meterid = findDib(26, dibs);
  var ef = findDib(4, dibs);
  var poserr = findDib({key: "5", manufacturer: [3]}, dibs);
  var prevmonth = findDib({key: "5", storagenumber: 2}, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    ID: meterid.error ? null : meterid.value,
    EF: ef.value,
    EP: poserr.error ? null : poserr.value,
    EPU: poserr.error ? null : poserr.unit,
    PM: prevmonth.error ? null : prevmonth.value,
    PMU: prevmonth.error ? null : prevmonth.unit,
  };
}
function transpile12(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var meterid = findDib(26, dibs);
  var ef = findDib(4, dibs);
  var poserr = findDib({key: "5", manufacturer: [3]}, dibs);
  var missingts = findDib(8, dibs);
  var maxft = findDib(14, dibs);
  var maxrt = findDib(15, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    ID: meterid.error ? null : meterid.value,
    EF: ef.value,
    EP: poserr.error ? null : poserr.value,
    EPU: poserr.error ? null : poserr.unit,
    MTS: missingts.value,
    MTSU: missingts.unit,
    MFT: maxft.error ? null : maxft.value,
    MTU: maxft.error ? null : maxft.unit,
    MRT: maxrt.error ? null : maxrt.value,
    MRU: maxrt.error ? null : maxrt.unit,
  };
}
function transpile13(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var volume = findDib(6, dibs);
  var power = findDib(10, dibs);
  var flow = findDib(11, dibs);
  var ft = findDib(14, dibs);
  var rt = findDib(15, dibs);
  var meterid = findDib(26, dibs);
  var ef = findDib(4, dibs);
  var poserr = findDib({key: "5", manufacturer: [3]}, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    P: power.error ? null : power.value,
    PU: power.error ? null : power.unit,
    F: flow.error ? null : flow.value,
    FU: flow.error ? null : flow.unit,
    FT: ft.error ? null : ft.value,
    TU: ft.error ? null : ft.unit,
    RT: rt.error ? null : rt.value,
    RU: rt.error ? null : rt.unit,
    ID: meterid.error ? null : meterid.value,
    EF: ef.value,
    EP: poserr.error ? null : poserr.value,
    EPU: poserr.error ? null : poserr.unit,
  };
}
function transpile14(data) {
  var dibs = parseDibs(data);
  var energy = findDib(5, dibs);
  var secEnergy = findDib({key: "5", manufacturer: [2]}, dibs);
  var volume = findDib(6, dibs);
  var mief = findDib(3, dibs);
  var e8 = findDib(0, dibs);
  var e9 = findDib(1, dibs);
  return {
    E: energy.error ? null : energy.value,
    U: energy.error ? null : energy.unit,
    SE: secEnergy.error ? null : secEnergy.value,
    SEU: secEnergy.error ? null : secEnergy.unit,
    V: volume.error ? null : volume.value,
    VU: volume.error ? null : volume.unit,
    ID: mief.error ? null : mief.value.meterid,
    EF: mief.error ? null : mief.value.errorflags,
    E8: e8.error ? null : e8.value,
    E8U: e8.error ? null : e8.unit,
    E9: e9.error ? null : e9.value,
    E9U: e9.error ? null : e9.unit,
  };
}
function Decoder(data) {
  var fmt = data.shift();
  if (fmt === 0) {
    if (data.length > 20) { return transpile4(data); }
    else { return transpile0(data); }
  }
  else   if (fmt === 1) {
    if (data.length > 15) { return transpile5(data); }
    else { return transpile1(data); }
  }
  else   if (fmt === 2) {
    if (data.length > 15) { return transpile2(data); }
    else { return transpile2(data); }
  }
  else if (fmt === 250) { return transpile3(data); }
  else if (fmt === 3) { return transpile6(data); }
  else if (fmt === 4) { return transpile7(data); }
  else if (fmt === 250) { return transpile3(data); }
  else if (fmt === 5) { return transpile4(data); }
  else if (fmt === 6) { return transpile5(data); }
  else if (fmt === 7) { return transpile2(data); }
  else if (fmt === 8) { return transpile8(data); }
  else if (fmt === 9) { return transpile9(data); }
  else if (fmt === 10) { return transpile10(data); }
  else if (fmt === 11) { return transpile11(data); }
  else if (fmt === 12) { return transpile12(data); }
  else if (fmt === 13) { return transpile13(data); }
  else if (fmt === 250) { return transpile3(data); }
  else if (fmt === 15) { return transpile4(data); }
  else if (fmt === 16) { return transpile5(data); }
  else if (fmt === 17) { return transpile2(data); }
  else if (fmt === 18) { return transpile8(data); }
  else if (fmt === 19) { return transpile9(data); }
  else if (fmt === 20) { return transpile10(data); }
  else if (fmt === 250) { return transpile3(data); }
  else if (fmt === 21) { return transpile4(data); }
  else if (fmt === 22) { return transpile5(data); }
  else if (fmt === 23) { return transpile2(data); }
  else if (fmt === 24) { return transpile8(data); }
  else if (fmt === 25) { return transpile9(data); }
  else if (fmt === 26) { return transpile10(data); }
  else if (fmt === 27) { return transpile14(data); }
  else if (fmt === 250) { return transpile3(data); }
  else if (fmt === 30) { return transpile4(data); }
  else if (fmt === 31) { return transpile5(data); }
  else if (fmt === 32) { return transpile2(data); }
  else if (fmt === 33) { return transpile8(data); }
  else if (fmt === 34) { return transpile9(data); }
  else if (fmt === 35) { return transpile10(data); }
  else if (fmt === 250) { return transpile3(data); }
  data.unshift(fmt);
  return { error: "unknown format", data: data };
}

and a Payload from the Elvaco Sensor:

15040040ec08340412dcb21c13022bd417023b010402599527025d79250c781461998004fd1700000000

From the linked site from above i got no Output on that Code.

Can Someone help me to get this running?

Thank you a lot