27 lines
1.4 KiB
Markdown
27 lines
1.4 KiB
Markdown
# Druckbericht und Statistik
|
||
|
||
Stand **17.10.2026**.
|
||
|
||
## Tabellen
|
||
|
||
- `runs`: zusätzlich `weight_planned_g`, `weight_used_g`, `weight_source`, `filament_used_mm`/`filament_total_mm`, `progress_last`, `estimated_s`, `chargen_nr`, `message`, `objects`
|
||
- `run_spools`: Abzug je Spule (`is_estimate` bei Mehrfarb)
|
||
- `run_segments`: Abschnitte bei Rollenwechsel (Einlegen während Druck/Pause)
|
||
- `run_samples`: Temperatur/Fortschritt ca. alle 30 s (Watcher)
|
||
- `run_labels`: Objekt-Chargen `D-…-01`
|
||
- `events.run_id`: optionaler Bezug zum Lauf
|
||
|
||
## Abzug
|
||
|
||
`grotti/usage.py` rechnet Ist-Gramm aus `filament_used` / `filament_total` × Soll. Abbruch ohne Extrusion: 0. Ohne Zähler: Fortschritt × Soll (Schätzwert). Fertig ohne Messgröße: Soll bleibt, Quelle `estimate`.
|
||
|
||
`apply_deduction` schreibt zuerst `run_spools`, dann `deducted`/`remaining_g` (auch unter 0); `ensure_run_chargen` oft schon während des Laufs. Ohne `run_spools` bleibt die Spulenakte leer.
|
||
|
||
## Live
|
||
|
||
`StateWatcher` hängt am offenen History-Job oder legt `live:…` an, schreibt Proben, vergibt `chargen_nr`, merkt Objektnamen. Vor neuem Start: `abandon_live_runs`. `sync_history` übernimmt Proben/Segmente/Charge (`adopt_live_run`, nicht auf ältere fertige Jobs derselben Datei) und setzt bei Bedarf `needs_clear`.
|
||
|
||
## Statistik-Filter
|
||
|
||
`since` inklusiv, reines `until` als Datum (`YYYY-MM-DD`) inklusiv (intern Folgetag exklusiv). Presets in der UI setzen Von/Bis. CSV nutzt dieselben Query-Parameter.
|