0.0.8 • Published 9 years ago

meiligao v0.0.8

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

Quickstart

This is nodejs implementation of Meiligao protocol (GPRS communication protocol between server & Meitrack) GPS trackers. It supports following trackers: GT30i, GT60, VT300, VT310, VT400.

To start, install this module with command npm install meiligao and see events handling and command execution examples.

meiligao.Server

Designed to handle tracker connections. Accepts timeout option, that is automatically passed to meiligao.Tracker objects.

var meiligao = require('meiligao');
var server = new meiligao.Server({ timeout: 120000 });

Events

connect

Is emitted when tracker establishes connect with meiligao.Server. Parameters:

  • tracker: meiligao.Tracker object

disconnect

Is emitted when tracker closes connection. Parameters:

  • tracker: meiligao.Tracker object

Methods

listen

Bind server to the specified port.

ParameterTypeDescription
portintegerPort number
callbackfunctionUser callback
server.listen(20180, function(error) {
  if (error) throw error;
  console.log('gps server is listening');
});

meiligao.Tracker

Designed to iteract with GPS trackers. Accepts timeout option, (which is passed automatically by meiligao.Server).

var meiligao = require('meiligao');

var server = new meiligao.Server({
    timeout: 120000
}).listen(20180, function(error) {
    if (error) throw error;
    console.log('gps server is listening');
});

server.on('connect', function(tracker) { 
    console.log('tracker connected!');
});

Events

heartbeat

Heartbeat is 0x00 message sent by tracker over time. You can configure it's interval using tracker.setHeartbeatInterval method.

error

Is emitted when it is not possible to parse tracker's message. Parameters:

  • Error: object with error descripton
  • Buffer: unparseable message

packet.in

Is emitted every time message is received from tracker, very useful for debugging. Parameters:

  • meiligao.Message: message received from tracker

packet.out

Is emitted every time message is passed to tracker, is useful for debugging. Parameters:

  • meiligao.Message: message sent to tracker

login

Is emitted after tracker sent 0x5000 login request & successful login confirmation 0x4000 was sent back. In fact, login request can not be used for real authentication, it tells that data sent by tracker will be accepted by server. If you need to implement authentication, use tracker.getSnImei method to receive tracker's data & then tracker.disconnect to disconnect non-authenticated trackers.

message

Is emitted every time tracker sends alarm or report. Parameters:

  • Object with following data:
    • type: message type (see Message.types)
    • data: parsed result
    • raw: raw data

disconnect

Is emitted after connection was closed.

timeout

Is emitted after connection is timed out (timeout can be configured in Tracker options).

Methods

disconnect

Close tracker connection.

var meiligao = require('meiligao');

var server = new meiligao.Server().listen(20180, function(error) {
  if (error) throw error;
  console.log('gps server is listening');
});

server.on('connect', function(tracker) { 
  tracker.on('disconnect', function() {
    console.log('tracker disconnected');
  })

  console.log('tracker connected!');
  tracker.disconnect();
});

requestReport

Request GPS report (internal: track on demand 0x4101)

ParameterTypeDescription
callbackfunctionUser callback
tracker.requestReport(function(err, data) {
  if (err) {
    console.log('REQUEST REPORT ERROR: ', err);
  } else {
    console.log('REQUEST REPORT: ', data);
  }
});

getSnImei

Request serial number & IMEI from tracker (internal: 0x9001).

ParameterTypeDescription
callbackfunctionUser callback
tracker.getSnImei(function(err, data) {
  if (err) {
    console.log('GET SN IMEI ERROR: ', err);
  } else {
    console.log('GET SN IMEI: ', data);
  }
});

resetConfiguration

Revert all settings (except for the password, IP, Port, APN, ID and GPRS interval) back to factory default (internal: 0x4110).

ParameterTypeDescription
callbackfunctionUser callback
tracker.resetConfiguration(function(err, result){
  if (err) {
    console.log('RESET CONFIGURATION ERROR: ', err);
  } else {
    console.log('RESET CONFIGURATION: ', result);
  }
});       

rebootGps

Reboot the GPS module of the tracker (internal: 0x4902).

