Digitales Raumdisplay: Step-by-Step Bauanleitung

Den Belegungsstatus Ihrer Meetingräume immer im Blick

Auch wenn sich inzwischen viele Themen virtuell besprechen lassen, sind Präsenzmeetings nach wie vor ein wichtiges Element im Unternehmensalltag. Dafür gibt es an den meisten Firmenstandorten entsprechende Meetingräume. Diese werden oft von einem zentralen Buchungssystem automatisiert verwaltet und können direkt online vom Mitarbeiter für einzelne Termine reserviert werden. Das ermöglicht eine dynamische und effiziente Belegung der Räume.  

Deren Beschilderung stößt allerdings oft an ihre Grenzen und zeigt meistens „analog“ den Raumnamen an. Benötigt ein Mitarbeiter einen Ort für Telefonate oder spontane Absprachen, lässt sich nur durch das Stöbern in verschiedenen Kalendern herausfinden, ob ein Raum zur Verfügung steht oder demnächst gebucht ist. Ein digitales Raumdisplay leistet hier Abhilfe – von diesem kann abgelesen werden, ob der Meetingraum belegt ist oder nicht. Im Falle einer Buchung passt sich der Status automatisch an.  

Die Lösung von unseren TIMETOACT GROUP-Azubis

Franziska Schnur und Maurice Hildebrand, beide Auszubildende der TIMETOACT GROUP, haben mit viel Kreativität und Eigeninitiative in Kooperation mit der novaCapta in einem Mini-Hackathon eine entsprechende Lösung entwickelt. Das digitale Raumdisplay löst fortan die analoge Beschilderung ab. Mitarbeiter wissen so auf den ersten Blick, ob sie den Meetingraum nutzen können – und zwar umständliche Recherche. Franziska kümmerte sich um die Server Software und Maurice um die Hardware und die Client Software. Die TIMETOACT GROUP setzt in der internen Zusammenarbeit auf Microsofts Office 365, daher greift auch die neue Lösung die darin gepflegten Daten ab. Das Gehäuse der Hardware kam aus dem hauseigenen 3D Drucker.

Wie auch Sie eine solche Lösung mit einfachen Mitteln realisieren können, schildern Franziska und Maurice in einer Bauanleitung.

Den Code für die Umsetzung finden Sie hier.  

Einkaufsliste für O365 Raumbuchungsdisplay

So realisieren Sie die Server-Software

  • Im ersten Schritt gilt es, das Projekt aufzusetzen. Für das Backend eignet sich NodeJS mit Express, im Frontend sind wir flexibel. Microsoft bietet auf diesem Stack bereits eine Beispiel-App an, die sich gut als Grundlage eignet: https://github.com/microsoftgraph/msgraph-training-nodeexpressapp 

  • Für jedes Display werden spezifische Informationen wie zum Beispiel IP-Adresse, Name oder Power-Over-Ethernet Anschluss benötigt. Je Raum speichern wir diese in der .env-Datei. Die Daten werden zur Laufzeit ausgelesen und verwendet. 

  • Mit Hilfe der Microsoft Graph API lassen sich die Informationen zum jeweiligen Raum im Backend ziehen. Dazu muss die Applikation unter anderem in Office 365 registriert und die Berechtigungen für den API-Zugriff konfiguriert werden.  

  • Für die Erstellung der Bitmap-Datei nutzen wir die NPM-Module Jimp und Canvas. Per Canvas erzeugen wir ein Bild und schreiben Text an die benötigten Stellen. Via Jimp wandeln wir das erzeugte JPEG in Bitmap um, sodass das Display das Bild verarbeiten kann (siehe image.js). 

  • Da das Bild für die Übertragung an das Display nicht zu groß sein darf, wird es in mehrere Teile zerlegt und jedes einzelne Teilbild mit der API an das Display gesendet. Anschließend können wir das Display für eine beliebige Zeit in den Ruhemodus schicken. In unserem Fall haben wir in der .env Datei über “TRIGGER_TIME” 15 Minuten festgelegt. 

  • Beim Ansprechen des Displays wird auch der Akkustand abgefragt. Sollte dieser in einen kritischen Bereich rutschen, erfolgt automatisiert eine Ticket-Erstellung in JIRA-Desk (siehe interactions.js Z.7 - 15). Dazu hinterlegen wir die Daten wie Host, Username und Passwort in der .env Datei. Vor der Erstellung des Tickets ist zu prüfen, ob ein solches bereits existiert. 

  • Damit die dargestellte Raumbuchung möglichst aktuell ist, soll die App die Bilder selbstständig alle 15 Minuten neu generieren. Dafür brauchen wir einen Cron-Job, der die Informationen in diesem Intervall aus Office 365 abfragt und das neu generierte Bild gegebenenfalls an das Display sendet (siehe index.js Z.133-Z.152).  

  • Möchten wir eine Raumbuchung manuell aktualisieren, eignet sich der Befehl „npm run start” im Terminal des Projekts. Dafür müssen wir das Display mit dem Button im Gehäuse aufwecken.   

  • Für den Bau der App entschieden wir uns für Docker. Da unsere NodeJS App nur wenige Ressourcen benötigt, bietet sich ein kleines Docker-Image an. Dieses deployen wir auf dem bestehenden Kubernetes via Helm-Charts. Ein einfacheres Deployment via Docker-Compose oder eine lokale Entwicklung mit Minikube sind ebenso möglich.   

