Source code for device.magnets_ps_switch

import serial
import time

from . import base


[docs] class PowerSupply_Magnets_SwitchOnOff(base.HardwareBase): """Mains power switch for 2 power suplies (magnets experiment). Communication: - Serial interface to Arduino, send 's' to toggle the switch. """ def __init__(self, bus, **kwargs): super().__init__(**kwargs) self._busname = bus self._ardu = None self._last = { "switched_on": False } # ==== Inherited abstract methods ==== def _connect(self): def reset(ardu): ardu.dtr = False time.sleep(0.1) ardu.reset_input_buffer() ardu.dtr = True try: self._ardu = serial.Serial(self._busname, 9600) except serial.SerialException: self.log.debug("Failed to open serial '%s'", self._busname) return False reset(self._ardu) self._ardu.timeout = 5 # TODO Not even sure if it sends any hello message self._ardu.readline().strip().decode("ascii") self._last["switched_on"] = False return True def _disconnect(self): self.switch_off() self._ardu.close() self._ardu = None return def _is_ready(self): return True def _safestate(self): self.switch_off() # ==== Commands ====
[docs] def is_on(self): return self._last["switched_on"]
[docs] @base.base_command def switch_on(self): if not self._last["switched_on"]: self._ardu.write(b"s") self._last["switched_on"] = True
[docs] @base.base_command def switch_off(self): if self._last["switched_on"]: self._ardu.write(b"s") self._last["switched_on"] = False