def _state(self):
        """The internal state of the object.

        The api responses are not consistent so a retry is performed on every
        call with information updating the internally saved state refreshing
        the data. The info is cached for STATE_CACHING_SECONDS.

        :return: The current state of the toons' information state.
        """
        state = {}
        required_keys = ('deviceStatusInfo',
                         'gasUsage',
                         'powerUsage',
                         'thermostatInfo',
                         'thermostatStates')
        try:
            for _ in range(self._state_retries):
                state.update(self._get_data('/client/auth/retrieveToonState'))
        except TypeError:
            self._logger.exception('Could not get answer from service.')
        message = ('Updating internal state with retrieved '
                   'state:{state}').format(state=state)
        self._logger.debug(message)
        self._state_.update(state)
        if not all([key in self._state_.keys() for key in required_keys]):
            raise IncompleteResponse(state)
        return self._state_