x-axis justierung: visualize

This commit is contained in:
chk
2026-06-10 18:30:16 +02:00
parent b1950ffa5a
commit 3084324f4a
4 changed files with 255 additions and 31 deletions

View File

@@ -620,26 +620,46 @@ app.post('/api/board/run', async (req, res) => {
}
});
/** Neuestes Board-Run-Verzeichnis (Timestamp-Name) oder null */
async function findLatestBoardRun() {
/** Alle Board-Run-Verzeichnisse, neueste zuerst */
async function listBoardRuns() {
try {
await fsPromises.access(boardDataDir);
const entries = await fsPromises.readdir(boardDataDir, { withFileTypes: true });
const dirs = entries.filter(e => e.isDirectory()).map(e => e.name).sort().reverse();
return dirs[0] ?? null;
return entries.filter(e => e.isDirectory()).map(e => e.name).sort().reverse();
} catch {
return null;
return [];
}
}
/** Neuestes Board-Run-Verzeichnis (Timestamp-Name) oder null */
async function findLatestBoardRun() {
const dirs = await listBoardRuns();
return dirs[0] ?? null;
}
/**
* GET /api/board/latest
* Gibt Daten des letzten Board-Runs zurück: robot.json + Detection-Ergebnisse + Kamera-Posen.
* GET /api/board/runs?limit=N
* Gibt eine Liste der vorhandenen Board-Run-Verzeichnisse zurück (neueste zuerst).
*/
app.get('/api/board/runs', async (req, res) => {
try {
const limit = Math.max(1, Math.min(50, parseInt(req.query.limit ?? '10', 10)));
const runs = await listBoardRuns();
return res.json({ runs: runs.slice(0, limit) });
} catch (err) {
return res.status(500).json({ error: String(err) });
}
});
/**
* GET /api/board/latest?run=<timestamp>
* Gibt Daten eines Board-Runs zurück: robot.json + Detection-Ergebnisse + Kamera-Posen.
* Ohne ?run → neuester Run. Mit ?run=<timestamp> → genau dieser Run.
* Wird vom Board-Viewer (boardViewer.html) abgefragt.
*/
app.get('/api/board/latest', async (req, res) => {
try {
const runName = await findLatestBoardRun();
const runName = req.query.run || await findLatestBoardRun();
if (!runName) return res.json({ runDir: null, robot: null, detections: [], cameraPoses: [] });
const runDir = path.join(boardDataDir, runName);