Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
f92bad1
removed debug line
jankolkmeier Mar 17, 2012
06a6e1b
removed debug line
jankolkmeier Mar 17, 2012
81da3b6
Updated package.json & README
jankolkmeier Mar 18, 2012
b8fdf57
Updated package.json & README
Mar 18, 2012
a882d9c
Renamed sys to util
jankolkmeier Mar 18, 2012
5bc18eb
Renamed sys to util
Mar 18, 2012
a60e092
make packetToJson always return an object
jankolkmeier Mar 18, 2012
b16b3ef
make packetToJson always return an object
Mar 18, 2012
755440d
export conversion functions
jankolkmeier Mar 18, 2012
3b0897f
export conversion functions
Mar 18, 2012
bd090a6
Revert "export conversion functions"
jankolkmeier Mar 18, 2012
10b7089
Revert "export conversion functions"
Mar 18, 2012
13300b5
export conversion functions
jankolkmeier Mar 18, 2012
406ce9d
export conversion functions
Mar 18, 2012
a21ebcf
added gitignore to ignore node_modules
jankolkmeier Mar 18, 2012
20ceeeb
added gitignore to ignore node_modules
Mar 18, 2012
0fd3147
repaired some sloppieness
jankolkmeier Mar 18, 2012
65b78c8
repaired some sloppieness
Mar 18, 2012
7b1edce
added serialport as dependency
jankolkmeier Mar 18, 2012
94c2e85
added serialport as dependency
Mar 18, 2012
446a469
gitignore
jankolkmeier Mar 18, 2012
e034fcd
gitignore
Mar 18, 2012
d635494
plenty of changes
jankolkmeier Mar 19, 2012
2586fb9
plenty of changes
Mar 19, 2012
a644e5a
added test and xbee class
jankolkmeier Mar 19, 2012
9687607
added test and xbee class
Mar 19, 2012
03fbd06
wrote new example
jankolkmeier Mar 20, 2012
5871747
wrote new example
Mar 20, 2012
8e131a6
rewrote abstraction
jankolkmeier Mar 20, 2012
3f917be
added dependency
jankolkmeier Mar 17, 2012
b8e36e7
rewrote abstraction
Mar 20, 2012
b461c51
added dependency
jankolkmeier Mar 17, 2012
3769cd6
clean(er) rewrite
jankolkmeier Mar 20, 2012
c2bb60c
clean(er) rewrite
Mar 20, 2012
41ff191
Preparing first npm release
jankolkmeier Apr 5, 2012
d9f98d2
Preparing first npm release
Apr 5, 2012
bddf072
updated readme
jankolkmeier Apr 5, 2012
4ce69bf
updated readme
Apr 5, 2012
50a7067
package updates
jankolkmeier Apr 5, 2012
c33b478
package updates
Apr 5, 2012
1a0d9e6
package updates
jankolkmeier Apr 5, 2012
6fac9c4
package updates
Apr 5, 2012
449f0af
communication with nodes now works properly
jankolkmeier Apr 5, 2012
2972984
communication with nodes now works properly
Apr 5, 2012
a1533b3
mod. gitignore
jankolkmeier Apr 5, 2012
e301e52
mod. gitignore
Apr 5, 2012
be91776
massive changes
jankolkmeier Apr 12, 2012
27cb3d9
massive changes
Apr 12, 2012
3089b5f
added a simple parser
jankolkmeier Apr 12, 2012
d2ea0a7
added a simple parser
Apr 12, 2012
ec14d87
pushed to version 0.0.4
jankolkmeier Apr 12, 2012
e66f464
pushed to version 0.0.4
Apr 12, 2012
dab794a
renamed to follow my naming conventions
jankolkmeier May 4, 2012
7b3da71
renamed to follow my naming conventions
May 4, 2012
03d2880
fixed renaming issues in readme and example
jankolkmeier May 19, 2012
1e904ef
fixed renaming issues in readme and example
May 19, 2012
1ff08b7
Allow for setting baud rate
msealand May 23, 2012
a6e46d3
Allow for setting baud rate
msealand May 23, 2012
08d18e6
Merge pull request #1 from msealand/master
jankolkmeier May 23, 2012
cf4de2d
Merge pull request #1 from msealand/master
jankolkmeier May 23, 2012
51230c3
new npm version
jankolkmeier May 23, 2012
3b9d29e
new npm version
May 23, 2012
28005aa
fixed readme
jankolkmeier May 23, 2012
90e11db
fixed readme
May 23, 2012
8d5a8ff
Handle responses from 'NT' that have more than one byte.
mozz100 May 31, 2012
0fcd29a
Handle responses from 'NT' that have more than one byte.
mozz100 May 31, 2012
ceb0d30
Correct typo in data sample packet parsing
mozz100 Jun 5, 2012
5cff3ba
Correct typo in data sample packet parsing
mozz100 Jun 5, 2012
0ff278a
Add listeners for Xbee data samples
mozz100 Jun 5, 2012
34c1923
Add listeners for Xbee data samples
mozz100 Jun 5, 2012
167021f
v0.0.8
jankolkmeier Jun 5, 2012
dc8416d
...
jankolkmeier Jun 8, 2012
4b8def0
serialport2
jankolkmeier Jun 8, 2012
41e8529
publishing to npm
jankolkmeier Jun 8, 2012
9be434a
Outsourced and rewrote constants
jankolkmeier Jun 9, 2012
d5f0b70
Fixed references to constants
jankolkmeier Jun 9, 2012
7cf54e6
Fixed references to constants. Also XBee object is now main event emi…
jankolkmeier Jun 9, 2012
fea78f4
0.0.9, ditched async, moved to serialport2
jankolkmeier Jun 9, 2012
85b543c
svd-xbee-sp2 -> svd-xbee
jankolkmeier Jun 9, 2012
9c2a68d
added contributors
jankolkmeier Jun 10, 2012
6ff8156
Fixed bug with incrementFrameId()
jankolkmeier Jun 10, 2012
789d528
Frames are now being queued before sent to serial.
jankolkmeier Jun 10, 2012
ccbaff1
0.1.0
jankolkmeier Jun 10, 2012
786e67d
...I need to use debug flags...
jankolkmeier Jun 10, 2012
bad5922
Changed ATCommand to RemoteATCommand
stormboy Jul 15, 2012
786a02a
long due commit
jankolkmeier Aug 1, 2012
13c2e30
refactoring
jankolkmeier Aug 8, 2012
5c40fa1
refactoring 2
jankolkmeier Aug 8, 2012
3691e99
refactoring 3
jankolkmeier Aug 8, 2012
537de0c
delete old files
jankolkmeier Aug 8, 2012
d979589
remove log
jankolkmeier Aug 9, 2012
c89afa2
0.2.1
jankolkmeier Aug 9, 2012
dfa7875
Unknown frame types throws an exception: TypeError: Cannot call metho…
legege Sep 17, 2012
b1c609e
Merge pull request #2 from legege/master
jankolkmeier Sep 17, 2012
61c2112
Fix some trivial merge conflicts
mozz100 Oct 21, 2012
9c5d8a5
Remove old files
mozz100 Oct 21, 2012
45da34b
Mention API mode 2 in the readme
mozz100 Oct 21, 2012
f8ce33e
Update readme to try and help people avoid a couple of gotchas
mozz100 Oct 21, 2012
71a2f3f
Fix a mistake (I think) in simple-parser.js
mozz100 Oct 21, 2012
50518de
Update README to match reality
mozz100 Oct 21, 2012
f2e1d9f
Allow setting API mode to values other than 2
mozz100 Oct 21, 2012
1ee1687
Implement remote AT commands following jouz's method used for AT comm…
mozz100 Oct 21, 2012
f039b19
Enable node.ATCommand(cmd, str, callback)
mozz100 Oct 21, 2012
414ee83
Merge pull request #5 from mozz100/develop
jankolkmeier Nov 24, 2012
15d58e5
Check for errors in Xbee.config
Feb 28, 2013
ad22f02
Merge pull request #6 from jazzdan/master
jankolkmeier Mar 9, 2013
a75f9f9
updated npm package
jankolkmeier Mar 10, 2013
9b74113
updated examples
jankolkmeier Mar 10, 2013
71ecbbd
fix typo in example
jankolkmeier Mar 10, 2013
8a4782a
Massive API changes
jankolkmeier Mar 16, 2013
7ead1f6
Updated Readme
jankolkmeier Mar 16, 2013
b223336
Added new examples
jankolkmeier Mar 16, 2013
2ad8e35
change event emitter params
jankolkmeier Mar 16, 2013
ac91f68
new npm version
jankolkmeier Mar 16, 2013
f3c151a
Added Web Example
jankolkmeier Mar 17, 2013
b1ee7ed
fixed dependencies
jankolkmeier Mar 17, 2013
187cdfe
Clean up source, add some more functions
jankolkmeier Mar 17, 2013
0a41e18
Extended examples
jankolkmeier Mar 17, 2013
b3e1e1f
formatting
jankolkmeier Mar 17, 2013
9af5b30
v0.3.2
jankolkmeier Mar 17, 2013
60275f7
fix OOB error for send, and added Buffer send
bryanpaluch Apr 5, 2013
b9079b2
Merge pull request #7 from bryanpaluch/master
jankolkmeier Apr 10, 2013
69c84bc
new npm
jankolkmeier Apr 21, 2013
24b9221
Merge remote-tracking branch 'upstream/master'
stormboy May 13, 2013
ffacc4f
Use serialport 1.1 and handle Explicit RX.
stormboy May 13, 2013
f96ec13
Allow for extension for zigbee functionality
stormboy May 13, 2013
9b7e476
Only allow callback tracking for responses to requests
stormboy May 16, 2013
3ee285a
bumped node engine version number to 0.10.x
May 26, 2013
91123b6
pixel data parsing bug. used to be ascii (and thus 7 bit). this dropp…
May 27, 2013
a795203
pixel data parsing bug. used to be ascii (and thus 7 bit). this dropp…
May 27, 2013
7bcc200
Update package.json
freakent May 31, 2013
c339d51
Update package.json
freakent Jul 10, 2013
a941777
New conversion from hex string to byte array, plus better description…
freakent Jul 23, 2013
1f957ba
declare k in for loop
stormboy Jul 25, 2013
19eca43
fixed misnamed var. res => packet
stormboy Jul 25, 2013
2f82fad
Allow parallel throughput of messages so that a message can be sent
stormboy Jul 25, 2013
795bc8a
Max parallel messages is now configurable
stormboy Jul 25, 2013
9f2ffa7
Allow incoming explicit messages to be received.
stormboy Aug 4, 2013
798908d
updated version
jankolkmeier Aug 25, 2013
99bf578
fixed readme example
jankolkmeier Aug 25, 2013
909bda0
set remote16 to "unknown" addr if not passed on manual create
jankolkmeier Aug 28, 2013
b63d3be
updated npm version
jankolkmeier Aug 28, 2013
d279939
added note to readme
jankolkmeier Sep 6, 2013
85b1165
Merge remote-tracking branch 'upstream/master'
freakent Sep 25, 2013
1c52597
Merge pull request #13 from freakent/master
jankolkmeier Sep 25, 2013
a57e8fa
Bugfix for xbee.broadcast
Igorshp Jan 9, 2014
bfbd883
Merge pull request #17 from Igorshp/master
jankolkmeier Jan 9, 2014
87033c0
added packet to io event
Igorshp Feb 26, 2014
24dff19
Merge pull request #18 from Igorshp/io_tweak
jankolkmeier Feb 26, 2014
fa00e97
npm update
jankolkmeier Feb 28, 2014
80ab9a0
Bug fix for an issue where the parser tries to start a new packet if …
thisisbrians Mar 13, 2014
db2af03
Merge pull request #19 from Bractlet/escaped-checksum-bug
jankolkmeier Mar 14, 2014
8894055
Merge remote-tracking branch 'upstream/master'
stormboy May 22, 2014
1b6ff34
use addNode(), like other cases, instead of _createNode
stormboy May 23, 2014
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules
*.swp
.npmignore
npm-debug.log
/.project
1 change: 0 additions & 1 deletion .npmignore

