From 03c47ced9382c48400b034cc9890365d57aedbbb Mon Sep 17 00:00:00 2001
From: su530201 <olivier.kaufmann@umons.ac.be>
Date: Mon, 7 Mar 2022 15:34:34 +0100
Subject: [PATCH] Fixes requirements ans ohmpi.py

---
 logging_setup.py | 42 +++++++++++++++++------------------
 ohmpi.py         | 58 ++++++++++++++++++++++++------------------------
 requirements.txt |  2 +-
 3 files changed, 51 insertions(+), 51 deletions(-)

diff --git a/logging_setup.py b/logging_setup.py
index cc939c02..232e6663 100644
--- a/logging_setup.py
+++ b/logging_setup.py
@@ -36,15 +36,15 @@ def setup_loggers(mqtt=True):
     # Set message logging format and level
     log_format = '%(asctime)-15s | %(process)d | %(levelname)s: %(message)s'
     logging_to_console = EXEC_LOGGING_CONFIG['logging_to_console']
-    msg_handler = CompressedSizedTimedRotatingFileHandler(exec_log_filename, max_bytes=EXEC_LOGGING_CONFIG['max_bytes'],
+    exec_handler = CompressedSizedTimedRotatingFileHandler(exec_log_filename, max_bytes=EXEC_LOGGING_CONFIG['max_bytes'],
                                                           backup_count=EXEC_LOGGING_CONFIG['backup_count'],
                                                           when=EXEC_LOGGING_CONFIG['when'],
                                                           interval=EXEC_LOGGING_CONFIG['interval'])
-    msg_formatter = logging.Formatter(log_format)
-    msg_formatter.converter = gmtime
-    msg_formatter.datefmt = '%Y/%m/%d %H:%M:%S UTC'
-    msg_handler.setFormatter(msg_formatter)
-    exec_logger.addHandler(msg_handler)
+    exec_formatter = logging.Formatter(log_format)
+    exec_formatter.converter = gmtime
+    exec_formatter.datefmt = '%Y/%m/%d %H:%M:%S UTC'
+    exec_handler.setFormatter(exec_formatter)
+    exec_logger.addHandler(exec_handler)
     exec_logger.setLevel(logging_level)
 
     if logging_to_console:
@@ -52,7 +52,7 @@ def setup_loggers(mqtt=True):
     if mqtt:
         mqtt_msg_handler = MQTTHandler(MQTT_LOGGING_CONFIG['hostname'], MQTT_LOGGING_CONFIG['exec_topic'])
         mqtt_msg_handler.setLevel(logging_level)
-        mqtt_msg_handler.setFormatter(msg_formatter)
+        mqtt_msg_handler.setFormatter(exec_formatter)
         exec_logger.addHandler(mqtt_msg_handler)
 
     # Set data logging level and handler
@@ -69,30 +69,30 @@ def setup_loggers(mqtt=True):
     return exec_logger, exec_log_filename, data_logger, data_log_filename, logging_level
 
 
-def init_logging(msg_logger, logging_level, log_path, data_log_filename):
+def init_logging(exec_logger, logging_level, log_path, data_log_filename):
     """ This is the init sequence for the logging system """
 
     init_logging_status = True
-    msg_logger.info('')
-    msg_logger.info('****************************')
-    msg_logger.info('*** NEW SESSION STARTING ***')
-    msg_logger.info('****************************')
-    msg_logger.info('')
-    msg_logger.info('Logging level: %s' % logging_level)
+    exec_logger.info('')
+    exec_logger.info('****************************')
+    exec_logger.info('*** NEW SESSION STARTING ***')
+    exec_logger.info('****************************')
+    exec_logger.info('')
+    exec_logger.info('Logging level: %s' % logging_level)
     try:
         st = statvfs('.')
         available_space = st.f_bavail * st.f_frsize / 1024 / 1024
-        msg_logger.info(f'Remaining disk space : {available_space:.1f} MB')
+        exec_logger.info(f'Remaining disk space : {available_space:.1f} MB')
     except Exception as e:
-        msg_logger.debug('Unable to get remaining disk space: {e}')
-    msg_logger.info('Saving data log to ' + data_log_filename)
-    msg_logger.info('OhmPi settings:')
+        exec_logger.debug('Unable to get remaining disk space: {e}')
+    exec_logger.info('Saving data log to ' + data_log_filename)
+    exec_logger.info('OhmPi settings:')
     # TODO Add OhmPi settings
     config_dict = {'execution logging configuration': json.dumps(EXEC_LOGGING_CONFIG, indent=4),
                    'data logging configuration': json.dumps(DATA_LOGGING_CONFIG, indent=4),
                    'mqtt logging configuration': json.dumps(MQTT_LOGGING_CONFIG, indent=4)}
     for k, v in config_dict.items():
-        msg_logger.info(f'{k}:\n{v}')
-    msg_logger.info('')
-    msg_logger.info(f'init_logging_status: {init_logging_status}')
+        exec_logger.info(f'{k}:\n{v}')
+    exec_logger.info('')
+    exec_logger.info(f'init_logging_status: {init_logging_status}')
     return init_logging_status
diff --git a/ohmpi.py b/ohmpi.py
index bb43a99c..649857cb 100644
--- a/ohmpi.py
+++ b/ohmpi.py
@@ -55,7 +55,7 @@ class OhmPi(object):
         Either 'print' for a console output or 'mqtt' for publication onto
         MQTT broker.
     """
-    def __init__(self, config=None, sequence=None, output='print', data_logger=None, msg_logger=None, soh_logger=None,
+    def __init__(self, config=None, sequence=None, output='print', data_logger=None, exec_logger=None, soh_logger=None,
                  on_pi=None):
         # flags and attributes
         if on_pi is None:
@@ -67,7 +67,7 @@ class OhmPi(object):
         self.thread = None  # contains the handle for the thread taking the measurement
         self.path = 'data/'  # where to save the .csv
         self.data_logger = data_logger
-        self.msg_logger = msg_logger
+        self.exec_logger = exec_logger
         self.soh_logger = soh_logger
 
         # read in hardware parameters (settings.py)
@@ -86,7 +86,7 @@ class OhmPi(object):
         if config is not None:
             self._read_acquisition_parameters(config)
 
-        self.log_msg('Initialized with configuration:' + str(self.pardict), level='debug')
+        self.log_exec('Initialized with configuration:' + str(self.pardict), level='debug')
     
         # read quadrupole sequence
         if sequence is None:
@@ -108,7 +108,7 @@ class OhmPi(object):
             # ADS1115 for voltage measurement (MN)
             self.ads_voltage = ads.ADS1115(self.i2c, gain=2/3, data_rate=860, address=0x49)
 
-    def log_msg(self, msg, level='debug'):
+    def log_exec(self, msg, level='debug'):
         """Function for output management.
 
         Parameters
@@ -120,8 +120,8 @@ class OhmPi(object):
         """
         # TODO all message to be logged using python logging library and rotating log
 
-        if self.msg_logger is not None:
-            self.msg_logger.info(msg)
+        if self.exec_logger is not None:
+            self.exec_logger.info(msg)
         # if self.output == 'print':
         #     if level == 'error':
         #         print(colored(level.upper() + ' : ' + msg, 'red'))
@@ -155,7 +155,7 @@ class OhmPi(object):
             with open(config) as json_file:
                 dic = json.load(json_file)
             self.pardict.update(dic)
-        self.log_msg('Acquisition parameters updated: ' + str(self.pardict), level='debug')
+        self.log_exec('Acquisition parameters updated: ' + str(self.pardict), level='debug')
 
     def _read_hardware_parameters(self):
         """Read hardware parameters from settings.py.
@@ -164,7 +164,7 @@ class OhmPi(object):
         self.id = OHMPI_CONFIG['id']  # ID of the OhmPi
         self.r_shunt = OHMPI_CONFIG['R_shunt']  # reference resistance value in ohm
         self.Imax = OHMPI_CONFIG['Imax']  # maximum current
-        self.log_msg(f'The maximum current cannot be higher than {self.Imax} mA', level='warn')
+        self.log_exec(f'The maximum current cannot be higher than {self.Imax} mA', level='warn')
         self.coef_p2 = OHMPI_CONFIG['coef_p2']  # slope for current conversion for ads.P2, measurement in V/V
         self.coef_p3 = OHMPI_CONFIG['coef_p3']  # slope for current conversion for ads.P3, measurement in V/V
         self.offset_p2 = OHMPI_CONFIG['offset_p2']
@@ -173,7 +173,7 @@ class OhmPi(object):
         self.version = OHMPI_CONFIG['version']  # hardware version
         self.max_elec = OHMPI_CONFIG['max_elec']  # maximum number of electrodes
         self.board_address = OHMPI_CONFIG['board_address']
-        self.log_msg('OHMPI_CONFIG = ' + str(OHMPI_CONFIG), level='debug')
+        self.log_exec('OHMPI_CONFIG = ' + str(OHMPI_CONFIG), level='debug')
 
     @staticmethod
     def find_identical_in_line(quads):
@@ -254,19 +254,19 @@ class OhmPi(object):
         # if statement with exit cases (TODO rajouter un else if pour le deuxième cas du ticket #2)
         if test_index_elec.size != 0:
             for i in range(len(test_index_elec[0, :])):
-                self.log_msg('Error: An electrode index at line ' + str(test_index_elec[0, i] + 1) +
+                self.log_exec('Error: An electrode index at line ' + str(test_index_elec[0, i] + 1) +
                           ' exceeds the maximum number of electrodes', level='error')
             # sys.exit(1)
             output = None
         elif len(test_same_elec) != 0:
             for i in range(len(test_same_elec)):
-                self.log_msg('Error: An electrode index A == B detected at line ' + str(test_same_elec[i] + 1),
-                             level="error")
+                self.log_exec('Error: An electrode index A == B detected at line ' + str(test_same_elec[i] + 1),
+                              level="error")
             # sys.exit(1)
             output = None
 
         if output is not None:
-            self.log_msg('Sequence of {:d} quadrupoles read.'.format(output.shape[0]), level='debug')
+            self.log_exec('Sequence of {:d} quadrupoles read.'.format(output.shape[0]), level='debug')
     
         self.sequence = output
 
@@ -319,9 +319,9 @@ class OhmPi(object):
                 else:
                     mcp2.get_pin(relay_nr-1).value = False
                 
-                self.log_msg(f'Switching relay {relay_nr} {state} for electrode {electrode_nr}', level='debug')
+                self.log_exec(f'Switching relay {relay_nr} {state} for electrode {electrode_nr}', level='debug')
             else:
-                self.log_msg(f'Unable to address electrode nr {electrode_nr}', level='warn')
+                self.log_exec(f'Unable to address electrode nr {electrode_nr}', level='warn')
 
     def switch_mux_on(self, quadrupole):
         """Switch on multiplexer relays for given quadrupole.
@@ -337,7 +337,7 @@ class OhmPi(object):
             for i in range(0, 4):
                 self.switch_mux(quadrupole[i], 'on', roles[i])
         else:
-            self.log_msg('A == B -> short circuit detected!', level='error')
+            self.log_exec('A == B -> short circuit detected!', level='error')
 
     def switch_mux_off(self, quadrupole):
         """Switch off multiplexer relays for given quadrupole.
@@ -357,7 +357,7 @@ class OhmPi(object):
         for i in range(0, 4):
             for j in range(1, self.max_elec + 1):
                 self.switch_mux(j, 'off', roles[i])
-        self.log_msg('All MUX switched off.', level='debug')
+        self.log_exec('All MUX switched off.', level='debug')
 
     def run_measurement(self, quad, nb_stack=None, injection_duration=None):  # NOTE: quad not used?!
         """ Do a 4 electrode measurement and measure transfer resistance obtained.
@@ -460,16 +460,16 @@ class OhmPi(object):
         }
 
         # round number to two decimal for nicer string output
-        output = [f'{d[k]}\t' for k in d.keys]
-        output = output[:-1] + '\n'
-        for k in d.keys:
+        output = [f'{k}\t' for k in d.keys()]
+        output = str(output)[:-1] + '\n'
+        for k in d.keys():
             if isinstance(d[k], float):
                 val = np.round(d[k], 2)
             else:
                 val = d[k]
                 output += f'{val}\t'
         output = output[:-1]
-        self.log_msg(output, level='debug')
+        self.log_exec(output, level='debug')
         time.sleep(1)  # NOTE: why this?
 
         return d
@@ -495,7 +495,7 @@ class OhmPi(object):
         self.sequence = quads
         
         # run the RS check
-        self.log_msg('RS check (check contact resistance)', level='debug')
+        self.log_exec('RS check (check contact resistance)', level='debug')
         self.measure()
         
         # restore
@@ -536,19 +536,19 @@ class OhmPi(object):
         """
         self.run = True
         self.status = 'running'
-        self.log_msg('status = ' + self.status, level='debug')
+        self.log_exec('status = ' + self.status, level='debug')
 
         def func():
             for g in range(0, self.pardict["nbr_meas"]):  # for time-lapse monitoring
                 if self.run is False:
-                    self.log_msg('INTERRUPTED', level='debug')
+                    self.log_exec('INTERRUPTED', level='debug')
                     break
                 t0 = time.time()
 
                 # create filename with timestamp
                 fname = self.pardict["export_path"].replace('.csv', '_' + datetime.now().strftime('%Y%m%dT%H%M%S')
                                                             + '.csv')
-                self.log_msg('saving to ' + fname, level='debug')
+                self.log_exec('saving to ' + fname, level='debug')
 
                 # make sure all multiplexer are off
                 self.reset_mux()
@@ -577,7 +577,7 @@ class OhmPi(object):
 
                     # save data and print in a text file
                     self.append_and_save(fname, current_measurement)
-                    self.log_msg('{:d}/{:d}'.format(i + 1, self.sequence.shape[0]), level='debug')
+                    self.log_exec('{:d}/{:d}'.format(i + 1, self.sequence.shape[0]), level='debug')
 
                 # compute time needed to take measurement and subtract it from interval
                 # between two sequence run (= sequence_delay)
@@ -587,8 +587,8 @@ class OhmPi(object):
                 if sleep_time < 0:
                     # it means that the measuring time took longer than the sequence delay
                     sleep_time = 0
-                    self.log_msg('The measuring time is longer than the sequence delay. Increase the sequence delay',
-                                 level='warn')
+                    self.log_exec('The measuring time is longer than the sequence delay. Increase the sequence delay',
+                                  level='warn')
 
                 # sleeping time between sequence
                 if self.pardict["nbr_meas"] > 1:
@@ -603,7 +603,7 @@ class OhmPi(object):
         self.run = False
         if self.thread is not None:
             self.thread.join()
-        self.log_msg('status = ' + self.status)
+        self.log_exec('status = ' + self.status)
 
 
 exec_logger, exec_log_filename, data_logger, data_log_filename, logging_level = setup_loggers()  # TODO: add SOH
diff --git a/requirements.txt b/requirements.txt
index ef9dd3ef..e203227f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,4 +7,4 @@ adafruit-circuitpython-tca9548a
 adafruit-circuitpython-mcp230xx
 gpiozero
 termcolor
-board
+pandas
-- 
GitLab