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