                                # and reopen the stream to ensure it is working.
                                # Set null to disable.
     batchCommandInterval: 2000 # How long to wait between repeated commands (ms)
-    proxyDevices:         {}   # Set "deviceId1": "deviceId2" to redirect all
-                               # status messages from the key device to the
-                               # value device. Also excludes the key device from
-                               # bulk status checks. Useful for controllers.
+    devices:              {}   # Provide options for individual devices by ID.
+                               # - forwardTo: redirects all status messages from
+                               #   the device to a specified device. Useful for
+                               #   controllers. Also excludes the forwarded
+                               #   device from bulk status checks.
+                               # - class: Specify the device class for an IOLinc
+                               #   device, which determines its behavior and the
+                               #   aspects it exposes.
 
   initialize: ->
     super
     @setValid false
     @hasDiscovered = false
+    @_forward = {}
 
   start: ->
     @_api = new InsteonAPI(key: @get('apiKey'))


  requestAllDevicesStatus: ->
    # TODO don't request status on devices that won't reply (e.g. leak sensors)
    proxies = _.keys(@get('proxyDevices'))
    devices = @children.reject (child) =>
      _.contains(proxies, child.id) or !child.statusQueryable
    interval = @get('batchCommandInterval')
    @log 'debug', "Requesting status of #{devices.length} devices " +
      "over the course of #{(interval * devices.length) / 1000} seconds"

    @_resetStreamCycle()
    @log 'verbose', "Stream has been inactive; cycling it"
    _.values(@_api.monitoring)[0].stream.close()
    @_api.monitor @_house

  _deviceConfig: (deviceId) ->
    @get('devices')[deviceId] or {}