RaumInfo
RaumInfo

Ein wandmontiertes Android-Tablet neben der Tür zeigt, ob der Besprechungsraum frei oder belegt ist, und erlaubt die Buchung vor Ort. Die Daten kommen direkt vom Exchange-Server im eigenen Netz.

Kein Cloud-Dienst. Keine Server-Komponente. Keine laufenden Kosten.

PlattformAndroid 8.1 (API 27) oder neuer
AusrichtungQuerformat, fest
Empfohlene Hardware8-Zoll-Tablet, z. B. Samsung Galaxy Tab A9
AnbindungExchange On-Prem, EWS über NTLM
Umfangca. 12,5 MB, keine Fremddienste
SpracheDeutsch

1. Die Ansichten

Frei

Zeigt, wer den Raum als Nächstes hat und ab wann. Rechts Uhrzeit, Datum und der Knopf für die Buchung vor Ort. Unten der Tagesverlauf mit einer Marke für „jetzt“.

Beginnt der nächste Termin in weniger als 15 Minuten, wechseln die Randbalken auf Gelb und pulsieren.

Belegt

Laufender Termin, Restzeit und der Knopf zum vorzeitigen Freigeben.

Ad-hoc-Buchung

Betreff und Dauer. Die angebotenen Dauern enden dort, wo der nächste Termin beginnt.

Einstellungen

Erreichbar über einen langen Druck auf den Raumnamen oben links, geschützt durch eine PIN. Absichtlich ohne sichtbare Schaltfläche, damit im Kiosk-Betrieb niemand hineinstolpert.

Einrichtung

Solange Pflichtangaben fehlen, führt eine Prüfliste durch das, was noch zu tun ist — statt eine leere Anzeige zu zeigen und den Administrator raten zu lassen.


2. Was RaumInfo kann

Anzeige

  • Vollbild ohne Android-Status- und Navigationsleiste
  • Senkrechte Ampelbalken links und rechts über die volle Bildschirmhöhe, aus einigen Metern Entfernung erkennbar: grün frei · gelb Beginn in unter 15 Minuten · rot in Nutzung · grau Kalender nicht erreichbar
  • Zeitstrahl des Tages mit allen Belegungen und einer Marke für „jetzt“
  • Uhr mit Sekunden — eine laufende Sekunde ist an der Wand der einzige Hinweis darauf, dass die Anzeige nicht eingefroren ist
  • Termine des Folgetages werden als solche ausgewiesen („Morgen 08:00 – 15:00″), statt als „beginnt in 24 Stunden“

Buchen vor Ort

  • Ad-hoc-Buchung ab sofort für 15, 30, 45, 60, 90 oder 120 Minuten
  • Angebotene Dauern werden am nächsten Termin abgeschnitten — am Display lässt sich keine Überschneidung erzeugen
  • Ohne Folgetermin sind höchstens 240 Minuten am Stück möglich
  • Der Eintrag landet als regulärer Termin im Raumkalender (CreateItem) und ist in Outlook sofort sichtbar
  • Raum freigeben: Endet die Besprechung früher, wird die Endzeit auf „jetzt“ vorgezogen (UpdateItem auf calendar:End)
  • Nach jeder Buchung und jeder Freigabe wird sofort neu abgefragt, unabhängig vom eingestellten Intervall

Exchange-Anbindung

  • Exchange Web Services (EWS), Anmeldung über NTLMv2
  • Ein einziges Dienstkonto bedient beliebig viele Räume über die Rolle ApplicationImpersonation — die Passwörter der Raumpostfächer werden nicht benötigt
  • Abfrage über FindItem mit CalendarView
  • Abfrageintervall einstellbar, 15 bis 900 Sekunden (Standard 60)
  • Der Betreff wird angezeigt, sofern Exchange ihn nicht ersetzt; andernfalls steht schlicht „Belegt“ (siehe Abschnitt 4.3)

