-
Notifications
You must be signed in to change notification settings - Fork 3
Zigate.Driver
- communicates with the Zigate USB key using a serial port
- manages the opening/closing of the serial port
- can auto-detect the port to which the Zigate key is connected.
- has a set of commands that can be sent through the
driver.send()function - emits events for connexion/disconnexion & sending/reception of messages
const Zigate = require('node-zigate');
let driver = new Zigate.Driver({
log: // (optional ; default='nolog') ; can be 'console', ...
port: // (optional ; default='') ; can be '/dev/ttyUSBx', etc...)
commandspath // (optional ; default='node-zigate/commands') don't touch it until you know what you do
responsespath // (optional ; default='node-zigate/responses') don't touch it until you know what you dodo)
});
-
logcan be a string for predefined console logs like (nolog,console,trace,debug,info,warn,error)cf. Logs for more information.
-
portis the zigate USB port automatically opened right after the instanciation ; it is advised to not provide any port during instanciation, and make subsequent call todriver.open(port). -
commandspathis the folder in which all definitions of commands are stored ; by default it's the subfolder src/driver/commands of the module ; no need to touch it until you want to do specific stuff. -
responsespathis the folder in which all definitions of commands are stored ; by default it's the subfolder src/driver/responses of the module ; no need to touch it until you want to do specific stuff.
The static function Driver.guessZigatePorts() returns a promis with a list of the ports of Zigate keys connected to the system.
const Zigate = require('node-zigate');
Zigate.Driver.guessZigatePorts()
.then( (ports) => {
/* do something here with ports & their 'comName' attribute */
});
returns something like:
[
{
"manufacturer": "Prolific Technology Inc.",
"pnpId": "usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0",
"vendorId": "067b",
"productId": "2303",
"comName": "/dev/ttyUSB0"
}
]
open(port, callback)
-
port is optional ; if no port provided (or empty string or
'auto'), the driver will make an attempt to auto-detect the zigate port. The auto-detection will choose the first USB key connected to the computed, which has the vendorId & ProductID of the Zigate key (vid=0x067b; pid=0x2303). -
callback(error, driver) is optional ; if present, it will be called after connexion succeeded (err === undefined) or failed
driver.open(/* ... */) also returns a Promise, fullfilled if the connexion succeeded.
const Zigate = require('node-zigate');
let driver = new Zigate.Driver({ log:'console' });
driver.open()
.then((driver) => {
console.log("well connected to zigate key.");
})
.catch((err) => {
console.error("error while connecting to zigate key: "+err);
});
driver.close(callback)
-
callback(err)is optional ; in all casesn the methodclose()return a Promise, fullfilled if the connexion (was well opened) and has been successfully closed ; reject otherwise.
driver.send(command_name, command_parameters) sends a command to the zigate key
-
command_name is a string (
reset,start_network,devices_list, etc.). Full list of available commands can be gathered from the filename of the js files present in the subfolder 'src/driver/commands' (without the.jsextension). -
command_parameters is an object containing parameters depending on the command itself. List of mandatory/optional parameters can be gathered from the files in in the subfolder 'src/driver/commands' (TODO: provide a complete list of commands & params)
-
the function returns a promise which will be fullfilled with the response to that command. examples:
driver.send('channel_mask', {mask: 11}).then(response => { /* ... */);
driver.send('channel_mask', {mask: 11}).then(response => { /* ... */);
driver.send('devices_list').then(response => { /* ... */);
driver.send('permit_join', {duration: duration}).then(response => { /* ... */);
driver.send('descriptor_simple', {address: myDeviceAddress, endpoint:myDeviceEndpoint} )
// etc.
- When a response to a command is expected, the best way to retrieve it is to use the promise returned by
driver.send(...). Example:
driver.send('version')
.then((response) => {
console.log("version.major = " + response.major);
console.log("version.installer = " + response.installer);
});
- To look for notifications initiated by the Zigate key without originating command, you should register to one of the following events emitted by the driver:
To listen to all responses/notifications received:
driver.on('response', (response) => {
console.log('response received: '+response);
});
To listen to a specific type of response (example: 'version'):
driver.on('response_version', (response) => {
console.log('response (version) received: '+response);
});
The Full list of available responses types can be gathered from the filename of the js files present in the subfolder 'src/driver/responses' (without the .js extension).
A response is an object which attributes depend on the response type itself. List of attributes can be gathered from the files in in the subfolder 'src/driver/responses' (TODO: provide a complete list of responses & attributes )
A Zigate.Driver instance is also an EventEmitter which throws the following events:
| name | parameters | description |
|---|---|---|
| open | () | successfully connected to Zigate device |
| close | (port) | successfully disconnected from Zigate device |
| response | (response) | a response/notification has been received |
| response_xxx | (response) | a response/notification of type xxx has been received |
| command_started | (command, status) | a command has been sent (using driver.send()) status 'success' received |
| command_fullfilled | (command) | a command has been sent and status 'success' received |
| command_failed | (command, status) | a command has been sent and status 'failed' received |
| status_yyy | (status) | a status related to command of type yyy has been received |
| raw_out | (rawData) | (for debugging) raw data has been sent through serial port to zigate |
| raw_in | (rawData) | (for debugging) raw data has received through serial port from zigate |
| error | (err) | something bad happened (open error, corrupted frame received, unknown response received, underlying serial port error, etc. |