This file was deleted.

93 changes: 0 additions & 93 deletions README.markdown

This file was deleted.

70 changes: 70 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
## NOTE!
Check out [xbee-api](http://github.com/jouz/xbee-api). It separates out the API component and is aimed at being a more solid and tested module for working with XBees. New higher level modules based on [xbee-api](http://github.com/jouz/xbee-api) are in development here: [xbee-stream](http://github.com/jouz/xbee-stream) and here [xbee-nodes](http://github.com/jouz/xbee-nodes).

# SVD-XBEE

[Digi's xbee modules](http://www.digi.com/xbee) are good for quickly building low power wireless networks. They can be used to send/receive text data from serial ports of different devices. XBees can also be used alone for their on board digital and analog I/O capabilities.

**svd-xbee** is a high level, actively maintained fork of Richard Morrison's [node-xbee](http://github.com/mozz100/node-xbee). It talks the ZigBee API with XBee radio modules over serial connections and provides high level abstractions of the XBee's functionality.

### Nutshell
```javascript
var XBee = require('svd-xbee');

var xbee = new XBee({
port: 'COM3', // replace with yours
baudrate: 9600 // 9600 is default
}).init();

var robot = xbee.addNode([0x00,0x13,0xa2,0x00,0x40,0x61,0xaa,0xe2]);

var robot.on("data", function(data) {
console.log("robot>", data);
if (data == "ping") robot.send("pong");
});
```
### Features

- Asynchronous architecture
- Event-based Node Discovery
- Local and remote AT commands
- High-level abstraction of common tasks
- Parse API frames into meaningful objects
- Regular text data
- Analog & Digital I/O Samples
- Modem Status
- Transmission Reports

### Installation

npm install svd-xbee

### Documentation

For documentation, see the [Documentation](https://github.com/jouz/svd-xbee/wiki/Documentation).

### EXAMPLES

See the [examples folder](https://github.com/jouz/svd-xbee/tree/master/examples) in the repository for more examples.

## SUPPORTED XBEE MODELS

Both ZNet 2.5 and ZIGBEE modules should be supported. Since ZIGBEE offers more features and is more robust, you might be interested in upgrading your modules from ZNet 2.5 to ZIGBEE: [upgradingfromznettozb.pdf](ftp://ftp1.digi.com/support/documentation/upgradingfromznettozb.pdf).
Development is done using Series 2 XBee modules with XB24-ZB (ZIGBEE) firmware. In specific, this document is used as reference: [90000976_M.pdf](http://ftp1.digi.com/support/documentation/90000976_M.pdf "http://ftp1.digi.com/support/documentation/90000976_M.pdf").


## MODULE CONFIGURATION

The module communicating with svd-xbee must be set to use an API function set with escape characters enabled (ATAP = 2). Other nodes in the network can be configured however you find it convenient. See [Module Configuration](https://github.com/jouz/svd-xbee/wiki/Module-Configurationi) for more details.


## ACKNOWLEDGMENTS

* voodootikigod's [serialport module](https://github.com/voodootikigod/node-serialport) (in fact you're going to need this to use this package)
* "[Building Wireless Sensor Networks](http://shop.oreilly.com/product/9780596807740.do)" by Rob Faludi


## LICENSE


> This work by <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Jan Kolkmeier</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-ShareAlike 2.0 UK: England &amp; Wales License</a>.<br /><a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/uk/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/2.0/uk/88x31.png" /></a><br />Based on a work at <a xmlns:dct="http://purl.org/dc/terms/" href="https://github.com/mozz100/node-xbee" rel="dct:source">github.com</a>.
45 changes: 0 additions & 45 deletions example.js

This file was deleted.

131 changes: 131 additions & 0 deletions examples/full/full.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
var util = require('util');
var XBee = require('../../index.js');

// This parser buffers data, emits chucks
// seperated by space chars (" ")
var Parser = require('./parser.js');

var xbee = new XBee.XBee({
port: 'COM3', // replace with yours
baudrate: 9600 // 9600 is default
})

// Open COM port, read some parameters from the XBee at once.
xbee.init();

// Add Node by hand...
var myNode = xbee.addNode([0x00,0x13,0xa2,0x00,0x40,0x61,0x2f,0xe4], Parser);

// Triggered whenever this node
// - responds to discovery request
// - sends identification frame on network association
// (not necessarily on power up, as node might
// already be associated)
myNode.on("discovered", function(node) {
console.log("Discovered myNode");

// We configure pin D4 to sample digital data.
myNode.AT("D4", [ 0x03 ], function(err, res, x) {
if (err) return console.log("AT Error D4:", err);

// This configures pin 2 to sample analog data.
myNode.AT("D2", [ 0x02 ], function(err, res, x) {
if (err) return console.log("AT Error D2:", err);

// We can put requests in the callback, but generally
// but generally parallel requests are fine!
myNode.AT("IS", function(err, res) { // Manually query IO Sample
if (err) return console.log("AT Error IS:", err);
console.log("Queried IO Sample: ", util.inspect(xbee.tools.parseIOSample(res)));
});
});

});
});

// Whenever myNode sends us an IO data sample...
myNode.on("io", function(io) {
console.log("I/O: ", util.inspect(io));
});

// Whenever myNode sends us text data - since we are using
// a parser, data will first be processed there before landing
// here:
myNode.on("data", function(data) {
console.log("Data: ", util.inspect(data));
if (data == "ping") myNode.send("pong");
});


// Emitted when .init() is done (COM port open, parameters read)
xbee.on("initialized", function(params) {
console.log("XBee Parameters: %s", util.inspect(params));
// Start Node discovery to find currently connected nodes.
xbee.discover();
console.log("Node discovery starded...");

// Local Request:
xbee.AT("VR", function(err, res) {
console.log("Firmware Version:", xbee.tools.bArr2HexStr(res));
});


// Remote Requests ...
// Enable auto reporting of IO Samples with a 2000ms interval set
// Note that this request will most typically fail.
// Try uncommenting the line "xbee.discover()", and this should
// work fine (if your network is configured properly).
// The reason is that remote nodes seem to become unresponsive for
// a little while during node discovery.
myNode.AT("IR", xbee.tools.dec2bArr(2000), function(err, res) {
if (err) return console.log("AT Error:", util.inspect(err));
console.log("Auto Reporting Enabled!");
});
});

xbee.on("discoveryEnd", function() {
// Discovery is over. If the XBee is an End Device/Router,
// you may want to re-issue xbee.discover() later.
// For Coordinators this should not be necessary, as
// nodes will notify coordinators once they join the PAN,
// triggering the "node" event.
console.log("...node discovery over");
});

// Triggered whenever a node is discovered that is not already
// added. / myNode will not show up here!
xbee.on("newNodeDiscovered", function(node) {
console.log("Node %s discovered", node.remote64.hex);
console.log(util.inspect(node));

node.on("data", function(data) {
console.log("%s> %s", node.remote64.hex, util.inspect(data));
node.send("pong", function(err, status) {
// Transmission successful if err is null
});
});

node.on("io", function(sample) {
console.log("%s> %s", node.remote64.hex, util.inspect(data));
});

// Here some functions you might find helpful:
node.setPinMode("DIO2", "DIGITAL_INPUT");
node.setPinMode("DIO3", "DIGITAL_INPUT");
node.setPinMode("DIO0", "DIGITAL_OUTPUT_HIGH");

node.getPinMode("DIO0", function(err, res) {
console.log("Pin DIO0 has mode: ", res);
});

// XBee will send a sample whenever one of these pins measure a change
node.setChangeDetection([ "DIO2", "DIO3" ]);

// Manually retrieve a sample
node.getSample(function(err, res) {
console.log("Res2:", util.inspect(res));
});

// ...or instruct xbee to sample data every 5 seconds:
node.setSampleInterval(2000);
});
18 changes: 18 additions & 0 deletions examples/full/parser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
exports = module.exports = function (device) {
var delimiter = " ";
function DataParser(device) {
this.device = device;
this.buffer = "";
}
DataParser.prototype.parse = function(data) {
this.buffer += data;
var split = this.buffer.indexOf(delimiter);
while (split > -1) {
this.device.emit('data', this.buffer.slice(0,split));
this.buffer = this.buffer.slice(split+delimiter.length);
split = this.buffer.indexOf(delimiter);
}
}

return new DataParser(device);
}
27 changes: 27 additions & 0 deletions examples/nutshell/nutshell.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
var util = require('util');
var XBee = require('../../index.js').XBee;

var xbee = new XBee({
port: 'COM5', // replace with yours
baudrate: 9600 // 9600 is default
}).init();

xbee.on("initialized", function(params) {
console.log("XBee Parameters: %s", util.inspect(params));

xbee.discover();
console.log("Node discovery starded...");
});

xbee.on("discoveryEnd", function() {
console.log("...node discovery over");
});


// Add Set to your remote node
var robot = xbee.addNode([0x00,0x13,0xa2,0x00,0x40,0x61,0x2f,0xe4]);

robot.on("data", function(data) {
console.log("robot>", data);
if (data == "ping") robot.send("pong");
});
Loading