Betrieb rund um die Uhr

  • Während der Arbeitszeit bleibt das Display zwingend an (FLAG_KEEP_SCREEN_ON), unabhängig vom Android-Zeitlimit
  • Nachtabsenkung: außerhalb der Arbeitszeit nach 60 Sekunden ohne Berührung Helligkeit 0 und schwarze Fläche; die erste Berührung weckt nur auf und wird nicht an die Oberfläche durchgereicht
  • Wochenend-Schalter: standardmäßig bleibt die Anzeige samstags und sonntags dunkel; bei Bedarf zählen beide Tage als Arbeitszeit
  • Bei einer Arbeitszeit über Mitternacht (z. B. 22:00–06:00) gehört der Abschnitt nach 0 Uhr zur Schicht des Vortages
  • Automatischer Neustart nach Stromausfall oder Reboot

Ehrlichkeit bei Störungen

  • Ist der Kalender nicht erreichbar, zeigt die Anzeige grau „KEINE VERBINDUNG“ samt Klartextmeldung des Servers — sie behauptet nicht „frei“, was Menschen in einen belegten Raum schicken würde
  • Auch ein Kalenderstand, der älter als 10 Minuten ist, gilt als nicht belastbar
  • Die Buchung ist in diesem Zustand gesperrt, weil sie auf einem laufenden Termin landen könnte

Einrichtung und Verwaltung

  • PIN-geschützte Einstellungen, PIN und Passwort werden verdeckt eingegeben
  • Einrichtungsansicht mit Prüfliste, solange etwas fehlt
  • Die gesamte Konfiguration lässt sich beim Aufspielen per Skript mitgeben — am Tablet ist dann nichts einzutippen
  • Optionaler Kiosk-Modus (siehe Abschnitt 5.4)

3. Was RaumInfo nicht kann

Diese Liste ist bewusst vollständig. Wer eine dieser Funktionen braucht, ist mit RaumInfo falsch beraten.

Anbindung

  • Kein Microsoft 365 / Exchange Online. Die Anmeldung erfolgt über NTLM; Exchange Online verlangt moderne Authentifizierung (OAuth) und wird nicht unterstützt.
  • Kein Google Workspace, kein CalDAV, kein anderer Kalender.
  • Kein Push. Der Kalender wird in festem Intervall abgefragt. Eine Buchung, die währenddessen in Outlook entsteht, erscheint mit bis zu einer Minute Verzögerung.
  • Keine Authentifizierung per Kerberos oder Zertifikat.

Funktionsumfang

  • Kein Terminmanagement. Neu anlegen und vorzeitig beenden — mehr nicht. Kein Verschieben, kein Verlängern, kein Löschen, kein Anlegen von Serienterminen. (Bestehende Serientermine werden korrekt angezeigt; Exchange liefert sie als einzelne Vorkommen aus.)
  • Keine Teilnehmerverwaltung. Ad-hoc-Buchungen haben keine Eingeladenen und verschicken keine Einladungen.
  • Ein Raum je Gerät. Keine Übersicht mehrerer Räume, keine Suche nach einem freien Raum im Haus, keine Etagenansicht.
  • Keine Anwesenheitserkennung. Ein gebuchter, aber nicht genutzter Raum bleibt rot, bis jemand ihn freigibt.
  • Keine Check-in-Pflicht und keine automatische Freigabe nicht angetretener Termine.
  • Keine Auswertung. Keine Statistik zur Raumauslastung, kein Export.

Betrieb

  • Keine zentrale Verwaltung. Jedes Tablet wird einmal eingerichtet; danach gibt es keinen Fernzugriff auf die Konfiguration und keine Sammelverteilung.
  • Kein automatisches Update. Neue Fassungen werden per USB aufgespielt.
  • Keine Fernüberwachung. Ob ein Tablet noch läuft, sieht man vor Ort.
  • Kein echtes Abschalten des Displays. Android lässt das ohne Root-Rechte nicht zu; die Nachtabsenkung ist ein schwarzes Bild bei Helligkeit 0. Das Display verbraucht dabei weiterhin Strom.