ParameterTypeDescription
callbackfunctionUser callback
tracker.rebootGps(function(err, result){
  if (err) {
    console.log('REBOOT GPS ERROR: ', err);
  } else {
    console.log('REBOOT GPS: ', result);
  }
});

setExtendedSettings

Set extended tracker settings (internal: 0x4108).

ParameterTypeDefaultDescription
setting.smsReplyOnCallbooleantrueSend position report by sms after call is made to the tracker.
setting.useGPRMSFormatbooleanfalseUse NMEA 0183 GPRMC or normal text (for sms only).
setting.hangUpAfter5RingsbooleanfalseHang up after 5 rings.
setting.enableCallBuzzerbooleanfalseTurn on/off buzzer for the incoming call.
setting.enableLedLightsbooleantrueWhen is set to false, lights stop flashing when the tracker is working.
setting.alarmPowerOnbooleantrueSend sms alarm to the authorized phone number for SOS, and a GPRS alarm to the server, when the tracker is turned on.
setting.alarmPowerCutbooleanfalseSend sms alarm to the authorized phone number for SOS when the power of the vehicle tracker is cut.
setting.alarmGpsBlindAreabooleanfalseSend sms alarm when the tracker enters GPS blind area.
callbackfunction-User callback
tracker.setExtendedSettings({
  smsReplyOnCall    : true,
  useGPRMSFormat    : false, // works for sms only
  hangUpAfter5Rings : false,
  enableCallBuzzer  : false,
  enableLedLights   : true,
  alarmPowerOn      : true,
  alarmPowerCut     : false,
  alarmGpsBlindArea : false,
}, function(err, result){
  if (err) {
    console.log('SET EXTENDED SETTINGS ERROR: ', err);
  } else {
    console.log('SET EXTENDED SETTINGS: ', result);
  }
});

setHeartbeatInterval

Sets specified time interval for heartbeat message (internal: 0x5199).

ParameterTypeDescription
intervalintegerInterval in minutes
callbackfunctionUser callback
tracker.setHeartbeatInterval(1, function(err, result){
  if (err) {
    console.log('SET HEARTBEAT INTERVAL ERROR: ', err);
  } else {
    console.log('SET HEARTBEAT INTERVAL: ', result);
  }
});

clearMileage

Delete total mileage (internal: 0x4351).

ParameterTypeDescription
callbackfunctionUser callback
tracker.clearMileage(function(err, result){
  if (err) {
    console.log('CLEAR MILEAGE ERROR: ', err);
  } else {
    console.log('CLEAR MILEAGE: ', result);
  }
});

setPowerDownTimeout

Set inactivity timeout, after which tracker will go to energy saving mode (internal: 0x4126).

ParameterTypeDescription
intervalintegerInterval in minutes, possible values: 0 - 99, 0 disables timeout.
callbackfunctionUser callback
tracker.setPowerDownTimeout(15, function(err, result){
  if (err) {
    console.log('SET POWER DOWN TIMEOUT ERROR: ', err);
  } else {
    console.log('SET POWER DOWN TIMEOUT: ', result);
  }
}); 

getMemoryReports

Read logged data and returns reports array (high-level wrapper for internal command 0x9016).

ParameterTypeDescription
callbackfunctionUser callback
tracker.getMemoryReports(function(err, reports){
  if (err) {
    console.log('GET MEMORY REPORTS ERROR: ', err);
  } else {
    console.log('GET MEMORY REPORTS: ', reports);
  }
}); 

setMemoryReportInterval

Set interval for saving coordinates in memory, when internet is not available (internal: 0x4131).

ParameterTypeDescription
intervalintegerInterval in seconds, possible values: 1 - 65535, 0 - disable.
callbackfunctionUser callback
tracker.setMemoryReportInterval(1, function(err, result){
  if (err) {
    console.log('SET MEMORY REPORT INTERVAL ERROR: ', err);
  } else {
    console.log('SET MEMORY REPORT INTERVAL: ', result);
  }
});

clearMemoryReports

Clear reports stored in memory (internal: 0x5503).

