def set(self, obj, id, payload, action='', async=False):
        """ Function set
        Set an object by id

        @param obj: object name ('hosts', 'puppetclasses'...)
        @param id: the id of the object (name or id)
        @param action: specific action of an object ('power'...)
        @param payload: the dict of the payload
        @param async: should this request be async, if true use
                        return.result() to get the response
        @return RETURN: the server response
        """
        self.url = '{}{}/{}'.format(self.base_url, obj, id)
        self.method = 'PUT'
        if action:
            self.url += '/{}'.format(action)
        self.payload = json.dumps(payload)
        if async:
            session = FuturesSession()
            return session.put(url=self.url, auth=self.auth,
                               headers=self.headers, data=self.payload,
                               cert=self.ca_cert)
        else:
            self.resp = requests.put(url=self.url, auth=self.auth,
                                     headers=self.headers, data=self.payload,
                                     cert=self.ca_cert)
            if self.__process_resp__(obj):
                return self.res
            return False