- HTML 56.6%
- JavaScript 25.2%
- Python 15.8%
- Shell 1%
- Dockerfile 1%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Weichere Uebergaenge beim Ein-/Ausblenden des Aushangs. - Crossfade (320ms) beim Ein- und Ausblenden des Aushangs im Intervall statt hartem Umschalten. |
||
| design | ||
| scripts | ||
| vendor | ||
| .gitattributes | ||
| .gitignore | ||
| DESIGN.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| entrypoint.sh | ||
| generate_views.py | ||
| README.md | ||
| server.py | ||
| view.css | ||
| view.js | ||
vplan-webserver
Zeigt den Vertretungsplan (aus vertretungen.json, geschrieben vom
vplan-parser) als Webseite --
in drei Ansichten, jede unter einer eigenen Adresse:
…/schueler/-- Schueleransicht (nach Klassen)…/lehrer_sort_stunden/-- Lehreransicht, nach Stunden…/lehrer_sort_lehrkraft/-- Lehreransicht, nach Lehrkraft
Laedt die JSON alle paar Sekunden neu und wechselt flackerfrei auf den neuen Stand.
Zusaetzlich gibt es eine Aushang-Verwaltung unter …/admin/ (nur fuer die
Schulleitung): Bilder/PDFs/Textmeldungen als Aushang schalten, Feueralarm und
Amok/Lockdown ein-/ausschalten -- serverseitig, von jedem Geraet aus bedienbar.
Setup / Installation
1. Docker vorhanden?
docker version
2. Bei der Registry anmelden (einmalig)
docker login git.pablo1732.de
3. Wo liegt die vertretungen.json?
Der Webserver erzeugt sie nicht selbst -- sie kommt vom Parser-Container. In der
docker-compose.yml ist ./data/json eingehaengt; ggf. den Pfad anpassen.
4. Starten
docker compose pull
docker compose up -d
Anzeige unter http://<server>:8080/ (lokal: localhost).
Kontrolle: docker compose logs -f (mit Strg+C wieder raus).
Auf den Aula-Displays z.B. im Kiosk-Modus:
chrome.exe --kiosk http://<server>:8080/schueler/
Bedienung / Anpassung
docker compose up -d # startet im Hintergrund
docker compose logs -f # Live-Logs ansehen
docker compose down # stoppt und entfernt den Container
docker compose restart # neu starten (z.B. nach Aenderung der Einstellungen)
Einstellungen
| Einstellung | Standard | Bedeutung |
|---|---|---|
POLL_SECONDS |
20 |
Sekunden zwischen zwei Pruefungen auf eine neue vertretungen.json. |
PORT |
8080 |
Port im Container. Muss zum Wert unter ports: passen. |
JSON_DIR |
/data/json |
Ordner im Container mit der Live-vertretungen.json. |
STATE_DIR |
/data/userdata |
Ordner im Container fuer Aushang-Zustand + Uploads. |
SCHULNAME |
Johannes-Gutenberg-Gymnasium |
Schulname in der Kopfzeile. |
ADMIN_USER |
schulleitung |
Benutzername fuers Admin-Panel. |
ADMIN_PASSWORD |
bitte-aendern |
Passwort fuers Admin-Panel. Leer = Login deaktiviert. |
ADMIN_PASSWORD_HASH |
(leer) | Alternative zu ADMIN_PASSWORD: PBKDF2-Hash statt Klartext. |
SESSION_HOURS |
8 |
Wie lange eine Anmeldung gueltig bleibt. |
MAX_UPLOAD_MB |
25 |
Maximale Groesse pro hochgeladener Datei. |
LOGIN_MAX_FAILS |
5 |
Fehlversuche pro IP bis zur (ansteigenden) Sperre. |
DESIGN_DIR |
(eingebaut) | Nur fuer ein eigenes Design ohne Neubau (siehe unten). |
Die drei Ansichten
Immer dieselben Daten, nur anders sortiert. Jede Ansicht ist auf 1920x1080 ausgelegt und skaliert sich automatisch auf die Fenstergroesse.
Aushang-Verwaltung (Admin-Panel)
Unter http://<server>:8080/admin/ meldet sich die Schulleitung an und kann
neben dem Plan einen Aushang einblenden oder einen Alarm schalten (Platzierung
links/rechts/vollbild, dauerhaft oder im Intervall, Diashow). Zustand liegt auf
dem Server -- Bedienung von jedem Geraet aus moeglich.
Zugangsdaten kommen aus der docker-compose.yml (ADMIN_USER/
ADMIN_PASSWORD). Ohne gesetztes ADMIN_PASSWORD ist der Login deaktiviert --
also ein sicheres Passwort setzen.
Passwort nicht im Klartext? PBKDF2-Hash statt
ADMIN_PASSWORDerzeugen:docker run --rm --entrypoint python3 git.pablo1732.de/schule/vplan-webserver:latest /opt/vplan-web/server.py --hash 'MeinPasswort'Ergebnis in
ADMIN_PASSWORD_HASHeintragen,ADMIN_PASSWORDleer lassen.
⚠️ Kein HTTPS. Login und Sitzungs-Cookie reisen im LAN im Klartext -- nur im vertrauenswuerdigen Schul-LAN betreiben, sonst TLS-Reverse-Proxy davor.
Keine/veraltete Daten?
- "Keine Plandaten geladen": Der Webserver findet keine
vertretungen.json. Liegt sie im eingehaengten Ordner? Laeuft der Parser-Container? - "Plan veraltet": Die JSON enthaelt nur vergangene Tage -- normal, wenn gerade kein aktueller Plan vorliegt.
Eigenes Design ohne Neubau (optional)
- Designordner in der
docker-compose.ymleinhaengen:- ./mein_design:/design:ro - Darueber unter
environment:setzen:DESIGN_DIR: "/design". docker compose up -d-- kein Neubau noetig.
Wie ein Design aufgebaut sein muss und wie man eins fest einbaut: siehe
DESIGN.md.
Image selbst bauen
IMAGE_TAG=0.3.3 sh scripts/build-images.sh
Baut Multi-Arch (amd64+arm64) und pusht nach git.pablo1732.de/schule/vplan-webserver. Voraussetzung: einmalig
docker login git.pablo1732.de (Token-Scope "package: Lesen und Schreiben").