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