docs: function (CommandsHandlerModel, opt_config) {
  
  	// Configuration
  	this.config = opt_config || helper.getConfig(false);
  
  	// WebSocket Connection
  	this.webSocket = null;
  	this.heartbeatTimer = null;
  
  	// Instances of the plugins
  	this.pluginInstances = {};
  	this._initPlugins();
  
  	// Instances of the command modules
  	this.commandModules = {};
  	this._initCommandModules();
  
  	// Make an instance of the CommandsHandler
  	var ch_logger = new HandlerLogger(this);
  	var handler_helper = new HandlerHelper(this);
  	this.commandsHandler = new CommandsHandlerModel(this.config, ch_logger, handler_helper);
  
  	// Check the command arguments
  	if (process.argv.indexOf('--dev') != -1 || process.argv.indexOf('--development') != -1) {
  		this.config.isDebugMode = true;
  	}
  
  	// Check the options
  	this.isDebugMode = this.config.isDebugMode || false;
  
  	// Check the configuration
  	if (this.config.denhubServerHost == null){
  		throw new Error('A required configuration undefined: denhubServerHost');
  	} else if (this.config.deviceName == null) {
  		throw new Error('A required configuration undefined: deviceName');
  	} else if (this.config.deviceType == null) {
  		throw new Error('A required configuration undefined: deviceType');
  	}
  
  	// Interval time (millisec) for reconnecting to server
  	this.config.reconnectDelayTime = this.config.reconnectDelayTime || 5000;
  
  	// Interval time (millisec) for restarting when the fatal error occurred
  	this.config.restartDelayTime = this.config.restartDelayTime || 6000;
  
  	// Interval time (millisec) for heartbeat sending
  	this.config.heartbeatIntervalTime = this.config.heartbeatIntervalTime || 10000;
  
  }