   _handleCommandReceived: (cmd) ->
     @log 'verbose', "Received Insteon command for device #{cmd.device_insteon_id}"
     node = @_nodesByHexId[cmd.device_insteon_id]
+    proxyFor = @get('proxyDevices')[node.id]
+    if proxyFor?
+      node = @children.get(proxyFor)
+      if node?
+        @log 'verbose', "...proxied to #{node.id}"
+      else
+        @log 'warn', "Proxy target device #{proxyFor} does not exist!"
     if node?
       @log 'verbose', "Dispatching #{cmd.status} command to node #{node.id}"
       switch cmd.status

        @setValid true
      else
        @discoverDevices()
    @_api.on 'error', =>
      @log 'warn', 'An Insteon error occurred'
    @_api.on 'command', (cmd) => @_handleCommandReceived(cmd)

  discoverDevices: ->

      if @get('initialStatusCheck') then @requestAllDevicesStatus()

  requestAllDevicesStatus: ->
    ids = _.without(_.keys(@_nodesById), _.keys(@get('proxyDevices'))...)
    interval = @get('batchCommandInterval')
    @log 'debug', "Requesting status of #{ids.length} devices " +
      "over the course of #{(interval * ids.length) / 1000} seconds"
    for deviceId, i in ids
      setTimeout _.bind(@requestDeviceStatus, this, deviceId), interval * i
