The Things Stackで動作するEM-ELST01用のPayload Formatterです。
function decodeUplink(input) {
var bytes = input.bytes;
var decoded = {};
decoded.status = (bytes[0] >> 4) & 0xFF;
decoded.Bat = ((bytes[0] & 0x0F) << 8 | bytes[1]) / 1000;
if (bytes.length === 4) {
decoded.TNOMD = (bytes[2] << 8 | bytes[3]) & 0xFFFF;
}
else if (bytes.length === 9) {
decoded.TODE = (bytes[2] << 16 | bytes[3] << 8 | bytes[4]) & 0xFFFFFF;
decoded.LDOD = (bytes[5] << 16 | bytes[6] << 8 | bytes[7]) & 0xFFFFFF;
decoded.ALARM = bytes[8];
}
else if (bytes.length === 19) {
decoded.TODE = (bytes[2] << 16 | bytes[3] << 8 | bytes[4]) & 0xFFFFFF;
decoded.LDOD = (bytes[5] << 16 | bytes[6] << 8 | bytes[7]) & 0xFFFFFF;
decoded.ALARM = bytes[8];
decoded.TNOMD = (bytes[9] << 8 | bytes[10]) & 0xFFFF;
decoded.X = parseAcceleration(bytes[11], bytes[12]);
decoded.Y = parseAcceleration(bytes[13], bytes[14]);
decoded.Z = parseAcceleration(bytes[15], bytes[16]);
decoded.temp_ds = parseTemperature(bytes[17], bytes[18]);
}
return {
data: decoded
};
}
function parseAcceleration(byte1, byte2) {
var value = byte1 << 8 | byte2;
return ((byte1 >> 4 === 0x0F ? (value - 0xFFFF) : value) / 100).toFixed(2);
}
function parseTemperature(byte1, byte2) {
var value = byte1 << 8 | byte2;
return ((byte1 >> 4 === 0x0F ? (value - 0xFFFF) : value) / 10).toFixed(1);
}