IoT im Büro – Raumbelegung optimieren mit Mongoose OS und Amazon Web Services

2 Kommentare

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.

Besetzt

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:

IoT Device

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:

Mongoose-OS Dashboard

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:

Ablauf Diagramm

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:

Slack Reminder bei geblocktem Raum

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:

Live-Dashboard zur Raumbelegung

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!

Tobias Schaber

Neben seinem Schwerpunkt „Verteilte Systeme“ beschäftigt sich Tobias mit der Automatisierung von Infrastruktur und komplexen Systemen wie z.B. Elasticsearch-Clustern. Mit ihm im Team ist außerdem immer ein leidenschaftlicher Verfechter agiler Softwareentwicklung zur Stelle, der gerne mal ein flammendes Plädoyer für agile Methoden hält.

Kommentare

  • Mkuh

    Hallo
    wlechen Senor habt ihr genommen ?
    Viele Grüße

    • Tobias Schaber

      30. Juli 2018 von Tobias Schaber

      Wir haben für unsere ersten beiden Testgeräte einen HC-SR501 Bewegungssensor genommen.

      Viele Grüße,
      Tobias

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.