@jstarpl/bluetooth-obd
Version:
Package for communicating with a bluetooth OBD-II reader
184 lines (108 loc) • 4.73 kB
Markdown
[](https://nodei.co/npm/bluetooth-obd/)
bluetooth-obd - 0.2.5
===============
# Bluetooth communication for OBD-II ELM327 devices.
This node module lets you communicate over a bluetooth serial port with OBD-II ELM327 Connectors using Node.js.
# Limitations
* Only tested on ELM327 devices.
* Not all OBD-II Commands are implemented yet.
# Pre-Requirements
* If it's a Bluetooth ELM327, then it should already be paired! If this hasn't been done, it will cause a connection error.
* bluetooth-serial-port (module that is used by this module, thanks to Eelco) requires libbluetooth-dev package:
`$ sudo apt-get install libbluetooth-dev`
# Serial
* If you're looking for serial RS23 connection, look into serial-obd.
# Install
`npm install bluetooth-obd`
# Documentation
## Basic usage
```javascript
var OBDReader = require('bluetooth-obd');
var btOBDReader = new OBDReader();
var dataReceivedMarker = {};
btOBDReader.on('connected', function () {
//this.requestValueByName("vss"); //vss = vehicle speed sensor
this.addPoller("vss");
this.addPoller("rpm");
this.addPoller("temp");
this.addPoller("load_pct");
this.addPoller("map");
this.addPoller("frp");
this.startPolling(1000); //Request all values each second.
});
btOBDReader.on('dataReceived', function (data) {
console.log(data);
dataReceivedMarker = data;
});
// Use first device with 'obd' in the name
btOBDReader.autoconnect('obd');
```
## API
### OBDReader
#### Event: ('dataReceived', data)
Emitted when data is read from the OBD-II connector.
* data - the data that was read and parsed to a reply object
#### Event: ('connected')
Emitted when the connection is set up (port is open).
#### Event: ('error', message)
Emitted when an error is encountered.
#### Event: ('debug', message)
Emitted with debugging information.
#### OBDReader()
Creates an instance of OBDReader.
#### getPIDByName(Name)
Find a PID-value by name.
##### Params:
* **name** *Name* of the PID you want the hexadecimal (in ASCII text) value of.
##### Return:
* **string** PID in hexadecimal ASCII
#### parseOBDCommand(hexString)
Parses a hexadecimal string to a reply object. Uses PIDS. (obdInfo.js)
##### Params:
* **string** *hexString* Hexadecimal value in string that is received over the serialport.
##### Return:
* **Object** reply - The reply.
* **string** reply.value - The value that is already converted. This can be a PID converted answer or "OK" or "NO DATA".
* **string** reply.name - The name. --! Only if the reply is a PID.
* **string** reply.mode - The mode of the PID. --! Only if the reply is a PID.
* **string** reply.pid - The PID. --! Only if the reply is a PID.
#### autoconnect(query)
Attempt discovery of the device based on a query string, and call connect() on the first match.
##### Params:
* **string** *query* (Optional) string to be matched against address/channel (fuzzy-ish)
#### connect(address, channel)
Connect/Open the serial port and add events to serialport. Also starts the intervalWriter that is used to write the queue.
##### Params:
* **string** *address* MAC-address of device that will be connected to.
* **number** *channel* Channel that the serial port service runs on.
#### disconnect()
Disconnects/closes the port.
#### write(message, replies)
Writes a message to the port. (Queued!) All write functions call this function.
##### Params:
* **string** *message* The PID or AT Command you want to send. Without \r or \n!
* **number** *replies* The number of replies that are expected. Default = 0. 0 --> infinite
#### requestValueByName(name)
Writes a PID value by entering a pid supported name.
##### Params:
* **string** *name* Look into obdInfo.js for all PIDS.
#### addPoller(name)
Adds a poller to the poller-array.
##### Params:
* **string** *name* Name of the poller you want to add.
#### removePoller(name)
Removes an poller.
##### Params:
* **string** *name* Name of the poller you want to remove.
#### removeAllPollers()
Removes all pollers.
#### writePollers()
Writes all active pollers.
#### startPolling()
Starts polling. Lower interval than activePollers * 50 will probably give buffer overflows.
##### Params:
* **number** *interval* Frequency how often all variables should be polled. (in ms) If no value is given, then for each activePoller 75ms will be added.
#### stopPolling()
Stops polling.
# LICENSE
This module is available under a [Apache 2.0 license](http://www.apache.org/licenses/LICENSE-2.0.html), see also the [LICENSE file](https://raw.github.com/EricSmekens/node-bluetooth-obd/master/LICENSE) for details.