Wie kann Elektromobilität nahtlos und einfach in den Alltag integriert werden? Mit dieser Fragestellung beschäftigt sich das Forschungsprojekt zur „Bewertung integrierter Elektromobilität“ (kurz BiE). Zusammengeschlossen haben sich hierfür verschiedene Partner aus Wissenschaft und Industrie, darunter auch esentri. Das Ziel: ein System zu entwickeln, dass die Nutzung von Elektromobilität einfacher macht und es Anbietern von z.B. Carsharing Services ermöglicht, Elektrofahrzeuge effizient einzusetzen.

Eine zentrale Aufgabe im Rahmen des BiE-Projektes ist es, eine Anwendung zu entwickeln, die es jeder Person so einfach wie möglich macht Elektromobilität von unterschiedlichen Anbietern, z.B. aus dem Bereich Carsharing oder auch öffentliche Verkehrsmittel, zu nutzen, zu kombinieren und damit den Tagesablauf zu planen. Eine Möglichkeit, um diesen Service für jeden zugänglich zu machen, ist eine mobile App.

Eine App, die Smart Home und Mobilität intelligent verbindet

Für solch eine App gibt es etliche Anforderungen, die erfüllt werden müssen. Bei der Planung der Routen sollen beispielsweise vom Nutzer favorisierte Routen und Orte, sowie die Verfügbarkeit von Verkehrsmitteln und auch aktuelle Ereignisse (z.B. Stau) berücksichtigt werden. Auch die Möglichkeit. bestimmte Verkehrsmittel auszuschließen oder zu präferieren, soll gegeben sein. Einem Nutzer, der keinen Führerschein besitzt, soll keine Route vorgeschlagen werden, bei der er auf ein Auto angewiesen ist.

Aber es geht noch viel weiter. Zusätzlich soll die App auch die Möglichkeit bieten, sich mit externen Geräten zu verbinden, um Elektromobilität besser im Alltag zu verankern. So wäre es denkbar sich mit Elementen eines Smart Home zu verbinden, so dass diese sich dem Fahrtprofil des Benutzers anpassen können. So kann es zum Beispiel im Sinne der Energieeffizienz hilfreich sein, wenn die Heizung automatisch eingeschaltet wird, sobald die App erkennt, dass man sich auf dem Heimweg befindet. Umgekehrt könnte auch die Routenplanung beeinflusst werden. Falls z.B. der „Smart-Kühlschrank“ meldet, dass der Milchvorrat zur Neige geht, kann dem Nutzer eine neue Route vorgeschlagen werden, die am Supermarkt vorbei führt. Auch wenn er bereits unterwegs ist soll die Route angepasst werden können, wenn sich während der Fahrt die Verkehrslage ändert oder neue Meldungen des Smart Home eingehen. In erster Linie ist die App dafür gedacht online genutzt zu werden. Wenn der Nutzer allerdings zeitweise keine Internetverbindung hat, sollen ihm trotzdem die wichtigsten Daten zur Ansicht und Bearbeitung zur Verfügung stehen.

Aus diesen Vorgaben ergeben sich folgende technische Anforderungen:

  1. Um die App möglichst vielen Nutzern zugänglich zu machen sollte sie im Idealfall plattformunabhängig entwickelt werden.
  2. Aufgrund einer potentiell sehr großen Benutzergruppe soll die Anwendung gut skalierbar sein.
  3. Um schnell auf aktuelle Ereignisse reagieren zu können, wird Real Time Messaging zwischen Server und Client benötigt.
  4. Um unterwegs die Route anzupassen muss die Position des Besitzers bestimmt werden können.
  5. Falls sich Updates ergeben während ein Gerät z.B. ausgeschaltet is oder die App nicht gestartet ist, sollten Push Notifications versendet werden, damit der Benutzer in jedem Fall alle wichtigen Benachrichtigungen erhält.
  6. Damit auch offline (d.h. ohne Verbindung zum Internet) Informationen zur Bearbeitung verfügbar sind wird ein lokales Cache auf dem mobilen Endgerät benötigt.

Um diese Anforderungen zu erfüllen evaluieren wir verschiedene Technologien, von denen ich Vert.x, Apache Cordova und AngularJS nachfolgend kurz vorstelle.

Vert.x

Vert.x ist ein polyglottes, ereignisorientiertes Anwendungsframework in einer JVM.

Das heißt: Komponenten einer Anwendung können in unterschiedlichen Programmiersprachen geschrieben werden. Momentan werden die Sprachen Java, JavaScript, Groovy, Ruby, Python, Scala, Clojure und Ceylon unterstützt.
Vert.x Anwendungen basieren auf einem einfachen asynchronen Programmiermodel, das außerdem dazu führt, dass die Anwendungen sehr gut skalierbar sind. Ereignisse werden über einen Event Bus versendet, der sowohl Komponenten auf der Serverseite als auch mit dem Client verbindet.

Eine Vert.x Anwendung besteht grundsätzlich aus Modulen, die in einer JVM laufen und aus einem oder mehreren sogenannten Verticles bestehen. Die Module kommunizieren über den Event Bus miteinander und verteilen darüber ebenfalls die Aufgaben an einzelne Verticles. Wir verwenden Vert.x in unserer App aufgrund seiner guten Skalierbarkeit, und der Möglichkeit über den Event Bus „Real Time Messaging“ zwischen der Server- und der Clientseite betreiben zu können.

Apache Cordova

Für die Plattformunabhängigkeit sorgt in unserem Fall Apache Cordova. Cordova ist eine Sammlung von Device APIs die es Entwicklern erlaubt mobile Apps zu programmieren ohne nativen Code zu schreiben, sondern durch das Verwenden von HTML/CSS und JavaScript. Hierzu wird die Anwendung in Wrappern für die jeweilige mobile Plattform ausgeführt und gehostet und kann über API Bindings auf die jeweiligen Sensoren, Daten und Netzwerke zugreifen. Somit können wir hierüber beispielsweise auf die lokale SQLite Datenbank auf mobilen Geräten zugreifen und das lokale Caching umsetzen. Ebenso kann dann sehr leicht auf den GPS-Sensor zur Bestimmung der Position des Benutzers zugegriffen werden. Mit der AngularJS Erweiterung für Cordova ng Cordova besteht darüberhinaus eine passende Integration in das von uns in diesem Fall verwendete MVC Framework.

AngularJS

Während Vert.x unsere Daten auf der Serverseite verwaltet, hilft uns AngularJS bei der Strukturierung der Applikation auf CLientseite.
AngularJS ist ein JavaScript-Framework zur Erstellung von Webanwendungen nach dem MVC-Prinzip. Hierzu bietet es viele Erweiterungen für HTML in Verbindung mit JavaScript, die das erstellen dynamischer Views in Webapplikationen vereinfachen. Wichtig hierfür ist vorallem das „two-way-databining“, das Erstellen eigener HTML-Elemente, sogenannter „directives“, und der „dependency injection“ Container über den verschiedene Angular Module miteinander verknüpft werden können.

Related Posts

> Leichtgewichtige, skalierbare Webanwendungen mit Vert.x
> Mobile cross-platform Anwendungen mit AngularJS und Apache Cordova