RoomWow – Namics Lab Projekt

Es war wiedermal so weit! Einmal im Jahr (und für mich leider das letzte Mal *sniff*) veranstaltet unser Team in der Namics ein sogenanntes Lab. Um es einfacher auszudrücken, kann man es als Hackathon betrachten. 2 Tage tüftelt, ausprobieren, designen, implementieren, testen und verbessern. Im Vorhinein wurden Vorschläge gesammelt und Teams gebildet. Ich habe das Thema iBeacon (Bluetooth Low Energy/Smart) vorgeschlagen und sofort intressierte gefunden. Andere Teams habe sich mit den Themen 3D drucken (Keksformen), Ninja Framework, Parse.com oder Cocos2D befasst.

Ziel

Was genau war unser Ziel? Das primäre Ziel war es, die Technologie kennenzulernen. Einfach mal sich mit dem Thema befassen, schauen was möglich ist um dann natürlich was geiles umzusetzen! Unsere Vision…

ibeacon_konzept

…eine Webapp, die realtime anzeigt, wieviel Personen sich in einem Konferenzraum befinden. Das ganze soll ausbaubar auf 1 bis n Räume sein. Ja gut, am Anfang wollten wir nur eine Ampel machen. Rot = besetzt, Grün = frei, aber das wäre natürlich zu einfach gewesen ;). Wir hatten 2 Tage um die Webschnittstelle zu Implementieren, CouchDB anzuhängen und eine iPhone App in Swift zu progammieren um die Eincheck- und Auscheckrequests an den Webservice zu senden. Die iPhone App muss nicht geöffnet werden oder im Hintergrund laufen. Sie empfängt zu jederzeit die Bluetooth Signale (sofern Bluetooth nicht ausgeschaltet ist) und reagiert auf die UUID. Das alles in 16 Stunden!

Mein Team

roomwow-members

Mein Team bestand aus Markus Tressl, Alain Zoja, Pasqual Vossberg, Markus Spiekermann und mir. Nicht gerade die Ideale Komposition mit nur 2 Entwickler, aber wir haben das Ganze gut aufteilen können ;). Ich habe mich auf das iPhone App (Swift) fokussiert, Pasqual auf die grafischen Elemente und Alain implementierte den Webserivce (CouchDB & Ninja Framework)… mehr dazu aber nachher!

Was ist iBeacon (Bluetooth Low Energy/Smart)?

roomwow_0003_image2

Das Beacon

Beacon kann auf Deutsch mit „Leuchtfeuer“ oder „Leuchtturm“ übersetzt werden. Das Ganze funktioniert über Bluetooth 4.0, auch Bluetooth Low Energy (LE) genannt. Um es simpel zu halten: Ein kleines Bluetooth-Ding sendet (Broadcast, Unidirektionale Kommunikation) die ganze Zeit etwas, was man mit anderen Geräten, wie einem Handy, auslesen kann. Das im Juni 2010 lancierte Bluetooth LE ist eine Technik zur drahtlosen Datenübertragung, benötigt im Vergleich mit älteren Standards deutlich weniger Strom und hat eine grössere Reichweite als NFC. Die maximale Reichweite beträgt bis zu 70 Meter.

Die Parameter des Beacons

Ein Beacon ist ein also ein kleiner Bluetooth Sender, meist kaum grösser als eine fünf Franken Münze, der andauernd seine UUID z.B. B9407F30-F5F8-466E-AFF9-25556B57FE6D (128-bit unique identifier), seine Major (16-bit unsigned integer) und Minor (16-bit unsigned integer) Werte broadcastet. Alle diese Werte, aber auch die Stärke des Signal (Strength) und der Intervall, können auf dem Beacon selbst konfiguriert werden. So kann dieser eine Lebensdauer von 30 Tage bis 4 Jahren erreichen mit einer einfachen Knopfbatterie.

Distanzen

