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