No description
  • HTML 76.2%
  • Python 15.7%
  • JavaScript 8.1%
Find a file
2026-10-25 13:04:42 +01:00
viewer Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
web Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
.gitignore Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
COPYRIGHT Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
json_to_image.py Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
LICENSE Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
README.md Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
serve.js Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00
subjects.yaml Stand vom 2026-10-25 2026-10-25 13:04:42 +01:00

Stundenplan

Web-App für einen Schul-Stundenplan auf dem Telefon: Woche und Tag mit Ausfall, Vertretung und Terminen, dazu eine Packliste. Sie liest eine einzige Datei, timetable.json.

Dies ist das Gerüst ohne Datenquelle. Wer die App nutzen will, braucht einen eigenen Abruf für die eigene Schule – sofern die ihre Daten digital anbietet –, der timetable.json im Format unten schreibt. Gebaut ist die App an den Daten von Schulmanager Online, das die Schule hier verwendet; dessen Abruf ist nicht enthalten.

Nebenbei rechnet json_to_image.py aus derselben Datei ein Bild für ein E-Ink-Schild, das OpenEPaperLink ausspielt. Für die App ist es nicht nötig.

Teile

web/index.html, web/day.html   Web-App: Woche und Tag, mit Ausfall, Vertretung, Terminen
web/packliste.json             was an welchem Fach eingepackt werden muss (Beispiel)
json_to_image.py               Bild fürs E-Ink-Schild (Pillow, DejaVu Sans), optional
viewer/index.html, serve.js    lokale Vorschau mit Formular für nachgetragene Arbeiten
subjects.yaml                  Fachkürzel → Name (Beispiel)

Die Web-App braucht keinen Server außer einem, der die Dateien ausliefert; timetable.json und packliste.json liegen daneben.

python3 json_to_image.py --data timetable.json --output timetable.jpg
node serve.js --port 8099 --data timetable.json

Ab 16 Uhr zeigt das Bild den Plan für den nächsten Tag. serve.js schreibt nur eine Datei, exam_overrides.json – Klassenarbeiten, die nicht in der Quelle stehen. Sein Knopf zum Neuladen ruft einen Abruf auf, der hier nicht enthalten ist.

Datenmodell von timetable.json

Block Inhalt
currentWeek, nextWeek Stunden. Neben subject/teacher/room auch subjectLong/teacherLong (ausgeschrieben), cancelled, changed, original (was eigentlich dran wäre), event (Termin auf dieser Stunde) und pause (beaufsichtigte Pause, kein Unterricht).
classHours Stundenzeiten. Pausen ergeben sich aus den Lücken.
days Pro Tag: status (unterricht/sondertag/ferien/frei), label, firstPeriod, lastPeriod, cancelledLeading, cancelledTrailing, events.
exams Klassenarbeiten und Klassentermine. icon nur bei echten Arbeiten.
upcoming Die nächsten Besonderheiten, anzeigefertig sortiert.
holidays Ferienspannen.
events Schulkalender mit Einstufung: student, school, other-grade, staff.
glossary Kürzel → Name.
warnings Auffälligkeiten beim Erzeugen.

Zeilen mit pause: true zählen nicht als Unterricht: der Tag endet nach der letzten echten Stunde. Das E-Ink-Bild lässt sie weg, die App zeigt sie an.

Nachgetragene Arbeiten

{ "exams": [
    { "subject": "M", "date": "05.11.2026", "periods": ["3","4"],
      "comment": "Bruchrechnung" }
] }

Ein Eintrag kommt dazu; ersetzt wird nur mit "replaces": "<Datum>" oder bei gleichem Fach und Datum.

Datenschutz

Ein Stundenplan sagt, wo ein Kind wann ist. Die Web-App gehört hinter eine Anmeldung, und was sie lädt, sollte so knapp wie möglich sein: Vorname statt vollem Namen, keine Klasse, nur die Termine, die das Kind betreffen.