diff --git a/ohmpi/hardware_components/mb_2024_0_2_bkp.py b/ohmpi/hardware_components/mb_2024_0_2_bkp.py
deleted file mode 100644
index 9b750376a87a62eceff387e61321809a5999bef6..0000000000000000000000000000000000000000
--- a/ohmpi/hardware_components/mb_2024_0_2_bkp.py
+++ /dev/null
@@ -1,354 +0,0 @@
-import datetime
-import importlib
-from ohmpi.config import HARDWARE_CONFIG  # TODO: Remove references at config here -> move it in ohmpi_hardware as done for mux_2024
-import adafruit_ads1x15.ads1115 as ads  # noqa
-from adafruit_ads1x15.analog_in import AnalogIn  # noqa
-from adafruit_ads1x15.ads1x15 import Mode  # noqa
-from adafruit_mcp230xx.mcp23008 import MCP23008  # noqa
-from digitalio import Direction  # noqa
-import minimalmodbus  # noqa
-from busio import I2C  # noqa
-import time
-import numpy as np
-import os
-from ohmpi.hardware_components import TxAbstract, RxAbstract
-from ohmpi.utils import enforce_specs
-# ctl_name = HARDWARE_CONFIG['ctl'].pop('board_name', 'raspberry_pi')
-# ctl_connection = HARDWARE_CONFIG['ctl'].pop('connection', 'i2c')
-# ctl_module = importlib.import_module(f'ohmpi.hardware_components.{ctl_name}')
-#
-# TX_CONFIG = HARDWARE_CONFIG['tx']
-# RX_CONFIG = HARDWARE_CONFIG['rx']
-
-# hardware characteristics and limitations
-# voltages are given in mV, currents in mA, sampling rates in Hz and data_rate in S/s
-SPECS = {'rx': {'sampling_rate': {'min': 2., 'default': 10., 'max': 100.},
-                'data_rate': {'default': 860.},
-                'bias':  {'min': -5000., 'default': 0., 'max': 5000.},
-                'coef_p2': {'default': 2.50},
-                'voltage_min': {'default': 10.0},
-                },
-         'tx': {'adc_voltage_min': {'default': 10.},  # Minimum voltage value used in vmin strategy
-                'adc_voltage_max': {'default': 4500.},  # Maximum voltage on ads1115 used to measure current
-                'voltage_max': {'min': 0., 'default': 12., 'max': 12.},  # Maximum input voltage
-                'data_rate': {'default': 860.},
-                'compatible_power_sources': {'default': 'pwr_batt', 'others' : ['dps5005']},
-                'r_shunt':  {'min': 0., 'default': 2. },
-                'activation_delay': {'default': 0.005},  # Max turn on time of 211EH relays = 5ms
-                'release_delay': {'default': 0.001},  # Max turn off time of 211EH relays = 1ms
-                }}
-
-# TODO: move low_battery spec in pwr
-#
-# # hardware characteristics and limitations
-# # *** RX ***
-# # ADC for voltage
-# voltage_adc_voltage_min = 10.  # mV
-# voltage_adc_voltage_max = 4500.  # mV
-# sampling_rate = 20.  # Hz
-# data_rate = 860.  # S/s?
-# rx_mcp_board_address = 0x27
-# RX_CONFIG['voltage_min'] = np.min([voltage_adc_voltage_min, RX_CONFIG.pop('voltage_min', np.inf)])  # mV
-# RX_CONFIG['voltage_max'] = np.min([voltage_adc_voltage_max, RX_CONFIG.pop('voltage_max', np.inf)])  # mV
-# RX_CONFIG['sampling_rate'] = RX_CONFIG.pop('sampling_rate', sampling_rate)
-# RX_CONFIG['data_rate'] = RX_CONFIG.pop('data_rate', data_rate)
-# # RX_CONFIG['coef_p2'] = RX_CONFIG.pop('coef_p2', 2.5)
-# RX_CONFIG['latency'] = RX_CONFIG.pop('latency', 0.01)
-# RX_CONFIG['bias'] = RX_CONFIG.pop('bias', 0.)
-# RX_CONFIG['mcp_board_address'] = TX_CONFIG.pop('mcp_board_address', tx_mcp_board_address)
-#
-#
-# # *** TX ***
-# # ADC for current
-# current_adc_voltage_min = 10.  # mV
-# current_adc_voltage_max = 4500.  # mV
-# low_battery = 12.  # V (conventional value as it is not measured on this board)
-# tx_mcp_board_address = 0x21  #
-# # pwr_voltage_max = 12.  # V
-# # pwr_default_voltage = 12.  # V
-# # pwr_switch_on_warmup = 0.  # seconds
-#
-# TX_CONFIG['current_min'] = np.min([current_adc_voltage_min / (TX_CONFIG['r_shunt'] * 50),
-#                                    TX_CONFIG.pop('current_min', np.inf)])  # mA
-# TX_CONFIG['current_max'] = np.min([current_adc_voltage_max / (TX_CONFIG['r_shunt'] * 50),
-#                                    TX_CONFIG.pop('current_max', np.inf)])  # mA
-# # TX_CONFIG['voltage_max'] = np.min([pwr_voltage_max, TX_CONFIG.pop('voltage_max', np.inf)])  # V
-# TX_CONFIG['voltage_max'] = TX_CONFIG.pop('voltage_max', np.inf)  # V
-# TX_CONFIG['voltage_min'] = -TX_CONFIG['voltage_max']  # V
-# TX_CONFIG['default_voltage'] = np.min([TX_CONFIG.pop('default_voltage', np.inf), TX_CONFIG['voltage_max']])  # V
-# # TX_CONFIG['pwr_switch_on_warm_up'] = TX_CONFIG.pop('pwr_switch_on_warmup', pwr_switch_on_warmup)
-# TX_CONFIG['mcp_board_address'] = TX_CONFIG.pop('mcp_board_address', tx_mcp_board_address)
-# TX_CONFIG['low_battery'] = TX_CONFIG.pop('low_battery', low_battery)
-# TX_CONFIG['latency'] = TX_CONFIG.pop('latency', 0.01)
-# TX_CONFIG['bias'] = TX_CONFIG.pop('bias', 0.)
-
-
-def _gain_auto(channel):
-    """Automatically sets the gain on a channel
-
-    Parameters
-    ----------
-    channel : ads.ADS1x15
-        Instance of ADS where voltage is measured.
-
-    Returns
-    -------
-    gain : float
-        Gain to be applied on ADS1115.
-    """
-
-    gain = 2 / 3
-    if (abs(channel.voltage) < 2.048) and (abs(channel.voltage) >= 1.024):
-        gain = 2
-    elif (abs(channel.voltage) < 1.024) and (abs(channel.voltage) >= 0.512):
-        gain = 4
-    elif (abs(channel.voltage) < 0.512) and (abs(channel.voltage) >= 0.256):
-        gain = 8
-    elif abs(channel.voltage) < 0.256:
-        gain = 16
-    return gain
-
-
-class Tx(TxAbstract):
-    def __init__(self, **kwargs):
-        for key in SPECS['tx'].keys():
-            kwargs = enforce_specs(kwargs, SPECS['tx'], key)
-        kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')})
-        super().__init__(**kwargs)
-        assert isinstance(self.connection, I2C)
-        kwargs.update({'pwr': kwargs.pop('pwr', SPECS['tx']['compatible_power_sources']['default'])})
-        if (kwargs['pwr'] != SPECS['tx']['compatible_power_sources']['default']
-                and kwargs['pwr'] not in SPECS['tx']['compatible_power_sources']['other']):
-            self.exec_logger.warning(f'Incompatible power source specified check config')
-            assert kwargs['pwr'] in SPECS['tx']
-        # self.pwr = None  # TODO: set a list of compatible power system with the tx
-        self.exec_logger.event(f'{self.model}\ttx_init\tbegin\t{datetime.datetime.utcnow()}')
-        # self.voltage_max = kwargs['voltage_max']  # TODO: check if used
-        self._activation_delay = kwargs['activation_delay']
-        self._release_delay = kwargs['release_delay']
-        self.voltage_adjustable = False
-        self.current_adjustable = False
-
-        # I2C connexion to MCP23008, for current injection
-        self.mcp_board = MCP23008(self.connection, address=0x21)
-        # ADS1115 for current measurement (AB)
-        self._ads_current_address = 0x48
-        self._ads_current_data_rate = kwargs['data_rate']
-        self._ads_current = ads.ADS1115(self.connection, gain=self.adc_gain, data_rate=self._ads_current_data_rate,
-                                        address=self._ads_current_address)
-        self._ads_current.mode = Mode.CONTINUOUS
-        self.r_shunt = kwargs['r_shunt']
-        self.adc_voltage_min = kwargs['adc_voltage_min']
-        self.adc_voltage_max = kwargs['adc_voltage_max']
-
-        # Relays for pulse polarity
-        self.pin0 = self.mcp_board.get_pin(0)
-        self.pin0.direction = Direction.OUTPUT
-        self.pin1 = self.mcp_board.get_pin(1)
-        self.pin1.direction = Direction.OUTPUT
-        self.polarity = 0
-        self.gain = 2 / 3
-
-        # Initialize LEDs
-        self.pin4 = self.mcp_board.get_pin(4)  # Ohmpi_run
-        self.pin4.direction = Direction.OUTPUT
-        self.pin4.value = True
-
-        self._latency = kwargs.pop('latency', TX_CONFIG['latency'])
-        self._bias = kwargs.pop('bias', TX_CONFIG['bias'])
-        self.exec_logger.event(f'{self.model}\ttx_init\tend\t{datetime.datetime.utcnow()}')
-
-    @property
-    def gain(self):
-        return self._adc_gain
-
-    @gain.setter
-    def gain(self, value):
-        assert value in [2/3, 2, 4, 8, 16]
-        self._adc_gain = value
-        self._ads_current = ads.ADS1115(self.connection, gain=self.adc_gain,
-                                        data_rate=SPECS['tx']['data_rate']['default'],
-                                        address=self._ads_current_address)
-        self._ads_current.mode = Mode.CONTINUOUS
-        self.exec_logger.debug(f'Setting TX ADC gain to {value}')
-
-    def _adc_gain_auto(self):
-        self.exec_logger.event(f'{self.model}\ttx_adc_auto_gain\tbegin\t{datetime.datetime.utcnow()}')
-        gain = _gain_auto(AnalogIn(self._ads_current, ads.P0))
-        self.exec_logger.debug(f'Setting TX ADC gain automatically to {gain}')
-        self.gain = gain
-        self.exec_logger.event(f'{self.model}\ttx_adc_auto_gain\tend\t{datetime.datetime.utcnow()}')
-
-    def current_pulse(self, **kwargs):
-        TxAbstract.current_pulse(self, **kwargs)
-        self.exec_logger.warning(f'Current pulse is not implemented for the {self.model} board')
-
-    @property
-    def current(self):
-        """ Gets the current IAB in Amps
-        """
-        iab = AnalogIn(self._ads_current, ads.P0).voltage * 1000. / (50 * self.r_shunt)  # measure current
-        self.exec_logger.debug(f'Reading TX current:  {iab} mA')
-        return iab
-
-    @ current.setter
-    def current(self, value):
-        assert self.adc_voltage_min / (50 * self.r_shunt)  <= value <= self.adc_voltage_max / (50 * self.r_shunt)
-        self.exec_logger.warning(f'Current pulse is not implemented for the {self.model} board')
-
-    def gain_auto(self):
-        self._adc_gain_auto()
-
-    def inject(self, polarity=1, injection_duration=None):
-        self.polarity = polarity
-        TxAbstract.inject(self, polarity=polarity, injection_duration=injection_duration)
-
-    @property
-    def polarity(self):
-        return self._polarity
-
-    @polarity.setter
-    def polarity(self, polarity):
-        assert polarity in [-1, 0, 1]
-        self._polarity = polarity
-        if polarity == 1:
-            self.pin0.value = True
-            self.pin1.value = False
-            time.sleep(self._activation_delay)  # Max turn on time of 211EH relays = 5ms
-        elif polarity == -1:
-            self.pin0.value = False
-            self.pin1.value = True
-            time.sleep(self._activation_delay)  # Max turn on time of 211EH relays = 5ms
-        else:
-            self.pin0.value = False
-            self.pin1.value = False
-            time.sleep(self._release_delay)  # Max turn off time of 211EH relays = 1ms
-
-    def turn_off(self):
-        self.pwr.turn_off(self)
-
-    def turn_on(self):
-        self.pwr.turn_on(self)
-
-    @property
-    def tx_bat(self):
-        self.soh_logger.warning(f'Cannot get battery voltage on {self.model}')
-        self.exec_logger.debug(f'{self.model} cannot read battery voltage. Returning default battery voltage.')
-        return self.pwr.voltage
-
-    def voltage_pulse(self, voltage=None, length=None, polarity=1):
-        """ Generates a square voltage pulse
-
-        Parameters
-        ----------
-        voltage: float, optional
-            Voltage to apply in volts, tx_v_def is applied if omitted.
-        length: float, optional
-            Length of the pulse in seconds
-        polarity: 1,0,-1
-            Polarity of the pulse
-        """
-        self.exec_logger.event(f'{self.model}\ttx_voltage_pulse\tbegin\t{datetime.datetime.utcnow()}')
-        # self.exec_logger.info(f'injection_duration: {length}')  # TODO: delete me
-        if length is None:
-            length = self.injection_duration
-        if voltage is not None:
-            self.pwr.voltage = voltage
-        self.exec_logger.debug(f'Voltage pulse of {polarity*self.pwr.voltage:.3f} V for {length:.3f} s')
-        self.inject(polarity=polarity, injection_duration=length)
-        self.exec_logger.event(f'{self.model}\ttx_voltage_pulse\tend\t{datetime.datetime.utcnow()}')
-
-
-class Rx(RxAbstract):
-    def __init__(self, **kwargs):
-        for key in SPECS['rx'].keys():
-            kwargs = enforce_specs(kwargs, SPECS['rx'], key)
-        kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')})
-        super().__init__(**kwargs)
-        assert isinstance(self.connection, I2C)
-
-        self.exec_logger.event(f'{self.model}\trx_init\tbegin\t{datetime.datetime.utcnow()}')
-
-        # I2C connexion to MCP23008, for DG411
-        self.mcp_board = MCP23008(self.connection, address=0x27)
-
-        # ADS1115 for voltage measurement (MN)
-        self._ads_voltage_address = 0x49
-        self._adc_gain = 2/3
-        self._ads_voltage = ads.ADS1115(self.connection, gain=self._adc_gain,
-                                        data_rate=SPECS['rx']['data_rate']['default'],
-                                        address=self._ads_voltage_address)
-        self._ads_voltage.mode = Mode.CONTINUOUS
-        self._coef_p2 = kwargs['coef_p2']
-        # self._voltage_max = kwargs['voltage_max']
-        self._sampling_rate = kwargs['sampling_rate']
-        self._bias = kwargs['bias']
-        self.exec_logger.event(f'{self.model}\trx_init\tend\t{datetime.datetime.utcnow()}')
-
-        self.pin_DG0 = self.mcp_board.get_pin(0)
-        self.pin_DG0.direction = Direction.OUTPUT
-        self.pin_DG1 = self.mcp_board.get_pin(1)
-        self.pin_DG1.direction = Direction.OUTPUT
-        self.pin_DG2 = self.mcp_board.get_pin(2)
-        self.pin_DG2.direction = Direction.OUTPUT
-
-        self.pin_DG0.value = True  # open
-        self.pin_DG1.value = True  # open gain 1 inactive
-        self.pin_DG2.value = False  # close gain 0.5 active
-        self._voltage_gain = 0.5
-
-    @property
-    def gain(self):
-        return self._adc_gain
-
-    @gain.setter
-    def gain(self, value):
-        assert value in [2/3, 2, 4, 8, 16]
-        self._adc_gain = value
-        self._ads_voltage = ads.ADS1115(self.connection, gain=self.adc_gain,
-                                        data_rate=SPECS['rx']['data_rate']['default'],
-                                        address=self._ads_voltage_address)
-        self._ads_voltage.mode = Mode.CONTINUOUS
-        self.exec_logger.debug(f'Setting RX ADC gain to {value}')
-
-    def _adc_gain_auto(self):
-        self.exec_logger.event(f'{self.model}\trx_adc_auto_gain\tbegin\t{datetime.datetime.utcnow()}')
-        gain_0 = _gain_auto(AnalogIn(self._ads_voltage, ads.P0))
-        gain_2 = _gain_auto(AnalogIn(self._ads_voltage, ads.P2))
-        gain = np.min([gain_0, gain_2])
-        self.exec_logger.debug(f'Setting RX ADC gain automatically to {gain}')
-        self.gain = gain
-        self.exec_logger.event(f'{self.model}\trx_adc_auto_gain\tend\t{datetime.datetime.utcnow()}')
-
-    def gain_auto(self):
-        self._adc_gain_auto()
-    @property
-    def voltage(self):
-        """ Gets the voltage VMN in Volts
-        """
-        self.exec_logger.event(f'{self.model}\trx_voltage\tbegin\t{datetime.datetime.utcnow()}')
-        u = -AnalogIn(self._ads_voltage, ads.P0, ads.P1).voltage * self._coef_p2 * 1000. - self._bias  # TODO: check if it should be negated
-        self.exec_logger.event(f'{self.model}\trx_voltage\tend\t{datetime.datetime.utcnow()}')
-        return u
-
-    @property
-    def voltage_gain(self):
-        return self._voltage_gain
-
-    @voltage_gain.setter
-    def voltage_gain(self,value):
-        assert value in [0.5, 1]
-        self._voltage_gain = value
-        if self._voltage_gain == 1:
-            self.pin_DG1.value = False  # closed gain 1 active
-            self.pin_DG2.value = True  # open gain 0.5 inactive
-        elif self._voltage_gain == 0.5:
-            self.pin_DG1.value = True  # closed gain 1 active
-            self.pin_DG2.value = False  # open gain 0.5 inactive
-
-    def voltage_gain_auto(self):
-        u = ((AnalogIn(self.ads_voltage, ads.P0).voltage * 1000) - self.vmn_hardware_offset) / self.voltage_gain
-        if abs(vmn1) < 2500 and abs(vmn2) < 2500:  ###TODO change voltage gain auto logic
-            self.voltage_gain = 1
-        else:
-            self.voltage_gain = 0.5
diff --git a/ohmpi/hardware_components/pwr_batt.py b/ohmpi/hardware_components/pwr_batt.py
index 0616ba943f0f3f6d289855ef03d1bfa4f116c7e2..c392c38a93f02479f4e55c4784bc4415ae5c3ec8 100644
--- a/ohmpi/hardware_components/pwr_batt.py
+++ b/ohmpi/hardware_components/pwr_batt.py
@@ -1,5 +1,6 @@
 from ohmpi.hardware_components.abstract_hardware_components import PwrAbstract
 import numpy as np
