flaglib
Version:
Ignition event 15 added.
1,407 lines (1,115 loc) • 45.6 kB
JavaScript
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;
}