octopus-gps-tracking
Version:
Let you work with some GPS trackers that connects through tcp.
116 lines (91 loc) • 2.95 kB
JavaScript
/* */
f = require("../functions");
var nmea = require("nmea-0183");
exports.protocol="GPS103";
exports.model_name="TK103-2";
exports.compatible_hardware=["TK103-2/supplier"];
var adapter = function(device){
if(!(this instanceof adapter)) return new adapter(device);
this.device = device;
/*******************************************
PARSE THE INCOMING STRING FROM THE DECIVE
You must return an object with a least: device_id, cmd and type.
return device_id: The device_id
return cmd: command from the device.
return type: login_request, ping, etc.
*******************************************/
this.parse_data = function(data){
data = data.toString();
if ( this.isCommandResponse(data) ) {
var responseData = data.split(" ");
return {
action: 'command_response',
cmd: 'response',
imei: this.device.uid,
message: responseData[0]
};
}
var separatedDataWithComma = data.split(",", 28);
if (separatedDataWithComma.length !== 28) {
console.log("\n========= Missing data for TK103-2 ==========");
console.log(data);
console.log("=============================================\n");
return false;
};
/****************************
parts.cmd moved komutu çıkarımsal olarak belirlendi.
***************************/
var splitIMEI = separatedDataWithComma[17].split(":");
var imei = splitIMEI[1];
var parts={
"start" : 0,
"device_id" : imei,
"imei" : imei,
"cmd" : "moved",
"message" : separatedDataWithComma[16],
"data" : "$"+separatedDataWithComma.slice(2, 16).join(','),
"finish" : 0
};
switch(parts.cmd){
case "BP05":
parts.action="login_request";
break;
case "moved":
parts.action="ping";
break;
case "BO01":
parts.action="alarm";
break;
default:
parts.action="other";
}
return parts;
}
this.get_ping_data = function(msg_parts){
var str = msg_parts.data;
var data = nmea.parse(str);
var date = "20"+data.date.substr(4,2)+"/"+data.date.substr(2,2)+"/"+data.date.substr(0,2);
var time = data.time.substr(0,2)+":"+data.time.substr(2,2)+":"+data.time.substr(4,2);
var res = {
latitude : Number(data.latitude),
longitude : Number(data.longitude),
time : new Date(date+" "+time),
speed : data.speed,
valid : data.valid,
imei : msg_parts.imei,
message : msg_parts.message
}
return res;
}
this.authorize =function(){
//send command device
}
this.isCommandResponse = function(data) {
if (!data) {
return false;
}
var response = data.split(" ");
return response[1] === 'ok!';
}
}
exports.adapter = adapter;