def needs_sync(self):
        """
        Check if enough time has elapsed to perform a sync().

        A call to sync() should be performed every now and then, no matter what
        has_state_changed() says. This is really just a safety thing to enforce
        consistency in case the state gets messed up.

        :rtype: boolean
        """
        if self.lastforce is None:
            self.lastforce = time.time()
        return time.time() - self.lastforce >= self.forceipchangedetection_sleep
Check if enough time has elapsed to perform a sync().

        A call to sync() should be performed every now and then, no matter what
        has_state_changed() says. This is really just a safety thing to enforce
        consistency in case the state gets messed up.

        :rtype: boolean