+import datetime
 import os
 from ohmpi.utils import enforce_specs
 
@@ -20,9 +21,13 @@ class Pwr(PwrAbstract):
         else:
             subclass_init = True
         super().__init__(**kwargs)
+        if not subclass_init:
+            self.exec_logger.event(f'{self.model}\tpwr_init\tbegin\t{datetime.datetime.utcnow()}')
         self._voltage = kwargs['voltage']
         self._current = np.nan
         self._state = 'on'
+        if not subclass_init:
+            self.exec_logger.event(f'{self.model}\tpwr_init\tend\t{datetime.datetime.utcnow()}')
 
     @property
     def current(self):
@@ -44,4 +49,4 @@ class Pwr(PwrAbstract):
 
     @voltage.setter
     def voltage(self, value):
-        PwrAbstract.voltage.fset(self, value)
\ No newline at end of file
+        PwrAbstract.voltage.fset(self, value)
diff --git a/ohmpi/hardware_components/pwr_dps5005.py b/ohmpi/hardware_components/pwr_dps5005.py
index daf6a7d006caec6ca7eb85f8117e727efb7d464c..753e305a3777a21ff21928dbd13fc8eaffa8cbea 100644
--- a/ohmpi/hardware_components/pwr_dps5005.py
+++ b/ohmpi/hardware_components/pwr_dps5005.py
@@ -1,9 +1,9 @@
 from ohmpi.hardware_components.abstract_hardware_components import PwrAbstract
-import datetime
 import numpy as np
-#import minimalmodbus  # noqa
+import datetime
 import os
 from ohmpi.utils import enforce_specs
