packet-decoder
Version:
SenRa Packet Decoder For IOT devices
171 lines (150 loc) • 5.17 kB
JavaScript
const SmartParking = require('./application/SmartParking');
const SmartBin = require('./application/SmartBin');
const BrighterBins = require('./devices/SmartEnds/BrighterBins');
const PlacePod = require('./devices/PNI/PlacePod');
const Constants = require('./Constants');
const FormatDate = (dt) => {
const date = new Date(dt);
const h = date.getHours();
const m = date.getMinutes();
const _time = ((h > 12) ? (String(h - 12).padStart(2, '0') + ':' + String(m).padStart(2, '0') + ' PM') : (String(h).padStart(2, '0') + ':' + String(m).padStart(2, '0') + ' AM')) + ' ' + date.getDate().toString().padStart(2, "0") + ' ' + date.toLocaleString('en-us', {month: "long"});
return _time;
};
const DecodePacket = (deviceType, packet) => {
switch (deviceType.manufacturer) {
case Constants.Manufacturer.SMART_ENDS: {
switch (deviceType.device_name) {
case Constants.Devices.SMART_ENDS.BRIGHTER_BINS:
return new BrighterBins(packet);
default:
return null;
}
}
case Constants.Manufacturer.PNI: {
switch (deviceType.device_name) {
case Constants.Devices.PNI.PLACEPOD:
return new PlacePod(packet);
default:
return null;
}
}
default:
return null;
}
};
const ComparePacket = (deviceType, packet, prev_packet) => {
switch (deviceType.manufacturer) {
case Constants.Manufacturer.SMART_ENDS: {
switch (deviceType.device_name) {
case Constants.Devices.SMART_ENDS.BRIGHTER_BINS: {
const decoded = new BrighterBins(packet);
return !prev_packet || !decoded.comparePacket(new BrighterBins(prev_packet));
}
default:
return null;
}
}
case Constants.Manufacturer.PNI: {
switch (deviceType.device_name) {
case Constants.Devices.PNI.PLACEPOD: {
const decoded = new PlacePod(packet);
return !prev_packet || !decoded.comparePacket(new PlacePod(prev_packet));
}
default:
return null;
}
}
default:
return null;
}
};
const ClusterLineChart = ({app_type, data, unchangedDevices}) => {
switch (app_type) {
case Constants.Applications.SMART_PARKING : {
return SmartParking.ClusterLineChart({data, unchangedDevices});
}
default:
return null;
}
};
const ClusterMetaData = ({app_type, cluster, deviceData}) => {
switch (app_type) {
case Constants.Applications.SMART_PARKING : {
return SmartParking.ClusterMetaData({cluster, deviceData});
}
case Constants.Applications.SMART_BIN : {
return SmartBin.ClusterMetaData({cluster, deviceData});
}
default:
return null;
}
};
const ClusterHistoricDataYearly = ({app_type, deviceData}) => {
switch (app_type) {
case Constants.Applications.SMART_PARKING : {
return SmartParking.ClusterHistoricDataYearly(deviceData);
}
default:
return null;
}
};
const ClusterHistoricDataMonthly = ({app_type, deviceData}) => {
switch (app_type) {
case Constants.Applications.SMART_PARKING : {
return SmartParking.ClusterHistoricDataMonthly(deviceData);
}
default:
return null;
}
};
const DeviceCardData = ({app_type, device}) => {
let data = {
name: device.name,
online: false,
battery: 0,
signal: -125,
timeStamp: '-',
status: 'Offline',
url: ''
};
if (Object.keys(device.packet).length) {
data.timeStamp = FormatDate(device.packet.txtime);
data.online = true;
data.signal = device.packet.rssi;
}
switch (app_type) {
case Constants.Applications.SMART_PARKING : {
SmartParking.DeviceCardData({device, data});
break;
}
case Constants.Applications.SMART_BIN : {
SmartBin.DeviceCardData({device, data});
break
}
default:
return null;
}
};
const DeviceHistoricData = ({app_type, deviceData}) => {
switch (app_type) {
case Constants.Applications.SMART_PARKING : {
return SmartParking.DeviceHistoricData(deviceData);
}
case Constants.Applications.SMART_BIN : {
return SmartBin.DeviceHistoricData(deviceData);
}
default:
return null;
}
};
module.exports = {
DecodePacket,
ComparePacket,
ClusterLineChart,
ClusterMetaData,
ClusterHistoricDataMonthly,
ClusterHistoricDataYearly,
Constants,
DeviceCardData,
DeviceHistoricData
};