UNPKG

flaglib

Version:

Ignition event 15 added.

1,407 lines (1,115 loc) 45.6 kB
var util = require('util'); var FlagCategories = require('./flagcategories.js'); var FlagConstants = require('./flagconstants.js'); var MongoConstants = require('./mongoconstants.js'); var Util = require('./util.js'); var logger = require('./logger'); module.exports = Flag; const FLAG_VERSION = "0"; const FLAG_CATEGORY = "1"; const FLAG_TYPE = "2"; const FLAG_ID = "3"; const FLAG_TITLE = "4"; const FLAG_LATITUDE = "5"; const FLAG_LONGITUDE = "6"; const FLAG_COMPASS = "7"; const FLAG_MESSAGE = "8"; const FLAG_ADDRESS = "9"; const FLAG_IMAGE = "10"; const FLAG_CONTACT = "11"; const FLAG_URL = "12"; const FLAG_DATE = "13"; const FLAG_SPEED = "14"; const FLAG_TRACK_START_TIME= "15"; const FLAG_TRACK_FREQUENCY= "16"; const FLAG_TRACK_DISTANCE= "17"; const FLAG_SENDER = "18"; const FLAG_EMAIL = "19"; const FLAG_REMINDLIST = "20"; const FLAG_RADIUS = "21"; const FLAG_ASTATUS = "22"; const FLAG_STOP_LATITUDE = "23"; const FLAG_STOP_LONGITUDE = "24"; const FLAG_SESSION_TYPE = "25"; const FLAG_DEVICE_TIME_STAMP = "28"; const FLAG_SOS_STATUS = "31"; const FLAG_WHR = "32"; const FLAG_RFID = "33"; var flagJson = null; var utility = new Util(); function Flag(flag) { if (flag == null){ logger.info("Flag(flag): "+"2"); return; } flagJson = JSON.parse(utility.hex2a(flag)); } Flag.prototype.getFlagValue = function(key) { return flagJson[key]; } Flag.prototype.getFlag = function(type) { logger.info("hexa sring:"+utility.convertFromAscii2Hexa("madhu")); logger.info("ascii sring:"+utility.hex2a(utility.convertFromAscii2Hexa("madhu"))); logger.info("category ads ctrl:"+FlagCategories.CTG_NATURE); return "abc"; }; Flag.prototype.getAdsCommand = function(status, title, profileId){ var abc = FlagConstants.FLAG_VERSION; var exjson = {}; exjson[abc] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_ADS_CTRL exjson[FlagConstants.FLAG_ASTATUS] = status; exjson[FlagConstants.FLAG_TITLE] = title; exjson[FlagConstants.FLAG_EMAIL] = profileId; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } function isNumeric(num){ return !isNaN(num) } Flag.prototype.getAlertCommand = function(title, profileId, alert, date){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_PROFILE_ALERT; exjson[FlagConstants.FLAG_TITLE] = title; exjson[FlagConstants.FLAG_EMAIL] = ""+profileId; exjson[FlagConstants.FLAG_MESSAGE] = alert; /*if (isNumeric(date)){ exjson[FlagConstants.FLAG_DATE] = date; }else{*/ exjson[FlagConstants.FLAG_DATE] = new Date().getTime(); //} return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getStatusAlertCommand = function(title, profileId, alert, date){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_PROFILE_STATUS_VEHICLE_STATUS_ALERT; exjson[FlagConstants.FLAG_TITLE] = title; exjson[FlagConstants.FLAG_EMAIL] = ""+profileId; exjson[FlagConstants.FLAG_MESSAGE] = alert; /*if (isNumeric(date)){ exjson[FlagConstants.FLAG_DATE] = date; }else{*/ exjson[FlagConstants.FLAG_DATE] = new Date().getTime(); //} return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getVehicleLeftAlertCommand = function(user_id, sender, group_id, date){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_COMMAND_VEHICLE_LEFT_POINT; exjson[FlagConstants.FLAG_ADDRESS] = user_id; exjson[FlagConstants.FLAG_SENDER] = sender; exjson[FlagConstants.FLAG_ID] = alert; exjson[FlagConstants.FLAG_DATE] = date; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getSwipeAlertCommand = function(title, profileId, alert, date){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_PROFILE_SWIPE_ALERT; exjson[FlagConstants.FLAG_TITLE] = title; exjson[FlagConstants.FLAG_EMAIL] = ""+profileId; exjson[FlagConstants.FLAG_MESSAGE] = alert; exjson[FlagConstants.FLAG_SENDER] = ""; /*if (isNumeric(date)){ exjson[FlagConstants.FLAG_DATE] = date; }else{*/ exjson[FlagConstants.FLAG_DATE] = new Date().getTime(); //} return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getNearByAlertCommand = function(sender, radius){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_REMIND; exjson[FlagConstants.FLAG_SENDER] = sender; exjson[FlagConstants.FLAG_RADIUS] = radius; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when driver use "No Show" option after reaching pickup point and employee not showed off. * name employee or student name * sender - driver mobile number * user_id - employee or student registration id */ Flag.prototype.getNoShowRequest_Command = function(name, driver, user_id,db_id,group_id,profile_type){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_COMMAND_NOSHOW_REQUEST; exjson[FlagConstants.FLAG_TITLE] = name; if (driver !=null){ exjson[FlagConstants.FLAG_SENDER] = driver; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = user_id; exjson[FlagConstants.FLAG_RADIUS] = db_id; exjson[FlagConstants.FLAG_ID] = group_id; exjson[FlagConstants.FLAG_TYPE] =profile_type; exjson[FlagConstants.FLAG_MESSAGE] = "Are you coming?"; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when employee respond to driver "No Show" request * user_id - employee or student registration id * response - any response */ Flag.prototype.getNoShowResponse_Command = function(user_id, name, response,group_id){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_COMMAND_NOSHOW_RESPONSE; exjson[FlagConstants.FLAG_ADDRESS] = user_id; exjson[FlagConstants.FLAG_TYPE] = response; exjson[FlagConstants.FLAG_SENDER] = name; exjson[FlagConstants.FLAG_ID] = group_id; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when Travel Admin creates company profile and all groups, and press Update. * The update will send session store command to all group drivers and follow pin to all users. * title - Profile name * route - group name * sender - vehicle GPS device serial number or driver mobile number * vhltype - type of the vehicle * vhlreg - vehicle reg number * driver - driver mobile number * admin - location admin mobile number * profileID - storing now, group id. */ Flag.prototype.getFollowPin = function(title, route, sender, vhltype, vhlreg, driver, admin, groupid,activeDays, activeTime,sos_status,whr_status,profile_status,profile_type,ad_status,user_id,user_name,location_id,user_mobile,ppid,ppname,pplat,pplon,attdtype,rf_id){ var exjson = {}; var active = activeTime+"::"+activeDays; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_FOLLOWPIN; exjson[FlagConstants.FLAG_TITLE] = title; if (sender !=null){ exjson[FlagConstants.FLAG_SENDER] = sender; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = route; exjson[FlagConstants.FLAG_TYPE] = vhltype; //exjson[FlagConstants.FLAG_URL] = admin; exjson[FlagConstants.FLAG_CONTACT] = driver; exjson[FlagConstants.FLAG_IMAGE] = vhlreg; exjson[FlagConstants.FLAG_RADIUS] = groupid; //use EMAIL fro active time and days string. exjson[FlagConstants.FLAG_EMAIL] = active; exjson[FlagConstants.FLAG_SOS_STATUS] = sos_status; exjson[FlagConstants.FLAG_WHR_STATUS] = whr_status; exjson[FlagConstants.FLAG_PROFILE_STATUS] = profile_status; exjson[FlagConstants.FLAG_PROFILE_TYPE] = profile_type; exjson[FlagConstants.FLAG_AD_STATUS] = ad_status; exjson[FlagConstants.FLAG_USER_ID] = user_id; exjson[FlagConstants.FLAG_USER_NAME] = user_name; exjson[FlagConstants.FLAG_LOCATION_ID] = location_id; exjson[FlagConstants.FLAG_USER_MOBILE] = user_mobile; exjson[FlagConstants.FLAG_USER_PPID] = ppid; exjson[FlagConstants.FLAG_USER_PPNAME] = ppname; exjson[FlagConstants.FLAG_USER_PPLAT] = pplat; exjson[FlagConstants.FLAG_USER_PPLON] = pplon; exjson[FlagConstants.FLAG_ATTENDANCE_TYPE] = attdtype; exjson[FlagConstants.FLAG_USER_RFID] = rf_id; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getFollowPin_Direct = function(title, route, sender, vhltype, vhlreg, driver, admin, groupid,activeDays, activeTime,sos_status,whr_status,profile_status,profile_type,ad_status,user_id,user_name,location_id,user_mobile,ppid,ppname,pplat,pplon,attdtype,rf_id ){ var exjson = {}; var active = activeTime+"::"+activeDays; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_FOLLOWPIN; exjson[FlagConstants.FLAG_TITLE] = title; if (sender !=null){ exjson[FlagConstants.FLAG_SENDER] = sender; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = route; exjson[FlagConstants.FLAG_TYPE] = vhltype; //exjson[FlagConstants.FLAG_URL] = admin; exjson[FlagConstants.FLAG_CONTACT] = driver; exjson[FlagConstants.FLAG_IMAGE] = vhlreg; exjson[FlagConstants.FLAG_RADIUS] = groupid; //use EMAIL fro active time and days string. exjson[FlagConstants.FLAG_EMAIL] = active; exjson[FlagConstants.FLAG_SOS_STATUS] = sos_status; exjson[FlagConstants.FLAG_WHR_STATUS] = whr_status; exjson[FlagConstants.FLAG_PROFILE_STATUS] = profile_status; exjson[FlagConstants.FLAG_PROFILE_TYPE] = profile_type; exjson[FlagConstants.FLAG_AD_STATUS] = ad_status; exjson[FlagConstants.FLAG_USER_ID] = user_id; exjson[FlagConstants.FLAG_USER_NAME] = user_name; exjson[FlagConstants.FLAG_LOCATION_ID] = location_id; exjson[FlagConstants.FLAG_USER_MOBILE] = user_mobile; exjson[FlagConstants.FLAG_USER_PPID] = ppid; exjson[FlagConstants.FLAG_USER_PPNAME] = ppname; exjson[FlagConstants.FLAG_USER_PPLAT] = pplat; exjson[FlagConstants.FLAG_USER_PPLON] = pplon; exjson[FlagConstants.FLAG_ATTENDANCE_TYPE] = attdtype; exjson[FlagConstants.FLAG_USER_RFID] = rf_id; return JSON.stringify(exjson); } Flag.prototype.getVehicleFollowPin = function(title, sender, vhltype, vhlreg, driver, admin,profile_status ){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_VEHICLE_FOLLOWPIN; exjson[FlagConstants.FLAG_TITLE] = title; if (sender !=null){ exjson[FlagConstants.FLAG_SENDER] = sender; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = vhlreg; exjson[FlagConstants.FLAG_TYPE] = vhltype; //exjson[FlagConstants.FLAG_URL] = admin; exjson[FlagConstants.FLAG_CONTACT] = driver; exjson[FlagConstants.FLAG_IMAGE] = vhlreg; exjson[FlagConstants.FLAG_RADIUS] = -1; //use EMAIL fro active time and days string. exjson[FlagConstants.FLAG_EMAIL] = ""; exjson[FlagConstants.FLAG_SOS_STATUS] = 0; exjson[FlagConstants.FLAG_WHR_STATUS] = 0; exjson[FlagConstants.FLAG_PROFILE_STATUS] = 1; exjson[FlagConstants.FLAG_PROFILE_TYPE] = 1; //corporate return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getVehcileFollowPin_Direct = function(title, sender, vhltype, vhlreg, driver, admin,profile_status){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_VEHICLE_FOLLOWPIN; exjson[FlagConstants.FLAG_TITLE] = title; if (sender !=null){ exjson[FlagConstants.FLAG_SENDER] = sender; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = vhlreg; exjson[FlagConstants.FLAG_TYPE] = vhltype; //exjson[FlagConstants.FLAG_URL] = admin; exjson[FlagConstants.FLAG_CONTACT] = driver; exjson[FlagConstants.FLAG_IMAGE] = vhlreg; exjson[FlagConstants.FLAG_RADIUS] = -1; //use EMAIL fro active time and days string. exjson[FlagConstants.FLAG_EMAIL] = ""; exjson[FlagConstants.FLAG_SOS_STATUS] = 0; exjson[FlagConstants.FLAG_WHR_STATUS] = 0; exjson[FlagConstants.FLAG_PROFILE_STATUS] = profile_status; exjson[FlagConstants.FLAG_PROFILE_TYPE] = 1; //corporate return JSON.stringify(exjson); } Flag.prototype.getCarrierFollowPin = function(title, name,sender, carriertype, thumbnail, mobile_number, admin,profile_status ){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_CARRIER_FOLLOWPIN; exjson[FlagConstants.FLAG_TITLE] = title; if (sender !=null){ exjson[FlagConstants.FLAG_SENDER] = sender; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = name; exjson[FlagConstants.FLAG_TYPE] = carriertype; //exjson[FlagConstants.FLAG_URL] = admin; exjson[FlagConstants.FLAG_CONTACT] = mobile_number; exjson[FlagConstants.FLAG_IMAGE] = name; exjson[FlagConstants.FLAG_RADIUS] = -1; //use EMAIL fro active time and days string. exjson[FlagConstants.FLAG_EMAIL] = ""; exjson[FlagConstants.FLAG_SOS_STATUS] = 0; exjson[FlagConstants.FLAG_WHR_STATUS] = 0; exjson[FlagConstants.FLAG_PROFILE_STATUS] = profile_status; exjson[FlagConstants.FLAG_PROFILE_TYPE] = 1; //corporate return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } Flag.prototype.getCarrierFollowPin_Direct = function(title, name, sender, carriertype, thumbnail, mobile_number, admin,profile_status){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_CARRIER_FOLLOWPIN; exjson[FlagConstants.FLAG_TITLE] = title; if (sender !=null){ exjson[FlagConstants.FLAG_SENDER] = sender; }else{ exjson[FlagConstants.FLAG_SENDER] = ""; } exjson[FlagConstants.FLAG_ADDRESS] = name; exjson[FlagConstants.FLAG_TYPE] = carriertype; //exjson[FlagConstants.FLAG_URL] = admin; exjson[FlagConstants.FLAG_CONTACT] = mobile_number; exjson[FlagConstants.FLAG_IMAGE] = name; exjson[FlagConstants.FLAG_RADIUS] = -1; //use EMAIL fro active time and days string. exjson[FlagConstants.FLAG_EMAIL] = ""; exjson[FlagConstants.FLAG_SOS_STATUS] = 0; exjson[FlagConstants.FLAG_WHR_STATUS] = 0; exjson[FlagConstants.FLAG_PROFILE_STATUS] = profile_status; exjson[FlagConstants.FLAG_PROFILE_TYPE] = 1; //corporate return JSON.stringify(exjson); } /* * This function get called, when Travel Admin updates or deletes any group, and press Update. * The update will send session drop command to all groups deleted drivers and un follow pin to all users part of * deleted group. */ Flag.prototype.getUnFollowPin = function(sender){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_UNFOLLOWPIN; exjson[FlagConstants.FLAG_SENDER] = sender; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when Travel Admin updates or deletes any group, and press Update. * The update will send session drop command to all groups deleted drivers and un follow pin to all users part of * deleted group. */ Flag.prototype.getDriverSessionStore = function(sender, route, lat, lon, stopLat, stopLon, startTime, duration, sessionType, trackType, frequency, distance, sessionid){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_SESSION_STORE; exjson[FlagConstants.FLAG_SENDER] = sender; exjson[FlagConstants.FLAG_ADDRESS] = route; //exjson[FlagConstants.FLAG_LATITUDE] = lat; //exjson[FlagConstants.FLAG_LONGITUDE] = lon; //exjson[FlagConstants.FLAG_STOP_LATITUDE] = stopLat; //exjson[FlagConstants.FLAG_STOP_LONGITUDE] = stopLon; exjson[FlagConstants.FLAG_TRACK_START_TIME] = startTime; exjson[FlagConstants.FLAG_DATE] = duration; exjson[FlagConstants.FLAG_SESSION_TYPE] = sessionType; exjson[FlagConstants.FLAG_TYPE] = trackType; exjson[FlagConstants.FLAG_TRACK_FREQUENCY]= frequency; exjson[FlagConstants.FLAG_RADIUS]= distance; exjson[FlagConstants.FLAG_ASTATUS] = sessionid; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when Travel Admin updates or deletes any group, and press Update. * The update will send session drop command to all groups deleted drivers and un follow pin to all users part of * deleted group. */ Flag.prototype.getDriverSessionStore_Device = function(sender, route, lat, lon, stopLat, stopLon, startTime, duration, sessionType, trackType, frequency, distance, sessionid){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_SESSION_STORE; //exjson[FlagConstants.FLAG_SENDER] = sender; //exjson[FlagConstants.FLAG_ADDRESS] = route; //exjson[FlagConstants.FLAG_LATITUDE] = lat; //exjson[FlagConstants.FLAG_LONGITUDE] = lon; //exjson[FlagConstants.FLAG_STOP_LATITUDE] = stopLat; //exjson[FlagConstants.FLAG_STOP_LONGITUDE] = stopLon; exjson[FlagConstants.FLAG_TRACK_START_TIME] = startTime; exjson[FlagConstants.FLAG_DATE] = duration; exjson[FlagConstants.FLAG_SESSION_TYPE] = sessionType; //exjson[FlagConstants.FLAG_TYPE] = trackType; exjson[FlagConstants.FLAG_TRACK_FREQUENCY]= frequency; exjson[FlagConstants.FLAG_RADIUS]= distance; exjson[FlagConstants.FLAG_ASTATUS] = sessionid; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when Travel Admin updates or deletes any group, and press Update. * The update will send session drop command to all groups deleted drivers and un follow pin to all users part of * deleted group. */ Flag.prototype.getDriverSessionDrop = function(sender, sessionid){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_SESSION_DROP; exjson[FlagConstants.FLAG_SENDER] = sender; exjson[FlagConstants.FLAG_ASTATUS] = sessionid; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when Travel Admin want to start the track for the vehicle. */ Flag.prototype.startTrackingNow = function(sender, route, flagType){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_SESSION_ONETIME_START; exjson[FlagConstants.FLAG_SENDER] = sender; exjson[FlagConstants.FLAG_ADDRESS] = route; exjson[FlagConstants.FLAG_TYPE] = flagType; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function get called, when Travel Admin want to stop the stopped track for the vehicle. */ Flag.prototype.stopTrackingNow = function(sender){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_PROFILE_SESSION_ONETIME_STOP; exjson[FlagConstants.FLAG_SENDER] = sender; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * This function is for testing purpose to inject lat, lon */ Flag.prototype.getLocationFlag = function(lat, lon, startTime, currentTime, distance, compass, speed){ var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_TRACK; exjson[FlagConstants.FLAG_LATITUDE] = lat; exjson[FlagConstants.FLAG_LONGITUDE] = lon; exjson[FlagConstants.FLAG_TRACK_START_TIME] = startTime; exjson[FlagConstants.FLAG_DATE] = currentTime; exjson[FlagConstants.FLAG_TRACK_DISTANCE] = distance; exjson[FlagConstants.FLAG_COMPASS] = compass; exjson[FlagConstants.FLAG_SPEED] = speed; return utility.convertFromAscii2Hexa(JSON.stringify(exjson)); } /* * from bits, gets the compass as described by AQuila device compass data format. */ getCompassForDeviceAQL = function(b1,b2,b3,b4){ var degree = 0; logger.info(b1+":"+b2+":"+b3+":"+b4); if (b1 == 0 && b2 == 0 && b3 == 1 && b4 == 0) degree = 45; if (b1 == 0 && b2 == 0 && b3 == 1 && b4 == 1) degree = 90; if (b1 == 0 && b2 == 1 && b3 == 0 && b4 == 0) degree = 135; if (b1 == 0 && b2 == 1 && b3 == 0 && b4 == 1) degree = 180; if (b1 == 0 && b2 == 1 && b3 == 1 && b4 == 0) degree = 225; if (b1 == 0 && b2 == 1 && b3 == 1 && b4 == 1) degree = 270; if (b1 == 1 && b2 == 0 && b3 == 0 && b4 == 0) degree = 315; logger.info("degree:::"+degree); return degree; } /* * This function converts raw format to flag format based on the device type * FLAG_TRACK_FLDS = {FLAG_LATITUDE,FLAG_MAX_SPEED,FLAG_LONGITUDE, * FLAG_COMPASS,FLAG_DATE,FLAG_SPEED,FLAG_TRACK_DISTANCE,FLAG_TRACK_START_TIME}; * * returns JSON with all the required fields. * */ Flag.prototype.convertToFlagFromDeviceAQL = function(rawdata){ var platform = ""; var command = 1; var partsOfStr = rawdata.split(','); //check the header if (partsOfStr[0] != '$$ELLII_AQL'){ logger.info("invalid header, ignore those values!"); platform = "AQL"; return; }else{ platform = "AQL"; } //20 means RFID swipe data if (partsOfStr[2] == '20'){ logger.info("RFID swipe data!:"+partsOfStr[2]); //log the data data = this.convertToFlagFromDeviceAQL_RFID(rawdata); return data; } /* * 1 == Default Packet due to tracking interval * Flaglib handling only gps data, not handling any other. * Log and ignore if it is not GPS. * */ if ((partsOfStr[2] != '1')&&((partsOfStr[2] != '101'))){ logger.info("invalid GPS data, ignore those values!:"+partsOfStr[2]); //log the data return; } command = partsOfStr[2]; var lat = partsOfStr[3]; var lon = partsOfStr[4]; var validity = "V"; //if (partsOfStr[6] != 'A'){ if ( (partsOfStr[6] != 'A')){ if ( (partsOfStr[6] == 'V') && ( (lat != 0) || (lon != 0))){ logger.info("valid data, process"); }else{ logger.info("invalid data, return"); return; } }else{ validity = "A"; logger.info("valid data, process"); } logger.info("valid header, continue parsing!"); //parse raw data to different data. var date = partsOfStr[5]; var expDate = partsOfStr[5]; var speed = partsOfStr[8]; //convert date from 'yymmddhhmmss" format to unix date /* * this code will give issue in 2100 year, because, it has hardcoded "20" below. */ date = new Date("20"+date.slice(0, 2), date.slice(2, 4)-1, date.slice(4, 6), date.slice(6, 8), date.slice(8, 10), date.slice(10, 12)); date = date.getTime(); logger.info("parsing date: "+date); var exjson = {}; var mongojson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_TRACK_DEVICE; exjson[FlagConstants.FLAG_LATITUDE] = lat; exjson[FlagConstants.FLAG_LONGITUDE] = lon; exjson[FlagConstants.FLAG_DEVICE_TIME_STAMP] = partsOfStr[5]; //exjson[FlagConstants.FLAG_TRACK_START_TIME] = date; if ((date === null) || (date === 0)){ date = new Date().getTime(); } exjson[FlagConstants.FLAG_DATE] = date; exjson[FlagConstants.FLAG_TRACK_DISTANCE] = partsOfStr[9]; //FLAG_TRACK_DISTANCE is used as vehicle total distance exjson[FlagConstants.FLAG_SPEED] = speed; exjson[FlagConstants.FLAG_MAX_SPEED] = speed; if (partsOfStr[10] == 0){ exjson[FlagConstants.FLAG_COMPASS] = getCompassForDeviceAQL(partsOfStr[40],partsOfStr[41],partsOfStr[42],partsOfStr[43]); }else{ exjson[FlagConstants.FLAG_COMPASS] = partsOfStr[10]; } /* * Madhu: 5th July 2017. Old devcies has 45 parts, and ignition status is at 25 bit. * New devices from TS101 advanced has 51 parts and ignition status is at 29 bit. * instead of changing everything, depend on the number of parts. for now. * IN future, change logic basedon device client id or some other way. */ if (partsOfStr.length<50){ exjson[FlagConstants.FLAG_IGNITION_STATUS] = partsOfStr[23]; }else{ exjson[FlagConstants.FLAG_IGNITION_STATUS] = partsOfStr[27]; } exjson[FlagConstants.FLAG_SENDER] = partsOfStr[1]; var file = ""; file = partsOfStr[1] + new Date(Number(date)).getYear()+new Date(Number(date)).getDate(); exjson[FlagConstants.FLAG_FILE_NAME] = file; var strFlag = utility.convertFromAscii2Hexa(JSON.stringify(exjson)); logger.info("\n"+JSON.stringify(exjson)+"\n"); //add mongo specific data mongojson[MongoConstants.DEVICE_ID] = partsOfStr[1]; mongojson[MongoConstants.DEVICE_TYPE] = platform; mongojson[MongoConstants.COMMAND] = parseInt(command,10); mongojson[MongoConstants.LATITUDE] = lat; mongojson[MongoConstants.LONGITUDE] = lon; mongojson[MongoConstants.COMPASS] = exjson[FlagConstants.FLAG_COMPASS]; mongojson[MongoConstants.FUEL] = 0; mongojson[MongoConstants.VALIDITY] = validity; mongojson[MongoConstants.GSM_SIGNAL] = 0; mongojson[MongoConstants.DATE] = date; mongojson[MongoConstants.SPEED] = parseInt(speed,10); mongojson[MongoConstants.RFID] = ""; mongojson[MongoConstants.DISTANCE] = parseInt(exjson[FlagConstants.FLAG_TRACK_DISTANCE],10); mongojson[MongoConstants.IGNITION_STATUS] = parseInt(exjson[FlagConstants.FLAG_IGNITION_STATUS],10); mongojson[MongoConstants.DEVICE_RAW_DATA] = rawdata; mongojson[MongoConstants.GPS_HEXA_DATA] = strFlag; mongojson[MongoConstants.CREATEDAT] = date; var year = "20"+expDate.slice(0, 2); year = ""+(parseInt(year,10)+1); expDate = new Date(year, expDate.slice(2, 4)-1, expDate.slice(4, 6), expDate.slice(6, 8), expDate.slice(8, 10), expDate.slice(10, 12)); expDate = expDate.getTime(); mongojson[MongoConstants.EXPIREAT] = expDate; var flagJSON = {platform:platform, userMobile:partsOfStr[1], userMessage:strFlag,mongoData:mongojson}; return flagJSON; } Flag.prototype.convertToFlagFromDeviceAQL_RFID = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); //parse raw data to different data. var lat = partsOfStr[3]; var lon = partsOfStr[4]; var date = partsOfStr[5]; var expDate = partsOfStr[5]; var speed = 0; //not applicable for if (partsOfStr[2] != '20'){ return null; } command = partsOfStr[2]; //convert date from 'yymmddhhmmss" format to unix date /* * this code will give issue in 2100 year, because, it has hardcoded "20" below. */ date = new Date("20"+date.slice(0, 2), date.slice(2, 4)-1, date.slice(4, 6), date.slice(6, 8), date.slice(8, 10), date.slice(10, 12)); date = date.getTime(); logger.info("parsing date: "+date); var exjson = {}; var mongojson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_RFID_SWIPE; exjson[FlagConstants.FLAG_LATITUDE] = lat; exjson[FlagConstants.FLAG_LONGITUDE] = lon; exjson[FlagConstants.FLAG_RFID_ID] = partsOfStr[8]; exjson[FlagConstants.FLAG_DEVICE_TIME_STAMP] = partsOfStr[5]; //exjson[FlagConstants.FLAG_TRACK_START_TIME] = date; if ((date === null) || (date === 0)){ date = new Date().getTime(); } exjson[FlagConstants.FLAG_DATE] = date; exjson[FlagConstants.FLAG_TRACK_DISTANCE] = 0; exjson[FlagConstants.FLAG_SPEED] = speed; exjson[FlagConstants.FLAG_MAX_SPEED] = speed; if (partsOfStr[10] == 0){ exjson[FlagConstants.FLAG_COMPASS] = getCompassForDeviceAQL(partsOfStr[40],partsOfStr[41],partsOfStr[42],partsOfStr[43]); }else{ exjson[FlagConstants.FLAG_COMPASS] = partsOfStr[10]; } exjson[FlagConstants.FLAG_COMPASS] = 0;//not applicable exjson[FlagConstants.FLAG_IGNITION_STATUS] = 1; //always ignition ON for RFID swipe value exjson[FlagConstants.FLAG_SENDER] = partsOfStr[1]; var file = ""; file = partsOfStr[1] + new Date(Number(date)).getYear()+new Date(Number(date)).getDate(); exjson[FlagConstants.FLAG_FILE_NAME] = file; var strFlag = utility.convertFromAscii2Hexa(JSON.stringify(exjson)); //add mongo specific data mongojson[MongoConstants.DEVICE_ID] = partsOfStr[1]; mongojson[MongoConstants.DEVICE_TYPE] = platform; mongojson[MongoConstants.COMMAND] = 20; mongojson[MongoConstants.LATITUDE] = lat; mongojson[MongoConstants.LONGITUDE] = lon; mongojson[MongoConstants.COMPASS] = 0; mongojson[MongoConstants.FUEL] = 0; mongojson[MongoConstants.VALIDITY] = "A"; mongojson[MongoConstants.GSM_SIGNAL] = 0; mongojson[MongoConstants.DATE] = date; mongojson[MongoConstants.SPEED] = 0; mongojson[MongoConstants.RFID] = exjson[FlagConstants.FLAG_RFID_ID]; mongojson[MongoConstants.DISTANCE] = 0; mongojson[MongoConstants.IGNITION_STATUS] = 1; mongojson[MongoConstants.DEVICE_RAW_DATA] = rawdata; mongojson[MongoConstants.GPS_HEXA_DATA] = strFlag; mongojson[MongoConstants.CREATEDAT] = date; var year = "20"+expDate.slice(0, 2); year = ""+(parseInt(year,10)+1); expDate = new Date(year, expDate.slice(2, 4)-1, expDate.slice(4, 6), expDate.slice(6, 8), expDate.slice(8, 10), expDate.slice(10, 12)); expDate = expDate.getTime(); mongojson[MongoConstants.EXPIREAT] = expDate; logger.info("\n"+JSON.stringify(exjson)+"\n"); var flagJSON = {platform:platform, userMobile:partsOfStr[1], userMessage:strFlag,mongoData:mongojson}; return flagJSON; } Flag.prototype.convertToFlagFromDevice_Silicon_Wireless_RFID = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); if (partsOfStr.length != 3){ return null; } var exjson = {}; var mongojson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; mongojson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_RFID_SWIPE; mongojson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_RFID_SWIPE; exjson[FlagConstants.FLAG_RFID_ID] = partsOfStr[2]; mongojson[FlagConstants.FLAG_RFID_ID] = partsOfStr[2]; exjson[FlagConstants.FLAG_SENDER] = partsOfStr[1]; mongojson[FlagConstants.FLAG_SENDER] = partsOfStr[1]; //exjson[FlagConstants.FLAG_DEVICE_TIME_STAMP] = partsOfStr[0]; var expDate = partsOfStr[3]; expDate = new Date(expDate.slice(4, 8), expDate.slice(2, 4), expDate.slice(0, 2), expDate.slice(8, 10), expDate.slice(10, 12), expDate.slice(12, 14)); var date = expDate; expDate = expDate.getTime(); if ((date === null) || (date === 0)){ date = new Date().getTime(); } exjson[FlagConstants.FLAG_DEVICE_TIME_STAMP] = date; mongojson[FlagConstants.FLAG_DEVICE_TIME_STAMP] = date; var file = ""; file = partsOfStr[0]+"_"+partsOfStr[1] + new Date(Number(date)).getYear()+new Date(Number(date)).getDate(); var strFlag = utility.convertFromAscii2Hexa(JSON.stringify(exjson)); logger.info("\n"+JSON.stringify(exjson)+"\n"); var flagJSON = {platform:platform, userMobile:partsOfStr[1], userMessage:strFlag, mongoData:mongojson}; return flagJSON; } Flag.prototype.convertToFlagFromGate_Infinize_RFID = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split('&'); if (partsOfStr.length != 4){ return null; } var exjson = {}; var date = null; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_RFID_SWIPE; exjson[FlagConstants.FLAG_RFID_ID] = partsOfStr[2]; exjson[FlagConstants.FLAG_DEVICE_TIME_STAMP] = partsOfStr[3]; if ((date === null) || (date === 0)){ date = new Date().getTime(); } var file = ""; file = partsOfStr[1] + new Date(Number(date)).getYear()+new Date(Number(date)).getDate(); var strFlag = utility.convertFromAscii2Hexa(JSON.stringify(exjson)); logger.info("\n"+JSON.stringify(exjson)+"\n"); var flagJSON = {platform:platform, userMobile:partsOfStr[1], userMessage:strFlag}; return flagJSON; } Flag.prototype.isValid = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); //check the header if (partsOfStr[0] != '$$ELLII_AQL'){ logger.info("invalid header, ignore those values!"); platform = "AQL"; return false; } return true; } Flag.prototype.isMobileSettingData = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); //check the header if (partsOfStr[0] == '$$ELLII_MS'){ logger.info("This is mobile setting!"); return true; } return false; } Flag.prototype.isDeviceFailEvent = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); //check the header if (partsOfStr[0] == '$$ELLII_AQL'){ if( (partsOfStr[2] == "12") || (partsOfStr[2] == "3")){ var flagJSON = {event:partsOfStr[2],device:partsOfStr[1]}; } return flagJSON; } return null; } Flag.prototype.isRFIDData = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); var status = false; //check the header if (partsOfStr[0] == '$$ELLII_AQL'){ if( (partsOfStr[2] == "20")){ status = true; } } return status; } Flag.prototype.isDevicePanicEvent = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); //check the header if (partsOfStr[0] == '$$ELLII_AQL'){ if( (partsOfStr[2] == "6")){ var flagJSON = {event:partsOfStr[2],device:partsOfStr[1],lat:partsOfStr[3],lon:partsOfStr[4]}; } return flagJSON; } return null; } Flag.prototype.getSender = function(rawdata){ var platform = ""; var partsOfStr = rawdata.split(','); //check the header if (partsOfStr[0] != '$$ELLII_AQL'){ logger.info("invalid header, ignore those values!"); platform = "AQL"; return null; } return partsOfStr[1]; } /* * This function converts memcache format to flag JSON format based on the device type * FLAG_TRACK_FLDS = {FLAG_LATITUDE,FLAG_MAX_SPEED,FLAG_LONGITUDE, * FLAG_COMPASS,FLAG_DATE,FLAG_SPEED,FLAG_TRACK_DISTANCE,FLAG_TRACK_START_TIME}; * * returns JSON with all the required fields. * */ Flag.prototype.getSummaryFlagAsJson = function(cacheData){ var data = utility.hex2a(cacheData); logger.info(data); try{ var jsonData = JSON.parse(data); }catch(e){ return null; } var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = jsonData[FlagConstants.FLAG_VERSION]; exjson[FlagConstants.FLAG_CATEGORY] = jsonData[FlagConstants.FLAG_CATEGORY]; exjson[FlagConstants.FLAG_LATITUDE] = jsonData[FlagConstants.FLAG_LATITUDE]; exjson[FlagConstants.FLAG_LONGITUDE] = jsonData[FlagConstants.FLAG_LONGITUDE]; exjson[FlagConstants.FLAG_TRACK_START_TIME] = jsonData[FlagConstants.FLAG_TRACK_START_TIME]; exjson[FlagConstants.FLAG_DATE] = jsonData[FlagConstants.FLAG_DATE]; exjson[FlagConstants.FLAG_TRACK_DISTANCE] = jsonData[FlagConstants.FLAG_TRACK_DISTANCE]; exjson[FlagConstants.FLAG_SPEED] = jsonData[FlagConstants.FLAG_SPEED]; exjson[FlagConstants.FLAG_MAX_SPEED] = jsonData[FlagConstants.FLAG_MAX_SPEED]; exjson[FlagConstants.FLAG_COMPASS] = 0; exjson[FlagConstants.FLAG_SENDER] = jsonData[FlagConstants.FLAG_SENDER] return exjson; } /* * This function converts memcache format to flag format based on the device type * FLAG_TRACK_FLDS = {FLAG_LATITUDE,FLAG_MAX_SPEED,FLAG_LONGITUDE, * FLAG_COMPASS,FLAG_DATE,FLAG_SPEED,FLAG_TRACK_DISTANCE,FLAG_TRACK_START_TIME}; * * returns JSON with all the required fields. * */ Flag.prototype.convertToFlagFromCache = function(cacheData){ var data = utility.hex2a(cacheData); logger.info(data); try{ var jsonData = JSON.parse(data); }catch(e){ return null; } var version = jsonData[FlagConstants.FLAG_VERSION]; var cat = jsonData[FlagConstants.FLAG_CATEGORY]; var lat = jsonData[FlagConstants.FLAG_LATITUDE]; var lon = jsonData[FlagConstants.FLAG_LONGITUDE]; var date = jsonData[FlagConstants.FLAG_DATE]; var sender = jsonData[FlagConstants.FLAG_SENDER]; var distance = jsonData[FlagConstants.FLAG_TRACK_DISTANCE]; var startTime = jsonData[FlagConstants.FLAG_TRACK_START_TIME]; var maxSpeed = jsonData[FlagConstants.FLAG_MAX_SPEED]; var compass = 0; logger.info(date); logger.info(lat); logger.info(lon); logger.info(speed); logger.info(compass); var exjson = {}; exjson[FlagConstants.FLAG_VERSION] = 0; exjson[FlagConstants.FLAG_CATEGORY] = FlagCategories.CTG_FLAG_TRACK; exjson[FlagConstants.FLAG_LATITUDE] = lat; exjson[FlagConstants.FLAG_LONGITUDE] = lon; exjson[FlagConstants.FLAG_TRACK_START_TIME] = startTime; exjson[FlagConstants.FLAG_DATE] = date; exjson[FlagConstants.FLAG_TRACK_DISTANCE] = distance; exjson[FlagConstants.FLAG_SPEED] = speed; exjson[FlagConstants.FLAG_MAX_SPEED] = speed; exjson[FlagConstants.FLAG_COMPASS] = compass; var strFlag = utility.convertFromAscii2Hexa(JSON.stringify(exjson)); logger.info("\n"+JSON.stringify(exjson)+"\n"); var flagJSON = {platform:'', userMobile:sender, userMessage:strFlag}; return flagJSON; } /* * This function converts raw format to flag format based on the device type * FLAG_TRACK_FLDS = {FLAG_LATITUDE,FLAG_MAX_SPEED,FLAG_LONGITUDE, * FLAG_COMPASS,FLAG_DATE,FLAG_SPEED,FLAG_TRACK_DISTANCE,FLAG_TRACK_START_TIME}; * * returns JSON with all the required fields. * */ Flag.prototype.getUpdatedCacheFlag = function(cache, device){ var data = utility.hex2a(cache); var cacheData = JSON.parse(data); var data2 = utility.hex2a(device); var deviceData = JSON.parse(data2); var exjson = {}; cacheData[FlagConstants.FLAG_TRACK_DISTANCE] = cacheData[FlagConstants.FLAG_TRACK_DISTANCE]+this.getDistance(cacheData, deviceData); cacheData[FlagConstants.FLAG_VERSION] = cacheData[FlagConstants.FLAG_VERSION]; cacheData[FlagConstants.FLAG_CATEGORY] = cacheData[FlagConstants.FLAG_CATEGORY]; cacheData[FlagConstants.FLAG_LATITUDE] = deviceData[FlagConstants.FLAG_LATITUDE]; cacheData[FlagConstants.FLAG_LONGITUDE] = deviceData[FlagConstants.FLAG_LONGITUDE]; cacheData[FlagConstants.FLAG_TRACK_START_TIME] = cacheData[FlagConstants.FLAG_TRACK_START_TIME]; cacheData[FlagConstants.FLAG_DATE] = deviceData[FlagConstants.FLAG_DATE]; cacheData[FlagConstants.FLAG_COMPASS] = deviceData[FlagConstants.FLAG_COMPASS]; cacheData[FlagConstants.FLAG_IGNITION_STATUS] = deviceData[FlagConstants.FLAG_IGNITION_STATUS]; if (cacheData[FlagConstants.FLAG_MAX_SPEED] < deviceData[FlagConstants.FLAG_SPEED]){ cacheData[FlagConstants.FLAG_MAX_SPEED] = deviceData[FlagConstants.FLAG_SPEED]; } /* 6 july 2016: Fixing Max_speed zero issue, what are you doing madhu?*/ /*else{ cacheData[FlagConstants.FLAG_MAX_SPEED] = deviceData[FlagConstants.FLAG_SPEED]; }*/ /* * calculate avarage speed and store. */ /*if (deviceData[FlagConstants.FLAG_SPEED] == 0){ cacheData[FlagConstants.FLAG_SPEED] = parseInt((cacheData[FlagConstants.FLAG_SPEED]+deviceData[FlagConstants.FLAG_SPEED])/2,10); logger.info("Flag.prototype.update device distance zero, averaging it: "+cacheData[FlagConstants.FLAG_SPEED]); //sometimes the value it is giving is in mobile is huge "149011611938476600000", so we check and reset to zero if it is huge. if (cacheData[FlagConstants.FLAG_SPEED] > 500) //500 magic number { logger.info("Flag.prototype.update device distance >huge making it zero: "+cacheData[FlagConstants.FLAG_SPEED]); cacheData[FlagConstants.FLAG_SPEED] = 0; } }else{ logger.info("Flag.prototype.update device distance: "+deviceData[FlagConstants.FLAG_SPEED]); cacheData[FlagConstants.FLAG_SPEED] = deviceData[FlagConstants.FLAG_SPEED]; }*/ var a = parseInt(cacheData[FlagConstants.FLAG_SPEED], 10); var b = parseInt(deviceData[FlagConstants.FLAG_SPEED], 10); cacheData[FlagConstants.FLAG_SPEED] = parseInt((a+b)/2,10); if (cacheData[FlagConstants.FLAG_SPEED] > 500) //500 magic number { logger.info("Flag.prototype.update device distance >huge making it zero: "+cacheData[FlagConstants.FLAG_SPEED]); cacheData[FlagConstants.FLAG_SPEED] = 0; }else{ logger.info("Flag.prototype.update AVERAGE SPEED "+cacheData[FlagConstants.FLAG_SPEED]); } var strFlag = utility.convertFromAscii2Hexa(JSON.stringify( cacheData)); var flagJSON = {platform:'', userMobile:cache.userMobile, userMessage:strFlag}; return flagJSON; } Flag.prototype.swithOffIgnition = function(data,time,lat,lon){ var data2 = utility.hex2a(data); var deviceData = JSON.parse(data2); deviceData[FlagConstants.FLAG_DATE] = time; deviceData[FlagConstants.FLAG_LATITUDE] = lat; deviceData[FlagConstants.FLAG_LONGITUDE] = lon; var strFlag = utility.convertFromAscii2Hexa(JSON.stringify(deviceData)); return strFlag; } Flag.prototype.getDayOfTheFlag = function(device){ var data = utility.hex2a(device); var cacheData; try{ cacheData = JSON.parse(data); }catch(exception){ return 0; } var date = cacheData[FlagConstants.FLAG_DATE]; logger.info("Flag.prototype.getDayOfTheFlag: "+date); var day = new Date(Number(date)).getDate(); return day; } Flag.prototype.getIgnitionStatus = function(device){ var data = utility.hex2a(device); var cacheData; try{ cacheData = JSON.parse(data); }catch(exception){ return 0; } return cacheData[FlagConstants.FLAG_IGNITION_STATUS]; } Flag.prototype.getSenderFromFlag = function(device){ var data = utility.hex2a(device); var cacheData; try{ cacheData = JSON.parse(data); }catch(exception){ return 0; } return cacheData[FlagConstants.FLAG_SENDER]; } /* * If it is ignition event, on or off, returns data, otherwise returns null. */ Flag.prototype.getIgnitionEventData = function(device){ var flagJSON = null; var partsOfStr = device.split(','); //check the header if (partsOfStr[0] == '$$ELLII_AQL'){ //10 = ON, 11 = OFF if( (partsOfStr[2] == "10") || (partsOfStr[2] == "11")){ var date = partsOfStr[5]; var status = 0; if (partsOfStr[2] == "10"){ status = 1; //ON }else if (partsOfStr[2] == "11"){ status = 0; //OFF } if (date != undefined){ date = new Date("20"+date.slice(0, 2), date.slice(2, 4)-1, date.slice(4, 6), date.slice(6, 8), date.slice(8, 10), date.slice(10, 12)); date = date.getTime(); }else{ date = new Date().getTime(); } flagJSON = {lat:partsOfStr[3],lon:partsOfStr[4],serial_number:partsOfStr[1],ignition_status:status,ignition_change_date:date, fuel_status:parseInt(partsOfStr[11],10), total_distance:parseInt(partsOfStr[9],10)}; } /* * [Madhu, July 9th 2018] New series of Basic devices from ITriamgle, is giving 15 command for ignition ON/OFF */ if ( (partsOfStr[2] == 15)){ var parts1 = partsOfStr[16].split(":"); if (partsOfStr[2] == 15){ if (parts1[1].toUpperCase() == "OFF"){ status = 0; } else if (parts1[1].toUpperCase() == "ON") { status = 1; } flagJSON = {lat:0,lon:0,serial_number:partsOfStr[1],ignition_status:status,ignition_change_date:date, fuel_status:0, total_distance:0}; } } } return flagJSON; } Flag.prototype.getDateOfTheFlag = function(device){ var data = utility.hex2a(device); var cacheData; try{ cacheData = JSON.parse(data); }catch(exception){ return 0; } var date = cacheData[FlagConstants.FLAG_DATE]; return date; } Flag.prototype.getTimeOfTheFlag = function(device){ var data = utility.hex2a(device); var cacheData; try{ cacheData = JSON.parse(data); }catch(exception){ return 0; } var date = cacheData[FlagConstants.FLAG_DATE]; logger.info("Flag.prototype.getDayOfTheFlag: "+date); var h = new Date(Number(date)).getHours(); var m = new Date(Number(date)).getMinutes(); return ""+h+":"+m+":"+"0"; } Flag.prototype.getFileName = function(deviceID, date){ var file = ""; file = deviceID + new Date(Number(date)).getYear()+new Date(Number(date)).getDate(); return file; } /* *This function generate data format similar to device based on given inputs and device type * format:$$ELLII_AQL,151036275,1,12.939538,77.690857,160314175550,A,20,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,*0D */ Flag.prototype.getLocationFlaginDeviceFormat = function(device, sno,lat, lon, startTime, currentTime, distance, compass, speed){ if (device == 'AQL'){ var command = "$$ELLII_AQL,"; command = command + sno; command = command +','+'1'; // default GPS packet command = command + ','+lat +','+ lon; command = command + ',' + currentTime; command = command + ',' + 'A'; //A = currect GPS status command = command +','+31; //GPS signal command = command +',' + speed; command = command +',' + distance; command = command +',' + '0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,*0D'; // defaut remaining values. return command; } return ''; } /* * This function gets distance between two points. */ Flag.prototype.getDistance = function(cache, device){ var distance = -1; if ((cache == null) || (device == null) ){ logger.info("LatLon: checkDistance global start 6: "); return distance; } logger.info(cache); logger.info(device); logger.info("LatLon: checkDistance global start: "); logger.info(cache[FlagConstants.FLAG_LATITUDE]); logger.info(cache[FlagConstants.FLAG_LONGITUDE]); logger.info(device[FlagConstants.FLAG_LATITUDE]); logger.info(device[FlagConstants.FLAG_LONGITUDE]); var lat1 = cache[FlagConstants.FLAG_LATITUDE]; var lat2 = device[FlagConstants.FLAG_LATITUDE]; var lon1 = cache[FlagConstants.FLAG_LONGITUDE]; var lon2 = device[FlagConstants.FLAG_LONGITUDE]; var p = 0.017453292519943295; // Math.PI / 180 var c = Math.cos; var a = 0.5 - c((lat2 - lat1) * p)/2 + c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p))/2; distance = 12742 * Math.asin(Math.sqrt(a)); // 2 * R; R = 6371 km distance = distance*1000;//meters logger.info("LatLon: checkDistance global: "+distance); return distance; }