+#import minimalmodbus  # noqa
 
 # hardware characteristics and limitations
 SPECS = {'model': {'default': os.path.basename(__file__).rstrip('.py')},
@@ -26,7 +26,7 @@ class Pwr(PwrAbstract):
             subclass_init = True
         super().__init__(**kwargs)
         if not subclass_init:
-            self.exec_logger.event(f'{self.model}\tpwr_init\tstart\t{datetime.datetime.utcnow()}')
+            self.exec_logger.event(f'{self.model}\tpwr_init\tbegin\t{datetime.datetime.utcnow()}')
         # if a controller is passed in kwargs, it will be instantiated
         #if self.ctl is None:
         #    self.ctl = ctl_module.Ctl(**CTL_CONFIG)
diff --git a/ohmpi/hardware_components/raspberry_pi.py b/ohmpi/hardware_components/raspberry_pi.py
index f7c4184eb832587426d538570c19d0bea512636b..e4ba6b4ef41464f32886313a0d5db6b4a0b2cbfa 100644
--- a/ohmpi/hardware_components/raspberry_pi.py
+++ b/ohmpi/hardware_components/raspberry_pi.py
@@ -4,22 +4,32 @@ import busio  # noqa
 from adafruit_extended_bus import ExtendedI2C  # noqa
 import minimalmodbus  # noqa
 import os
-from ohmpi.utils import get_platform
+from ohmpi.utils import get_platform, enforce_specs
 from gpiozero import CPUTemperature  # noqa
 import warnings
 
+# hardware characteristics and limitations
+SPECS = {'model': {'default': os.path.basename(__file__).rstrip('.py')},
+         'voltage': {'default': 12., 'max': 50., 'min': 0.},
+         'modbus_baudrate': {'default': 9600},
+         'modbus_bitesize': {'default': 8},
+         'modbus_timeout': {'default': 1},
+         'modbus_debug': {'default': False},
+         'modbus_parity': {'default': 'N'},
+         'modbus_mode': {'default': minimalmodbus.MODE_RTU},
+         'modbus_port': {'default': '/dev/ttyUSB0'},
+         'modbus_slave_address': {'default': 1}
+         }
+
 
 class Ctl(CtlAbstract):
     def __init__(self, **kwargs):
-        kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')})
-        modbus_baudrate = kwargs.pop('modbus_baudrate', 9600)
-        modbus_bitesize = kwargs.pop('modbus_bitesize', 8)
-        modbus_timeout = kwargs.pop('modbus_timeout', 1)
-        modbus_debug = kwargs.pop('modbus_debug', False)
-        modbus_parity = kwargs.pop('modbus_parity', 'N')
-        modbus_mode = kwargs.pop('modbus_mode', minimalmodbus.MODE_RTU)
-        modbus_port = kwargs.pop('modbus_port', '/dev/ttyUSB0')
-        modbus_slave_address = kwargs.pop('modbus_slave_address', 1)
+        if 'model' not in kwargs.keys():
+            for key in SPECS['tx'].keys():
+                kwargs = enforce_specs(kwargs, SPECS['tx'], key)
+            subclass_init = False
+        else:
+            subclass_init = True
 
         super().__init__(**kwargs)
         self.interfaces = dict()
@@ -42,19 +52,20 @@ class Ctl(CtlAbstract):
 
         # modbus
         try:
-            self.interfaces['modbus'] = minimalmodbus.Instrument(port=modbus_port, slaveaddress=modbus_slave_address)
-            self.interfaces['modbus'].serial.baudrate = modbus_baudrate  # Baud rate 9600 as listed in doc
-            self.interfaces['modbus'].serial.bytesize = modbus_bitesize  #
-            self.interfaces['modbus'].serial.timeout = modbus_timeout  # greater than 0.5 for it to work
-            self.interfaces['modbus'].debug = modbus_debug  #
-            self.interfaces['modbus'].serial.parity = modbus_parity  # No parity
-            self.interfaces['modbus'].mode = modbus_mode  # RTU mode
+            self.interfaces['modbus'] = minimalmodbus.Instrument(port=kwargs['modbus_port'],
+                                                                 slaveaddress=kwargs['modbus_slave_address'])
+            self.interfaces['modbus'].serial.baudrate = kwargs['modbus_baudrate']  # Baud rate 9600 as listed in doc
+            self.interfaces['modbus'].serial.bytesize = kwargs['modbus_bitesize']  #
+            self.interfaces['modbus'].serial.timeout = kwargs['modbus_timeout']  # greater than 0.5 for it to work
+            self.interfaces['modbus'].debug = kwargs['modbus_debug']  #
+            self.interfaces['modbus'].serial.parity = kwargs['modbus_parity']  # No parity
+            self.interfaces['modbus'].mode = kwargs['modbus_mode']  # RTU mode
         except Exception as e:
             self.exec_logger.warning(f'Could not initialize Extended modbus:\n{e}')
 
         platform, on_pi = get_platform()
         assert on_pi
-        self.board_name = platform
+        self.model = platform
         self._cpu_temp_available = True
         self.max_cpu_temp = 85.  # °C
 
diff --git a/uml_diagrams/classes_uml_ohmpi.dot b/uml_diagrams/classes_uml_ohmpi.dot
index 2071ce04e004cfe6ade11f8de935531f3d3e3386..42176748e50c7c3c6eec2fa10fd8d0084f8e38b8 100644
--- a/uml_diagrams/classes_uml_ohmpi.dot
+++ b/uml_diagrams/classes_uml_ohmpi.dot
@@ -2,28 +2,28 @@ digraph "classes_uml_ohmpi" {
 charset="utf-8"
 rankdir=BT
 "0" [label="{CompressedSizedTimedRotatingFileHandler|maxBytes : int\lstream\lzip_mode : int\l|doRollover()\lfind_last_rotated_file()\lshouldRollover(record)\l}", shape="record"];
-"1" [label="{Ctl|board_name : str\linterfaces : dict\lmax_cpu_temp : float\l|}", shape="record"];
+"1" [label="{Ctl|interfaces : dict\lmax_cpu_temp : float\lmodel : str\l|}", shape="record"];
 "2" [label="{Ctl|\l|}", shape="record"];
-"3" [label="{CtlAbstract|board_name\lconnection : NoneType\lcpu_temperature\lexec_logger : NoneType, RootLogger\linterfaces : NoneType\lmax_cpu_temp\lsoh_logger : NoneType, RootLogger\l|}", shape="record"];
+"3" [label="{CtlAbstract|connection\lcpu_temperature\lexec_logger : RootLogger, NoneType\linterfaces : NoneType\lmax_cpu_temp\lmodel\lsoh_logger : RootLogger, NoneType\l|}", shape="record"];
 "4" [label="{MQTTHandler|auth : NoneType\lclient_id : str\lhostname\lkeepalive : int\lport : int\lprotocol\lqos : int\lretain : bool\ltls : NoneType\ltopic\ltransport : str\lwill : NoneType\l|emit(record)\l}", shape="record"];
-"5" [label="{Mux|addresses : dict\lio\l|reset()\lswitch_one(elec, role, state)\l}", shape="record"];
+"5" [label="{Mux|addresses : dict\l|reset()\lswitch_one(elec, role, state)\l}", shape="record"];
 "6" [label="{Mux|\l|reset()\lswitch_one()\ltest()\l}", shape="record"];
 "7" [label="{Mux|addresses : dict\l|reset()\lswitch_one(elec, role, state)\l}", shape="record"];
-"8" [label="{MuxAbstract|addresses\lbarrier\lboard_id\lboard_name\lcabling : dict\lconnection\lexec_logger : NoneType, RootLogger\lsoh_logger : NoneType, RootLogger\l|reset()\lswitch(elec_dict, state, bypass_check)\lswitch_one(elec, role, state)\ltest(elec_dict, activation_time)\l}", shape="record"];
+"8" [label="{MuxAbstract|addresses\lbarrier\lboard_id\lcabling : dict\lconnection\lexec_logger\lmodel\lsoh_logger\l|reset()\lswitch(elec_dict, state, bypass_check)\lswitch_one(elec, role, state)\ltest(elec_dict, activation_time)\l}", shape="record"];
 "9" [label="{MyServer|\l|do_POST()\l}", shape="record"];
-"10" [label="{OhmPi|cmd_id : NoneType\lcontroller : NoneType\ldata_logger : NoneType, RootLogger\lexec_logger : NoneType, RootLogger\lid : str\lmqtt : bool\lnb_samples : int\lon_pi : NoneType, bool\lsequence\lsequence : ndarray, NoneType\lsettings : dict\lsoh_logger : NoneType, RootLogger\lstatus : str\lthread : Thread, NoneType\l|append_and_save(filename, last_measurement, cmd_id)\lget_data(survey_names, cmd_id)\lget_deprecated_methods(cls)\linterrupt(cmd_id)\lload_sequence(filename, cmd_id)\lquit(cmd_id)\lremove_data(cmd_id)\lreset_mux(cmd_id)\lrestart(cmd_id)\lrs_check(tx_volt, cmd_id)\lrun_measurement(quad, nb_stack, injection_duration, autogain, strategy, tx_volt, best_tx_injtime, cmd_id)\lrun_multiple_sequences(cmd_id, sequence_delay, nb_meas)\lrun_sequence(cmd_id)\lrun_sequence_async(cmd_id)\lset_sequence(sequence, cmd_id)\lswitch_mux_off(quadrupole, cmd_id)\lswitch_mux_on(quadrupole, bypass_check, cmd_id)\ltest_mux(activation_time, mux_id, cmd_id)\lupdate_settings(settings, cmd_id)\l}", shape="record"];
-"11" [label="{OhmPiHardware|ctl\ldata_logger : NoneType, RootLogger\lexec_logger : NoneType, RootLogger\llast_dev\llast_rho\lmux_barrier : Barrier\lmux_boards : dict\lpulses\lpwr\lreadings : ndarray\lrx\lsoh_logger : NoneType, RootLogger\lsp\ltx\ltx_sync : Event\l|calibrate_rx_bias()\lreset_mux()\lswitch_mux(electrodes, roles, state)\ltest_mux(channel, activation_time)\lvab_square_wave(vab, cycle_duration, sampling_rate, cycles, polarity, duty_cycle, append)\l}", shape="record"];
-"12" [label="{Pwr|connection\lctl\lcurrent\lcurrent_max\lvoltage\lvoltage_adjustable : bool\l|battery_voltage()\lturn_off()\lturn_on()\l}", shape="record"];
-"13" [label="{Pwr|current\lvoltage\lvoltage_adjustable : bool\l|turn_off()\lturn_on()\l}", shape="record"];
-"14" [label="{PwrAbstract|board_name\lconnection\lctl\lcurrent\lexec_logger : NoneType, RootLogger\lsoh_logger : NoneType, RootLogger\lvoltage\lvoltage_adjustable\l|turn_off()\lturn_on()\l}", shape="record"];
-"15" [label="{Rx|adc_gain\ladc_gain\lconnection\lctl\lvoltage\l|adc_gain_auto()\l}", shape="record"];
+"10" [label="{OhmPi|cmd_id : NoneType\lcontroller : NoneType\ldata_logger : RootLogger, NoneType\lexec_logger : RootLogger, NoneType\lid : str\lmqtt : bool\lnb_samples : int\lon_pi : bool, NoneType\lsequence\lsequence : NoneType, ndarray\lsettings : dict\lsoh_logger : RootLogger, NoneType\lstatus : str\lthread : Thread, NoneType\l|append_and_save(filename, last_measurement, cmd_id)\lget_data(survey_names, cmd_id)\lget_deprecated_methods(cls)\linterrupt(cmd_id)\lload_sequence(filename, cmd_id)\lquit(cmd_id)\lremove_data(cmd_id)\lreset_mux(cmd_id)\lrestart(cmd_id)\lrs_check(tx_volt, cmd_id)\lrun_measurement(quad, nb_stack, injection_duration, autogain, strategy, tx_volt, best_tx_injtime, cmd_id)\lrun_multiple_sequences(cmd_id, sequence_delay, nb_meas)\lrun_sequence(cmd_id)\lrun_sequence_async(cmd_id)\lset_sequence(sequence, cmd_id)\lswitch_mux_off(quadrupole, cmd_id)\lswitch_mux_on(quadrupole, bypass_check, cmd_id)\ltest_mux(activation_time, mux_id, cmd_id)\lupdate_settings(settings, cmd_id)\l}", shape="record"];
+"11" [label="{OhmPiHardware|ctl\ldata_logger\lexec_logger\lmux_barrier : Barrier\lmux_boards : dict\lpulses\lpwr\lreadings : ndarray\lrx\lsoh_logger\lsp\ltx\ltx_sync : Event\l|calibrate_rx_bias()\llast_dev(delay)\llast_resistance(delay)\lreset_mux()\lswitch_mux(electrodes, roles, state)\ltest_mux(channel, activation_time)\lvab_square_wave(vab, cycle_duration, sampling_rate, cycles, polarity, duty_cycle, append)\l}", shape="record"];
+"12" [label="{Pwr|current\lcurrent_adjustable : bool\lvoltage\lvoltage_adjustable : bool\l|battery_voltage()\lcurrent_max(value)\lturn_off()\lturn_on()\l}", shape="record"];
+"13" [label="{Pwr|current\lvoltage\l|turn_off()\lturn_on()\l}", shape="record"];
+"14" [label="{PwrAbstract|connection\lcurrent\lcurrent_adjustable\lexec_logger : RootLogger, NoneType\lmodel\lsoh_logger : RootLogger, NoneType\lvoltage\lvoltage_adjustable\l|turn_off()\lturn_on()\l}", shape="record"];
+"15" [label="{Rx|gain\lgain : int, float\lvoltage\l|gain_auto()\l}", shape="record"];
 "16" [label="{Rx|adc_gain\ladc_gain : float\lvoltage\l|adc_gain_auto()\l}", shape="record"];
-"17" [label="{Rx|adc_gain\ladc_gain : float\lctl\lio\lmcp_board : MCP23008\lpin_DG0 : DigitalInOut\lpin_DG1 : DigitalInOut\lpin_DG2 : DigitalInOut\lvoltage\lvoltage_gain\lvoltage_gain : int, float\l|adc_gain_auto()\lvoltage_gain_auto()\l}", shape="record"];
-"18" [label="{RxAbstract|adc_gain\lboard_name\lconnection\lctl\lexec_logger : NoneType, RootLogger\lsampling_rate\lsoh_logger : NoneType, RootLogger\lvoltage\l|adc_gain_auto()\l}", shape="record"];
-"19" [label="{Tx|adc_gain\ladc_gain : int, float\lconnection\lctl\lcurrent\lcurrent_adjustable : bool\lmcp_board : MCP23008\lpin0 : DigitalInOut\lpin1 : DigitalInOut\lpin4 : DigitalInOut\lpolarity\lpolarity : int\lpwr : NoneType\ltx_bat\lvoltage_adjustable : bool\l|adc_gain_auto()\lcurrent_pulse()\linject(polarity, injection_duration)\lturn_off()\lturn_on()\lvoltage_pulse(voltage, length, polarity)\l}", shape="record"];
+"17" [label="{Rx|gain\lgain : int, float\lmcp_board : MCP23008\lpin_DG0 : DigitalInOut\lpin_DG1 : DigitalInOut\lpin_DG2 : DigitalInOut\lvoltage\l|gain_auto()\l}", shape="record"];
+"18" [label="{RxAbstract|adc_gain\lconnection\lexec_logger : RootLogger, NoneType\lmodel\lsampling_rate\lsoh_logger : RootLogger, NoneType\lvoltage\l|}", shape="record"];
+"19" [label="{Tx|adc_voltage_max\ladc_voltage_min\lcurrent\lcurrent_adjustable : bool\lgain\lgain : int, float\lmcp_board : MCP23008\lpin0 : DigitalInOut\lpin1 : DigitalInOut\lpolarity\lpolarity : int\lr_shunt\ltx_bat\lvoltage_adjustable : bool\l|current_pulse()\lgain_auto()\linject(polarity, injection_duration)\lturn_off()\lturn_on()\lvoltage_pulse(voltage, length, polarity)\l}", shape="record"];
 "20" [label="{Tx|adc_gain\ladc_gain : float\lcurrent\lpolarity : int\ltx_bat\lvoltage\l|adc_gain_auto()\lcurrent_pulse()\linject(state)\lvoltage_pulse(voltage, length, polarity)\l}", shape="record"];
-"21" [label="{Tx|adc_gain\ladc_gain : int, float\lctl\lcurrent\lcurrent_adjustable : bool\lio\lmcp_board : MCP23008\lpin0 : DigitalInOut\lpin1 : DigitalInOut\lpin4 : DigitalInOut\lpolarity\lpolarity : int\lpwr : NoneType\ltx_bat\lvoltage_adjustable : bool\l|adc_gain_auto()\lcurrent_pulse()\linject(polarity, injection_duration)\lturn_off()\lturn_on()\lvoltage_pulse(voltage, length, polarity)\l}", shape="record"];
-"22" [label="{TxAbstract|adc_gain\lboard_name\lconnection\lctl\lexec_logger : NoneType, RootLogger\linjection_duration\linjection_duration\lpolarity\lpwr\lsoh_logger : NoneType, RootLogger\ltx_bat\ltx_sync\l|adc_gain_auto()\lcurrent_pulse()\linject(polarity, injection_duration)\lvoltage_pulse(voltage, length, polarity)\l}", shape="record"];
+"21" [label="{Tx|pin4 : DigitalInOut\lpin6 : DigitalInOut\l|inject(polarity, injection_duration)\l}", shape="record"];
+"22" [label="{TxAbstract|adc_gain\lconnection\lexec_logger : RootLogger, NoneType\linjection_duration\linjection_duration\lmodel\lpolarity\lpwr\lsoh_logger : RootLogger, NoneType\ltx_bat\ltx_sync\l|current_pulse()\linject(polarity, injection_duration, switch_pwr)\lvoltage_pulse(voltage, length, polarity)\l}", shape="record"];
 "1" -> "3" [arrowhead="empty", arrowtail="none"];
 "2" -> "3" [arrowhead="empty", arrowtail="none"];
 "5" -> "8" [arrowhead="empty", arrowtail="none"];
@@ -33,9 +33,9 @@ rankdir=BT
 "13" -> "14" [arrowhead="empty", arrowtail="none"];
 "15" -> "18" [arrowhead="empty", arrowtail="none"];
 "16" -> "18" [arrowhead="empty", arrowtail="none"];
-"17" -> "18" [arrowhead="empty", arrowtail="none"];
+"17" -> "15" [arrowhead="empty", arrowtail="none"];
 "19" -> "22" [arrowhead="empty", arrowtail="none"];
 "20" -> "22" [arrowhead="empty", arrowtail="none"];
-"21" -> "22" [arrowhead="empty", arrowtail="none"];
+"21" -> "19" [arrowhead="empty", arrowtail="none"];
 "11" -> "10" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_hw", style="solid"];
 }
diff --git a/uml_diagrams/classes_uml_ohmpi.dot.png b/uml_diagrams/classes_uml_ohmpi.dot.png
index aee047e1953c5924ff5078c615f9f46bffc3a7ae..119f5bc7235296e1369cbf350cb60fa17c5324b8 100644
Binary files a/uml_diagrams/classes_uml_ohmpi.dot.png and b/uml_diagrams/classes_uml_ohmpi.dot.png differ
diff --git a/uml_diagrams/classes_uml_ohmpi.dot.svg b/uml_diagrams/classes_uml_ohmpi.dot.svg
index a9efb920da2c9b15bcb79a3d04970923e89b84f5..d352fa4ce181488811b9a734deab1cf59a773b16 100644
--- a/uml_diagrams/classes_uml_ohmpi.dot.svg
+++ b/uml_diagrams/classes_uml_ohmpi.dot.svg
@@ -4,103 +4,102 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: classes_uml_ohmpi Pages: 1 -->
-<svg width="3998pt" height="949pt"
- viewBox="0.00 0.00 3997.50 949.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 945)">
+<svg width="3415pt" height="1221pt"
+ viewBox="0.00 0.00 3414.50 1221.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1217)">
 <title>classes_uml_ohmpi</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-945 3993.5,-945 3993.5,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-1217 3410.5,-1217 3410.5,4 -4,4"/>
 <!-- 0 -->
 <g id="node1" class="node">
 <title>0</title>
-<polygon fill="none" stroke="black" points="0,-113 0,-242 335,-242 335,-113 0,-113"/>
-<text text-anchor="middle" x="167.5" y="-226.8" font-family="Times,serif" font-size="14.00">CompressedSizedTimedRotatingFileHandler</text>
-<polyline fill="none" stroke="black" points="0,-219 335,-219 "/>
-<text text-anchor="start" x="8" y="-203.8" font-family="Times,serif" font-size="14.00">maxBytes : int</text>
-<text text-anchor="start" x="8" y="-188.8" font-family="Times,serif" font-size="14.00">stream</text>
-<text text-anchor="start" x="8" y="-173.8" font-family="Times,serif" font-size="14.00">zip_mode : int</text>
-<polyline fill="none" stroke="black" points="0,-166 335,-166 "/>
-<text text-anchor="start" x="8" y="-150.8" font-family="Times,serif" font-size="14.00">doRollover()</text>
-<text text-anchor="start" x="8" y="-135.8" font-family="Times,serif" font-size="14.00">find_last_rotated_file()</text>
-<text text-anchor="start" x="8" y="-120.8" font-family="Times,serif" font-size="14.00">shouldRollover(record)</text>
+<polygon fill="none" stroke="black" points="0,-105.5 0,-234.5 335,-234.5 335,-105.5 0,-105.5"/>
+<text text-anchor="middle" x="167.5" y="-219.3" font-family="Times,serif" font-size="14.00">CompressedSizedTimedRotatingFileHandler</text>
+<polyline fill="none" stroke="black" points="0,-211.5 335,-211.5 "/>
+<text text-anchor="start" x="8" y="-196.3" font-family="Times,serif" font-size="14.00">maxBytes : int</text>
+<text text-anchor="start" x="8" y="-181.3" font-family="Times,serif" font-size="14.00">stream</text>
+<text text-anchor="start" x="8" y="-166.3" font-family="Times,serif" font-size="14.00">zip_mode : int</text>
+<polyline fill="none" stroke="black" points="0,-158.5 335,-158.5 "/>
+<text text-anchor="start" x="8" y="-143.3" font-family="Times,serif" font-size="14.00">doRollover()</text>
+<text text-anchor="start" x="8" y="-128.3" font-family="Times,serif" font-size="14.00">find_last_rotated_file()</text>
+<text text-anchor="start" x="8" y="-113.3" font-family="Times,serif" font-size="14.00">shouldRollover(record)</text>
 </g>
 <!-- 1 -->
 <g id="node2" class="node">
 <title>1</title>
-<polygon fill="none" stroke="black" points="353.5,-128 353.5,-227 521.5,-227 521.5,-128 353.5,-128"/>
-<text text-anchor="middle" x="437.5" y="-211.8" font-family="Times,serif" font-size="14.00">Ctl</text>
-<polyline fill="none" stroke="black" points="353.5,-204 521.5,-204 "/>
-<text text-anchor="start" x="361.5" y="-188.8" font-family="Times,serif" font-size="14.00">board_name : str</text>
-<text text-anchor="start" x="361.5" y="-173.8" font-family="Times,serif" font-size="14.00">interfaces : dict</text>
-<text text-anchor="start" x="361.5" y="-158.8" font-family="Times,serif" font-size="14.00">max_cpu_temp : float</text>
-<polyline fill="none" stroke="black" points="353.5,-151 521.5,-151 "/>
-<text text-anchor="middle" x="437.5" y="-135.8" font-family="Times,serif" font-size="14.00"> </text>
+<polygon fill="none" stroke="black" points="353.5,-120.5 353.5,-219.5 521.5,-219.5 521.5,-120.5 353.5,-120.5"/>
+<text text-anchor="middle" x="437.5" y="-204.3" font-family="Times,serif" font-size="14.00">Ctl</text>
+<polyline fill="none" stroke="black" points="353.5,-196.5 521.5,-196.5 "/>
+<text text-anchor="start" x="361.5" y="-181.3" font-family="Times,serif" font-size="14.00">interfaces : dict</text>
+<text text-anchor="start" x="361.5" y="-166.3" font-family="Times,serif" font-size="14.00">max_cpu_temp : float</text>
+<text text-anchor="start" x="361.5" y="-151.3" font-family="Times,serif" font-size="14.00">model : str</text>
+<polyline fill="none" stroke="black" points="353.5,-143.5 521.5,-143.5 "/>
+<text text-anchor="middle" x="437.5" y="-128.3" font-family="Times,serif" font-size="14.00"> </text>
 </g>
 <!-- 3 -->
 <g id="node4" class="node">
 <title>3</title>
-<polygon fill="none" stroke="black" points="363,-594 363,-753 642,-753 642,-594 363,-594"/>
-<text text-anchor="middle" x="502.5" y="-737.8" font-family="Times,serif" font-size="14.00">CtlAbstract</text>
-<polyline fill="none" stroke="black" points="363,-730 642,-730 "/>
-<text text-anchor="start" x="371" y="-714.8" font-family="Times,serif" font-size="14.00">board_name</text>
-<text text-anchor="start" x="371" y="-699.8" font-family="Times,serif" font-size="14.00">connection : NoneType</text>
-<text text-anchor="start" x="371" y="-684.8" font-family="Times,serif" font-size="14.00">cpu_temperature</text>
-<text text-anchor="start" x="371" y="-669.8" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="371" y="-654.8" font-family="Times,serif" font-size="14.00">interfaces : NoneType</text>
-<text text-anchor="start" x="371" y="-639.8" font-family="Times,serif" font-size="14.00">max_cpu_temp</text>
-<text text-anchor="start" x="371" y="-624.8" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<polyline fill="none" stroke="black" points="363,-617 642,-617 "/>
-<text text-anchor="middle" x="502.5" y="-601.8" font-family="Times,serif" font-size="14.00"> </text>
+<polygon fill="none" stroke="black" points="363.5,-579 363.5,-738 641.5,-738 641.5,-579 363.5,-579"/>
+<text text-anchor="middle" x="502.5" y="-722.8" font-family="Times,serif" font-size="14.00">CtlAbstract</text>
+<polyline fill="none" stroke="black" points="363.5,-715 641.5,-715 "/>
+<text text-anchor="start" x="371.5" y="-699.8" font-family="Times,serif" font-size="14.00">connection</text>
+<text text-anchor="start" x="371.5" y="-684.8" font-family="Times,serif" font-size="14.00">cpu_temperature</text>
+<text text-anchor="start" x="371.5" y="-669.8" font-family="Times,serif" font-size="14.00">exec_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="371.5" y="-654.8" font-family="Times,serif" font-size="14.00">interfaces : NoneType</text>
+<text text-anchor="start" x="371.5" y="-639.8" font-family="Times,serif" font-size="14.00">max_cpu_temp</text>
+<text text-anchor="start" x="371.5" y="-624.8" font-family="Times,serif" font-size="14.00">model</text>
+<text text-anchor="start" x="371.5" y="-609.8" font-family="Times,serif" font-size="14.00">soh_logger : RootLogger, NoneType</text>
+<polyline fill="none" stroke="black" points="363.5,-602 641.5,-602 "/>
+<text text-anchor="middle" x="502.5" y="-586.8" font-family="Times,serif" font-size="14.00"> </text>
 </g>
 <!-- 1&#45;&gt;3 -->
 <g id="edge1" class="edge">
 <title>1&#45;&gt;3</title>
-<path fill="none" stroke="black" d="M443.91,-227.22C454.81,-310.02 477.09,-479.36 490.81,-583.69"/>
-<polygon fill="none" stroke="black" points="487.38,-584.43 492.16,-593.89 494.32,-583.52 487.38,-584.43"/>
+<path fill="none" stroke="black" d="M444.03,-219.87C454.92,-301.38 476.94,-466.18 490.63,-568.66"/>
+<polygon fill="none" stroke="black" points="487.18,-569.23 491.97,-578.68 494.11,-568.31 487.18,-569.23"/>
 </g>
 <!-- 2 -->
 <g id="node3" class="node">
 <title>2</title>
-<polygon fill="none" stroke="black" points="539.5,-142.5 539.5,-212.5 593.5,-212.5 593.5,-142.5 539.5,-142.5"/>
-<text text-anchor="middle" x="566.5" y="-197.3" font-family="Times,serif" font-size="14.00">Ctl</text>
-<polyline fill="none" stroke="black" points="539.5,-189.5 593.5,-189.5 "/>
-<polyline fill="none" stroke="black" points="539.5,-165.5 593.5,-165.5 "/>
-<text text-anchor="middle" x="566.5" y="-150.3" font-family="Times,serif" font-size="14.00"> </text>
+<polygon fill="none" stroke="black" points="539.5,-135 539.5,-205 593.5,-205 593.5,-135 539.5,-135"/>
+<text text-anchor="middle" x="566.5" y="-189.8" font-family="Times,serif" font-size="14.00">Ctl</text>
+<polyline fill="none" stroke="black" points="539.5,-182 593.5,-182 "/>
+<polyline fill="none" stroke="black" points="539.5,-158 593.5,-158 "/>
+<text text-anchor="middle" x="566.5" y="-142.8" font-family="Times,serif" font-size="14.00"> </text>
 </g>
 <!-- 2&#45;&gt;3 -->
 <g id="edge2" class="edge">
 <title>2&#45;&gt;3</title>
-<path fill="none" stroke="black" d="M562.05,-212.84C552.22,-288.7 528.4,-472.57 514.04,-583.4"/>
-<polygon fill="none" stroke="black" points="510.54,-583.2 512.73,-593.56 517.48,-584.1 510.54,-583.2"/>
+<path fill="none" stroke="black" d="M562,-205.21C552.18,-279.88 528.55,-459.48 514.2,-568.56"/>
+<polygon fill="none" stroke="black" points="510.72,-568.2 512.88,-578.57 517.66,-569.11 510.72,-568.2"/>
 </g>
 <!-- 4 -->
 <g id="node5" class="node">
 <title>4</title>
-<polygon fill="none" stroke="black" points="611.5,-60.5 611.5,-294.5 745.5,-294.5 745.5,-60.5 611.5,-60.5"/>
-<text text-anchor="middle" x="678.5" y="-279.3" font-family="Times,serif" font-size="14.00">MQTTHandler</text>
-<polyline fill="none" stroke="black" points="611.5,-271.5 745.5,-271.5 "/>
-<text text-anchor="start" x="619.5" y="-256.3" font-family="Times,serif" font-size="14.00">auth : NoneType</text>
-<text text-anchor="start" x="619.5" y="-241.3" font-family="Times,serif" font-size="14.00">client_id : str</text>
-<text text-anchor="start" x="619.5" y="-226.3" font-family="Times,serif" font-size="14.00">hostname</text>
-<text text-anchor="start" x="619.5" y="-211.3" font-family="Times,serif" font-size="14.00">keepalive : int</text>
-<text text-anchor="start" x="619.5" y="-196.3" font-family="Times,serif" font-size="14.00">port : int</text>
-<text text-anchor="start" x="619.5" y="-181.3" font-family="Times,serif" font-size="14.00">protocol</text>
-<text text-anchor="start" x="619.5" y="-166.3" font-family="Times,serif" font-size="14.00">qos : int</text>
-<text text-anchor="start" x="619.5" y="-151.3" font-family="Times,serif" font-size="14.00">retain : bool</text>
-<text text-anchor="start" x="619.5" y="-136.3" font-family="Times,serif" font-size="14.00">tls : NoneType</text>
-<text text-anchor="start" x="619.5" y="-121.3" font-family="Times,serif" font-size="14.00">topic</text>
-<text text-anchor="start" x="619.5" y="-106.3" font-family="Times,serif" font-size="14.00">transport : str</text>
-<text text-anchor="start" x="619.5" y="-91.3" font-family="Times,serif" font-size="14.00">will : NoneType</text>
-<polyline fill="none" stroke="black" points="611.5,-83.5 745.5,-83.5 "/>
-<text text-anchor="start" x="619.5" y="-68.3" font-family="Times,serif" font-size="14.00">emit(record)</text>
+<polygon fill="none" stroke="black" points="611.5,-53 611.5,-287 745.5,-287 745.5,-53 611.5,-53"/>
+<text text-anchor="middle" x="678.5" y="-271.8" font-family="Times,serif" font-size="14.00">MQTTHandler</text>
+<polyline fill="none" stroke="black" points="611.5,-264 745.5,-264 "/>
+<text text-anchor="start" x="619.5" y="-248.8" font-family="Times,serif" font-size="14.00">auth : NoneType</text>
+<text text-anchor="start" x="619.5" y="-233.8" font-family="Times,serif" font-size="14.00">client_id : str</text>
+<text text-anchor="start" x="619.5" y="-218.8" font-family="Times,serif" font-size="14.00">hostname</text>
+<text text-anchor="start" x="619.5" y="-203.8" font-family="Times,serif" font-size="14.00">keepalive : int</text>
+<text text-anchor="start" x="619.5" y="-188.8" font-family="Times,serif" font-size="14.00">port : int</text>
+<text text-anchor="start" x="619.5" y="-173.8" font-family="Times,serif" font-size="14.00">protocol</text>
+<text text-anchor="start" x="619.5" y="-158.8" font-family="Times,serif" font-size="14.00">qos : int</text>
+<text text-anchor="start" x="619.5" y="-143.8" font-family="Times,serif" font-size="14.00">retain : bool</text>
+<text text-anchor="start" x="619.5" y="-128.8" font-family="Times,serif" font-size="14.00">tls : NoneType</text>
+<text text-anchor="start" x="619.5" y="-113.8" font-family="Times,serif" font-size="14.00">topic</text>
+<text text-anchor="start" x="619.5" y="-98.8" font-family="Times,serif" font-size="14.00">transport : str</text>
+<text text-anchor="start" x="619.5" y="-83.8" font-family="Times,serif" font-size="14.00">will : NoneType</text>
+<polyline fill="none" stroke="black" points="611.5,-76 745.5,-76 "/>
+<text text-anchor="start" x="619.5" y="-60.8" font-family="Times,serif" font-size="14.00">emit(record)</text>
 </g>
 <!-- 5 -->
 <g id="node6" class="node">
 <title>5</title>
-<polygon fill="none" stroke="black" points="763.5,-128 763.5,-227 979.5,-227 979.5,-128 763.5,-128"/>
-<text text-anchor="middle" x="871.5" y="-211.8" font-family="Times,serif" font-size="14.00">Mux</text>
-<polyline fill="none" stroke="black" points="763.5,-204 979.5,-204 "/>
-<text text-anchor="start" x="771.5" y="-188.8" font-family="Times,serif" font-size="14.00">addresses : dict</text>
-<text text-anchor="start" x="771.5" y="-173.8" font-family="Times,serif" font-size="14.00">io</text>
+<polygon fill="none" stroke="black" points="763.5,-128 763.5,-212 979.5,-212 979.5,-128 763.5,-128"/>
+<text text-anchor="middle" x="871.5" y="-196.8" font-family="Times,serif" font-size="14.00">Mux</text>
+<polyline fill="none" stroke="black" points="763.5,-189 979.5,-189 "/>
+<text text-anchor="start" x="771.5" y="-173.8" font-family="Times,serif" font-size="14.00">addresses : dict</text>
 <polyline fill="none" stroke="black" points="763.5,-166 979.5,-166 "/>
 <text text-anchor="start" x="771.5" y="-150.8" font-family="Times,serif" font-size="14.00">reset()</text>
 <text text-anchor="start" x="771.5" y="-135.8" font-family="Times,serif" font-size="14.00">switch_one(elec, role, state)</text>
@@ -108,407 +107,376 @@
 <!-- 8 -->
 <g id="node9" class="node">
 <title>8</title>
-<polygon fill="none" stroke="black" points="907,-564 907,-783 1194,-783 1194,-564 907,-564"/>
-<text text-anchor="middle" x="1050.5" y="-767.8" font-family="Times,serif" font-size="14.00">MuxAbstract</text>
-<polyline fill="none" stroke="black" points="907,-760 1194,-760 "/>
-<text text-anchor="start" x="915" y="-744.8" font-family="Times,serif" font-size="14.00">addresses</text>
-<text text-anchor="start" x="915" y="-729.8" font-family="Times,serif" font-size="14.00">barrier</text>
-<text text-anchor="start" x="915" y="-714.8" font-family="Times,serif" font-size="14.00">board_id</text>
-<text text-anchor="start" x="915" y="-699.8" font-family="Times,serif" font-size="14.00">board_name</text>
+<polygon fill="none" stroke="black" points="907,-549 907,-768 1194,-768 1194,-549 907,-549"/>
+<text text-anchor="middle" x="1050.5" y="-752.8" font-family="Times,serif" font-size="14.00">MuxAbstract</text>
+<polyline fill="none" stroke="black" points="907,-745 1194,-745 "/>
+<text text-anchor="start" x="915" y="-729.8" font-family="Times,serif" font-size="14.00">addresses</text>
+<text text-anchor="start" x="915" y="-714.8" font-family="Times,serif" font-size="14.00">barrier</text>
+<text text-anchor="start" x="915" y="-699.8" font-family="Times,serif" font-size="14.00">board_id</text>
 <text text-anchor="start" x="915" y="-684.8" font-family="Times,serif" font-size="14.00">cabling : dict</text>
 <text text-anchor="start" x="915" y="-669.8" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="915" y="-654.8" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="915" y="-639.8" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<polyline fill="none" stroke="black" points="907,-632 1194,-632 "/>
-<text text-anchor="start" x="915" y="-616.8" font-family="Times,serif" font-size="14.00">reset()</text>
-<text text-anchor="start" x="915" y="-601.8" font-family="Times,serif" font-size="14.00">switch(elec_dict, state, bypass_check)</text>
-<text text-anchor="start" x="915" y="-586.8" font-family="Times,serif" font-size="14.00">switch_one(elec, role, state)</text>
-<text text-anchor="start" x="915" y="-571.8" font-family="Times,serif" font-size="14.00">test(elec_dict, activation_time)</text>
+<text text-anchor="start" x="915" y="-654.8" font-family="Times,serif" font-size="14.00">exec_logger</text>
+<text text-anchor="start" x="915" y="-639.8" font-family="Times,serif" font-size="14.00">model</text>
+<text text-anchor="start" x="915" y="-624.8" font-family="Times,serif" font-size="14.00">soh_logger</text>
+<polyline fill="none" stroke="black" points="907,-617 1194,-617 "/>
+<text text-anchor="start" x="915" y="-601.8" font-family="Times,serif" font-size="14.00">reset()</text>
+<text text-anchor="start" x="915" y="-586.8" font-family="Times,serif" font-size="14.00">switch(elec_dict, state, bypass_check)</text>
+<text text-anchor="start" x="915" y="-571.8" font-family="Times,serif" font-size="14.00">switch_one(elec, role, state)</text>
+<text text-anchor="start" x="915" y="-556.8" font-family="Times,serif" font-size="14.00">test(elec_dict, activation_time)</text>
 </g>
 <!-- 5&#45;&gt;8 -->
 <g id="edge3" class="edge">
 <title>5&#45;&gt;8</title>
-<path fill="none" stroke="black" d="M889.15,-227.22C916.48,-302.64 969.82,-449.83 1007.68,-554.32"/>
-<polygon fill="none" stroke="black" points="1004.48,-555.77 1011.18,-563.98 1011.06,-553.38 1004.48,-555.77"/>
+<path fill="none" stroke="black" d="M886.61,-212.06C912.91,-283.55 968.04,-433.38 1007.08,-539.49"/>
+<polygon fill="none" stroke="black" points="1003.83,-540.8 1010.57,-548.98 1010.4,-538.39 1003.83,-540.8"/>
 </g>
 <!-- 6 -->
 <g id="node7" class="node">
 <title>6</title>
-<polygon fill="none" stroke="black" points="997.5,-127.5 997.5,-227.5 1103.5,-227.5 1103.5,-127.5 997.5,-127.5"/>
-<text text-anchor="middle" x="1050.5" y="-212.3" font-family="Times,serif" font-size="14.00">Mux</text>
-<polyline fill="none" stroke="black" points="997.5,-204.5 1103.5,-204.5 "/>
-<polyline fill="none" stroke="black" points="997.5,-180.5 1103.5,-180.5 "/>
-<text text-anchor="start" x="1005.5" y="-165.3" font-family="Times,serif" font-size="14.00">reset()</text>
-<text text-anchor="start" x="1005.5" y="-150.3" font-family="Times,serif" font-size="14.00">switch_one()</text>
-<text text-anchor="start" x="1005.5" y="-135.3" font-family="Times,serif" font-size="14.00">test()</text>
+<polygon fill="none" stroke="black" points="997.5,-120 997.5,-220 1103.5,-220 1103.5,-120 997.5,-120"/>
+<text text-anchor="middle" x="1050.5" y="-204.8" font-family="Times,serif" font-size="14.00">Mux</text>
+<polyline fill="none" stroke="black" points="997.5,-197 1103.5,-197 "/>
+<polyline fill="none" stroke="black" points="997.5,-173 1103.5,-173 "/>
+<text text-anchor="start" x="1005.5" y="-157.8" font-family="Times,serif" font-size="14.00">reset()</text>
+<text text-anchor="start" x="1005.5" y="-142.8" font-family="Times,serif" font-size="14.00">switch_one()</text>
+<text text-anchor="start" x="1005.5" y="-127.8" font-family="Times,serif" font-size="14.00">test()</text>
 </g>
 <!-- 6&#45;&gt;8 -->
 <g id="edge4" class="edge">
 <title>6&#45;&gt;8</title>
-<path fill="none" stroke="black" d="M1050.5,-227.67C1050.5,-303.01 1050.5,-449.22 1050.5,-553.45"/>
-<polygon fill="none" stroke="black" points="1047,-553.72 1050.5,-563.72 1054,-553.72 1047,-553.72"/>
+<path fill="none" stroke="black" d="M1050.5,-220.33C1050.5,-294.43 1050.5,-436.69 1050.5,-538.82"/>
+<polygon fill="none" stroke="black" points="1047,-538.89 1050.5,-548.89 1054,-538.89 1047,-538.89"/>
 </g>
 <!-- 7 -->
 <g id="node8" class="node">
 <title>7</title>
-<polygon fill="none" stroke="black" points="1121.5,-135.5 1121.5,-219.5 1337.5,-219.5 1337.5,-135.5 1121.5,-135.5"/>
-<text text-anchor="middle" x="1229.5" y="-204.3" font-family="Times,serif" font-size="14.00">Mux</text>
-<polyline fill="none" stroke="black" points="1121.5,-196.5 1337.5,-196.5 "/>
-<text text-anchor="start" x="1129.5" y="-181.3" font-family="Times,serif" font-size="14.00">addresses : dict</text>
-<polyline fill="none" stroke="black" points="1121.5,-173.5 1337.5,-173.5 "/>
-<text text-anchor="start" x="1129.5" y="-158.3" font-family="Times,serif" font-size="14.00">reset()</text>
-<text text-anchor="start" x="1129.5" y="-143.3" font-family="Times,serif" font-size="14.00">switch_one(elec, role, state)</text>
+<polygon fill="none" stroke="black" points="1121.5,-128 1121.5,-212 1337.5,-212 1337.5,-128 1121.5,-128"/>
+<text text-anchor="middle" x="1229.5" y="-196.8" font-family="Times,serif" font-size="14.00">Mux</text>
+<polyline fill="none" stroke="black" points="1121.5,-189 1337.5,-189 "/>
+<text text-anchor="start" x="1129.5" y="-173.8" font-family="Times,serif" font-size="14.00">addresses : dict</text>
+<polyline fill="none" stroke="black" points="1121.5,-166 1337.5,-166 "/>
+<text text-anchor="start" x="1129.5" y="-150.8" font-family="Times,serif" font-size="14.00">reset()</text>
+<text text-anchor="start" x="1129.5" y="-135.8" font-family="Times,serif" font-size="14.00">switch_one(elec, role, state)</text>
 </g>
 <!-- 7&#45;&gt;8 -->
 <g id="edge5" class="edge">
 <title>7&#45;&gt;8</title>
-<path fill="none" stroke="black" d="M1214.55,-219.77C1188.18,-292.53 1132.52,-446.15 1093.37,-554.19"/>
-<polygon fill="none" stroke="black" points="1089.99,-553.25 1089.87,-563.84 1096.57,-555.63 1089.99,-553.25"/>
+<path fill="none" stroke="black" d="M1214.39,-212.06C1188.09,-283.55 1132.96,-433.38 1093.92,-539.49"/>
+<polygon fill="none" stroke="black" points="1090.6,-538.39 1090.43,-548.98 1097.17,-540.8 1090.6,-538.39"/>
 </g>
 <!-- 9 -->
 <g id="node10" class="node">
 <title>9</title>
-<polygon fill="none" stroke="black" points="1356,-142.5 1356,-212.5 1447,-212.5 1447,-142.5 1356,-142.5"/>
-<text text-anchor="middle" x="1401.5" y="-197.3" font-family="Times,serif" font-size="14.00">MyServer</text>
-<polyline fill="none" stroke="black" points="1356,-189.5 1447,-189.5 "/>
-<polyline fill="none" stroke="black" points="1356,-165.5 1447,-165.5 "/>
-<text text-anchor="start" x="1364" y="-150.3" font-family="Times,serif" font-size="14.00">do_POST()</text>
+<polygon fill="none" stroke="black" points="1356,-135 1356,-205 1447,-205 1447,-135 1356,-135"/>
+<text text-anchor="middle" x="1401.5" y="-189.8" font-family="Times,serif" font-size="14.00">MyServer</text>
+<polyline fill="none" stroke="black" points="1356,-182 1447,-182 "/>
+<polyline fill="none" stroke="black" points="1356,-158 1447,-158 "/>
+<text text-anchor="start" x="1364" y="-142.8" font-family="Times,serif" font-size="14.00">do_POST()</text>
 </g>
 <!-- 10 -->
 <g id="node11" class="node">
 <title>10</title>
-<polygon fill="none" stroke="black" points="1409,-406.5 1409,-940.5 2182,-940.5 2182,-406.5 1409,-406.5"/>
-<text text-anchor="middle" x="1795.5" y="-925.3" font-family="Times,serif" font-size="14.00">OhmPi</text>
-<polyline fill="none" stroke="black" points="1409,-917.5 2182,-917.5 "/>
-<text text-anchor="start" x="1417" y="-902.3" font-family="Times,serif" font-size="14.00">cmd_id : NoneType</text>
-<text text-anchor="start" x="1417" y="-887.3" font-family="Times,serif" font-size="14.00">controller : NoneType</text>
-<text text-anchor="start" x="1417" y="-872.3" font-family="Times,serif" font-size="14.00">data_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="1417" y="-857.3" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="1417" y="-842.3" font-family="Times,serif" font-size="14.00">id : str</text>
-<text text-anchor="start" x="1417" y="-827.3" font-family="Times,serif" font-size="14.00">mqtt : bool</text>
-<text text-anchor="start" x="1417" y="-812.3" font-family="Times,serif" font-size="14.00">nb_samples : int</text>
-<text text-anchor="start" x="1417" y="-797.3" font-family="Times,serif" font-size="14.00">on_pi : NoneType, bool</text>
-<text text-anchor="start" x="1417" y="-782.3" font-family="Times,serif" font-size="14.00">sequence</text>
-<text text-anchor="start" x="1417" y="-767.3" font-family="Times,serif" font-size="14.00">sequence : ndarray, NoneType</text>
-<text text-anchor="start" x="1417" y="-752.3" font-family="Times,serif" font-size="14.00">settings : dict</text>
-<text text-anchor="start" x="1417" y="-737.3" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="1417" y="-722.3" font-family="Times,serif" font-size="14.00">status : str</text>
-<text text-anchor="start" x="1417" y="-707.3" font-family="Times,serif" font-size="14.00">thread : Thread, NoneType</text>
-<polyline fill="none" stroke="black" points="1409,-699.5 2182,-699.5 "/>
-<text text-anchor="start" x="1417" y="-684.3" font-family="Times,serif" font-size="14.00">append_and_save(filename, last_measurement, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-669.3" font-family="Times,serif" font-size="14.00">get_data(survey_names, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-654.3" font-family="Times,serif" font-size="14.00">get_deprecated_methods(cls)</text>
-<text text-anchor="start" x="1417" y="-639.3" font-family="Times,serif" font-size="14.00">interrupt(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-624.3" font-family="Times,serif" font-size="14.00">load_sequence(filename, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-609.3" font-family="Times,serif" font-size="14.00">quit(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-594.3" font-family="Times,serif" font-size="14.00">remove_data(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-579.3" font-family="Times,serif" font-size="14.00">reset_mux(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-564.3" font-family="Times,serif" font-size="14.00">restart(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-549.3" font-family="Times,serif" font-size="14.00">rs_check(tx_volt, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-534.3" font-family="Times,serif" font-size="14.00">run_measurement(quad, nb_stack, injection_duration, autogain, strategy, tx_volt, best_tx_injtime, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-519.3" font-family="Times,serif" font-size="14.00">run_multiple_sequences(cmd_id, sequence_delay, nb_meas)</text>
-<text text-anchor="start" x="1417" y="-504.3" font-family="Times,serif" font-size="14.00">run_sequence(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-489.3" font-family="Times,serif" font-size="14.00">run_sequence_async(cmd_id)</text>
-<text text-anchor="start" x="1417" y="-474.3" font-family="Times,serif" font-size="14.00">set_sequence(sequence, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-459.3" font-family="Times,serif" font-size="14.00">switch_mux_off(quadrupole, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-444.3" font-family="Times,serif" font-size="14.00">switch_mux_on(quadrupole, bypass_check, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-429.3" font-family="Times,serif" font-size="14.00">test_mux(activation_time, mux_id, cmd_id)</text>
-<text text-anchor="start" x="1417" y="-414.3" font-family="Times,serif" font-size="14.00">update_settings(settings, cmd_id)</text>
+<polygon fill="none" stroke="black" points="1409,-391.5 1409,-925.5 2182,-925.5 2182,-391.5 1409,-391.5"/>
+<text text-anchor="middle" x="1795.5" y="-910.3" font-family="Times,serif" font-size="14.00">OhmPi</text>
+<polyline fill="none" stroke="black" points="1409,-902.5 2182,-902.5 "/>
+<text text-anchor="start" x="1417" y="-887.3" font-family="Times,serif" font-size="14.00">cmd_id : NoneType</text>
+<text text-anchor="start" x="1417" y="-872.3" font-family="Times,serif" font-size="14.00">controller : NoneType</text>
+<text text-anchor="start" x="1417" y="-857.3" font-family="Times,serif" font-size="14.00">data_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="1417" y="-842.3" font-family="Times,serif" font-size="14.00">exec_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="1417" y="-827.3" font-family="Times,serif" font-size="14.00">id : str</text>
+<text text-anchor="start" x="1417" y="-812.3" font-family="Times,serif" font-size="14.00">mqtt : bool</text>
+<text text-anchor="start" x="1417" y="-797.3" font-family="Times,serif" font-size="14.00">nb_samples : int</text>
+<text text-anchor="start" x="1417" y="-782.3" font-family="Times,serif" font-size="14.00">on_pi : bool, NoneType</text>
+<text text-anchor="start" x="1417" y="-767.3" font-family="Times,serif" font-size="14.00">sequence</text>
+<text text-anchor="start" x="1417" y="-752.3" font-family="Times,serif" font-size="14.00">sequence : NoneType, ndarray</text>
+<text text-anchor="start" x="1417" y="-737.3" font-family="Times,serif" font-size="14.00">settings : dict</text>
+<text text-anchor="start" x="1417" y="-722.3" font-family="Times,serif" font-size="14.00">soh_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="1417" y="-707.3" font-family="Times,serif" font-size="14.00">status : str</text>
+<text text-anchor="start" x="1417" y="-692.3" font-family="Times,serif" font-size="14.00">thread : Thread, NoneType</text>
+<polyline fill="none" stroke="black" points="1409,-684.5 2182,-684.5 "/>
+<text text-anchor="start" x="1417" y="-669.3" font-family="Times,serif" font-size="14.00">append_and_save(filename, last_measurement, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-654.3" font-family="Times,serif" font-size="14.00">get_data(survey_names, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-639.3" font-family="Times,serif" font-size="14.00">get_deprecated_methods(cls)</text>
+<text text-anchor="start" x="1417" y="-624.3" font-family="Times,serif" font-size="14.00">interrupt(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-609.3" font-family="Times,serif" font-size="14.00">load_sequence(filename, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-594.3" font-family="Times,serif" font-size="14.00">quit(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-579.3" font-family="Times,serif" font-size="14.00">remove_data(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-564.3" font-family="Times,serif" font-size="14.00">reset_mux(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-549.3" font-family="Times,serif" font-size="14.00">restart(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-534.3" font-family="Times,serif" font-size="14.00">rs_check(tx_volt, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-519.3" font-family="Times,serif" font-size="14.00">run_measurement(quad, nb_stack, injection_duration, autogain, strategy, tx_volt, best_tx_injtime, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-504.3" font-family="Times,serif" font-size="14.00">run_multiple_sequences(cmd_id, sequence_delay, nb_meas)</text>
+<text text-anchor="start" x="1417" y="-489.3" font-family="Times,serif" font-size="14.00">run_sequence(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-474.3" font-family="Times,serif" font-size="14.00">run_sequence_async(cmd_id)</text>
+<text text-anchor="start" x="1417" y="-459.3" font-family="Times,serif" font-size="14.00">set_sequence(sequence, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-444.3" font-family="Times,serif" font-size="14.00">switch_mux_off(quadrupole, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-429.3" font-family="Times,serif" font-size="14.00">switch_mux_on(quadrupole, bypass_check, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-414.3" font-family="Times,serif" font-size="14.00">test_mux(activation_time, mux_id, cmd_id)</text>
+<text text-anchor="start" x="1417" y="-399.3" font-family="Times,serif" font-size="14.00">update_settings(settings, cmd_id)</text>
 </g>
 <!-- 11 -->
 <g id="node12" class="node">
 <title>11</title>
-<polygon fill="none" stroke="black" points="1465.5,-8 1465.5,-347 2125.5,-347 2125.5,-8 1465.5,-8"/>
-<text text-anchor="middle" x="1795.5" y="-331.8" font-family="Times,serif" font-size="14.00">OhmPiHardware</text>
-<polyline fill="none" stroke="black" points="1465.5,-324 2125.5,-324 "/>
-<text text-anchor="start" x="1473.5" y="-308.8" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="1473.5" y="-293.8" font-family="Times,serif" font-size="14.00">data_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="1473.5" y="-278.8" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="1473.5" y="-263.8" font-family="Times,serif" font-size="14.00">last_dev</text>
-<text text-anchor="start" x="1473.5" y="-248.8" font-family="Times,serif" font-size="14.00">last_rho</text>
-<text text-anchor="start" x="1473.5" y="-233.8" font-family="Times,serif" font-size="14.00">mux_barrier : Barrier</text>
-<text text-anchor="start" x="1473.5" y="-218.8" font-family="Times,serif" font-size="14.00">mux_boards : dict</text>
-<text text-anchor="start" x="1473.5" y="-203.8" font-family="Times,serif" font-size="14.00">pulses</text>
-<text text-anchor="start" x="1473.5" y="-188.8" font-family="Times,serif" font-size="14.00">pwr</text>
-<text text-anchor="start" x="1473.5" y="-173.8" font-family="Times,serif" font-size="14.00">readings : ndarray</text>
-<text text-anchor="start" x="1473.5" y="-158.8" font-family="Times,serif" font-size="14.00">rx</text>
-<text text-anchor="start" x="1473.5" y="-143.8" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="1473.5" y="-128.8" font-family="Times,serif" font-size="14.00">sp</text>
-<text text-anchor="start" x="1473.5" y="-113.8" font-family="Times,serif" font-size="14.00">tx</text>
-<text text-anchor="start" x="1473.5" y="-98.8" font-family="Times,serif" font-size="14.00">tx_sync : Event</text>
-<polyline fill="none" stroke="black" points="1465.5,-91 2125.5,-91 "/>
-<text text-anchor="start" x="1473.5" y="-75.8" font-family="Times,serif" font-size="14.00">calibrate_rx_bias()</text>
-<text text-anchor="start" x="1473.5" y="-60.8" font-family="Times,serif" font-size="14.00">reset_mux()</text>
-<text text-anchor="start" x="1473.5" y="-45.8" font-family="Times,serif" font-size="14.00">switch_mux(electrodes, roles, state)</text>
-<text text-anchor="start" x="1473.5" y="-30.8" font-family="Times,serif" font-size="14.00">test_mux(channel, activation_time)</text>
-<text text-anchor="start" x="1473.5" y="-15.8" font-family="Times,serif" font-size="14.00">vab_square_wave(vab, cycle_duration, sampling_rate, cycles, polarity, duty_cycle, append)</text>
+<polygon fill="none" stroke="black" points="1465.5,-0.5 1465.5,-339.5 2125.5,-339.5 2125.5,-0.5 1465.5,-0.5"/>
+<text text-anchor="middle" x="1795.5" y="-324.3" font-family="Times,serif" font-size="14.00">OhmPiHardware</text>
+<polyline fill="none" stroke="black" points="1465.5,-316.5 2125.5,-316.5 "/>
+<text text-anchor="start" x="1473.5" y="-301.3" font-family="Times,serif" font-size="14.00">ctl</text>
+<text text-anchor="start" x="1473.5" y="-286.3" font-family="Times,serif" font-size="14.00">data_logger</text>
+<text text-anchor="start" x="1473.5" y="-271.3" font-family="Times,serif" font-size="14.00">exec_logger</text>
+<text text-anchor="start" x="1473.5" y="-256.3" font-family="Times,serif" font-size="14.00">mux_barrier : Barrier</text>
+<text text-anchor="start" x="1473.5" y="-241.3" font-family="Times,serif" font-size="14.00">mux_boards : dict</text>
+<text text-anchor="start" x="1473.5" y="-226.3" font-family="Times,serif" font-size="14.00">pulses</text>
+<text text-anchor="start" x="1473.5" y="-211.3" font-family="Times,serif" font-size="14.00">pwr</text>
+<text text-anchor="start" x="1473.5" y="-196.3" font-family="Times,serif" font-size="14.00">readings : ndarray</text>
+<text text-anchor="start" x="1473.5" y="-181.3" font-family="Times,serif" font-size="14.00">rx</text>
+<text text-anchor="start" x="1473.5" y="-166.3" font-family="Times,serif" font-size="14.00">soh_logger</text>
+<text text-anchor="start" x="1473.5" y="-151.3" font-family="Times,serif" font-size="14.00">sp</text>
+<text text-anchor="start" x="1473.5" y="-136.3" font-family="Times,serif" font-size="14.00">tx</text>
+<text text-anchor="start" x="1473.5" y="-121.3" font-family="Times,serif" font-size="14.00">tx_sync : Event</text>
+<polyline fill="none" stroke="black" points="1465.5,-113.5 2125.5,-113.5 "/>
+<text text-anchor="start" x="1473.5" y="-98.3" font-family="Times,serif" font-size="14.00">calibrate_rx_bias()</text>
+<text text-anchor="start" x="1473.5" y="-83.3" font-family="Times,serif" font-size="14.00">last_dev(delay)</text>
+<text text-anchor="start" x="1473.5" y="-68.3" font-family="Times,serif" font-size="14.00">last_resistance(delay)</text>
+<text text-anchor="start" x="1473.5" y="-53.3" font-family="Times,serif" font-size="14.00">reset_mux()</text>
+<text text-anchor="start" x="1473.5" y="-38.3" font-family="Times,serif" font-size="14.00">switch_mux(electrodes, roles, state)</text>
+<text text-anchor="start" x="1473.5" y="-23.3" font-family="Times,serif" font-size="14.00">test_mux(channel, activation_time)</text>
+<text text-anchor="start" x="1473.5" y="-8.3" font-family="Times,serif" font-size="14.00">vab_square_wave(vab, cycle_duration, sampling_rate, cycles, polarity, duty_cycle, append)</text>
 </g>
 <!-- 11&#45;&gt;10 -->
 <g id="edge14" class="edge">
 <title>11&#45;&gt;10</title>
-<path fill="none" stroke="black" d="M1795.5,-347.13C1795.5,-362.38 1795.5,-378.08 1795.5,-393.96"/>
-<polygon fill="black" stroke="black" points="1795.5,-394.14 1799.5,-400.14 1795.5,-406.14 1791.5,-400.14 1795.5,-394.14"/>
-<text text-anchor="middle" x="1809.5" y="-376.8" font-family="Times,serif" font-size="14.00" fill="green">_hw</text>
+<path fill="none" stroke="black" d="M1795.5,-339.79C1795.5,-352.61 1795.5,-365.73 1795.5,-378.99"/>
+<polygon fill="black" stroke="black" points="1795.5,-379.21 1799.5,-385.21 1795.5,-391.21 1791.5,-385.21 1795.5,-379.21"/>
+<text text-anchor="middle" x="1809.5" y="-361.8" font-family="Times,serif" font-size="14.00" fill="green">_hw</text>
 </g>
 <!-- 12 -->
 <g id="node13" class="node">
 <title>12</title>
-<polygon fill="none" stroke="black" points="2143.5,-90.5 2143.5,-264.5 2337.5,-264.5 2337.5,-90.5 2143.5,-90.5"/>
-<text text-anchor="middle" x="2240.5" y="-249.3" font-family="Times,serif" font-size="14.00">Pwr</text>
-<polyline fill="none" stroke="black" points="2143.5,-241.5 2337.5,-241.5 "/>
-<text text-anchor="start" x="2151.5" y="-226.3" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="2151.5" y="-211.3" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="2151.5" y="-196.3" font-family="Times,serif" font-size="14.00">current</text>
-<text text-anchor="start" x="2151.5" y="-181.3" font-family="Times,serif" font-size="14.00">current_max</text>
-<text text-anchor="start" x="2151.5" y="-166.3" font-family="Times,serif" font-size="14.00">voltage</text>
-<text text-anchor="start" x="2151.5" y="-151.3" font-family="Times,serif" font-size="14.00">voltage_adjustable : bool</text>
-<polyline fill="none" stroke="black" points="2143.5,-143.5 2337.5,-143.5 "/>
-<text text-anchor="start" x="2151.5" y="-128.3" font-family="Times,serif" font-size="14.00">battery_voltage()</text>
-<text text-anchor="start" x="2151.5" y="-113.3" font-family="Times,serif" font-size="14.00">turn_off()</text>
-<text text-anchor="start" x="2151.5" y="-98.3" font-family="Times,serif" font-size="14.00">turn_on()</text>
+<polygon fill="none" stroke="black" points="2193.5,-90.5 2193.5,-249.5 2387.5,-249.5 2387.5,-90.5 2193.5,-90.5"/>
+<text text-anchor="middle" x="2290.5" y="-234.3" font-family="Times,serif" font-size="14.00">Pwr</text>
+<polyline fill="none" stroke="black" points="2193.5,-226.5 2387.5,-226.5 "/>
+<text text-anchor="start" x="2201.5" y="-211.3" font-family="Times,serif" font-size="14.00">current</text>
+<text text-anchor="start" x="2201.5" y="-196.3" font-family="Times,serif" font-size="14.00">current_adjustable : bool</text>
+<text text-anchor="start" x="2201.5" y="-181.3" font-family="Times,serif" font-size="14.00">voltage</text>
+<text text-anchor="start" x="2201.5" y="-166.3" font-family="Times,serif" font-size="14.00">voltage_adjustable : bool</text>
+<polyline fill="none" stroke="black" points="2193.5,-158.5 2387.5,-158.5 "/>
+<text text-anchor="start" x="2201.5" y="-143.3" font-family="Times,serif" font-size="14.00">battery_voltage()</text>
+<text text-anchor="start" x="2201.5" y="-128.3" font-family="Times,serif" font-size="14.00">current_max(value)</text>
+<text text-anchor="start" x="2201.5" y="-113.3" font-family="Times,serif" font-size="14.00">turn_off()</text>
+<text text-anchor="start" x="2201.5" y="-98.3" font-family="Times,serif" font-size="14.00">turn_on()</text>
 </g>
 <!-- 14 -->
 <g id="node15" class="node">
 <title>14</title>
-<polygon fill="none" stroke="black" points="2257,-579 2257,-768 2536,-768 2536,-579 2257,-579"/>
-<text text-anchor="middle" x="2396.5" y="-752.8" font-family="Times,serif" font-size="14.00">PwrAbstract</text>
-<polyline fill="none" stroke="black" points="2257,-745 2536,-745 "/>
-<text text-anchor="start" x="2265" y="-729.8" font-family="Times,serif" font-size="14.00">board_name</text>
-<text text-anchor="start" x="2265" y="-714.8" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="2265" y="-699.8" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="2265" y="-684.8" font-family="Times,serif" font-size="14.00">current</text>
-<text text-anchor="start" x="2265" y="-669.8" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="2265" y="-654.8" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="2265" y="-639.8" font-family="Times,serif" font-size="14.00">voltage</text>
-<text text-anchor="start" x="2265" y="-624.8" font-family="Times,serif" font-size="14.00">voltage_adjustable</text>
-<polyline fill="none" stroke="black" points="2257,-617 2536,-617 "/>
-<text text-anchor="start" x="2265" y="-601.8" font-family="Times,serif" font-size="14.00">turn_off()</text>
-<text text-anchor="start" x="2265" y="-586.8" font-family="Times,serif" font-size="14.00">turn_on()</text>
+<polygon fill="none" stroke="black" points="2200.5,-564 2200.5,-753 2478.5,-753 2478.5,-564 2200.5,-564"/>
+<text text-anchor="middle" x="2339.5" y="-737.8" font-family="Times,serif" font-size="14.00">PwrAbstract</text>
+<polyline fill="none" stroke="black" points="2200.5,-730 2478.5,-730 "/>
+<text text-anchor="start" x="2208.5" y="-714.8" font-family="Times,serif" font-size="14.00">connection</text>
+<text text-anchor="start" x="2208.5" y="-699.8" font-family="Times,serif" font-size="14.00">current</text>
+<text text-anchor="start" x="2208.5" y="-684.8" font-family="Times,serif" font-size="14.00">current_adjustable</text>
+<text text-anchor="start" x="2208.5" y="-669.8" font-family="Times,serif" font-size="14.00">exec_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="2208.5" y="-654.8" font-family="Times,serif" font-size="14.00">model</text>
+<text text-anchor="start" x="2208.5" y="-639.8" font-family="Times,serif" font-size="14.00">soh_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="2208.5" y="-624.8" font-family="Times,serif" font-size="14.00">voltage</text>
+<text text-anchor="start" x="2208.5" y="-609.8" font-family="Times,serif" font-size="14.00">voltage_adjustable</text>
+<polyline fill="none" stroke="black" points="2200.5,-602 2478.5,-602 "/>
+<text text-anchor="start" x="2208.5" y="-586.8" font-family="Times,serif" font-size="14.00">turn_off()</text>
+<text text-anchor="start" x="2208.5" y="-571.8" font-family="Times,serif" font-size="14.00">turn_on()</text>
 </g>
 <!-- 12&#45;&gt;14 -->
 <g id="edge6" class="edge">
 <title>12&#45;&gt;14</title>
-<path fill="none" stroke="black" d="M2267.67,-264.55C2294.41,-349.23 2335.27,-478.62 2363.78,-568.9"/>
-<polygon fill="none" stroke="black" points="2360.5,-570.13 2366.85,-578.61 2367.18,-568.02 2360.5,-570.13"/>
+<path fill="none" stroke="black" d="M2298.43,-249.71C2306.76,-332.39 2319.89,-462.83 2329.06,-553.85"/>
+<polygon fill="none" stroke="black" points="2325.59,-554.32 2330.07,-563.92 2332.55,-553.62 2325.59,-554.32"/>
 </g>
 <!-- 13 -->
 <g id="node14" class="node">
 <title>13</title>
-<polygon fill="none" stroke="black" points="2355.5,-120.5 2355.5,-234.5 2549.5,-234.5 2549.5,-120.5 2355.5,-120.5"/>
-<text text-anchor="middle" x="2452.5" y="-219.3" font-family="Times,serif" font-size="14.00">Pwr</text>
-<polyline fill="none" stroke="black" points="2355.5,-211.5 2549.5,-211.5 "/>
-<text text-anchor="start" x="2363.5" y="-196.3" font-family="Times,serif" font-size="14.00">current</text>
-<text text-anchor="start" x="2363.5" y="-181.3" font-family="Times,serif" font-size="14.00">voltage</text>
-<text text-anchor="start" x="2363.5" y="-166.3" font-family="Times,serif" font-size="14.00">voltage_adjustable : bool</text>
-<polyline fill="none" stroke="black" points="2355.5,-158.5 2549.5,-158.5 "/>
-<text text-anchor="start" x="2363.5" y="-143.3" font-family="Times,serif" font-size="14.00">turn_off()</text>
-<text text-anchor="start" x="2363.5" y="-128.3" font-family="Times,serif" font-size="14.00">turn_on()</text>
+<polygon fill="none" stroke="black" points="2406,-120.5 2406,-219.5 2489,-219.5 2489,-120.5 2406,-120.5"/>
+<text text-anchor="middle" x="2447.5" y="-204.3" font-family="Times,serif" font-size="14.00">Pwr</text>
+<polyline fill="none" stroke="black" points="2406,-196.5 2489,-196.5 "/>
+<text text-anchor="start" x="2414" y="-181.3" font-family="Times,serif" font-size="14.00">current</text>
+<text text-anchor="start" x="2414" y="-166.3" font-family="Times,serif" font-size="14.00">voltage</text>
+<polyline fill="none" stroke="black" points="2406,-158.5 2489,-158.5 "/>
+<text text-anchor="start" x="2414" y="-143.3" font-family="Times,serif" font-size="14.00">turn_off()</text>
+<text text-anchor="start" x="2414" y="-128.3" font-family="Times,serif" font-size="14.00">turn_on()</text>
 </g>
 <!-- 13&#45;&gt;14 -->
 <g id="edge7" class="edge">
 <title>13&#45;&gt;14</title>
-<path fill="none" stroke="black" d="M2446.13,-234.69C2436.93,-315.82 2419.78,-467.17 2408.25,-568.89"/>
-<polygon fill="none" stroke="black" points="2404.76,-568.55 2407.11,-578.88 2411.72,-569.34 2404.76,-568.55"/>
+<path fill="none" stroke="black" d="M2436.65,-219.87C2419.39,-297.61 2385.32,-451.12 2362.46,-554.05"/>
+<polygon fill="none" stroke="black" points="2359.04,-553.33 2360.29,-563.85 2365.87,-554.85 2359.04,-553.33"/>
 </g>
 <!-- 15 -->
 <g id="node16" class="node">
 <title>15</title>
-<polygon fill="none" stroke="black" points="2567.5,-113 2567.5,-242 2695.5,-242 2695.5,-113 2567.5,-113"/>
-<text text-anchor="middle" x="2631.5" y="-226.8" font-family="Times,serif" font-size="14.00">Rx</text>
-<polyline fill="none" stroke="black" points="2567.5,-219 2695.5,-219 "/>
-<text text-anchor="start" x="2575.5" y="-203.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="2575.5" y="-188.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="2575.5" y="-173.8" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="2575.5" y="-158.8" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="2575.5" y="-143.8" font-family="Times,serif" font-size="14.00">voltage</text>
-<polyline fill="none" stroke="black" points="2567.5,-136 2695.5,-136 "/>
-<text text-anchor="start" x="2575.5" y="-120.8" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
+<polygon fill="none" stroke="black" points="2642.5,-609 2642.5,-708 2764.5,-708 2764.5,-609 2642.5,-609"/>
+<text text-anchor="middle" x="2703.5" y="-692.8" font-family="Times,serif" font-size="14.00">Rx</text>
+<polyline fill="none" stroke="black" points="2642.5,-685 2764.5,-685 "/>
+<text text-anchor="start" x="2650.5" y="-669.8" font-family="Times,serif" font-size="14.00">gain</text>
+<text text-anchor="start" x="2650.5" y="-654.8" font-family="Times,serif" font-size="14.00">gain : int, float</text>
+<text text-anchor="start" x="2650.5" y="-639.8" font-family="Times,serif" font-size="14.00">voltage</text>
+<polyline fill="none" stroke="black" points="2642.5,-632 2764.5,-632 "/>
+<text text-anchor="start" x="2650.5" y="-616.8" font-family="Times,serif" font-size="14.00">gain_auto()</text>
 </g>
 <!-- 18 -->
 <g id="node19" class="node">
 <title>18</title>
-<polygon fill="none" stroke="black" points="2638,-586.5 2638,-760.5 2917,-760.5 2917,-586.5 2638,-586.5"/>
-<text text-anchor="middle" x="2777.5" y="-745.3" font-family="Times,serif" font-size="14.00">RxAbstract</text>
-<polyline fill="none" stroke="black" points="2638,-737.5 2917,-737.5 "/>
-<text text-anchor="start" x="2646" y="-722.3" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="2646" y="-707.3" font-family="Times,serif" font-size="14.00">board_name</text>
-<text text-anchor="start" x="2646" y="-692.3" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="2646" y="-677.3" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="2646" y="-662.3" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="2646" y="-647.3" font-family="Times,serif" font-size="14.00">sampling_rate</text>
-<text text-anchor="start" x="2646" y="-632.3" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="2646" y="-617.3" font-family="Times,serif" font-size="14.00">voltage</text>
-<polyline fill="none" stroke="black" points="2638,-609.5 2917,-609.5 "/>
-<text text-anchor="start" x="2646" y="-594.3" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
+<polygon fill="none" stroke="black" points="2469.5,-1008.5 2469.5,-1167.5 2747.5,-1167.5 2747.5,-1008.5 2469.5,-1008.5"/>
+<text text-anchor="middle" x="2608.5" y="-1152.3" font-family="Times,serif" font-size="14.00">RxAbstract</text>
+<polyline fill="none" stroke="black" points="2469.5,-1144.5 2747.5,-1144.5 "/>
+<text text-anchor="start" x="2477.5" y="-1129.3" font-family="Times,serif" font-size="14.00">adc_gain</text>
+<text text-anchor="start" x="2477.5" y="-1114.3" font-family="Times,serif" font-size="14.00">connection</text>
+<text text-anchor="start" x="2477.5" y="-1099.3" font-family="Times,serif" font-size="14.00">exec_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="2477.5" y="-1084.3" font-family="Times,serif" font-size="14.00">model</text>
+<text text-anchor="start" x="2477.5" y="-1069.3" font-family="Times,serif" font-size="14.00">sampling_rate</text>
+<text text-anchor="start" x="2477.5" y="-1054.3" font-family="Times,serif" font-size="14.00">soh_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="2477.5" y="-1039.3" font-family="Times,serif" font-size="14.00">voltage</text>
+<polyline fill="none" stroke="black" points="2469.5,-1031.5 2747.5,-1031.5 "/>
+<text text-anchor="middle" x="2608.5" y="-1016.3" font-family="Times,serif" font-size="14.00"> </text>
 </g>
 <!-- 15&#45;&gt;18 -->
 <g id="edge8" class="edge">
 <title>15&#45;&gt;18</title>
-<path fill="none" stroke="black" d="M2650.29,-242.07C2675.37,-326.93 2720.01,-477.97 2749.18,-576.68"/>
-<polygon fill="none" stroke="black" points="2745.85,-577.76 2752.04,-586.36 2752.56,-575.78 2745.85,-577.76"/>
+<path fill="none" stroke="black" d="M2692.69,-708.12C2677.03,-778.61 2647.76,-910.35 2628.19,-998.38"/>
+<polygon fill="none" stroke="black" points="2624.73,-997.84 2625.98,-1008.36 2631.56,-999.36 2624.73,-997.84"/>
 </g>
 <!-- 16 -->
 <g id="node17" class="node">
 <title>16</title>
-<polygon fill="none" stroke="black" points="2713.5,-128 2713.5,-227 2841.5,-227 2841.5,-128 2713.5,-128"/>
-<text text-anchor="middle" x="2777.5" y="-211.8" font-family="Times,serif" font-size="14.00">Rx</text>
-<polyline fill="none" stroke="black" points="2713.5,-204 2841.5,-204 "/>
-<text text-anchor="start" x="2721.5" y="-188.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="2721.5" y="-173.8" font-family="Times,serif" font-size="14.00">adc_gain : float</text>
-<text text-anchor="start" x="2721.5" y="-158.8" font-family="Times,serif" font-size="14.00">voltage</text>
-<polyline fill="none" stroke="black" points="2713.5,-151 2841.5,-151 "/>
-<text text-anchor="start" x="2721.5" y="-135.8" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
+<polygon fill="none" stroke="black" points="2496.5,-609 2496.5,-708 2624.5,-708 2624.5,-609 2496.5,-609"/>
+<text text-anchor="middle" x="2560.5" y="-692.8" font-family="Times,serif" font-size="14.00">Rx</text>
+<polyline fill="none" stroke="black" points="2496.5,-685 2624.5,-685 "/>
+<text text-anchor="start" x="2504.5" y="-669.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
+<text text-anchor="start" x="2504.5" y="-654.8" font-family="Times,serif" font-size="14.00">adc_gain : float</text>
+<text text-anchor="start" x="2504.5" y="-639.8" font-family="Times,serif" font-size="14.00">voltage</text>
+<polyline fill="none" stroke="black" points="2496.5,-632 2624.5,-632 "/>
+<text text-anchor="start" x="2504.5" y="-616.8" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
 </g>
 <!-- 16&#45;&gt;18 -->
 <g id="edge9" class="edge">
 <title>16&#45;&gt;18</title>
-<path fill="none" stroke="black" d="M2777.5,-227.22C2777.5,-308.02 2777.5,-471.22 2777.5,-576.01"/>
-<polygon fill="none" stroke="black" points="2774,-576.27 2777.5,-586.27 2781,-576.27 2774,-576.27"/>
+<path fill="none" stroke="black" d="M2565.96,-708.12C2573.87,-778.61 2588.67,-910.35 2598.55,-998.38"/>
+<polygon fill="none" stroke="black" points="2595.08,-998.81 2599.67,-1008.36 2602.03,-998.03 2595.08,-998.81"/>
 </g>
 <!-- 17 -->
 <g id="node18" class="node">
 <title>17</title>
-<polygon fill="none" stroke="black" points="2859.5,-60.5 2859.5,-294.5 3047.5,-294.5 3047.5,-60.5 2859.5,-60.5"/>
-<text text-anchor="middle" x="2953.5" y="-279.3" font-family="Times,serif" font-size="14.00">Rx</text>
-<polyline fill="none" stroke="black" points="2859.5,-271.5 3047.5,-271.5 "/>
-<text text-anchor="start" x="2867.5" y="-256.3" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="2867.5" y="-241.3" font-family="Times,serif" font-size="14.00">adc_gain : float</text>
-<text text-anchor="start" x="2867.5" y="-226.3" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="2867.5" y="-211.3" font-family="Times,serif" font-size="14.00">io</text>
-<text text-anchor="start" x="2867.5" y="-196.3" font-family="Times,serif" font-size="14.00">mcp_board : MCP23008</text>
-<text text-anchor="start" x="2867.5" y="-181.3" font-family="Times,serif" font-size="14.00">pin_DG0 : DigitalInOut</text>
-<text text-anchor="start" x="2867.5" y="-166.3" font-family="Times,serif" font-size="14.00">pin_DG1 : DigitalInOut</text>
-<text text-anchor="start" x="2867.5" y="-151.3" font-family="Times,serif" font-size="14.00">pin_DG2 : DigitalInOut</text>
-<text text-anchor="start" x="2867.5" y="-136.3" font-family="Times,serif" font-size="14.00">voltage</text>
-<text text-anchor="start" x="2867.5" y="-121.3" font-family="Times,serif" font-size="14.00">voltage_gain</text>
-<text text-anchor="start" x="2867.5" y="-106.3" font-family="Times,serif" font-size="14.00">voltage_gain : int, float</text>
-<polyline fill="none" stroke="black" points="2859.5,-98.5 3047.5,-98.5 "/>
-<text text-anchor="start" x="2867.5" y="-83.3" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
-<text text-anchor="start" x="2867.5" y="-68.3" font-family="Times,serif" font-size="14.00">voltage_gain_auto()</text>
-</g>
-<!-- 17&#45;&gt;18 -->
+<polygon fill="none" stroke="black" points="2609.5,-90.5 2609.5,-249.5 2797.5,-249.5 2797.5,-90.5 2609.5,-90.5"/>
+<text text-anchor="middle" x="2703.5" y="-234.3" font-family="Times,serif" font-size="14.00">Rx</text>
+<polyline fill="none" stroke="black" points="2609.5,-226.5 2797.5,-226.5 "/>
+<text text-anchor="start" x="2617.5" y="-211.3" font-family="Times,serif" font-size="14.00">gain</text>
+<text text-anchor="start" x="2617.5" y="-196.3" font-family="Times,serif" font-size="14.00">gain : int, float</text>
+<text text-anchor="start" x="2617.5" y="-181.3" font-family="Times,serif" font-size="14.00">mcp_board : MCP23008</text>
+<text text-anchor="start" x="2617.5" y="-166.3" font-family="Times,serif" font-size="14.00">pin_DG0 : DigitalInOut</text>
+<text text-anchor="start" x="2617.5" y="-151.3" font-family="Times,serif" font-size="14.00">pin_DG1 : DigitalInOut</text>
+<text text-anchor="start" x="2617.5" y="-136.3" font-family="Times,serif" font-size="14.00">pin_DG2 : DigitalInOut</text>
+<text text-anchor="start" x="2617.5" y="-121.3" font-family="Times,serif" font-size="14.00">voltage</text>
+<polyline fill="none" stroke="black" points="2609.5,-113.5 2797.5,-113.5 "/>
+<text text-anchor="start" x="2617.5" y="-98.3" font-family="Times,serif" font-size="14.00">gain_auto()</text>
+</g>
+<!-- 17&#45;&gt;15 -->
 <g id="edge10" class="edge">
-<title>17&#45;&gt;18</title>
-<path fill="none" stroke="black" d="M2912.12,-294.63C2881.51,-380.56 2840.32,-496.18 2811.59,-576.81"/>
-<polygon fill="none" stroke="black" points="2808.21,-575.88 2808.15,-586.47 2814.8,-578.22 2808.21,-575.88"/>
+<title>17&#45;&gt;15</title>
+<path fill="none" stroke="black" d="M2703.5,-249.71C2703.5,-347.26 2703.5,-511.28 2703.5,-598.62"/>
+<polygon fill="none" stroke="black" points="2700,-598.88 2703.5,-608.88 2707,-598.88 2700,-598.88"/>
 </g>
 <!-- 19 -->
 <g id="node20" class="node">
 <title>19</title>
-<polygon fill="none" stroke="black" points="3065.5,-0.5 3065.5,-354.5 3361.5,-354.5 3361.5,-0.5 3065.5,-0.5"/>
-<text text-anchor="middle" x="3213.5" y="-339.3" font-family="Times,serif" font-size="14.00">Tx</text>
-<polyline fill="none" stroke="black" points="3065.5,-331.5 3361.5,-331.5 "/>
-<text text-anchor="start" x="3073.5" y="-316.3" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="3073.5" y="-301.3" font-family="Times,serif" font-size="14.00">adc_gain : int, float</text>
-<text text-anchor="start" x="3073.5" y="-286.3" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="3073.5" y="-271.3" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="3073.5" y="-256.3" font-family="Times,serif" font-size="14.00">current</text>
-<text text-anchor="start" x="3073.5" y="-241.3" font-family="Times,serif" font-size="14.00">current_adjustable : bool</text>
-<text text-anchor="start" x="3073.5" y="-226.3" font-family="Times,serif" font-size="14.00">mcp_board : MCP23008</text>
-<text text-anchor="start" x="3073.5" y="-211.3" font-family="Times,serif" font-size="14.00">pin0 : DigitalInOut</text>
-<text text-anchor="start" x="3073.5" y="-196.3" font-family="Times,serif" font-size="14.00">pin1 : DigitalInOut</text>
-<text text-anchor="start" x="3073.5" y="-181.3" font-family="Times,serif" font-size="14.00">pin4 : DigitalInOut</text>
-<text text-anchor="start" x="3073.5" y="-166.3" font-family="Times,serif" font-size="14.00">polarity</text>
-<text text-anchor="start" x="3073.5" y="-151.3" font-family="Times,serif" font-size="14.00">polarity : int</text>
-<text text-anchor="start" x="3073.5" y="-136.3" font-family="Times,serif" font-size="14.00">pwr : NoneType</text>
-<text text-anchor="start" x="3073.5" y="-121.3" font-family="Times,serif" font-size="14.00">tx_bat</text>
-<text text-anchor="start" x="3073.5" y="-106.3" font-family="Times,serif" font-size="14.00">voltage_adjustable : bool</text>
-<polyline fill="none" stroke="black" points="3065.5,-98.5 3361.5,-98.5 "/>
-<text text-anchor="start" x="3073.5" y="-83.3" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
-<text text-anchor="start" x="3073.5" y="-68.3" font-family="Times,serif" font-size="14.00">current_pulse()</text>
-<text text-anchor="start" x="3073.5" y="-53.3" font-family="Times,serif" font-size="14.00">inject(polarity, injection_duration)</text>
-<text text-anchor="start" x="3073.5" y="-38.3" font-family="Times,serif" font-size="14.00">turn_off()</text>
-<text text-anchor="start" x="3073.5" y="-23.3" font-family="Times,serif" font-size="14.00">turn_on()</text>
-<text text-anchor="start" x="3073.5" y="-8.3" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
+<polygon fill="none" stroke="black" points="3110.5,-489 3110.5,-828 3406.5,-828 3406.5,-489 3110.5,-489"/>
+<text text-anchor="middle" x="3258.5" y="-812.8" font-family="Times,serif" font-size="14.00">Tx</text>
+<polyline fill="none" stroke="black" points="3110.5,-805 3406.5,-805 "/>
+<text text-anchor="start" x="3118.5" y="-789.8" font-family="Times,serif" font-size="14.00">adc_voltage_max</text>
+<text text-anchor="start" x="3118.5" y="-774.8" font-family="Times,serif" font-size="14.00">adc_voltage_min</text>
+<text text-anchor="start" x="3118.5" y="-759.8" font-family="Times,serif" font-size="14.00">current</text>
+<text text-anchor="start" x="3118.5" y="-744.8" font-family="Times,serif" font-size="14.00">current_adjustable : bool</text>
+<text text-anchor="start" x="3118.5" y="-729.8" font-family="Times,serif" font-size="14.00">gain</text>
+<text text-anchor="start" x="3118.5" y="-714.8" font-family="Times,serif" font-size="14.00">gain : int, float</text>
+<text text-anchor="start" x="3118.5" y="-699.8" font-family="Times,serif" font-size="14.00">mcp_board : MCP23008</text>
+<text text-anchor="start" x="3118.5" y="-684.8" font-family="Times,serif" font-size="14.00">pin0 : DigitalInOut</text>
+<text text-anchor="start" x="3118.5" y="-669.8" font-family="Times,serif" font-size="14.00">pin1 : DigitalInOut</text>
+<text text-anchor="start" x="3118.5" y="-654.8" font-family="Times,serif" font-size="14.00">polarity</text>
+<text text-anchor="start" x="3118.5" y="-639.8" font-family="Times,serif" font-size="14.00">polarity : int</text>
+<text text-anchor="start" x="3118.5" y="-624.8" font-family="Times,serif" font-size="14.00">r_shunt</text>
+<text text-anchor="start" x="3118.5" y="-609.8" font-family="Times,serif" font-size="14.00">tx_bat</text>
+<text text-anchor="start" x="3118.5" y="-594.8" font-family="Times,serif" font-size="14.00">voltage_adjustable : bool</text>
+<polyline fill="none" stroke="black" points="3110.5,-587 3406.5,-587 "/>
+<text text-anchor="start" x="3118.5" y="-571.8" font-family="Times,serif" font-size="14.00">current_pulse()</text>
+<text text-anchor="start" x="3118.5" y="-556.8" font-family="Times,serif" font-size="14.00">gain_auto()</text>
+<text text-anchor="start" x="3118.5" y="-541.8" font-family="Times,serif" font-size="14.00">inject(polarity, injection_duration)</text>
+<text text-anchor="start" x="3118.5" y="-526.8" font-family="Times,serif" font-size="14.00">turn_off()</text>
+<text text-anchor="start" x="3118.5" y="-511.8" font-family="Times,serif" font-size="14.00">turn_on()</text>
+<text text-anchor="start" x="3118.5" y="-496.8" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
 </g>
 <!-- 22 -->
 <g id="node23" class="node">
 <title>22</title>
-<polygon fill="none" stroke="black" points="3379.5,-534 3379.5,-813 3675.5,-813 3675.5,-534 3379.5,-534"/>
-<text text-anchor="middle" x="3527.5" y="-797.8" font-family="Times,serif" font-size="14.00">TxAbstract</text>
-<polyline fill="none" stroke="black" points="3379.5,-790 3675.5,-790 "/>
-<text text-anchor="start" x="3387.5" y="-774.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="3387.5" y="-759.8" font-family="Times,serif" font-size="14.00">board_name</text>
-<text text-anchor="start" x="3387.5" y="-744.8" font-family="Times,serif" font-size="14.00">connection</text>
-<text text-anchor="start" x="3387.5" y="-729.8" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="3387.5" y="-714.8" font-family="Times,serif" font-size="14.00">exec_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="3387.5" y="-699.8" font-family="Times,serif" font-size="14.00">injection_duration</text>
-<text text-anchor="start" x="3387.5" y="-684.8" font-family="Times,serif" font-size="14.00">injection_duration</text>
-<text text-anchor="start" x="3387.5" y="-669.8" font-family="Times,serif" font-size="14.00">polarity</text>
-<text text-anchor="start" x="3387.5" y="-654.8" font-family="Times,serif" font-size="14.00">pwr</text>
-<text text-anchor="start" x="3387.5" y="-639.8" font-family="Times,serif" font-size="14.00">soh_logger : NoneType, RootLogger</text>
-<text text-anchor="start" x="3387.5" y="-624.8" font-family="Times,serif" font-size="14.00">tx_bat</text>
-<text text-anchor="start" x="3387.5" y="-609.8" font-family="Times,serif" font-size="14.00">tx_sync</text>
-<polyline fill="none" stroke="black" points="3379.5,-602 3675.5,-602 "/>
-<text text-anchor="start" x="3387.5" y="-586.8" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
-<text text-anchor="start" x="3387.5" y="-571.8" font-family="Times,serif" font-size="14.00">current_pulse()</text>
-<text text-anchor="start" x="3387.5" y="-556.8" font-family="Times,serif" font-size="14.00">inject(polarity, injection_duration)</text>
-<text text-anchor="start" x="3387.5" y="-541.8" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
+<polygon fill="none" stroke="black" points="2797.5,-963.5 2797.5,-1212.5 3145.5,-1212.5 3145.5,-963.5 2797.5,-963.5"/>
+<text text-anchor="middle" x="2971.5" y="-1197.3" font-family="Times,serif" font-size="14.00">TxAbstract</text>
+<polyline fill="none" stroke="black" points="2797.5,-1189.5 3145.5,-1189.5 "/>
+<text text-anchor="start" x="2805.5" y="-1174.3" font-family="Times,serif" font-size="14.00">adc_gain</text>
+<text text-anchor="start" x="2805.5" y="-1159.3" font-family="Times,serif" font-size="14.00">connection</text>
+<text text-anchor="start" x="2805.5" y="-1144.3" font-family="Times,serif" font-size="14.00">exec_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="2805.5" y="-1129.3" font-family="Times,serif" font-size="14.00">injection_duration</text>
+<text text-anchor="start" x="2805.5" y="-1114.3" font-family="Times,serif" font-size="14.00">injection_duration</text>
+<text text-anchor="start" x="2805.5" y="-1099.3" font-family="Times,serif" font-size="14.00">model</text>
+<text text-anchor="start" x="2805.5" y="-1084.3" font-family="Times,serif" font-size="14.00">polarity</text>
+<text text-anchor="start" x="2805.5" y="-1069.3" font-family="Times,serif" font-size="14.00">pwr</text>
+<text text-anchor="start" x="2805.5" y="-1054.3" font-family="Times,serif" font-size="14.00">soh_logger : RootLogger, NoneType</text>
+<text text-anchor="start" x="2805.5" y="-1039.3" font-family="Times,serif" font-size="14.00">tx_bat</text>
+<text text-anchor="start" x="2805.5" y="-1024.3" font-family="Times,serif" font-size="14.00">tx_sync</text>
+<polyline fill="none" stroke="black" points="2797.5,-1016.5 3145.5,-1016.5 "/>
+<text text-anchor="start" x="2805.5" y="-1001.3" font-family="Times,serif" font-size="14.00">current_pulse()</text>
+<text text-anchor="start" x="2805.5" y="-986.3" font-family="Times,serif" font-size="14.00">inject(polarity, injection_duration, switch_pwr)</text>
+<text text-anchor="start" x="2805.5" y="-971.3" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
 </g>
 <!-- 19&#45;&gt;22 -->
 <g id="edge11" class="edge">
 <title>19&#45;&gt;22</title>
-<path fill="none" stroke="black" d="M3325.53,-354.75C3361.06,-410.64 3399.94,-471.81 3434.02,-525.43"/>
-<polygon fill="none" stroke="black" points="3431.13,-527.4 3439.44,-533.97 3437.03,-523.65 3431.13,-527.4"/>
+<path fill="none" stroke="black" d="M3164.19,-828.18C3144.34,-861.17 3122.9,-895.1 3101.5,-926 3094.87,-935.57 3087.83,-945.31 3080.6,-955"/>
+<polygon fill="none" stroke="black" points="3077.69,-953.04 3074.48,-963.13 3083.29,-957.25 3077.69,-953.04"/>
 </g>
 <!-- 20 -->
 <g id="node21" class="node">
 <title>20</title>
-<polygon fill="none" stroke="black" points="3379.5,-83 3379.5,-272 3675.5,-272 3675.5,-83 3379.5,-83"/>
-<text text-anchor="middle" x="3527.5" y="-256.8" font-family="Times,serif" font-size="14.00">Tx</text>
-<polyline fill="none" stroke="black" points="3379.5,-249 3675.5,-249 "/>
-<text text-anchor="start" x="3387.5" y="-233.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="3387.5" y="-218.8" font-family="Times,serif" font-size="14.00">adc_gain : float</text>
-<text text-anchor="start" x="3387.5" y="-203.8" font-family="Times,serif" font-size="14.00">current</text>
-<text text-anchor="start" x="3387.5" y="-188.8" font-family="Times,serif" font-size="14.00">polarity : int</text>
-<text text-anchor="start" x="3387.5" y="-173.8" font-family="Times,serif" font-size="14.00">tx_bat</text>
-<text text-anchor="start" x="3387.5" y="-158.8" font-family="Times,serif" font-size="14.00">voltage</text>
-<polyline fill="none" stroke="black" points="3379.5,-151 3675.5,-151 "/>
-<text text-anchor="start" x="3387.5" y="-135.8" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
-<text text-anchor="start" x="3387.5" y="-120.8" font-family="Times,serif" font-size="14.00">current_pulse()</text>
-<text text-anchor="start" x="3387.5" y="-105.8" font-family="Times,serif" font-size="14.00">inject(state)</text>
-<text text-anchor="start" x="3387.5" y="-90.8" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
+<polygon fill="none" stroke="black" points="2796.5,-564 2796.5,-753 3092.5,-753 3092.5,-564 2796.5,-564"/>
+<text text-anchor="middle" x="2944.5" y="-737.8" font-family="Times,serif" font-size="14.00">Tx</text>
+<polyline fill="none" stroke="black" points="2796.5,-730 3092.5,-730 "/>
+<text text-anchor="start" x="2804.5" y="-714.8" font-family="Times,serif" font-size="14.00">adc_gain</text>
+<text text-anchor="start" x="2804.5" y="-699.8" font-family="Times,serif" font-size="14.00">adc_gain : float</text>
+<text text-anchor="start" x="2804.5" y="-684.8" font-family="Times,serif" font-size="14.00">current</text>
+<text text-anchor="start" x="2804.5" y="-669.8" font-family="Times,serif" font-size="14.00">polarity : int</text>
+<text text-anchor="start" x="2804.5" y="-654.8" font-family="Times,serif" font-size="14.00">tx_bat</text>
+<text text-anchor="start" x="2804.5" y="-639.8" font-family="Times,serif" font-size="14.00">voltage</text>
+<polyline fill="none" stroke="black" points="2796.5,-632 3092.5,-632 "/>
+<text text-anchor="start" x="2804.5" y="-616.8" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
+<text text-anchor="start" x="2804.5" y="-601.8" font-family="Times,serif" font-size="14.00">current_pulse()</text>
+<text text-anchor="start" x="2804.5" y="-586.8" font-family="Times,serif" font-size="14.00">inject(state)</text>
+<text text-anchor="start" x="2804.5" y="-571.8" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
 </g>
 <!-- 20&#45;&gt;22 -->
 <g id="edge12" class="edge">
 <title>20&#45;&gt;22</title>
-<path fill="none" stroke="black" d="M3527.5,-272.29C3527.5,-343.13 3527.5,-441.77 3527.5,-523.39"/>
-<polygon fill="none" stroke="black" points="3524,-523.77 3527.5,-533.77 3531,-523.77 3524,-523.77"/>
+<path fill="none" stroke="black" d="M2950.41,-753.05C2954.11,-811.6 2958.93,-887.97 2963.03,-952.9"/>
+<polygon fill="none" stroke="black" points="2959.56,-953.46 2963.68,-963.22 2966.54,-953.02 2959.56,-953.46"/>
 </g>
 <!-- 21 -->
 <g id="node22" class="node">
 <title>21</title>
-<polygon fill="none" stroke="black" points="3693.5,-0.5 3693.5,-354.5 3989.5,-354.5 3989.5,-0.5 3693.5,-0.5"/>
-<text text-anchor="middle" x="3841.5" y="-339.3" font-family="Times,serif" font-size="14.00">Tx</text>
-<polyline fill="none" stroke="black" points="3693.5,-331.5 3989.5,-331.5 "/>
-<text text-anchor="start" x="3701.5" y="-316.3" font-family="Times,serif" font-size="14.00">adc_gain</text>
-<text text-anchor="start" x="3701.5" y="-301.3" font-family="Times,serif" font-size="14.00">adc_gain : int, float</text>
-<text text-anchor="start" x="3701.5" y="-286.3" font-family="Times,serif" font-size="14.00">ctl</text>
-<text text-anchor="start" x="3701.5" y="-271.3" font-family="Times,serif" font-size="14.00">current</text>
-<text text-anchor="start" x="3701.5" y="-256.3" font-family="Times,serif" font-size="14.00">current_adjustable : bool</text>
-<text text-anchor="start" x="3701.5" y="-241.3" font-family="Times,serif" font-size="14.00">io</text>
-<text text-anchor="start" x="3701.5" y="-226.3" font-family="Times,serif" font-size="14.00">mcp_board : MCP23008</text>
-<text text-anchor="start" x="3701.5" y="-211.3" font-family="Times,serif" font-size="14.00">pin0 : DigitalInOut</text>
-<text text-anchor="start" x="3701.5" y="-196.3" font-family="Times,serif" font-size="14.00">pin1 : DigitalInOut</text>
-<text text-anchor="start" x="3701.5" y="-181.3" font-family="Times,serif" font-size="14.00">pin4 : DigitalInOut</text>
-<text text-anchor="start" x="3701.5" y="-166.3" font-family="Times,serif" font-size="14.00">polarity</text>
-<text text-anchor="start" x="3701.5" y="-151.3" font-family="Times,serif" font-size="14.00">polarity : int</text>
-<text text-anchor="start" x="3701.5" y="-136.3" font-family="Times,serif" font-size="14.00">pwr : NoneType</text>
-<text text-anchor="start" x="3701.5" y="-121.3" font-family="Times,serif" font-size="14.00">tx_bat</text>
-<text text-anchor="start" x="3701.5" y="-106.3" font-family="Times,serif" font-size="14.00">voltage_adjustable : bool</text>
-<polyline fill="none" stroke="black" points="3693.5,-98.5 3989.5,-98.5 "/>
-<text text-anchor="start" x="3701.5" y="-83.3" font-family="Times,serif" font-size="14.00">adc_gain_auto()</text>
-<text text-anchor="start" x="3701.5" y="-68.3" font-family="Times,serif" font-size="14.00">current_pulse()</text>
-<text text-anchor="start" x="3701.5" y="-53.3" font-family="Times,serif" font-size="14.00">inject(polarity, injection_duration)</text>
-<text text-anchor="start" x="3701.5" y="-38.3" font-family="Times,serif" font-size="14.00">turn_off()</text>
-<text text-anchor="start" x="3701.5" y="-23.3" font-family="Times,serif" font-size="14.00">turn_on()</text>
-<text text-anchor="start" x="3701.5" y="-8.3" font-family="Times,serif" font-size="14.00">voltage_pulse(voltage, length, polarity)</text>
-</g>
-<!-- 21&#45;&gt;22 -->
+<polygon fill="none" stroke="black" points="3129.5,-128 3129.5,-212 3387.5,-212 3387.5,-128 3129.5,-128"/>
+<text text-anchor="middle" x="3258.5" y="-196.8" font-family="Times,serif" font-size="14.00">Tx</text>
+<polyline fill="none" stroke="black" points="3129.5,-189 3387.5,-189 "/>
+<text text-anchor="start" x="3137.5" y="-173.8" font-family="Times,serif" font-size="14.00">pin4 : DigitalInOut</text>
+<text text-anchor="start" x="3137.5" y="-158.8" font-family="Times,serif" font-size="14.00">pin6 : DigitalInOut</text>
+<polyline fill="none" stroke="black" points="3129.5,-151 3387.5,-151 "/>
+<text text-anchor="start" x="3137.5" y="-135.8" font-family="Times,serif" font-size="14.00">inject(polarity, injection_duration)</text>
+</g>
+<!-- 21&#45;&gt;19 -->
 <g id="edge13" class="edge">
-<title>21&#45;&gt;22</title>
-<path fill="none" stroke="black" d="M3729.47,-354.75C3693.94,-410.64 3655.06,-471.81 3620.98,-525.43"/>
-<polygon fill="none" stroke="black" points="3617.97,-523.65 3615.56,-533.97 3623.87,-527.4 3617.97,-523.65"/>
+<title>21&#45;&gt;19</title>
+<path fill="none" stroke="black" d="M3258.5,-212.06C3258.5,-270.69 3258.5,-382.01 3258.5,-478.7"/>
+<polygon fill="none" stroke="black" points="3255,-478.9 3258.5,-488.9 3262,-478.9 3255,-478.9"/>
 </g>
 </g>
 </svg>
diff --git a/uml_diagrams/packages_uml_ohmpi.dot b/uml_diagrams/packages_uml_ohmpi.dot
index d57d3be5340fdd6260e8e1ad79514cddfe78b9ac..4787367abeedbbc969f197112ee8f264182f22ac 100644
--- a/uml_diagrams/packages_uml_ohmpi.dot
+++ b/uml_diagrams/packages_uml_ohmpi.dot
@@ -36,17 +36,18 @@ rankdir=BT
 "8" -> "21" [arrowhead="open", arrowtail="none"];
 "9" -> "2" [arrowhead="open", arrowtail="none"];
 "9" -> "4" [arrowhead="open", arrowtail="none"];
-"10" -> "2" [arrowhead="open", arrowtail="none"];
 "10" -> "4" [arrowhead="open", arrowtail="none"];
-"11" -> "2" [arrowhead="open", arrowtail="none"];
-"11" -> "4" [arrowhead="open", arrowtail="none"];
-"12" -> "2" [arrowhead="open", arrowtail="none"];
+"10" -> "23" [arrowhead="open", arrowtail="none"];
+"11" -> "10" [arrowhead="open", arrowtail="none"];
+"11" -> "23" [arrowhead="open", arrowtail="none"];
 "12" -> "4" [arrowhead="open", arrowtail="none"];
-"13" -> "2" [arrowhead="open", arrowtail="none"];
+"12" -> "23" [arrowhead="open", arrowtail="none"];
 "13" -> "4" [arrowhead="open", arrowtail="none"];
+"13" -> "23" [arrowhead="open", arrowtail="none"];
 "14" -> "5" [arrowhead="open", arrowtail="none"];
-"15" -> "2" [arrowhead="open", arrowtail="none"];
+"14" -> "23" [arrowhead="open", arrowtail="none"];
 "15" -> "5" [arrowhead="open", arrowtail="none"];
+"15" -> "23" [arrowhead="open", arrowtail="none"];
 "16" -> "4" [arrowhead="open", arrowtail="none"];
 "16" -> "23" [arrowhead="open", arrowtail="none"];
 "17" -> "2" [arrowhead="open", arrowtail="none"];
diff --git a/uml_diagrams/packages_uml_ohmpi.dot.png b/uml_diagrams/packages_uml_ohmpi.dot.png
index f69d4ef240878b1c8cd6aa39ccc36c315bb221db..ac4fcbfe2fe7a3e9762808694e8ad277a777f9ec 100644
Binary files a/uml_diagrams/packages_uml_ohmpi.dot.png and b/uml_diagrams/packages_uml_ohmpi.dot.png differ