Oberfläche

  • Nur Deutsch. Keine Mehrsprachigkeit.
  • Nur Querformat.
  • Kein helles Erscheinungsbild. Die Anzeige ist dauerhaft dunkel gehalten.
  • Kein Firmenlogo, keine Farbanpassung je Kunde.

Sicherheit

  • Die Zugangsdaten des Dienstkontos liegen unverschlüsselt in den SharedPreferences im privaten App-Verzeichnis. Im Kiosk-Betrieb ist das vertretbar; ein ausgebautes, entsperrtes Tablet gibt sie preis.
  • Den Kiosk-Modus kann sich die App nicht selbst geben — das ist eine Sicherheitsgrenze von Android, kein Versäumnis.

4. Voraussetzungen

4.1 Exchange

VersionExchange 2010 SP2 oder neuer (2013, 2016, 2019), On-Prem
SchnittstelleEWS erreichbar, üblicherweise https://<server>/EWS/Exchange.asmx
AnmeldungNTLM am virtuellen Verzeichnis erlaubt (Auslieferungszustand)
Kontoein Dienstkonto mit der Rolle ApplicationImpersonation
Postfächerje Raum ein Raumpostfach (RoomMailbox)

Ein eigenes Postfach braucht das Dienstkonto nicht.

4.2 Netz und Zertifikate

  • Das Tablet muss den Exchange-Server erreichen (WLAN oder LAN)
  • Läuft EWS mit einem Zertifikat der internen Firmen-CA, muss dieses CA-Zertifikat auf jedem Tablet installiert werden (Einstellungen → Sicherheit → Zertifikat installieren → CA-Zertifikat)
  • Klartext-HTTP wird unterstützt, ist aber nicht zu empfehlen

4.3 Raumpostfächer

Damit Buchungen vom Display ohne Rückfrage angenommen werden und der Termintitel überhaupt anzeigbar ist:

Set-CalendarProcessing -Identity "" `  -AutomateProcessing AutoAccept `  -AllowConflicts $false `  -DeleteSubject $false `  -AddOrganizerToSubject $false `  -DeleteComments $false

Datenschutz-Entscheidung: -DeleteSubject $false bedeutet, dass der Betreff für jeden an der Tür lesbar ist. Soll das nicht sein, wird -DeleteSubject $true gesetzt — RaumInfo zeigt dann von sich aus „Belegt“. Das ist kein Fehlerfall, sondern vorgesehen.

4.4 Hardware

Tablet8 Zoll, Android 8.1 oder neuer, Querformat
GehäuseWandgehäuse, das Power- und Lautstärketasten verdeckt
StromDauerversorgung; bewährt hat sich PoE auf USB-C in der Unterputzdose

Das Tablet läuft im Dauerbetrieb am Ladestrom.

4.5 Arbeitsplatz für die Einrichtung

  • Windows-Rechner mit PowerShell
  • Android-Platform-Tools (adb)
  • USB-Kabel

5. Einrichtung

5.1 Dienstkonto auf dem Exchange-Server

Alle Befehle in der Exchange Management Shell. In einer gewöhnlichen PowerShell existieren Set-Mailbox und Verwandte nicht — die Meldung „wurde nicht als Name eines Cmdlet erkannt“ bedeutet die falsche Konsole, nicht fehlende Rechte.

# --- anzupassen ---------------------------------------------------------
$Raeume = "","",""
$Dienst = "svc-rauminfo"
# ------------------------------------------------------------------------
$NetBIOS = $env:USERDOMAIN$Konto   = "$NetBIOS\$Dienst"
# 1) Dienstkonto anlegen (entfällt, wenn vorhanden)
New-Mailbox -Name $Dienst -UserPrincipalName "$Dienst@$($Raeume[0].Split('@')[1])" `  -Password (Read-Host -AsSecureString "Passwort für $Dienst")

