diff --git a/src/aare/daq/tellupdater.py b/src/aare/daq/tellupdater.py index 531159c3..7ce91a3f 100644 --- a/src/aare/daq/tellupdater.py +++ b/src/aare/daq/tellupdater.py @@ -61,6 +61,12 @@ TRACKED_MOTION_SYNC_EVENTS = { "Sample get on Puck", }, } +TRACKED_STATE_EVENTS = { + "state": { + "Ready", + "Busy" + } +} latest_tell_events = {} tell_event_history = deque(maxlen=25) @@ -186,6 +192,12 @@ def extract_tracked_tell_event(event_name, event_data): return event_name, normalized_data return None + if event_name in TRACKED_STATE_EVENTS: + allowed_values = TRACKED_STATE_EVENTS[event_name] + if normalized_data in allowed_values: + return event_name, normalized_data + return None + return None diff --git a/src/aare/devices/tell_backend.py b/src/aare/devices/tell_backend.py index 8a1670c1..a4a181de 100644 --- a/src/aare/devices/tell_backend.py +++ b/src/aare/devices/tell_backend.py @@ -70,12 +70,12 @@ class PShellTellBackend: def __init__(self, bl: MXBeamline): self._url = self._resolve_url(bl) - print(f"Connecting TELL p-shell service at {self._url} ...", end="") + logger.info(f"Connecting TELL p-shell service at {self._url} ...") hostname = urlparse(self._url).hostname try: requests.get(f"{self._url}/history/0", timeout=1.0) except requests.exceptions.RequestException as e: - print(f"...connection to {hostname} failed") + logger.error(f"...connection to {hostname} failed") raise TellCommunicationError( f"TELL connection failed ({hostname})", base_url=self._url, @@ -83,7 +83,7 @@ class PShellTellBackend: operation="GET", ) from e except requests.ReadTimeout as e: - print(f"...PShell service {hostname} is down") + logger.error(f"...PShell service {hostname} is down") raise TellCommunicationError( f"TELL connection timedout ({hostname})", base_url=self._url, @@ -92,6 +92,7 @@ class PShellTellBackend: ) from e self._pshell = PShellClient(self._url) + logger.info(f"...connected to {hostname}") @staticmethod def _resolve_url(bl: MXBeamline) -> str: diff --git a/src/aare/devices/tell_client.py b/src/aare/devices/tell_client.py index d4cdc1d7..2f8e7e2d 100755 --- a/src/aare/devices/tell_client.py +++ b/src/aare/devices/tell_client.py @@ -52,6 +52,8 @@ class TellEventValueEnum(Enum): UNMOUNT = "unmount" MOUNT = "mount" MANUAL = "manual" + READY = "Ready" + BUSY = "Busy" class TellClient: @@ -203,18 +205,18 @@ class TellClient: logger.info("waiting for mount to complete") try: if wait and segment in "ABCDEF": + logger.info("Waiting for events from TELL:") event, value = self.backend.wait_events( { "state": None, - "Motion Task": "dry", + "Motion Task": None,#"dry", "Gripper detection": None, "Motion Sync": "Robot Clear after mount", }, timeout=wait_timeout, ) logger.info(f"event: {event} occurred with value: {value}") - if event == "state" and value == 'Ready': - logger.warning('READY does not mean mount success') + if event == "state" and str(value) == '"Ready"': try: msg = self.check_command_ok( timeout=wait_timeout, msg=f"Mount {segment}{puck}-{sample}: " @@ -223,7 +225,7 @@ class TellClient: return TellEventValueEnum.SUCCESS except Exception: raise - if event == "state" and value == 'Busy': + if event == "state" and value == '"Busy"': logger.warning('got busy response form robot, waiting for mount to complete') try: msg = self.check_command_ok( @@ -238,7 +240,10 @@ class TellClient: self.check_command_ok( timeout=wait_timeout, msg=f"Mount {segment}{puck}-{sample}: " ) - return value + if value.lower() == "ready" or value.lower() == '"ready"' or value == "Ready" or str(value.lower()) == "ready" or str(value.lower()) == '"ready"': + return TellEventValueEnum.SUCCESS + else: + raise Exception(f"Unexpected event: {event} occurred with value: {value}") elif ( event == TellEventTypeEnum.GIPPER_DETECTION.value and value == TellEventValueEnum.NO_PIN_IN_GRIPPER.value @@ -306,7 +311,6 @@ class TellClient: return self._last_cmd_id def dry(self, heat_time=None, speed=None, wait_cold=None, wait=False): - #TODO add timeout variable???? self.backend.wait_state("Ready", timeout=30.0) self._last_cmd_id = self.start_cmd("dry", heat_time, speed, wait_cold) if wait: