def run(self, blocking: bool=True):
        """
        Run the internal control loop.
        Args:
            blocking (bool): Defaults to `True`. If set to `False`, will
                intialize a thread to run the control loop.
        Raises:
            RuntimeError: If called and not using the internal control loop
                via `self._run_control_loop`, set in the intializer of the
                class
        """
        if not self._run_control_loop:
            err = ("`run` called, but not using the internal control loop. Use"
                   " `start` instead")

            raise RuntimeError(err)

        self._setup()
        self._heartbeat_reciever.start()

        if blocking:
            return self.loop.start()
        else:
            self._run_thread = _threading.Thread(target=self.loop.start,
                                                 daemon=True)

            self._thread.run()
Run the internal control loop.
        Args:
            blocking (bool): Defaults to `True`. If set to `False`, will
                intialize a thread to run the control loop.
        Raises:
            RuntimeError: If called and not using the internal control loop
                via `self._run_control_loop`, set in the intializer of the
                class