ParameterTypeDescription
callbackfunctionUser callback
tracker.clearMemoryReports(function(err, result){
  if (err) {
    console.log('CLEAR MEMORY REPORTS ERROR: ', err);
  } else {
    console.log('CLEAR MEMORY REPORTS: ', result);
  }
});

getAuthorizedPhones

Return authorized phone numbers (internal: 0x9003).

ParameterTypeDescription
callbackfunctionUser callback
tracker.getAuthorizedPhones(function(err, phones){
  if (err) {
    console.log('GET AUTHORIZED PHONES ERROR: ', err);
  } else {
    console.log('GET AUTHORIZED PHONES: ', phones);
  }
});

setAuthorizedPhones

Set authorized phone for sos button, for receiving sms & calls (internal: 0x4103).

ParameterTypeDescription
smsPhonestringAuthorized phone number for receiving sms.
callPhonestringAuthorized phone number for receiving phone call.
callbackfunctionUser callback
tracker.setAuthorizedPhones(79991234567, 79991234567, function(err, result){
  if (err) {
    console.log('SET AUTHORIZED PHONE ERROR: ', err);
  } else {
    console.log('SET AUTHORIZED PHONE: ', result);
  }
});

getReportTimeInterval

Retrieve reporting time interval from tracker, 1 unit = 10 seconds (internal: 0x9002).

ParameterTypeDescription
callbackfunctionUser callback
tracker.getReportTimeInterval(function(err, interval){
  if (err) {
    console.log('GET REPORT TIME INTERVAL ERROR: ', err);
  } else {
    console.log('GET REPORT TIME INTERVAL: ', interval);
  }
});

setReportTimeInterval

Set reporting time interval (internal: 0x4102, 0x5100).

ParameterTypeDescription
intervalintegerReporting time interval, 1 unit = 10 seconds.
callbackfunctionUser callback
tracker.setReportTimeInterval(2, function(err, result){
  if (err) {
    console.log('SET REPORT TIME INTERVAL ERROR: ', err);
  } else {
    console.log('SET REPORT TIME INTERVAL: ', result);
  }
});

setReportDistanceInterval

Set distance report as per pre-set interval. Sends out alarm when the car is moving and stops sending the report when the car is stationary (internal: 0x4303).

ParameterTypeDescription
metersintegerDistance interval, is suggested to be set above 300 meters.
callbackfunctionUser callback
tracker.setReportDistanceInterval(300, function(err, result){
  if (err) {
    console.log('SET REPORT DISTANCE INTERVAL ERROR: ', err);
  } else {
    console.log('SET REPORT DISTANCE INTERVAL: ', result);
  }
});  

setAlarmSpeeding

Set speeding alarm (internal: 0x4105).

ParameterTypeDescription
limitintegerSpeed limit, 1 unit = 10 kmph.
callbackfunctionUser callback
tracker.setAlarmSpeeding(15, function(err, result){
  if (err) {
    console.log('SET ALARM SPEEDING ERROR: ', err);
  } else {
    console.log('SET ALARM SPEEDING: ', result);
  }
});

setAlarmMovement

Set movement alarm (internal: 0x4106).

ParameterTypeDescription
areaintegerFor supported values please see documentation
callbackfunctionUser callback
tracker.setAlarmMovement(0x03, function(err, result){
  if (err) {
    console.log('SET ALARM MOVEMENT ERROR: ', err);
  } else {
    console.log('SET ALARM MOVEMENT: ', result);
  }
});

setAlarmGeofence

Set geo-fence alarm (internal: 0x4302).

ParameterTypeDescription
latitudenumberCenter point latitude
longitudenumberCenter point longitude
radiusintegerCircle radius, possible values: 1 - 4294967295
callbackfunctionUser callback
tracker.setAlarmGeofence(55.753905, 37.620872, 200, function(err, result){
  if (err) {
    console.log('SET ALARM GEOFENCE ERROR: ', err);
  } else {
    console.log('SET ALARM GEOFENCE: ', result);
  }
});

Under the hood

Command names mapping, message types list & all other stuff related to message processing is located in Message.js file. Original protocol documentation is also included in case you will need deep understanding how Meiligao protocol works.

0.0.8

9 years ago

0.0.7

9 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago