def _send_rpc(self, client, uuid, address, rpc, payload, timeout, key):
        """Send an RPC to a connected device

        Args:
            client (string): The client that sent the rpc request
            uuid (int): The id of the device we're opening the interface on
            address (int): The address of the tile that we want to send the RPC to
            rpc (int): The id of the rpc that we want to send.
            payload (bytearray): The payload of arguments that we want to send
            timeout (float): The number of seconds to wait for the response
            key (string): The key to authenticate the caller
        """

        conn_id = self._validate_connection('send_rpc', uuid, key)
        if conn_id is None:
            return

        conn_data = self._connections[uuid]
        conn_data['last_touch'] = monotonic()

        slug = self._build_device_slug(uuid)

        try:
            resp = yield self._manager.send_rpc(conn_id, address, rpc >> 8, rpc & 0xFF, bytes(payload), timeout)
        except Exception as exc:
            self._logger.error("Error in manager send rpc: %s" % str(exc))
            resp = {'success': False, 'reason': "Internal error: %s" % str(exc)}

        payload = {'client': client, 'type': 'response', 'operation': 'rpc'}
        payload['success'] = resp['success']

        if resp['success'] is False:
            payload['failure_reason'] = resp['reason']
        else:
            payload['status'] = resp['status']
            payload['payload'] = binascii.hexlify(resp['payload'])

        self._publish_response(slug, payload)
Send an RPC to a connected device

        Args:
            client (string): The client that sent the rpc request
            uuid (int): The id of the device we're opening the interface on
            address (int): The address of the tile that we want to send the RPC to
            rpc (int): The id of the rpc that we want to send.
            payload (bytearray): The payload of arguments that we want to send
            timeout (float): The number of seconds to wait for the response
            key (string): The key to authenticate the caller