server: always write log_{date_time}.json for the full server session
Adds ServerLogTask (tasks/server_log.py) which records temp/power samples from startup to shutdown regardless of Sud state, in the same Name/Samples JSON format as SudLogTask so analyze_log.py and replay_sim.py can consume it directly. The file is written on graceful exit (Ctrl-C) from brewpi.py's finally block, just before the heater is closed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+7
-1
@@ -15,7 +15,7 @@ from components.plant import PlantFactory
|
||||
from components.actor import StirrerFactory
|
||||
from components.sud import Sud
|
||||
from components.sud_forecast import SudForecastEstimator
|
||||
from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask, SudTask, SudLogTask
|
||||
from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask, SudTask, SudLogTask, ServerLogTask
|
||||
|
||||
import argparse as ap
|
||||
|
||||
@@ -140,6 +140,11 @@ if __name__ == '__main__':
|
||||
# tasks/sud_log.py.
|
||||
taskmgr.add(SudLogTask(sud, tc, heater, heater_task, sud_task, DT_TASK))
|
||||
|
||||
# Continuous server-session log - records from startup to shutdown
|
||||
# regardless of Sud state; written to logs/log_{date_time}.json on exit.
|
||||
server_log_task = ServerLogTask(tc, heater, heater_task, DT_TASK, args.logdir)
|
||||
taskmgr.add(server_log_task)
|
||||
|
||||
# Assign data flow
|
||||
# Assign tc control value to heater
|
||||
tc.set_on_changed("y", heater_task.actor)
|
||||
@@ -203,6 +208,7 @@ if __name__ == '__main__':
|
||||
task.cancel()
|
||||
if pending:
|
||||
loop.run_until_complete(asyncio.gather(*pending, return_exceptions=True))
|
||||
server_log_task.write()
|
||||
# Belt-and-suspenders: explicitly close the heater connection even if
|
||||
# the task cleanup above failed to reach HeaterHendi.activate(False).
|
||||
heater.close()
|
||||
|
||||
Reference in New Issue
Block a user