docs: def observe(self, seconds=None):
          """ Begins the observer loop (synchronously).
  
          Loops for ``seconds`` or until this region's stopObserver() method is called.
          If ``seconds`` is None, the observer loop cycles until stopped. If this
          method is called while the observer loop is already running, it returns False.
  
          Returns True if the observer could be started, False otherwise.
          """
          # Check if observer is already running
          if self._observer.isRunning:
              return False # Could not start
  
          # Set timeout
          if seconds is not None:
              timeout = time.time() + seconds
          else:
              timeout = None
  
          # Start observe loop
          while (not self._observer.isStopped) and (seconds is None or time.time() < timeout):
              # Check registered events
              self._observer.check_events()
              # Sleep for scan rate
              time.sleep(1/self.getObserveScanRate())
          return True