Es gibt 3 Distanzen, welche über die iOS Library ausgelesen werden können:

  • Immediate: 0cm bis 20cm
  • Near: 20cm bis 2m
  • Far: 2m bis 70m

Als Ausnahme gibt es noch Unknown. Dieser Wert wird zurückgegeben, wenn die Distanz irgendwie nicht ermittelt werden kann. Die Distanzen werden natürlich von Gegenständen oder Wänden eingeschränkt.

Projekt: RoomWow

roomwow-ninja-webapp-heroku
Das Projekt RoomWow war geboren. Ein Webinterface dass die Leute in einem Meetingraum anzeigt. Jeder Raum kann angeklickt werden und darin sieht man die einzelnen Personen. Rot eingefärbte Räume bedeuten „besetzt“, Grün eingefärbte „frei“.

Estimote Beacons

roomwow_0004_image1

Wir bekamen von der Namics 3 Beacons von Estimote, um unser Projekt umzusetzen. Jeder Beacon konfigurierten wird mit derselben UUID. Der Major Wert beschreibt das Sitzungszimmer, der Minor Wert ist eine optionale unterteilung für mehrere Beacons in einem grossen Sitzungszimmer. Unsere Zimmer in der Namics sind nach alten Games benannt. Wir haben die Versuchsbeacons folgendermassen konfiguriert:

  • Beacon 1 (Grosses Sitzungszimmer: Lemmings)
    • UUID: 566C5595-6EC7-4F08-909F-C954BDCA6CD3
    • Major: 1
    • Minor: 1
  • Beacon 2 (Grosses Sitzungszimmer: Lemmings)
    • UUID: 566C5595-6EC7-4F08-909F-C954BDCA6CD3
    • Major: 1
    • Minor: 2
  • Beacon 3 (Kleines Sitzungszimmer: Super Mario)
    • UUID: 566C5595-6EC7-4F08-909F-C954BDCA6CD3
    • Major: 2
    • Minor: 1
iPhone App (Swift)

roomwow_0002_image3

Der Initialaufwand um mal alles einzurichten, war riesig! Zuerst muss man die riesige Entwicklungsumgebung Xcode installieren. Danach kommt der ganze Setup mit iOS Developer Account, verschiedenste Zertifikate und ID’s. Ich habe dazu etliche Tutorials im Netz gefunden. War das alles mal installiert, ist man für jedes weitere Projekt ready to go!

Die Iphone App ist hier, um nach dem Beacon zu horchen. Dieser „Listener“ schaut die ganze Zeit nach der Beacon UUID und bei einem Kontakt sendet die App einen Request an die Webapplikation. Kommt ein Beacon in die nähe des Gerätes, wird folgender Request abgesetzt: PUT /addUser/deviceId/room/roomNumber. Die deviceID ist eine eindeute ID, die das Gerät beschreibt (UIDevice().identifierForVendor.UUIDString). Der roomNumber Parameter wird aus dem Beacon Major herausgelesen und übermittelt. Der User wird auf der Datenbank erstellt.

Beim Verlassen des Raums, verliert das Gerät das Signal des Beacons. Folgender Request wird abgesendet: DELETE /removeUser/deviceId. Der User wird so auf der Datenbank wieder gelöscht.

Webapp (Ninja Framework, CouchDB, Heroku)

heroku
Ninja Framework ist ein neueres Java Framework, das ähnlich wie Play Framework 1.0 ist. Es läuft mit Apache Maven, biete Hot Reload, Dependency Injection und läuft out-of-the-box mit einem Jetty-Webserver. CouchDB ist eine dokumentorientierte Datenbank (NoSQL) und arbeitet mit JSON Objekte.

Am Schluss wollten wir die Webapplikation im Internet haben und haben dazu spontan auf Heroku gegriffen. Innert 5 Minuten war die Java Applilkation deployed.

Resources

roomwow_0001_image6

Links