Commit 03c47ced authored by Olivier Kaufmann's avatar Olivier Kaufmann
Browse files

Fixes requirements ans ohmpi.py

Showing with 51 additions and 51 deletions
+51 -51
......@@ -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
......@@ -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
......
......@@ -7,4 +7,4 @@ adafruit-circuitpython-tca9548a
adafruit-circuitpython-mcp230xx
gpiozero
termcolor
board
pandas
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment