From f0e57101286a5105c1c9120772687a7e243f0f0f Mon Sep 17 00:00:00 2001 From: su530201 <olivier.kaufmann@umons.ac.be> Date: Sun, 6 Mar 2022 19:36:10 +0100 Subject: [PATCH] Refactors settings.py into config.py and renames msg logger to exec logger as its purpose is to log the execution steps... --- settings.py => config.py | 23 ++++++++++++++++------- logging_setup.py | 40 ++++++++++++++++++++++------------------ ohmpi.py | 7 ++++--- 3 files changed, 42 insertions(+), 28 deletions(-) rename settings.py => config.py (72%) diff --git a/settings.py b/config.py similarity index 72% rename from settings.py rename to config.py index f2d7d443..30cba482 100644 --- a/settings.py +++ b/config.py @@ -9,14 +9,14 @@ OHMPI_CONFIG = { 'coef_p3': 2.50, # slope for current conversion for ADS.P3, measurement in V/V 'offset_p2': 0, 'offset_p3': 0, - 'integer': 2, # Max value 10 WHAT IS THIS? + 'integer': 2, # Max value 10 # TODO: Explain what this is... 'version': 2, 'max_elec': 64, 'board_address': {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} # def. {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} } -# local messages logging configuration -LOGGING_CONFIG = { +# Execution logging configuration +EXEC_LOGGING_CONFIG = { 'debug_mode': False, 'logging_to_console': False, 'file_name': 'ohmpi_log', @@ -26,7 +26,7 @@ LOGGING_CONFIG = { 'interval': 1 } -# local data logging configuration +# Data logging configuration DATA_LOGGING_CONFIG = { 'file_name': 'data_log', 'max_bytes': 16777216, @@ -35,7 +35,16 @@ DATA_LOGGING_CONFIG = { 'interval': 1 } -# MQTT configuration parameters +# State of Health logging configuration +SOH_LOGGING_CONFIG = { + 'file_name': 'soh_log', + 'max_bytes': 16777216, + 'backup_count': 1024, + 'when': 'd', + 'interval': 1 +} + +# MQTT logging configuration parameters MQTT_LOGGING_CONFIG = { 'hostname': 'ohmpy.umons.ac.be', 'port': 1883, @@ -48,8 +57,8 @@ MQTT_LOGGING_CONFIG = { 'protocol': MQTTv31, 'transport': 'tcp', 'client_id': f'ohmpi_sn_{OHMPI_CONFIG["id"]}', - 'control_topic': f'cmd_ohmpi_sn_{OHMPI_CONFIG["id"]}', - 'msg_topic': f'msg_ohmpi_sn_{OHMPI_CONFIG["id"]}', + 'control_topic': f'ctrl_ohmpi_sn_{OHMPI_CONFIG["id"]}', + 'exec_topic': f'exec_ohmpi_sn_{OHMPI_CONFIG["id"]}', 'data_topic': f'data_ohmpi_sn_{OHMPI_CONFIG["id"]}', 'soh_topic': f'soh_ohmpi_sn_{OHMPI_CONFIG["id"]}' } diff --git a/logging_setup.py b/logging_setup.py index c8061721..cc939c02 100644 --- a/logging_setup.py +++ b/logging_setup.py @@ -1,6 +1,5 @@ -import os - -from settings import LOGGING_CONFIG, DATA_LOGGING_CONFIG, MQTT_LOGGING_CONFIG +import json +from config import EXEC_LOGGING_CONFIG, DATA_LOGGING_CONFIG, MQTT_LOGGING_CONFIG from os import path, mkdir, statvfs from time import gmtime import logging @@ -13,8 +12,8 @@ def setup_loggers(mqtt=True): log_path = path.join(path.dirname(__file__), 'logs') if not path.isdir(log_path): mkdir(log_path) - msg_log_filename = path.join(log_path, 'msg_log') - msg_logger = logging.getLogger('msg_logger') + exec_log_filename = path.join(log_path, 'msg_log') + exec_logger = logging.getLogger('exec_logger') # SOH logging setup # TODO: Add state of health logging here @@ -28,7 +27,7 @@ def setup_loggers(mqtt=True): data_logger = logging.getLogger('data_logger') # Debug and logging - debug = LOGGING_CONFIG['debug_mode'] + debug = EXEC_LOGGING_CONFIG['debug_mode'] if debug: logging_level = logging.DEBUG else: @@ -36,25 +35,25 @@ def setup_loggers(mqtt=True): # Set message logging format and level log_format = '%(asctime)-15s | %(process)d | %(levelname)s: %(message)s' - logging_to_console = LOGGING_CONFIG['logging_to_console'] - msg_handler = CompressedSizedTimedRotatingFileHandler(msg_log_filename, max_bytes=LOGGING_CONFIG['max_bytes'], - backup_count=LOGGING_CONFIG['backup_count'], - when=LOGGING_CONFIG['when'], - interval=LOGGING_CONFIG['interval']) + logging_to_console = EXEC_LOGGING_CONFIG['logging_to_console'] + msg_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) - msg_logger.addHandler(msg_handler) - msg_logger.setLevel(logging_level) + exec_logger.addHandler(msg_handler) + exec_logger.setLevel(logging_level) if logging_to_console: - msg_logger.addHandler(logging.StreamHandler()) + exec_logger.addHandler(logging.StreamHandler()) if mqtt: - mqtt_msg_handler = MQTTHandler(MQTT_LOGGING_CONFIG['hostname'], MQTT_LOGGING_CONFIG['msg_topic']) + 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) - msg_logger.addHandler(mqtt_msg_handler) + exec_logger.addHandler(mqtt_msg_handler) # Set data logging level and handler data_logger.setLevel(logging.INFO) @@ -65,9 +64,9 @@ def setup_loggers(mqtt=True): interval=DATA_LOGGING_CONFIG['interval']) data_logger.addHandler(data_handler) - if not init_logging(msg_logger, logging_level, log_path, data_log_filename): + if not init_logging(exec_logger, logging_level, log_path, data_log_filename): print('ERROR: Could not initialize logging!') - return msg_logger, msg_log_filename, data_logger, data_log_filename, logging_level + 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): @@ -89,6 +88,11 @@ def init_logging(msg_logger, logging_level, log_path, data_log_filename): msg_logger.info('Saving data log to ' + data_log_filename) msg_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}') return init_logging_status diff --git a/ohmpi.py b/ohmpi.py index 50f1429d..bb43a99c 100644 --- a/ohmpi.py +++ b/ohmpi.py @@ -160,7 +160,7 @@ class OhmPi(object): def _read_hardware_parameters(self): """Read hardware parameters from settings.py. """ - from settings import OHMPI_CONFIG + from config import OHMPI_CONFIG 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 @@ -606,9 +606,9 @@ class OhmPi(object): self.log_msg('status = ' + self.status) -msg_logger, msg_log_filename, data_logger, data_log_filename, logging_level = setup_loggers() +exec_logger, exec_log_filename, data_logger, data_log_filename, logging_level = setup_loggers() # TODO: add SOH # mqtt_client, measurement_topic = mqtt_client_setup() -# msg_logger.info(f'publishing mqtt to topic {measurement_topic}') + VERSION = '2.0.1' print(colored(r' ________________________________' + '\n' + @@ -622,6 +622,7 @@ print('Version:', VERSION) platform, on_pi = OhmPi.get_platform() if on_pi: print(colored(f'Running on {platform} platform', 'green')) + # TODO: check model for compatible platforms (e.g. Raspberry Pi 3B is not supported...) and emit a warning otherwise if not arm64_imports: print(colored(f'Warning: Required packages are missing.\n' f'Please run . env.sh at command prompt to update your virtual environment\n', 'yellow')) -- GitLab