UNPKG

packet-decoder

Version:

SenRa Packet Decoder For IOT devices

171 lines (150 loc) 5.17 kB
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 };