packet-decoder
Version:
SenRa Packet Decoder For IOT devices
48 lines (38 loc) • 1.75 kB
JavaScript
class BrighterBins {
constructor(packet) {
packet = parseInt(packet.toUpperCase(),16).toString(2).padStart(24,'0');
this.packet_type = this.getPacketType(packet.substring(packet.length-2,packet.length));
this.payload = this.getPayload(packet.substring(0, packet.length-2));
}
comparePacket(prev_packet) {
return this.payload.status === prev_packet.payload.status;
}
getPacketType(packet_type) {
switch (packet_type) {
case '00':
return 'FILL_LEVEL_FRAME';
case '01':
return 'RAW_DISTANCE_FRAME';
}
return null;
}
getPayload(payload) {
switch (this.packet_type) {
case 'FILL_LEVEL_FRAME':
return {
status: parseInt(payload.substring(payload.length-7, payload.length),2),
temperature: parseInt(payload.substring(payload.length-14, payload.length-7),2)-40,
battery_status: parseInt(payload.substring(payload.length-20, payload.length-14),2)*2,
};
case 'RAW_DISTANCE_FRAME':
const dist = 500 - parseInt(payload.substring(payload.length-9, payload.length),2);
return {
raw_distance: parseInt(payload.substring(payload.length-9, payload.length),2),
status:(dist/500)*100,
temperature: parseInt(payload.substring(payload.length-16, payload.length-9),2)-40,
battery_status: parseInt(payload.substring(payload.length-22, payload.length-16),2)*2,
};
}
}
}
module.exports = BrighterBins;