Basically, gps-server is aimed to support various GPS hardware devices and different data protocols. Both binary and string-based protocols can be supported, including NMEA-like ones.
There is a map page available to see your GPS devices tracked in real-time. Just go to configured HTTP endpoint in your browser.
TBD: Also, some admin UI provided to get an idea what's going on under the hood, with some of logs out to see in real-time in your browser.
Main goals are to keep it:
- lightweight
- extensible
- configurable
- easy-to-use
...and that's it. Simple.
After cloning or downloading this repository, you can run it as standalone server:
npm install
node server.js
Usually, it's a good idea to use some helper packages, like forever
. See server.js
for some more info.
gps-server can be used as npm package, in external app. In your app's folder, do:
npm install gps-server
To save dependency in your package.json: npm install gps-server --save
Then, in your app just add:
var gpsServer = require('gps-server');
// start GPS server
gpsServer();
After GPS data processed and parsed successfully, they are announced along with gps_data
events and available for outside usage.
It's kinda of "extension point" where custom data-manipulation logic can be placed,
like saving into DB or custom UI rendering:
// handle data processed and returned by gps-server
eventEmitter.on('gps_data', function(data) {
// preferably, handle data asynchronously, to not affect on gps-server
setImmediate(function(data) {
console.log('EVENT async "gps_data" : ' + data.length);
// save into DB logic goes here
}, data);
});
See server.js
for usage example.
- gps-server announces
gps_data
events to provide ability for outside data-handling
- tested against real GPS devices, workable with:
- Bitrek binary protocol (which is similar to Teltonika binary protocol)
- GlobalSat NMEA-like string protocol
- can be used as npm package now, in external app
- server listening for data
- logging of received data -> into file under /log
- parsing GPS data
- UI: map.html, for real-time GPS position rendering
- UI: chat.html (socket.io demo)
- broadcasting socket.io message -> subscribed listeners on UI
- saving data into MySQL DB
- configuration support, limited
- bower used for front-end dependencies
- /libs used
- custom unit tests used
- custom demo.js for demoing / testing
- add:
- arrange universal parsing flow using adapters (parsers for specific formats ?)
- binary:
BiTrekTeltonika
- string (NMEA ?) format:
- GlobalSat:
reports: GSr- config and other packets
- Elgato Ukr
- Queclink ?
- GlobalSat:
- unclear:
- RCS TeleTrack
- binary:
- support NMEA format, via existing js module ?
introduce 'extension point' to use parsed data- unit tests - karma ?
- stress tests / highload ?
- support for demo mobile app
- support for OsmAnd mobile clients ?
- cloud support / cloud demo (note: RH cloud HTTP+TCP ports config issue)
- UI: parameter support for showing one device or group ?
- admin UI:
- page with current / active metrics (# of connected devices and/or UI users)
- log page (events/usage listing), with e.g. ~1,000 lines max
- arrange universal parsing flow using adapters (parsers for specific formats ?)
- remove:
remove: saving into DBremove: chat.html (socket.io demo)remove: bower usage, re-arrange dependencies
- configuration:
setup project through the package.jsonarrange npm "scripts"- extend configuration support