So bauen Sie den Client

  • Den Client realisieren wir mit einem ESP, welcher mit C++ programmiert wird. Dafür ist zum Beispiel Visual Studio Code mit platformio geeignet.  

  • Um einen niedrigen Stromverbrauch zu realisieren und eine gute Sichtbarkeit bei heller Beleuchtung zu garantieren, nutzen wir ein 3 Farben E-Ink-Display. 

  • Da das Display zunächst nur WLAN unterstützt, müssen in der main.cpp die WLAN-SSID und das WLAN-Passwort eingetragen werden. Zudem weisen wir jedem Display einen spezifischen Namen zu. 

  • Nach dem ersten Bespielen der Software kann die Software des Displays über das lokale Netzwerk aktualisiert werden. Dafür tragen wir die IP-Adresse und das OTA-Passwort (Standard: “passw0rd”) in die platformio.ini ein. 

  • Der ESP baut auf dem Port 80 einen Webserver auf, welcher eine Rest-Schnittstelle bietet, um den ESP komplett serverseitig steuern zu können. 

  • Um den ESP nicht über USB-Strom versorgen zu müssen, bauen wir einen Akku in das Display ein. In Anbetracht der flachen Bauart haben wir uns für einen LiPo-Akku entschieden. 

  • Das Display soll nicht plötzlich ausgehen – aufgrund dessen müssen wir die Spannung des Akkus auslesen. Dies gelingt über den Pin A0 

  • Um die Spannung für das Display konstant zu halten (Die Spannung des Akkus sinkt beim Entladen) befindet sich zwischen Akku und ESP ein LDO. 

  • Im Schaltplan sieht dies folgendermaßen aus:  

  • Es folgt eine Datei, um das Ganze als Platine drucken zu lassen. 

  • Nachdem das Display nun zusammengebaut ist, wartet es auf die Befehle des Servers. Wichtig: Es geht nicht von alleine in den Tiefschlaf. Dadurch hat es in diesem Zustand einen relativ hohen Stromverbrauch. 

Ich fand es super, das Vertrauen für das Projekt zu bekommen und eigenverantwortlich daran zu arbeiten.

Franziska SchnurSoftware EngineerTIMETOACT

Es hat Spaß gemacht, sich verschiedene Lösungsansätze zu überlegen und so direkt einen Beitrag zur Verbesserung der Unternehmensabläufe zu leisten. Wir freuen uns das fertige Produkt nun täglich im Einsatz zu sehen.

Maurice HildebrandSoftware Developersynaigy

Die Raumdisplays sind nun in unserem Headquarter im Einsatz und erleichtern unseren Mitarbeitern das Finden eines geeigneten Meetingraums. Wir freuen uns über die Unterstützung von Maurice und Franziska und das gelungene Ergebnis!  

Die Step-by-Step-Anleitung hat Ihnen gefallen? Dann verfolgen Sie weiterhin unseren Blog mit Beiträgen zu spannenden IT-Themen.   

Ihr Ansprechpartner

Christian Luxem
Head of Collaboration SolutionsTIMETOACT Software & Consulting GmbHKontakt