Log measurements

This commit is contained in:
Jasper Blanckenburg 2023-01-26 17:16:02 +01:00
parent f558f44907
commit 6619fbbbb6
3 changed files with 67 additions and 0 deletions

2
.gitignore vendored
View File

@ -2,3 +2,5 @@
/.venv/ /.venv/
/.python-version /.python-version
*.pyc *.pyc
/logs/

63
load_controller/logger.py Normal file
View File

@ -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

View File

@ -8,6 +8,7 @@ from PySide6.QtWidgets import QApplication
from load_controller.gui import GUI from load_controller.gui import GUI
from load_controller.load import Load from load_controller.load import Load
from load_controller.logger import Logger
from load_controller.profile_handler import ProfileHandler from load_controller.profile_handler import ProfileHandler
from load_controller.temperatures import Temperatures from load_controller.temperatures import Temperatures
from load_controller.bms import BMSEvalBoard 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.started.connect(bms.do_work)
bms_thread.start() bms_thread.start()
logger = Logger(bms.dataUpdated, profile_handler.currentChanged)
gui = GUI(profile_handler, bms.dataUpdated) gui = GUI(profile_handler, bms.dataUpdated)
return app.exec() return app.exec()