Log measurements
This commit is contained in:
parent
f558f44907
commit
6619fbbbb6
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,3 +2,5 @@
|
||||
/.venv/
|
||||
/.python-version
|
||||
*.pyc
|
||||
|
||||
/logs/
|
||||
|
63
load_controller/logger.py
Normal file
63
load_controller/logger.py
Normal 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
|
2
main.py
2
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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user