# 2) Räume markieren und Gültigkeitsbereich anlegen
$Raeume | ForEach-Object { Set-Mailbox $_ -CustomAttribute1 "RaumInfo" }New-ManagementScope -Name "RaumInfo-Raeume" `  -RecipientRestrictionFilter "CustomAttribute1 -eq 'RaumInfo'"

# 3) Impersonation zuweisen — eingegrenzt auf genau diese Räume
New-ManagementRoleAssignment -Name "RaumInfo-Impersonation" `  -Role ApplicationImpersonation -User $Konto `  -CustomRecipientWriteScope "RaumInfo-Raeume"

# 4) RBAC-Zwischenspeicher leeren, sonst wirkt Schritt 3 bis zu eine Stunde nicht
Import-Module WebAdministrationRestart-WebAppPool MSExchangeServicesAppPool

# 5) EWS-Adresse ausgeben
(Get-WebServicesVirtualDirectory | Select-Object -First 1).InternalUrl.AbsoluteUri

Ohne Eingrenzung dürfte das Konto jedes Postfach der Organisation öffnen. Der Gültigkeitsbereich ist deshalb keine Kür.

5.2 Tablet vorbereiten

  1. Einstellungen → Über das Tablet → Softwareinformationen: siebenmal auf „Buildnummer“ tippen
  2. Entwickleroptionen → USB-Debugging einschalten
  3. Per USB an den Rechner, Freigabe am Tablet bestätigen

Für den Kiosk-Modus kommt eine Bedingung hinzu — siehe 5.4.

5.3 Variante A — ohne Kiosk-Modus

Die Voreinstellung. Anzeige, Buchung, Freigabe und Nachtabsenkung laufen vollständig; es fehlt allein die Sperre gegen das Verlassen der App.

PowerShell im entpackten Paketordner:

.\tablet-einrichten.ps1 -Raum  -Name "Besprechung 1" -NeuePin 8213

EWS-URL, Domäne und Benutzer fragt das Skript ab, sofern nicht als Parameter angegeben. Das Passwort wird verdeckt eingegeben und nicht gespeichert — es ist bewusst kein Parameter, damit es nicht in der PowerShell-Historie landet.

Die App nimmt die Übergabe nur mit der Administrator-PIN an (frisch installiert 0000, sonst mit -Pin angeben). Ohne diese Hürde ließe sich die Anzeige per ADB auf einen fremden Server umbiegen.

Danach einmalig am Tablet einstellen:

Einstellungen → Apps → Standard-Apps → Startseite  →  RaumInfo

Ohne das startet die Anzeige nach einem Stromausfall nicht von selbst: Android lässt eine App im Hintergrund kein Fenster öffnen. Als Startanwendung startet das System sie dagegen selbst.

Ebenfalls sinnvoll: Einstellungen → Sperrbildschirm → Sperrbildschirmtyp → Keine.

5.4 Variante B — mit Kiosk-Modus

Zusätzlich zu Variante A:

  • Tablet auf diese App gesperrt (LockTaskMode)
  • Statusleiste und Sperrbildschirm abgeschaltet
  • Deinstallation blockiert
  • Systemuhr-Abgleich erzwungen, Display bleibt beim Laden an
  • Kein Start in den abgesicherten Modus, keine weiteren Benutzerprofile
  • Nach dem Booten landet das Tablet ohne Zutun in der Anzeige

Zusätzliche Voraussetzung: ein Gerät ohne eingerichtetes Konto. Bei fabrikneuen Tablets genügt es, den Einrichtungsassistenten zu durchlaufen und dabei Google- und Samsung-Anmeldung zu überspringen. Nur ein bereits angemeldetes Gerät muss vorher zurückgesetzt werden.

Ob ein Gerät taugt, sagt dieser Aufruf, ohne etwas zu ändern:

.\tablet-einrichten.ps1 -Diagnose

Aufspielen mit Sperre:

.\tablet-einrichten.ps1 -Kiosk -Raum  -Name "Besprechung 1"

Die Sperre lässt sich wieder lösen:

adb shell dpm remove-active-admin de.rauminfo/.kiosk.RaumInfoDeviceAdminReceiver

5.5 Konfiguration am Gerät

Wurde nichts übergeben, werden die Werte am Tablet eingetragen: langer Druck auf den Raumnamen oben links, PIN 0000.

FeldPflichtBeispielHinweis
EWS-URLjahttps://exchange.firma.local/EWS/Exchange.asmxvollständig, mit /EWS/Exchange.asmx
Raum-PostfachjaAdresse des Raumes, nicht des Dienstkontos
AnzeigenameneinBesprechungsraum Nordreine Beschriftung
Domänepraktisch jaFIRMANetBIOS-Name, nicht firma.local
Benutzerjasvc-rauminfonur der Anmeldename, ohne Domäne, kein UPN
Passwortjaverdeckt
Arbeitsbeginn / -endeja07:00 / 18:00strikt HH:mm, führende Null
Wochenende ist Arbeitszeitaussiehe Abschnitt 2
Abfrageintervall6015–900 Sekunden
Tageshelligkeit9010–100 %
Administrator-PIN00001–8 Ziffern, bei Einrichtung ändern

Nicht einstellbar, weil fest verdrahtet: die 15-Minuten-Vorwarnung, das Abdunkeln nach 60 Sekunden Ruhe, der abgefragte Kalenderbereich (heute 00:00 bis übermorgen 00:00), die angebotenen Ad-hoc-Dauern und die Höchstdauer von 240 Minuten.

Reihenfolge beachten: „Verbindung testen“ prüft die gespeicherten Werte. Nach einer Änderung also erst Speichern.


6. Fehlerbilder

MeldungUrsacheBehebung
Anmeldung fehlgeschlagen (401)Benutzer, Passwort oder Domäne falsch; Konto gesperrt oder Passwort abgelaufenDomäne als NetBIOS-Name, Benutzer ohne Präfix; Kontostatus prüfen
Zugriff verweigert (403)keine ApplicationImpersonation oder Raum außerhalb des GültigkeitsbereichsAbschnitt 5.1; Anwendungspool neu starten
EWS-Adresse nicht gefunden (404)URL unvollständigvollständige Adresse mit /EWS/Exchange.asmx
Der SMTP-Adresse ist kein Postfach zugeordnetRaumadresse falsch geschriebenprimäre SMTP-Adresse des Raumes prüfen
Zertifikatsfehlerinterne CA nicht auf dem TabletAbschnitt 4.2

Ein 401 lässt sich von außen nicht danach unterscheiden, ob Passwort, Benutzer oder Domäne falsch ist — NTLM meldet in allen drei Fällen dasselbe.


7. Technisches

  • Kotlin und Jetpack Compose, minSdk 27, targetSdk 36
  • NTLMv2 selbst implementiert. Für Android gibt es keine gepflegte NTLM-Bibliothek, und Android liefert MD4 — das der NT-Hash zwingend braucht — seit Jahren nicht mehr über die JCA aus. Beides steckt deshalb im Projekt und ist durch die Testvektoren aus RFC 1320 abgesichert.
  • 48 Unit-Tests über NTLM-Aufbau, EWS-Erzeugung und -Auswertung, Arbeitszeit- und Ampel-Logik.
  • Fassung nach Schema JJJJ.MM.TT.SSMM, an einer Stelle gepflegt; der von Android verlangte versionCode wird daraus abgeleitet.
  • Die App fordert genau drei Berechtigungen an — Netzwerkzugriff, Netzwerkstatus und Start nach Neustart. Alle drei haben die Schutzstufe „normal“ und werden beim Installieren ohne Rückfrage vergeben; es gibt keinen Berechtigungsdialog.
Nach oben scrollen