diff --git a/python/lvmecp/actor/commands/dome.py b/python/lvmecp/actor/commands/dome.py index e24385d..3d92ccc 100644 --- a/python/lvmecp/actor/commands/dome.py +++ b/python/lvmecp/actor/commands/dome.py @@ -67,6 +67,8 @@ async def status(command: ECPCommand): """Returns the status of the dome.""" status = await command.actor.plc.dome.update() + if status is None: + return command.fail("Failed retrieving dome status.") if status & DomeStatus.MOVING: command.warning("Dome is moving!!!") diff --git a/python/lvmecp/dome.py b/python/lvmecp/dome.py index e865ac3..3880b90 100644 --- a/python/lvmecp/dome.py +++ b/python/lvmecp/dome.py @@ -36,6 +36,7 @@ async def _update_internal(self): dome_status = SimpleNamespace(**dome_registers) + assert self.flag new_status = self.flag(0) if dome_status.drive_state: @@ -85,6 +86,8 @@ async def _move(self, open: bool, force: bool = False): await self.update() + assert self.status is not None and self.flag is not None + if self.status & self.flag.UNKNOWN: raise DomeError("Dome is in unknown state.") @@ -145,6 +148,9 @@ async def stop(self): drive_enabled = await self.plc.modbus["drive_enabled"].get() status = await self.update() + if status is None or self.flag is None: + raise RuntimeError("Failed retrieving dome status.") + if not drive_enabled: return diff --git a/python/lvmecp/module.py b/python/lvmecp/module.py index 25a6121..ae40b8b 100644 --- a/python/lvmecp/module.py +++ b/python/lvmecp/module.py @@ -91,7 +91,6 @@ async def update(self, force_output: bool = False, **notifier_kwargs): try: new_status = await self._update_internal() except Exception as err: - raise log.warning(f"{self.name}: failed updating status: {err}") new_status = self.flag(self.flag.__unknown__) if self.flag else None diff --git a/python/lvmecp/safety.py b/python/lvmecp/safety.py index 8da3e9e..8491209 100644 --- a/python/lvmecp/safety.py +++ b/python/lvmecp/safety.py @@ -72,4 +72,6 @@ async def is_remote(self): return True await self.update() + assert self.status is not None and self.flag is not None + return not (self.status & self.flag.LOCAL)