feat: Zentrale per Durchwahl selbst besetzen

Das Busylight im Empfangsbereich wird wechselnd besetzt. Mitarbeiter
koennen sich jetzt selbst darauf setzen, ohne Admin-Passwort.

- Neue Seite /zentrale (Durchwahl eingeben) und /zentrale/{durchwahl}
  als Direktlink fuer QR-Codes. Der Direktlink zeigt nur an und aendert
  nichts, damit Link-Vorschau und Prefetch niemanden versetzen.
- Neue Tabelle home_assignments merkt das eigene Tuerschild, solange der
  Mitarbeiter in der Zentrale sitzt. Beim Verlassen wird es
  wiederhergestellt, das Zentral-Segment wird freigegeben.
- Der Vorgaenger bleibt ohne Zuordnung - er ist nicht da. Sein gemerkter
  Heimatplatz bleibt erhalten, er kann jederzeit zurueckkehren.
- Ist der Heimatplatz inzwischen belegt, wird die Rueckkehr abgelehnt
  und nichts geaendert.
- Eine ausdrueckliche Admin-Zuordnung verwirft den gemerkten Heimatplatz.
  Ein reines Loeschen der Zuordnung nicht, sonst kaeme niemand mehr von
  der Zentrale zurueck.
- Farbe wird sofort ans Geraet geschickt (scheduler.push_user_light).
  Das Polling allein reicht nicht: _process_user sendet nur bei einer
  Statusaenderung, und beim Platzwechsel bleibt der Status gleich.
- Neue Settings selfservice_device_id und selfservice_segment,
  einstellbar unter Einstellungen.
- Jeder Wechsel landet im Protokoll (zentrale / zentrale_frei).

Die Durchwahl ist eine Kennung, kein Geheimnis - im README dokumentiert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-21 08:12:42 +00:00
co-authored by Claude Opus 5
parent 65314f2338
commit 086b21dc2b
6 changed files with 554 additions and 3 deletions
+65 -1
View File
@@ -14,6 +14,7 @@ Jedes WLED-Geraet verfuegt ueber zwei Segmente (oben/unten), die jeweils einem B
- **Telefon-Webhook** fuer Telefonanlage (callstart/callend auf Port 8081)
- **Modulare Zeiterfassung** per CSV oder REST API - kompatibel mit jeder Zeiterfassung
- **Webbasierte Azure-Authentifizierung** direkt im Browser (kein Terminal noetig)
- **Zentrale (Self-Service)** - wechselnde Besetzung des Empfangs-Busylights per Durchwahl, ohne Admin-Passwort
- **Einstellungen** fuer Azure, Polling-Intervall und Zeiterfassung
- **Protokoll** der letzten Statusaenderungen
@@ -174,6 +175,59 @@ GET/POST http://SERVER:8081/{durchwahl}/callend - Anruf beendet (WLED -> zu
- Waehrend eines aktiven Telefonats ueberschreibt das Teams-Polling die Farbe nicht
- Die Telefon-Farbe (`phone_active`) ist unter **Farb-Regeln** konfigurierbar
## Zentrale (Self-Service)
Ein Busylight im Empfangsbereich wird wechselnd besetzt. Damit die Mitarbeiter das
selbst umstellen koennen, gibt es eine eigene Seite, die **ohne Admin-Passwort**
erreichbar ist und die Durchwahl als Kennung nutzt.
### Einrichtung
1. Unter **Benutzer** die **Durchwahl** pro Mitarbeiter eintragen (dieselbe wie fuer den Telefon-Webhook)
2. Unter **Einstellungen > Zentrale (Self-Service)** das Busylight des Empfangs und das Segment auswaehlen
3. Die Seite `http://SERVER:8080/zentrale` an die Mitarbeiter geben
### Bedienung
```
http://SERVER:8080/zentrale - Durchwahl eingeben und Zentrale uebernehmen
http://SERVER:8080/zentrale/{durchwahl} - Direktlink pro Person, z.B. als QR-Code
```
Der Direktlink zeigt nur den Stand an und aendert nichts - das Umstellen passiert
erst per Knopfdruck.
### Verhalten
- **Zentrale uebernehmen**: Der Mitarbeiter wird auf das Segment der Zentrale
gesetzt. Das eigene Tuerschild gibt er dabei ab, weil ein Mitarbeiter nur einer
Zuordnung gleichzeitig zugewiesen sein kann. Der alte Platz wird gemerkt und das
Segment ausgeschaltet.
- **Zurueck auf mein Tuerschild**: Der gemerkte Platz wird wiederhergestellt und die
Zentrale freigegeben (Farbe `abwesend`, Standard: aus).
- **Vorgaenger**: Wer die Zentrale abgibt, bleibt zunaechst ohne Zuordnung - er ist
ja nicht da. Sein gemerkter Heimatplatz bleibt erhalten, er kann jederzeit
zurueckkehren.
- **Belegter Heimatplatz**: Ist das eigene Tuerschild inzwischen jemand anderem
zugeordnet, wird die Rueckkehr abgelehnt und nichts geaendert. Dann muss der
Administrator die Zuordnung aufloesen.
- **Sofortiges Umschalten**: Die Farbe wird direkt ans Geraet geschickt. Das Polling
allein wuerde nicht reichen, weil es nur bei einer Statusaenderung sendet und der
Status des Mitarbeiters beim Platzwechsel unveraendert ist.
- **Protokoll**: Jeder Wechsel landet unter **Protokoll** (`zentrale` beim Uebernehmen,
`zentrale_frei` beim Freigeben).
- **Vorrang des Administrators**: Wird ein Mitarbeiter unter **Zuordnungen** neu
zugeordnet, verfaellt sein gemerkter Heimatplatz - die ausdrueckliche Zuordnung
gilt. Wird seine Zuordnung dort nur geloescht, bleibt der gemerkte Platz erhalten,
damit er von der Zentrale zurueckkehren kann.
### Sicherheit
Die Durchwahl ist eine Kennung, kein Geheimnis. Wer Port 8080 erreicht, kann jeden
Kollegen auf die Zentrale setzen. Fuer den internen Gebrauch ist das gewollt - die
Aenderung ist sofort sichtbar, im Protokoll nachvollziehbar und mit einem Klick
zurueckzunehmen. Die Seite gehoert deshalb nicht ins Internet.
## Starten
### Manuell (zum Testen)
@@ -238,7 +292,7 @@ busylight/
├── docs/ # Dokumentation
├── static/
│ └── style.css # CSS Styles
└── templates/ # Jinja2 HTML-Templates
└── templates/ # Jinja2 HTML-Templates (u.a. zentrale.html)
```
## Ports und Firewall
@@ -274,5 +328,15 @@ busylight/
- Unter Tuerschilder den Status pruefen ("Alle jetzt pruefen")
- Netzwerkverbindung pruefen: `curl http://HOSTNAME/json/info`
### Zentrale-Seite sagt "noch nicht eingerichtet"
Unter **Einstellungen > Zentrale (Self-Service)** ist kein Busylight ausgewaehlt.
Ohne diese Einstellung weiss die Anwendung nicht, welches Geraet der Empfang ist.
### Durchwahl wird auf der Zentrale-Seite nicht erkannt
Die Durchwahl muss unter **Benutzer** exakt so eingetragen sein wie eingegeben, und
der Benutzer muss **aktiv** sein. Inaktive Benutzer werden bewusst abgewiesen.
### Nach git pull aendert sich nichts
- Service neustarten: `sudo systemctl restart busylight`