Zum Inhalt springen

Stundenplan & Noten

Der Scraper-Layer ist das Herzstück von Tocco-Mate.

  1. Playwright startet Chromium (Headless oder sichtbar)
  2. Microsoft-SSO-Login mit deinen MS_EMAIL + MS_PASSWORD
  3. Tocco-Noten-Seite wird geladen + DOM extrahiert
  4. Tocco-Stundenplan-Seite wird geladen + DOM extrahiert
  5. DB-Diff: neue / geänderte Einträge werden erkannt
  6. History wird angehängt (append-only, nichts wird überschrieben)
  7. Push-Notifications für die Differenz werden ausgelöst

Alle X Minuten ein vollständiger Scrape. Konfigurierbar im UI oder via Settings:

{
"scheduler": {
"mode": "interval",
"intervalMinutes": 30
}
}

Detaillierter Scrape (mit ZP/LB-Refresh) einmal pro Woche, ansonsten leichter Refresh. Spart Last auf dem Tocco-Portal.

{
"scheduler": {
"mode": "weekly",
"weeklyDay": "monday",
"weeklyHour": 4
}
}

Marker-Datei: data/.weekly-detail-at (löschen + Restart erzwingt erneuten Wochen-Check).

  • Dashboard: /scrape → „Jetzt scrapen”
  • Telegram: /scrape mit Live-Phase-Anzeige
  • API: POST /api/scrape
FeldQuelle
Modul-Code (z. B. M114)Tocco-Modulname
ModulnameTocco-Beschreibung
Aktuelle NoteTocco-Übersicht
TrendVergleich mit noten_history
Frisch-Markerchange_pending + change_seen_at

Pro Modul werden alle Bewertungen (noten_pruefungen-Tabelle) extrahiert:

TypBeschreibung
LB (Lernbeurteilung)Zwischen-Bewertungen mit Gewicht
ZP (Zwischenprüfung)Größere Prüfungen
OTHERAlles andere (Prüfungs-Vorbereitung, IPA-Komponenten)

Jede Bewertung wird mit ihrem Gewicht gespeichert — der IPA-Rechner im Dashboard nutzt das für Prognosen.

Jede Notenänderung wird in noten_history (Modul-Note) und pruefungen_history (LB / ZP) append-only archiviert. So siehst du auch nachträglich noch:

Note ging von 4.5 → 5.0 am 2026-04-12 14:32

FeldInhalt
start / endDatum + Uhrzeit
subjectModulname / Lektion
roomRaum (z. B. „W420”)
teacherDozent:in
room_changeMarker bei Raumwechsel

Termine ohne festen Raum (z. B. Online-Unterricht via Teams) werden als „Online” markiert. Wechsel von Online → Offline und umgekehrt löst ebenfalls einen Push aus.

Wenn der Stundenplan altdatig wirkt:

  1. Dashboard → /stundenplan → „DB zurücksetzen”
  2. Manueller Scrape — die Tabelle wird komplett neu aufgebaut
TabelleInhalt
notenStammdaten + aktuelle Note + Frisch-Marker
noten_historyAppend-only Verlauf jeder Modulnoten-Änderung
noten_pruefungenLB / ZP / OTHER pro Modul mit Gewicht
pruefungen_historyAppend-only Verlauf jeder ZP/LB-Änderung
stundenplanTermine + Raumwechsel-Marker
push_subscriptionsPWA-Push-Subscriptions

Detailliertes Schema: Architektur.

  • Ein voller Scrape dauert typisch 10–20 Sekunden (abhängig vom Tocco-Portal)
  • DB-Operationen sind Singleton seit v1.0.0 — kein Connection-Spam
  • Migrations + Reclassification laufen einmal beim Boot, nicht bei jedem Request