Commit f0e57101 authored by Olivier Kaufmann's avatar Olivier Kaufmann
Browse files

Refactors settings.py into config.py and renames msg logger to exec logger as...

Refactors settings.py into config.py and renames msg logger to exec logger as its purpose is to log the execution steps...
Showing with 42 additions and 28 deletions
+42 -28
...@@ -9,14 +9,14 @@ OHMPI_CONFIG = { ...@@ -9,14 +9,14 @@ OHMPI_CONFIG = {
'coef_p3': 2.50, # slope for current conversion for ADS.P3, measurement in V/V 'coef_p3': 2.50, # slope for current conversion for ADS.P3, measurement in V/V
'offset_p2': 0, 'offset_p2': 0,
'offset_p3': 0, 'offset_p3': 0,
'integer': 2, # Max value 10 WHAT IS THIS? 'integer': 2, # Max value 10 # TODO: Explain what this is...
'version': 2, 'version': 2,
'max_elec': 64, 'max_elec': 64,
'board_address': {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} # def. {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} 'board_address': {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} # def. {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70}
} }
# local messages logging configuration # Execution logging configuration
LOGGING_CONFIG = { EXEC_LOGGING_CONFIG = {
'debug_mode': False, 'debug_mode': False,
'logging_to_console': False, 'logging_to_console': False,
'file_name': 'ohmpi_log', 'file_name': 'ohmpi_log',
...@@ -26,7 +26,7 @@ LOGGING_CONFIG = { ...@@ -26,7 +26,7 @@ LOGGING_CONFIG = {
'interval': 1 'interval': 1
} }
# local data logging configuration # Data logging configuration
DATA_LOGGING_CONFIG = { DATA_LOGGING_CONFIG = {
'file_name': 'data_log', 'file_name': 'data_log',
'max_bytes': 16777216, 'max_bytes': 16777216,
...@@ -35,7 +35,16 @@ DATA_LOGGING_CONFIG = { ...@@ -35,7 +35,16 @@ DATA_LOGGING_CONFIG = {
'interval': 1 '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 = { MQTT_LOGGING_CONFIG = {
'hostname': 'ohmpy.umons.ac.be', 'hostname': 'ohmpy.umons.ac.be',
'port': 1883, 'port': 1883,
...@@ -48,8 +57,8 @@ MQTT_LOGGING_CONFIG = { ...@@ -48,8 +57,8 @@ MQTT_LOGGING_CONFIG = {
'protocol': MQTTv31, 'protocol': MQTTv31,
'transport': 'tcp', 'transport': 'tcp',
'client_id': f'ohmpi_sn_{OHMPI_CONFIG["id"]}', 'client_id': f'ohmpi_sn_{OHMPI_CONFIG["id"]}',
'control_topic': f'cmd_ohmpi_sn_{OHMPI_CONFIG["id"]}', 'control_topic': f'ctrl_ohmpi_sn_{OHMPI_CONFIG["id"]}',
'msg_topic': f'msg_ohmpi_sn_{OHMPI_CONFIG["id"]}', 'exec_topic': f'exec_ohmpi_sn_{OHMPI_CONFIG["id"]}',
'data_topic': f'data_ohmpi_sn_{OHMPI_CONFIG["id"]}', 'data_topic': f'data_ohmpi_sn_{OHMPI_CONFIG["id"]}',
'soh_topic': f'soh_ohmpi_sn_{OHMPI_CONFIG["id"]}' 'soh_topic': f'soh_ohmpi_sn_{OHMPI_CONFIG["id"]}'
} }
import os import json
from config import EXEC_LOGGING_CONFIG, DATA_LOGGING_CONFIG, MQTT_LOGGING_CONFIG
from settings import LOGGING_CONFIG, DATA_LOGGING_CONFIG, MQTT_LOGGING_CONFIG
from os import path, mkdir, statvfs from os import path, mkdir, statvfs
from time import gmtime from time import gmtime
import logging import logging
...@@ -13,8 +12,8 @@ def setup_loggers(mqtt=True): ...@@ -13,8 +12,8 @@ def setup_loggers(mqtt=True):
log_path = path.join(path.dirname(__file__), 'logs') log_path = path.join(path.dirname(__file__), 'logs')
if not path.isdir(log_path): if not path.isdir(log_path):
mkdir(log_path) mkdir(log_path)
msg_log_filename = path.join(log_path, 'msg_log') exec_log_filename = path.join(log_path, 'msg_log')
msg_logger = logging.getLogger('msg_logger') exec_logger = logging.getLogger('exec_logger')
# SOH logging setup # SOH logging setup
# TODO: Add state of health logging here # TODO: Add state of health logging here
...@@ -28,7 +27,7 @@ def setup_loggers(mqtt=True): ...@@ -28,7 +27,7 @@ def setup_loggers(mqtt=True):
data_logger = logging.getLogger('data_logger') data_logger = logging.getLogger('data_logger')
# Debug and logging # Debug and logging
debug = LOGGING_CONFIG['debug_mode'] debug = EXEC_LOGGING_CONFIG['debug_mode']
if debug: if debug:
logging_level = logging.DEBUG logging_level = logging.DEBUG
else: else:
...@@ -36,25 +35,25 @@ def setup_loggers(mqtt=True): ...@@ -36,25 +35,25 @@ def setup_loggers(mqtt=True):
# Set message logging format and level # Set message logging format and level
log_format = '%(asctime)-15s | %(process)d | %(levelname)s: %(message)s' log_format = '%(asctime)-15s | %(process)d | %(levelname)s: %(message)s'
logging_to_console = LOGGING_CONFIG['logging_to_console'] logging_to_console = EXEC_LOGGING_CONFIG['logging_to_console']
msg_handler = CompressedSizedTimedRotatingFileHandler(msg_log_filename, max_bytes=LOGGING_CONFIG['max_bytes'], msg_handler = CompressedSizedTimedRotatingFileHandler(exec_log_filename, max_bytes=EXEC_LOGGING_CONFIG['max_bytes'],
backup_count=LOGGING_CONFIG['backup_count'], backup_count=EXEC_LOGGING_CONFIG['backup_count'],
when=LOGGING_CONFIG['when'], when=EXEC_LOGGING_CONFIG['when'],
interval=LOGGING_CONFIG['interval']) interval=EXEC_LOGGING_CONFIG['interval'])
msg_formatter = logging.Formatter(log_format) msg_formatter = logging.Formatter(log_format)
msg_formatter.converter = gmtime msg_formatter.converter = gmtime
msg_formatter.datefmt = '%Y/%m/%d %H:%M:%S UTC' msg_formatter.datefmt = '%Y/%m/%d %H:%M:%S UTC'
msg_handler.setFormatter(msg_formatter) msg_handler.setFormatter(msg_formatter)
msg_logger.addHandler(msg_handler) exec_logger.addHandler(msg_handler)
msg_logger.setLevel(logging_level) exec_logger.setLevel(logging_level)
if logging_to_console: if logging_to_console:
msg_logger.addHandler(logging.StreamHandler()) exec_logger.addHandler(logging.StreamHandler())
if mqtt: 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.setLevel(logging_level)
mqtt_msg_handler.setFormatter(msg_formatter) mqtt_msg_handler.setFormatter(msg_formatter)
msg_logger.addHandler(mqtt_msg_handler) exec_logger.addHandler(mqtt_msg_handler)
# Set data logging level and handler # Set data logging level and handler
data_logger.setLevel(logging.INFO) data_logger.setLevel(logging.INFO)
...@@ -65,9 +64,9 @@ def setup_loggers(mqtt=True): ...@@ -65,9 +64,9 @@ def setup_loggers(mqtt=True):
interval=DATA_LOGGING_CONFIG['interval']) interval=DATA_LOGGING_CONFIG['interval'])
data_logger.addHandler(data_handler) 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!') 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): 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): ...@@ -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('Saving data log to ' + data_log_filename)
msg_logger.info('OhmPi settings:') msg_logger.info('OhmPi settings:')
# TODO Add 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('')
msg_logger.info(f'init_logging_status: {init_logging_status}') msg_logger.info(f'init_logging_status: {init_logging_status}')
return init_logging_status return init_logging_status
...@@ -160,7 +160,7 @@ class OhmPi(object): ...@@ -160,7 +160,7 @@ class OhmPi(object):
def _read_hardware_parameters(self): def _read_hardware_parameters(self):
"""Read hardware parameters from settings.py. """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.id = OHMPI_CONFIG['id'] # ID of the OhmPi
self.r_shunt = OHMPI_CONFIG['R_shunt'] # reference resistance value in ohm self.r_shunt = OHMPI_CONFIG['R_shunt'] # reference resistance value in ohm
self.Imax = OHMPI_CONFIG['Imax'] # maximum current self.Imax = OHMPI_CONFIG['Imax'] # maximum current
...@@ -606,9 +606,9 @@ class OhmPi(object): ...@@ -606,9 +606,9 @@ class OhmPi(object):
self.log_msg('status = ' + self.status) 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() # mqtt_client, measurement_topic = mqtt_client_setup()
# msg_logger.info(f'publishing mqtt to topic {measurement_topic}')
VERSION = '2.0.1' VERSION = '2.0.1'
print(colored(r' ________________________________' + '\n' + print(colored(r' ________________________________' + '\n' +
...@@ -622,6 +622,7 @@ print('Version:', VERSION) ...@@ -622,6 +622,7 @@ print('Version:', VERSION)
platform, on_pi = OhmPi.get_platform() platform, on_pi = OhmPi.get_platform()
if on_pi: if on_pi:
print(colored(f'Running on {platform} platform', 'green')) 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: if not arm64_imports:
print(colored(f'Warning: Required packages are missing.\n' print(colored(f'Warning: Required packages are missing.\n'
f'Please run . env.sh at command prompt to update your virtual environment\n', 'yellow')) f'Please run . env.sh at command prompt to update your virtual environment\n', 'yellow'))
......
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