Kommt dir folgende Situation bekannt vor? Du möchtest für ein Meeting einen Raum reservieren, doch leider sind alle Räume bereits belegt. Als du später bei den Räumen vorbeigehst, musst du dann feststellen, dass alle Räume zwar reserviert sind, sich dort jedoch niemand aufhält.
In unserem Karlsruher Office haben wir genau diese Situation. Dank eines modernen Tools zur Raumbelegung ist unser Besprechungsraum zwar ständig gebucht, aber es kommt oft vor, dass z. B. Regeltermine nicht gelöscht werden, wenn sie nicht mehr benötigt werden. Nun kam uns die Idee: „Wenn wir nur genug Technik auf das Problem werfen, wird es schon zu lösen sein“. Also nichts wie ran ans Werk!
(Kleine Warnung: Da wir so viele Technologien einsetzen, kann ich diese leider nicht alle vorstellen. Es ist daher von Vorteil, wenn du dich zumindest im AWS -Ökosystem ein wenig auskennst!)
Das Konzept
Unsere Lösung setzt auf günstig herzustellende IoT -Geräte und ein serverless Backend, das sich mit unserem Tool zur Raumbelegung integrieren lässt. Die IoT-Geräte erfassen Bewegungsdaten. Diese werden dann mit der tatsächlichen Reservierung des Raumes abgeglichen. Ist ein Raum reserviert, es hält sich zu der Zeit jedoch niemand dort auf, wird der Veranstalter per Slack auf die unnötige Reservierung hingewiesen. Mit den gesammelten Daten wird außerdem ein Live-Dashboard der Belegung aller unserer Räume gefüttert – dies ist besonders auch für unsere „Telefonzellen“ vorteilhaft, die sich nicht reservieren lassen.
Die IoT-Geräte
Unsere IoT-Geräte werden an verschiedenen Stellen im Raum angebracht – je mehr Geräte, desto besser das Ergebnis. Die Stromversorgung stellt ein Problem dar, da nicht überall Steckdosen vorhanden sind. Außerdem möchten wir die Geräte warten können, ohne den Raum zu betreten oder das Gerät an einen PC anschließen zu müssen. Damit hätten wir:
- Möglichst geringe Materialkosten
- USB-Stromversorgung
- Automatisiertes Firmware-Setup
- Over-The-Air-(OTA-)-Firmware-Updates
- Remote-Konfiguration
- WLAN-Verbindung
- MQTT-Support
Die Entscheidung fiel auf den günstigen und in der Maker-Szene weit verbreiteten Microcontroller ESP8266, in Kombination mit einem HC-SR501-Bewegungssensor. Als Firmware setzen wir auf Mongoose-OS , welches unter anderem OTA, Auto-Setup, MQTT, Remote-Wartung und Device Management bietet und in JavaScript oder C/++ programmiert werden kann. Ein Gehäuse drucken wir selbst, so dass unsere Geräte am Ende so aussehen:
Die Geräte erkennen Bewegungen im Raum und senden diese per WLAN über MQTT an unser Cloud-Backend. Die Sensorik funktioniert trotz Glaswänden reibungslos. Um den Ausfall eines Sensors erkennen zu können, reicht es aber nicht aus, nur Bewegungen zu melden – es sind auch „Keine Bewegung“-Meldungen erforderlich. Es werden also regelmäßig Informationen gesendet, auch wenn keine Bewegung erkannt wurde.
Zur Verwaltung aller IoT-Geräte bietet Mongoose-OS ein Dashboard an. Hier sind alle registrierten Geräte aufgelistet, es ist außerdem zu sehen, ob diese gerade verbunden sind:
Außerdem lässt sich hierüber die Konfiguration einzelner Geräte verändern (z.B. WLAN-Zugangsdaten oder Laufzeit-Parameter) oder „over the air“ auf Knopfdruck neue Firmware auf einzelne oder alle Geräte ausrollen.
Das Backend
Zur Verarbeitung der Bewegungsdaten setzen wir Amazon Web Services ein, das wir mit Terraform provisionieren. Der Ablauf ist wie folgt:
Die Bewegungsdaten gehen über den AWS IoT MQTT Broker ein und werden über eine Action Rule in DynamoDB (und bei Bedarf in Elasticsearch) gespeichert. Hier befindet sich auch einige Konfiguration, z. B. welche Räume und Geräte existieren und wie diese einander zugeordnet sind. Somit können später Bewegungsinformationen Räumen zugeordnet werden, und es lässt sich ein Belegungs-Profil für jeden Raum anfertigen. Außerdem können neue Geräte hinzugefügt oder bestehende Geräte einem anderem Raum zugeordnet werden.
Die Logik zur Überprüfung der Raumbelegung ist in einer AWS Lambda umgesetzt. Diese wird regelmäßig über eine AWS CloudWatch Event Rule getriggert und stellt fest, ob ein gebuchter Raum genutzt wurde oder nicht. Unsere Raumbuchung erfolgt über einen Google Calendar, der hierzu über die Calendar API abgefragt wird. Zu guter Letzt erfolgt eine Benachrichtigung des Veranstalters über die Slack API, falls ein reservierter Raum nicht genutzt wurde:
Das Live-Dashboard zur Raumbelegung
Aus den gesammelten Daten lässt sich leicht die aktuelle Live-Belegung jedes Raumes ermitteln. Dies nutzen wir für ein Dashboard, in dem die aktuelle Belegung unserer Räume angezeigt wird. Zur Anzeige nutzen wir AngularJS , das wir in AWS S3 hosten. Das Ganze sieht so aus:
Das Dashboard erhält die Daten über einen REST-Service, den wir über das AWS API Gateway anbieten. Die Logik hierzu liegt ebenfalls in einer AWS Lambda und liefert die aktuelle Live-Belegung für alle Räume.
Fazit
Zum Schluss stellen sich noch einige Fragen. Funktioniert das System? Hat sich die Situation gebessert? Was planen wir sonst so?
Das System im täglichen Betrieb zu testen, gestaltete sich schwieriger als gedacht. Denn mit der Installation ging eine plötzlich auftretende Disziplin unter allen Kollegen einher, was die Pflege der Reservierungen anging. 🙂
Von technischer Seite her war ein wenig Feintuning erforderlich, z. B. was die Platzierung und Meldefrequenz der IoT-Geräte betrifft. Seither läuft das System zuverlässig in unserem Besprechungsraum, und auch die Live-Raumbelegung arbeitet stabil, so dass wir bald weitere Räume ausstatten werden.
Für die Zukunft haben wir viele Pläne, aber leider ist unsere 4+1-Zeit begrenzt. Sobald es etwas Neues gibt, erfährst du es hier im Blog!
Dir gefällt unser Projekt, du hast Fragen dazu oder möchtest auch einen Raum ausstatten? Dann blätter doch mal durch den Quellcode . Ansonsten schreib uns einfach einen Kommentar oder eine Mail. Wir freuen uns!
Weitere Beiträge
von Tobias Schaber
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Tobias Schaber
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.