index.js
function OZWManager() {
  this.ozw = new OZW({
          Logging: true,            // enable logging to OZW_Log.txt
          ConsoleOutput: false,     // copy logging to the console
  });
  this.ozw.on('driver ready', this.onDriverReady.bind(this));
  this.ozw.on('driver failed', this.onDriverFailed.bind(this));
  this.ozw.on('node added', this.onNodeAdded.bind(this));
  this.ozw.on('node ready', this.onNodeReady.bind(this));
  this.ozw.on('node naming', this.onNodeNaming.bind(this));
  this.ozw.on('node available', this.onNodeAvailable.bind(this));
  this.ozw.on('value added', this.onValueAdded.bind(this));
  this.ozw.on('value changed', this.onValueChanged.bind(this));
  this.ozw.on('value removed', this.onValueRemoved.bind(this));
  this.ozw.on('scan complete', this.onScanComplete.bind(this));
  this.ozw.on('notification', this.onNotification.bind(this));

  this.deviceList = {};
  this.discoverState = 'stopped';
}
function OZWManager() {
  this.ozw = new OZW({
          Logging: true,            // enable logging to OZW_Log.txt
          ConsoleOutput: false,     // copy logging to the console
  });
  this.ozw.on('driver ready', this.onDriverReady.bind(this));
  this.ozw.on('driver failed', this.onDriverFailed.bind(this));
  this.ozw.on('node added', this.onNodeAdded.bind(this));
  this.ozw.on('node ready', this.onNodeReady.bind(this));
  this.ozw.on('node naming', this.onNodeNaming.bind(this));
  this.ozw.on('node available', this.onNodeAvailable.bind(this));
  this.ozw.on('value added', this.onValueAdded.bind(this));
  this.ozw.on('value changed', this.onValueChanged.bind(this));
  this.ozw.on('value removed', this.onValueRemoved.bind(this));
  this.ozw.on('scan complete', this.onScanComplete.bind(this));
  this.ozw.on('notification', this.onNotification.bind(this));

  this.deviceList = {};
  this.discoverState = 'stopped';
}
TODO: support OZW security API