From 6619fbbbb6b40dc4cd0a04272fb3f161456134f2 Mon Sep 17 00:00:00 2001 From: "Jasper v. Blanckenburg" Date: Thu, 26 Jan 2023 17:16:02 +0100 Subject: [PATCH] Log measurements --- .gitignore | 2 ++ load_controller/logger.py | 63 +++++++++++++++++++++++++++++++++++++++ main.py | 2 ++ 3 files changed, 67 insertions(+) create mode 100644 load_controller/logger.py diff --git a/.gitignore b/.gitignore index 2536221..9d688fc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ /.venv/ /.python-version *.pyc + +/logs/ diff --git a/load_controller/logger.py b/load_controller/logger.py new file mode 100644 index 0000000..61a74c5 --- /dev/null +++ b/load_controller/logger.py @@ -0,0 +1,63 @@ +import csv +import datetime +import sys +import time +from pathlib import Path + +from PySide6.QtCore import QObject, Signal, QTimer + +from .bms import BMSData + + +class Logger(QObject): + _data: BMSData + _current: float + _log_path: Path + _start_time: float + + _timer: QTimer + + def __init__(self, bmsUpdated: Signal, currentUpdated: Signal): + super().__init__(None) + + self._data = None + self._current = None + + log_dir = Path(__file__).parent / ".." / "logs" + if not log_dir.is_dir(): + log_dir.mkdir() + self._log_path = log_dir / datetime.datetime.now().strftime( + "%Y-%m-%d_%H:%M:%S.csv" + ) + print(f"Logging to {self._log_path}") + self._start_time = time.time() + + bmsUpdated.connect(self._updateBMS) + currentUpdated.connect(self._updateCurrent) + + self._timer = QTimer() + self._timer.timeout.connect(self._log_data) + self._timer.start(500) + + def _log_data(self): + if self._data is None or self._current is None: + print("WARNING: no data to log", file=sys.stderr) + return + + with open(self._log_path, "a") as fh: + writer = csv.writer(fh) + writer.writerow( + [ + time.time() - self._start_time, + self._data.error.value, + self._current, + *self._data.voltages, + *self._data.temperatures, + ] + ) + + def _updateBMS(self, data: BMSData): + self._data = data + + def _updateCurrent(self, current: float): + self._current = current diff --git a/main.py b/main.py index 4adf064..4372dd6 100755 --- a/main.py +++ b/main.py @@ -8,6 +8,7 @@ from PySide6.QtWidgets import QApplication from load_controller.gui import GUI from load_controller.load import Load +from load_controller.logger import Logger from load_controller.profile_handler import ProfileHandler from load_controller.temperatures import Temperatures from load_controller.bms import BMSEvalBoard @@ -29,6 +30,7 @@ def main(argv: list[str]) -> int: bms_thread.started.connect(bms.do_work) bms_thread.start() + logger = Logger(bms.dataUpdated, profile_handler.currentChanged) gui = GUI(profile_handler, bms.dataUpdated) return app.exec()