Definition einer Internet-der-Dinge
Transcrição
Definition einer Internet-der-Dinge
Definition einer Internet-der-Dinge-Plattform und deren Referenzimplementierung sowie einer exemplarischen Anbindung an Formale Methoden. Bachelorarbeit von Sascha Wolter eingereicht bei Institut für Informatik Softwaretechnik und Programmiersprachen Prof. Dr. Michael Leuschel Universitätsstr. 1, D–40225 Düsseldorf November 2015 Gutachter: Prof. Dr. Michael Leuschel Jun.-Prof. Dr.-Ing. Kálmán Graffi Betreuer: David Schneider Erklärung Hiermit versichere ich, die vorliegende Bachelorarbeit selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt zu haben. Alle Stellen, die aus den Quellen entnommen wurden, sind als solche kenntlich gemacht worden. Diese Arbeit hat in gleicher oder ähnlicher Form noch keiner Prüfungsbehörde vorgelegen. Düsseldorf, den 6. November 2015 Sascha Wolter Zusammenfassung Diese Bachelorarbeit beschäftigt sich mit der Beschreibung einer typischen Internet-derDinge-Plattform und stellt eine Referenzimplementierung vor, die sich für die Verwendung mit Formalen Methoden wie ProB eignet. Die umgesetzte Plattform nutzt gängige und offene Standards: Als Nachrichtenbus kommt MQTT zum Einsatz – inklusive eines exemplarischen Clients auf Basis eines Arduino bzw. Genuino; die Anwendungslogik und das Gateway basieren auf Node.js und Node-RED. Das Internet der Dinge umfasst eine Vielzahl realer Objekte, die mit Hilfe von Sensoren und Aktuatoren um digitale Funktionen erweitert und direkt oder indirekt über Internet-basierte Technologien vernetzt sind. Diese Systeme aus Systemen durchdringen immer mehr Lebensbereiche und beeinflussen aktiv den Alltag. Die daraus resultierende Komplexität birgt zahlreiche Risiken. Als Grundlage für deren Bewältigung dient ein Durchstich, der die Internet-der-Dinge-Plattform über den Nachrichtenbus mit Formalen Methoden kombiniert und dafür auf die ProB Java API zurückgreift. Denn der Einsatz Formaler Methoden hilft bereits während der Spezifikation bei der Fehlervermeidung und macht die Korrektheit eines Systems berechenbar. Doch nicht nur das Internet der Dinge profitiert von Formalen Methoden: Die hier vorgestellte Internet-der-Dinge-Plattform ist auch zum Nutzen von Formalen Methoden. Denn bei der Modellierung zustandsbasierter Systeme und der Animation von Zustandsübergängen hilft es, die zugrundeliegende Hardware zu berücksichtigen. Das reale Verhalten lässt sich auf diese Weise durch Sensoren und Aktuatoren abbilden und interaktiv verfügbar machen. Dies trägt nicht nur zum Verständnis bei, sondern erlaubt ebenfalls die Berücksichtigung des Benutzerverhaltens. INHALTSVERZEICHNIS i Inhaltsverzeichnis 1 Hintergrund 1 1.1 Internet der Dinge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Relevanz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.3 Herausforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Formale Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.2 B Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.3 ProB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 2 Lösungsentwicklung 11 2.1 Referenzarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.1 Konzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.2 Umsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Anbindung an ProB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.1 Maschinen und Nachrichten . . . . . . . . . . . . . . . . . . . . . . 20 2.2.2 Geräteinteraktion und Regeln . . . . . . . . . . . . . . . . . . . . . . 25 2.2.3 Visualisierung und Lehre . . . . . . . . . . . . . . . . . . . . . . . . 27 2.2 3 Fazit 29 A Anhang 31 A.1 Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 A.2 Erweiterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 A.3 Dateien und Datenträger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Literatur 34 Abbildungsverzeichnis 37 Listings 38 1 HINTERGRUND 1 1 Hintergrund Die erste Hälfte dieses Abschnitts beschreibt typische Merkmale des Internet der Dinge (engl. Internet of Things, Kurzform IoT) – ganz egal, ob es sich beispielsweise um eher kleinere Installationen aus Endkunden-orientierten Haushaltsgeräten (Smart Home) oder um ganze Städte (Smart City1 ) handelt. Es werden die Historie sowie der Status quo beschrieben, eine Definition für IoT hergeleitet und Beispiele sowie Herausforderungen aufgelistet. Die zweite Hälfte erläutert Formale Methoden und deren Zweck anhand der B Methode und stellt abschließend die ProB Java API vor. Diese dient im späteren Verlauf als Grundlage für die Zusammenführung vom Internet der Dinge und Formalen Methoden. 1.1 Internet der Dinge Die eigentliche Vision des Internet der Dinge als Ubiquitous Computing (Rechnerallgegenwart, Kurzform ubicomp) erwähnt Mark Weiser [Wei96] zum ersten Mal 1988 am Computer Science Lab des Xerox PARC. In seinem 1991 erschienen Aufsatz „The Computer for the 21st Century“ [Wei91] beschreibt er eine Welt, bei der allgegenwärtige Computer die menschliche Umgebung berücksichtigen und sich in dieser im Hintergrund unmerklich integrieren: „The most profound technologies are those that disappear. They weave themselves into the fabric of everyday life until they are indistinguishable from it.” Die dadurch resultierende unbewusste Nutzung erlaubt es dem Anwender, sich auf seine eigentlichen Ziele zu konzentrieren. Dafür ist laut Weiser entscheidend, dass die Silikon-basierte Informationstechnologie den physischen Ort als Kontext ermitteln kann und dass die Geräte miteinander interagieren. Zum ersten Mal erwähnt Kevin Ashton [Ash09] das „Internet der Dinge“ 1999 in einem Vortrag rund um die funkbasierte Identifikation (RFID2 ) von Dingen in der Lieferkette. Für Ihn zeichnet sich IoT dadurch aus, dass nicht mehr einzelne Menschen Daten erfassen, sondern Computer diese Aufgabe übernehmen, indem sie Informationen über die Dinge in der physischen Welt durch Sensorik selbständig ermitteln: „We need to empower computers with their own means of gathering information, so they can see, hear and smell the world for themselves, in all its random glory. RFID and sensor technology enable computers to observe, identify and understand the world – without the limitations of human-entered data.” Überwiegend wird unter dem „Internet der Dinge“ jedoch weniger die eingegrenzte Sichtweise von Kevin Ashton, beschränkt auf Lieferketten, als vielmehr das weiter gefasste Ubiquitous Computing verstanden. Das Internet der Dinge zeichnet sich dadurch aus, dass Rechner in die Umgebung der Nutzer eindringen und so aus passiven Objekten intelligente Dinge machen, die ihren Zustand über Netze kommunizieren können [MBH09, 43]. Zu den Varianten des Ubiquitous Computing zählen unter anderem Mobile Computing und Wearable Computing [MBH09, 275]. 1 2 http://de.wikipedia.org/wiki/Smart_City, Abgerufen am 29. Oktober 2015 http://de.wikipedia.org/wiki/RFID, Abgerufen am 19. Oktober 2015 1 HINTERGRUND 1.1.1 2 Relevanz Praktische Beispiele für vernetzte Geräte gab es bereits vor der Erfindung des IoT. Als einer der ersten Industriestandards für die Gebäudeautomatisierung gilt das 1975 von Pico Electronics entwickelte X-103 , das von der Firma Busch-Jäger ab 1981 als Busch-Timac X10 auch in Deutschland vertrieben wurde4 . X-10 ist ein hauptsächlich stromleitungsbasiertes Netzwerkprotokoll ohne Rückkanal. Für die Steuerung kann neben Fernschaltern und Netzleitstellen auch auf einen Computer wie den Commodore C645 zurückgegriffen werden. Als überhaupt erstes Beispiel für das Internet der Dinge wird meist der vernetzte Coca Cola Automat [Ste00] genannt. Die „CMU SCS Coke Machine“6 wurde 1982 an der Carnegie Mellon School of Computer Science in Pittsburgh von Mike Kazar, David Nichols, John Zsarnay und Ivor Durham vernetzt, um vom Schreibtisch aus prüfen zu können, ob der Automat mit Flaschen befüllt ist. Schon 1995 beschäftigte sich Nicholas Negroponte in seinem Buch „Being Digital” [Neg95] mit einer Zukunft, in der alles was digitalisiert werden kann, auch digitalisiert wird. Timotheus Höttges, CEO der Deutsche Telekom, griff dies im Zusammenhang mit der zunehmenden Vernetzung der Geräte auf dem Mobile World Congress 2014 auf und brachte es aus Sicht des Telekommunikationskonzerns entsprechend auf den Punkt [Cla14]: „Everything that can be connected, will be connected.” Abbildung 1: Smart Home Marktprognose [BIT14, 10]. Ein stellvertretendes Beispiel für die Diskrepanz zwischen der Erwartungshaltung seitens der Hersteller und der tatsächlichen Akzeptanz beim Kunden sind die vernetzten Kühlschränke aus den späten 90er Jahren. Electrolux präsentierte 1999 mit Screenfridge7 3 http://de.wikipedia.org/wiki/X10_(Protokoll), Abgerufen am 16. Oktober 2015 http://youtu.be/Kpfs2gGbRSk, Abgerufen am 16. Oktober 2015 5 http://files.buyitsellit.com/8181/CP290.pdf, Abgerufen am 16. Oktober 2015 6 http://www.cs.cmu.edu/~coke/, Abgerufen am 16. Oktober 2015 7 http://www.electroluxgroup.com/en/history-1990-1999-764/, Abgerufen am 16. Okto4 1 HINTERGRUND 3 einen intelligenten Kühlschrank, der laut eigener Aussage als erster Kühlschrank den Inhalt der einzelnen Fächer nachverfolgen konnte, Rezeptempfehlungen macht, InternetEinkäufe erlaubt, als Kommunikationszentrale inklusive Video für die Familie dient und sich sogar als Monitor für Sicherheitssysteme eignet. Offensichtlich mit bescheidenem Erfolg für dieses Nutzenversprechen (engl. value proposition); zumindest wenn man mehr als 15 Jahre später die Anzahl der vernetzten Wohnungen in der Praxis betrachtet. Laut einer Studie von Deloitte und der Fokusgruppe „Connected Home“ des Nationalen IT-Gipfels [BIT14] wurden in Deutschland Ende 2013 gerade einmal 315.000 vernetzte Privathaushalte gezählt (siehe Abbildung 1). Um die Relevanz dieser Zahl zu verdeutlichen: Mit rund 330.000 aller Wohnungen (0,8 Prozent) verfügten laut Statistischem Bundesamt 20118 annähernd gleich viele Haushalte weder über Toilette noch Dusche. Immerhin könnten laut der Deloitte-Studie bei einer konservativen Schätzung bereits 2020 rund eine Millionen Haushalte in Deutschland mit Smart-Home-Lösungen ausgestattet sein. Dabei ist das intelligente und vernetzte Zuhause aus Sicht von IoT-Entwicklern noch vor Wearable Computing das zurzeit populärste Segment [Vis15, 11], weshalb im späteren Verlauf dieser Bachelorarbeit der Schwerpunkt auf Beispielen aus diesem Bereich liegt. Über alle Anwendungsgebiete hinweg erwarten Analysten und Konzerne einen Multimilliarden-Dollarmarkt und überbieten sich gegenseitig mit ihren Prognosen. Beispielsweise rechnet die OECD [OEC12] für das Jahr 2020 alleine im M2M9 -Bereich (engl. Machine-to-Machine Communication) mit rund 50 Milliarden vernetzten Geräten und Cisco geht von einem Marktvolumen von 14 Trillionen Dollar Gewinn innerhalb des nächsten Jahrzehnts für das von ihnen „Internet of Everything“ getaufte Geschäftsfeld aus [End13]. Interessant: Laut einer Umfrage von Accenture unter 1400 Entscheidungsträgern haben nur 7 Prozent einen umfassenden Plan, um von diesem gewaltigen Kuchen ein Stück abzubekommen [DB15]. 1.1.2 Definition Der inflationäre Gebrauch des Begriffs IoT und dessen zahlreiche anwendungsbezogene Varianten machen eine allgemeingültige Definition schwer. Einige Hersteller bemühen sich um eigene Begrifflichkeiten wie zum Beispiel Cisco mit „Internet of Everything“ [Cis15] oder Microsoft mit Internet of Your Things [Mic15], ohne dass fundamental etwas anderes gemeint ist. Die Industrie nutzt den Begriff außerdem auch im Embedded10 - und M2M-Umfeld – häufig abgewandelt als „Industrial Internet of Things“ oder als „Industrial Internet“11 . Nichtsdestotrotz scheinen sich alle darin einig zu sein, dass das Internet der Dinge einen zur virtuellen Realität gegensätzlichen Ansatz verfolgt: Reale Objekte werden um digitale Funktionen erweitert. Es wird nicht der Mensch in die digitale Welt geführt, sondern Teile ber 2015 8 http://www.destatis.de/DE/PresseService/Presse/Pressekonferenzen/2013/ Zensus2011/gwz_zensus2011.pdf, S. 14, Abgerufen am 16. Oktober 2015 9 http://de.wikipedia.org/wiki/Machine_to_Machine, Abgerufen am, 19. Oktober 2015 10 http://en.wikipedia.org/wiki/Embedded_system, Abgerufen am 22. Oktober 2015 11 http://en.wikipedia.org/wiki/Industrial_Internet, Abgerufen am 22. Oktober 2015 1 HINTERGRUND 4 der digitalen Welt in die reale Welt übertragen, indem man reale Objekte der physischen Welt um digitale Funktionen erweitert. Rein technisch betrachtet ist es aus meiner Sicht unerheblich, ob es sich bei den Dingen um Konsumgüter, Maschinen oder Lebewesen handelt. Die Brücke zwischen Internet und physikalischer Welt schlagen Sensoren und Aktuatoren [RGC+ 15, 48]: Reale Objekte werden mit Hilfe von Sensoren und Aktuatoren um digitale Funktionen erweitert. Sensoren liefern den Kontext, indem sie den Zustand der Umgebung als digitalen Wert darstellen. Aktuatoren verwandeln digitale Anweisungen in mechanische Aktionen und erlauben es so, einem digitalen System mit der Umgebung zu interagieren und beispielsweise einen Motor zu steuern oder eine Leuchte einzuschalten. Das Internet der Dinge zeichnet sich außerdem dadurch aus, dass für die Verarbeitung der Sensordaten ein Rechner und eine Vernetzung zum Einsatz kommen. Landläufig werden hier, wie der Name schon sagt, Internet-basierte Protokolle und Dienste verwendet. Laut [RGC+ 15, 10] besteht solch ein typischer IoT-Dienst aus: • einem oder mehreren eingebetteten Systemen (Embedded Devices), • einem Internet-Dienst, • optional einem Gateway (zusätzliches Gerät zur Anbindung der eingebetteten Systeme an das Internet) und • einer oder mehreren mobilen- oder Web-Anwendungen, um mit dem Dienst zu interagieren. Anders als hier beschrieben, ist in der Praxis die Vernetzung auch ohne IP-basierte12 Technologie durchaus gängige Praxis, indem beispielsweise Bluetooth zum Einsatz kommt. Außerdem sind mobile oder Web-Anwendungen nicht zwingend erforderlich, zumal die Interaktion mit den Objekten auch direkt erfolgen kann, falls die Objekte sich nicht ohnehin schon ohne weiteres Zutun eines Anwenders autonom verhalten. Zusammenfassend bezieht sich das Internet der Dinge also auf reale Objekte, die mit Hilfe von Sensoren und Aktuatoren um digitale Funktionen erweitert und direkt oder indirekt über Internet-basierte Technologien vernetzt sind. 1.1.3 Herausforderungen Die multidisziplinäre Natur des Internet der Dinge wirft zahlreiche Fragen auf. Zuallererst jene nach dem eigentlichen Nutzen (siehe Abchnitt 1.1.1, Seite 2). Denn trotz aller technischer Möglichkeiten und Geschäftsmodelle fehlt es oftmals an einem klaren Nutzenversprechen. Insbesondere jetzt, wo sich der erste Hype um das Internet der Dinge legt [Gar14] und nicht mehr in erster Linie technikaffine Early-Adopter Begeisterung zeigen, sondern normale Konsumenten gewonnen werden müssen [RGC+ 15, 118]. Doch dafür ist ein wirklicher Nutzen erforderlich[Sin09], denn noch sind IoT-Anwendungen häufig erst einmal teurer und komplizierter als konventionelle Lösungen. 12 http://en.wikipedia.org/wiki/Internet_Protocol, Abgerufen am 22. Oktober 2015 1 HINTERGRUND 5 Abbildung 2: Paradigmenwechsel bei der Interaktionsgestaltung [Wei96]. In diesem Zusammenhang sind auch neue Interaktionsformen gefragt [MBH09, 44], da sich das Benutzererlebnis (User Experience13 ) durch einen Paradigmenwechsel in der Benutzerschnittstelle (User Interface) stark verändert (siehe Abbildung 2). Der Nutzer wird nicht mehr 1-zu-1 mit einem einzelnen Gerät interagieren, sondern steht inmitten einer die Benutzungsoberfläche ausmachenden Sammlung von intelligenten Geräten. Diese 1zu-n-Schnittstelle zwischen Mensch und Maschine geht über die heute gebräuchlichen Interaktionsformen hinaus und wird auch als „Super-natural Interaction“ (über die natürliche Interaktion hinsausgehend) [Wol13] bezeichnet: Alles wird zu einer Bedienoberfläche und die Geräte werden unsichtbar (embodied virtuality [Wei91]). Dan Saffer erwartet eine Unmenge an Arbeit für Interaktionsgestalter [Saf09, 196]. Diese müssen [Saf09, 197] lernen sich mit den „Spimes“ im Internet der Dinge auseinanderzusetzen. Bruce Sterling sagt [Ste04]: “The most important thing to know about Spimes is that they are precisely located in space and time” (darum der Name). Spimes sind vernetzte, den Kontext-kennende (context aware), eindeutig identifizierbare Objekte, die Daten über sich und ihre Umgebung teilen. Diese Idee haben unter anderem auch das Social Internet of Things14 und die Smart Devices in Google’s Physical Web15 aufgegriffen. Zu den Herausforderungen zählen die gesellschaftlich relevanten Aspekte rund um Sicherheit und Privatsphäre [Wol15]. Führende Experten wie Tim O’Reilly halten Sicherheit und Privatsphäre sogar für das größte Risiko16 des Internet der Dinge. Ein wichtiger Aspekt hinsichtlich Sicherheit wird jedoch oft übersehen: Denn es geht nicht nur darum, dass Systeme sicher gegen Einbruch sind, sondern auch darum, dass IoT-Lösungen und 13 http://en.wikipedia.org/wiki/User_experience, Abgerufen am 16. Oktober 2015 http://www.social-iot.org/, Abgerufen am 16. Oktober 2015 15 http://google.github.io/physical-web/, Abgerufen am 16. Oktober 2015 16 http://www.mckinsey.com/insights/high_tech_telecoms_internet/the_internet_ of_things_five_critical_questions, Abgerufen am 16. Oktober 2015 14 1 HINTERGRUND 6 die verwendeten mentalen Modelle sich wie erwartet verhalten und immer nur erlaubte Zustände erreichen. Aufgrund der Komplexität, Fragmentierung [Kre14] des Marktes und fehlender Standards [Mü14] ist das Sicherstellen einer solchen interoperablen und zuverlässigen Lösung (engl. reliable) eine der drängendsten Herausforderungen bei der auch Formale Methoden helfen können (siehe Abschnitt 1.2, Seite 6). 1.2 Formale Methoden In der Informatik versteht man unter Formalen Methoden17 (engl. Formal Methods) eine Vielzahl an Notationen, Techniken und Werkzeugen zur Spezifikation und Modellierung von Systemen [But01]. Formale Methoden beschreiben die Funktionsweise einer Softund/oder Hardware in einer abstrakten und mathematisch-logischen Form, so dass ein solches Systemmodell formal analysierbar ist und auf diese Weise die Richtigkeit und Sicherheit unabhängig von der Implementierung verifiziert werden kann. In diesem Zusammenhang beschreibt [CW96, 2] die zunehmende Komplexität und die dadurch resultierende Fehleranfälligkeit von Hardware- und Software-Systemen: “Hardware and software systems will inevitably grow in scale und functionality. Because of this increase in complexity, the likelihood of subtle errors is much greater.” Durch IT-Produkte verschuldete Unfälle18 wie die beim Start explodierte Ariane-5-Rakete im Juni 1996 und die im November 2000 erfolgten Fehlberechnungen von Strahlendosen mit mindestens 8 Toten dürfen nicht passieren. Die Entwickler sind dafür verantwortlich, dass die Software und Hardware zuverlässig arbeitet! Insbesondere dann, wenn sicherheitskritische Bereiche wie z. B. Fahrzeuge und Haushaltsgeräte betroffen sind. Formale Methoden sind eine Möglichkeit, um zuverlässigere System zu erreichen. Auch wenn Formale Methoden laut [CW96, 2] nicht von vornherein zu Korrektheit führen, so helfen sie doch allein schon durch das Verfassen einer formalen Beschreibung, ein System besser zu verstehen und Unzulänglichkeiten zu vermeiden, die andernfalls unentdeckt geblieben wären [Sym97, 30]. Eine präzise Spezifikation hilft ganz nebenbei auch als Kommunikationsmittel zwischen Kunde, Designer, Entwickler und Tester [CW96, 3], gerade wenn es sich um eine eher visuelle Darstellung wie bei Zustandsdiagrammen (state charts) handelt [Har87]. Sofern sich eine Spezifikation animieren oder ausführen lässt, kann diese durchaus als Prototyp für die Validierung dienen, ohne dass zusätzlicher Implementierungsaufwand vonnöten wäre [AFPS11, 17]. Professor Jonathan Bowen hat im Januar 2007 rund 100 unterschiedliche Schreibweisen, Methoden und Werkzeuge für Formale Methoden als „Formal Methods Virtual Library“19 zusammengetragen. In dieser Liste befinden sich auch abstrakte Automaten (engl. abstract state machines, kurz ASM), die B Methode und eher visuelle Varianten wie PetriNetze. Die Modellüberprüfung kann je nach Methode sowohl automatisch als auch unter Mitwirkung eines Menschen durchgeführt werden. Dieser initiiert Beispielsweise die Zu17 http://de.wikipedia.org/wiki/Formale_Methode, Abgerufen am 16. Oktober 2015 http://archive.wired.com/software/coolapps/news/2005/11/69355?currentPage= all, Abgerufen am 4. September 2015 19 http://web.archive.org/web/20080723172731/http://vl.fmnet.info/, Abgerufen am 16. Oktober 2015 18 1 HINTERGRUND 7 standsübergänge und legt so einen Pfad durch den Zustandsraum fest [CW96, 5ff]: „Roughly speaking the check is performed as an exhaustive state space search [. . . ]” 1.2.1 Beispiele Formale Methoden werden in der Praxis gerade dort eingesetzt, wo die Richtigkeit und Sicherheit eines Systems essentiell ist und ein unerwartetes oder sogar falsches Verhalten katastrophale Folgen hätte [But01]: “The value of formal methods is that they provide a means to symbolically examine the entire state space of a digital design (whether hardware or software) and establish a correctness or safety property that is true for all possible inputs.” Formale Methoden wurden aus diesem Grund beispielsweise von Airbus S.A.S. bei den sekundären Flugkontrollsystemen des Airbus A340 und bei den primären Flugkontrollsystemen des Airbus A38020 genutzt. Ein weiteres Beispiel ist das Maeslantkering Sturmflutwehr21 . Dabei handelt es sich um eine bewegliche Barriere zum Schutz für etwas eine Million Menschen vor Überschwemmungen. Mit der B Methode (siehe Abschnitt 1.2.2, Seite 7) kamen Formale Methoden ebenfalls bei dem Eisenbahnsignalsystem der Line 14 der Pariser Metro (1998) und dem führerlosen Shuttle des Paris Roissy Airports (2007) zum Einsatz22 . 1.2.2 B Methode Für die Spezifikation von Systemzuständen und deren Übergängen eignen sich Transitionssysteme wie die B Methode. B basiert auf abstrakten Automaten und zählt zu den Zustands- oder Model-basierten Spezifikationssprachen [AFPS11, 18]. Es gibt eine Vielzahl von Umsetzungen der B Methode, darunter Atelier B, ProB und Rodin. Ein in B spezifizierter Automat beschreibt die internen Zustände, die einzuhaltenden Eigenschaften und die zu erwartenden Übergange. Die Spezifikation eines Schalters mit der B Sprache könnte beispielsweise wie in Listing 1 aussehen23 . Listing 1: Schalter als in B spezifizierter Automat. 1 3 5 7 MACHINE Switch SETS STATES={on,off} CONSTANTS initial_state PROPERTIES initial_state:STATES VARIABLES current_state 20 http://de.wikipedia.org/wiki/SCADE#Beispiele_industrieller_Nutzung, Abgerufen am 17. Oktober 2015 21 http://eprints.eemcs.utwente.nl/6381/01/fmsd.pdf, Abgerufen am 16. Oktober 2015 22 http://www.dsi.unifi.it/~fantechi/ESD/presentationModelChecking.pdf, Abgerufen am 18. Oktober 2015 23 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ b/switch.mch, Revision c7faac8b 1 9 11 13 15 17 19 21 23 25 27 HINTERGRUND 8 INVARIANT current_state : STATES INITIALISATION current_state := initial_state OPERATIONS Toggle = BEGIN IF current_state = on THEN current_state := off ELSE current_state := on END END; Set(new_state) = PRE new_state : STATES THEN current_state := new_state END END In diesem Beispiel wird ein Automat als MACHINE Switch definiert, dessen mögliche Zustände als Wertemenge (engl. set) STATES={on,off} festgelegt sind. Den Initialisierungszustand beschreibt initial_state, das einen Wert aus der Menge STATES haben muss. Den aktuellen Zustand hält die Variable current_state, deren Wert ebenfalls aus dieser Menge ist. Außerdem verfügt dieser Automat noch über zwei Operationen (engl. operations), um die Zustandsübergänge durchzuführen: Eine Operation namens „Toggle“, um den aktuellen Wert wie bei einem Taster zu wechseln und eine Operation „Set“, um den aktuellen Zustand current_state wie bei einem Schalter auf einen Wert aus der Wertmenge STATES zu setzen – also auf on oder off. 1.2.3 ProB In dieser Bachelorarbeit kommt für Formale Methoden ProB zum Einsatz. Bei ProB handelts es sich um einen Animator und Model-Checker für die B Methode [LB03]. Es stehen zahlreiche Werkzeuge für ProB zur Verfügung24 : • ProB Cli: Nutzung von ProB über die Kommandozeile; • ProB Tcl/Tk: Grafische Benutzerschnittstelle für ProB; • ProB Java API: Java basierte Schnittstelle zur Nutzung von ProB; • BMotion Studio: Web-Oberfläche für die ProB Java API; • ProB for Rodin: Plug-in für das Eclipse-basierte Rodin; • ProB for TLA: Nutzung von ProB als Validator für TLA (Temporal Logic of Actions); 24 http://stups.hhu.de/ProB/, Abgerufen am 16. Oktober 2015 1 HINTERGRUND 9 Abbildung 3: ProB Tcl/Tk ist eine Standalone Version von ProB. Für die Erstellung und den Test von B basierten Automaten eignet sich ProB Tcl/Tk (siehe Abbildung 3). Für die weitergehende Nutzung von B außerhalb dieses Kontexts ist die ProB Java API hilfreich. Die Nutzung einer in B definierten Maschine erfolgt damit wahlweise über eine Groovy-Konsole in der Web-Oberfläche25 (siehe Abbildung 4) oder direkt in der Java-Anwendung. Im Listing 2 wird dafür in den Zeilen 7 bis 17 zuerst ein ProB-basierter Server gestartet und anschließend die Methode initMachine(String fileName) aufgerufen. Diese ab Zeile 24 deklarierte Methode lädt und initialisiert eine Maschine für die weitere Verwendung mit der ProB Java API. Listing 2: Server mit Web-Oberfläche auf Basis der ProB Java API. public static void main(String[] args) { 2 // Enable Groovy de.prob.servlet.Main.local = true; de.prob.servlet.Main.restricted = false; 4 6 // Start Server new Thread(new Runnable() { @Override public void run() { try { WebConsole.run("", "127.0.0.1", 17080); } catch (Exception e) { 8 10 12 25 http://www3.hhu.de/stups/prob/index.php/ProB_Java_API_Tutorial#How_to_open_ the_Groovy_Shell, Abgerufen am 17. Oktober 2015 1 HINTERGRUND 10 Abbildung 4: ProB 2 Webclient mit einer Schalter-Maschine (Switch). e.printStackTrace(); 14 } } }).start(); 16 18 // Load and initialize a machine based on B initMachine("./src/main/b/switch.mch"); 20 } 22 private static void initMachine(String fileName) { 24 26 28 30 32 34 36 Api api = de.prob.servlet.Main.getInjector().getInstance(Api.class); StateSpace stateSpace = api.b_load(fileName); Trace trace = new Trace(stateSpace); trace = trace.execute("$setup_constants"); trace = trace.execute("$initialise_machine"); AnimationSelector animationSelector = de.prob.servlet.Main.getInjector(). getInstance(AnimationSelector.class); animationSelector.addNewAnimation(trace); animationSelector.registerAnimationChangeListener( new IAnimationChangeListener() { 2 LÖSUNGSENTWICKLUNG 11 @Override public void traceChange(Trace currentTrace, boolean currentAnimationChanged) { } @Override public void animatorStatus(boolean busy) { } }); 38 40 42 44 } 2 Lösungsentwicklung Hinsichtlich der im Folgenden vorgestellten IoT-Referenzarchitektur liegt der Schwerpunkt auf den im vorherigen Abschnitt 1.1.3 ab Seite 4 aufgeführten Herausforderungen des Internet der Dinge. Außerdem wird abschließend das Zusammenspiel dieser Referenzarchitektur mit den in Abschnitt 1.2 ab Seite 6 erläuterten Formalen Methoden gezeigt, und eine entsprechende Lösung vorgestellt, die ProB (siehe Abschnitt 1.2.3 ab Seite 8) über einen Nachrichtenbus mit dieser Referenzarchitektur verbindet. 2.1 Referenzarchitektur Insellösungen überwiegen in der zunehmend unübersichtlichen IoT-Welt (siehe Abbildung 5). Zahlreiche Unternehmen versuchen sich zu positionieren und eigene Standards zu etablieren, was durch die Vielzahl der Konsortien26 rund um IoT noch unterstrichen wird. Damit nicht genug, auch Forschungseinrichtungen wie The TerraSwarm Research Center27 oder Salzburg Research28 tummeln sich in diesem Bereich mit teils akademischen, teils monetären Interessen. Insgesamt ähnelt die IoT-Landschaft (siehe Abbildung 5) dem anfänglichen Markt für mobile Ökosysteme. Bei diesen sind letztendlich nur einige wenige dauerhaft Relevant – zum jetzigen Zeitpunkt in erster Linie Android und auf Platz zwei Apple. Glaubt man VisionMobile [Vis15, 25], dann stehen die Chancen in der IoT-Welt aktuell für Google Nest29 , Samsung SmartThings30 und die Eclipse Foundation31 gut. 2.1.1 Konzepte Die am Markt befindlichen Lösungen unterscheiden sich unter anderem darin, wo die Anwendungslogik liegt: Wahlweise in der Cloud wie bei SmartThings, auf einem 26 http://ianskerrett.wordpress.com/2014/12/11/abcs-of-iot-consortiums/, Abgerufen am 16. Oktober 2015 27 http://www.terraswarm.org/index.html, Abgerufen am 16. Oktober 2015 28 http://www.salzburgresearch.at, Abgerufen am 16. Oktober 2015 29 http://nest.com/, Abgerufen am 16.10.2015 30 http://www.smartthings.com/, Abgerufen am 16. Oktober 2015 31 http://iot.eclipse.org/, Abgerufen am 16. Oktober 2015 2 LÖSUNGSENTWICKLUNG 12 Abbildung 5: Die Internet-der-Dinge-Landschaft [RT13]. Gateway wie bei QIVICON32 oder eher auf den einzelnen Geräten wie üblicherweise bei Wearables. Oft handelt es sich auch um eine Kombination, bei der Geräte einen Teil der Logik autark selber übernehmen, übergreifende Szenarien jedoch über ein Gateway oder durch eine Cloud-Anwendung gesteuert werden. Ein Cloud-Zugang wird von allen gängigen Plattformen obligatorisch angeboten. In einigen Fällen mit Fokus auf die Internetunabhängigkeit eher nur mit administrativen Funktionen und einem Remote-Zugang wie bei QIVICON, in anderen Fällen als zentrale Steuereinheit wie bei dem Applikationsorientierten IFTTT33 . Allen Ansätzen gemein ist, dass ein zentraler Bus vonnöten ist. Über diesen werden die Nachrichten unter den Geräten ausgetauscht (siehe Abbildung 6). Unterschiedliche ereignisorientierte Bussysteme können auch kombiniert werden, um so Geräte mit einem anderen Bussystem anzubinden und Nachrichten zwischen unterschiedlichen Plattformen auszutauschen (Event Bus oder Message Bus werden normalerweise synonym verwendet). Im Falle von zueinander inkompatiblen Bussystemen kommen in der Regel eine Bridge oder ein Gateway zur Harmonisierung zum Einsatz. Eine Bridge ist wie zum Beispiel im Falle der Philips Hue34 Lampen und Leuchten meist gerätespezifisch ausge32 http://www.qivicon.com/de/produkte/produktinformationen/qivicon-home-base/, Abgerufen am 18. Oktober 2015 33 http://ifttt.com/, Abgerufen am 18. Oktober 2015 34 http://www2.meethue.com/de-de/productdetail/philips-hue-bridge, Abgerufen am 16. 2 LÖSUNGSENTWICKLUNG 13 Abbildung 6: System aus Systemen mit Nachrichtenbus. legt, ein Gateway35 kann mehrere Vernetzungsstandards unterstützen und übergreifende Steuerungsaufgaben übernehmen. Je nach Szenario lassen sich mehrere Bridges auch mit einem Gateway kombinieren. Oft kommt beispielsweise UPnP (Universal Plug and Play36 ) in einem lokalen Netz zum Einsatz und wird dann via dem „Message Queuing Telemetry Transport“ Protokoll (kurz MQTT37 ) weitergeleitet. Das lizenzfreie MQTT wurde 1999 von Dr. Andy Stanford-Clark (IBM) and Arlen Nipper (Cirrus Link Solutions) entwickelt [Nib14]. Mittlerweile hat sich dieses PublishSubscribe-Protokoll in der Praxis nicht nur für M2M-Szenarien, sondern auch für IoTund mobile Anwendungen bewährt. Facebook nutzt MQTT beispielsweise für den Facebook Messenger38 . Im Internet der Dinge gilt das später auch für die Umsetzung (siehe Abschnitt 2.1.2 ab Seite 14) gewählte MQTT als de-fakto-Standard für den Nachrichtenaustausch (sowohl TCP/IP-basiert als auch nicht-TCP/IP-basiert). Zu den Vorteilen zählen freie und weitreichende Verfügbarkeit für die wichtigsten Clients, ressourcenschonendes und somit für den Energieverbrauch günstiges Verhalten und OASIS Standardisierung39 . Die grundsätzliche Funktionsweise dieses Nachrichten-Protokolls ist recht simpel: Es wird ein sogenannter Broker benötigt, der Nachrichten verteilt und deren Empfänger und Sender verwaltet; das Abonnieren (engl. subscribe) und Veröffentlichen (engl. publish) von Nachrichten erfolgt durch die jeweiligen MQTT-Clients. Die Nachrichten bestehen im Wesentlichen aus einem Thema (engl. topic) und den Nutzdaten (engl. payload). Dem Topic kommt eine zentrale Funktion zu, da es gleichzeitig auch als Nachrichtenfilter dient. Oktober 2015 35 http://www.computerwoche.de/a/google-kuendigt-eigenen-wlan-router-fuerssmart-home-an,3214578, Abgerufen am 16. Oktober 2015 36 http://en.wikipedia.org/wiki/Universal_Plug_and_Play, Abgerufen am 18. Oktober 2015 37 http://mqtt.org/), Abgerufen am 16. Oktober 2015 38 http://www.facebook.com/notes/facebook-engineering/building-facebookmessenger/10150259350998920, Abgerufen am 16. Oktober 2015 39 http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html, Abgerufen am 16. Oktober 2015 2 LÖSUNGSENTWICKLUNG 14 Einige Systeme erlauben die Integration und Konfiguration von Geräten sehr komfortabel via automatischer Verbindung (engl. pairing) zum Beispiel über Apple Bonjour40 , andere wie openHAB41 in Version 1 verlangen Konfigurationsdateien mit konkreten Parametern. Die eigentliche Logik kann dann in einer domänenspezifischen Sprache implementiert oder über dynamische Regeln definiert werden. Hier unterscheiden sich die Systeme hinsichtlich der erlaubten Komplexität und dem Bedienkomfort erheblich. Eclipse SmartHome42 verfügt beispielsweise zum jetzigen Zeitpunkt über keine eigene Regelmaschine (siehe Abschnitt 2.2.2, Seite 25), so dass alles explizit programmiert werden muss. IFTTT nennt seine Regeln Rezepte (engl. recipies) und erlaubt nur Auslöser (engl. trigger) und Aktionen (engl. actions) aber keine Bedingungen. Node-RED43 hingegen unterstützt sowohl eine grafische Herangehensweise als auch JavaScript und eignet sich somit gut für die Umsetzung eines Durchstichs wie in dieser Bachelorarbeit (siehe Abschnitt 2.1.2 ab Seite 14). Node-RED ist ein quelloffenes Werkzeug von IBM Emerging Technology44 , um Hardware und Software im Internet der Dinge miteinander zu verbinden. Es verfügt über eine visuelle Benutzungsschnittstelle, in der die Funktionen eines Systems als Knoten dargestellt werden. Es gibt zahlreiche Knotentypen, darunter diverse Kommunikationsprotokolle und Hardwareschnittstellen. Die einzelnen Knoten werden über Ein- und Ausgänge als Fluss (engl. flow) miteinander in Beziehung gesetzt. Dieser Fluss wird als JSONDokument verwaltet und kann dadurch einfach ausgetauscht werden. Da Node-RED auf Node.js45 basiert, können Node.js-JavaScript-Pakete (npm46 ) hinzugefügt und eigene JavaScript-Funktionen mit einem Rich-Text-Editor ergänzt werden (siehe A.2 ab Seite 32). Node-RED bietet bereits eine visuelle Oberfläche, doch wird häufig noch eine Endkunden taugliche Benutzungsschnittstelle für die Konfiguration und Benutzerinteraktion benötigt, die nicht durch Automatismen abgedeckt sind. Dabei kann es sich um eine mobile App, eine Website oder eine spezifische Bedieneinheit handeln. Als Lingua Franca des Datenaustauschs zwischen diesen Komponenten hat sich die Web-orientierte Anbindung via JSON47 (engl. JavaScript Object Notation) über REST48 (engl. Representational State Transfer) etabliert – in Kombination mit Server-Sent Events (SSE)49 teilweise sogar als eigenständige Alternative zu Bussystemen wie MQTT. Die meisten Plattformen wie zum Beispiel Eclipse SmartHome und openHAB in der zweiten Version kombinieren gleich einen oder mehrere Busse mit einer auf REST basierenden Programmierschnittstelle (RESTful API). 40 http://www.apple.com/support/bonjour/, Abgerufen am 16. Oktober 2015 http://www.openhab.org/, Abgerufen am 16. Oktober 2015 42 http://www.eclipse.org/smarthome/, Abgerufen am 16. Oktober 2015 43 http://nodered.org/, Abgerufen am 16. Oktober 2015 44 http://www.ibm.com/blogs/et, Abgerufen am 22. Oktober 2015 45 http://nodejs.org/, Abgerufen am 16. Oktober 2015 46 http://de.wikipedia.org/wiki/Node_Package_Manager, Abgerufen am 27. Oktober 2015 47 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf, Abgerufen am 16. Oktober 2015 48 http://en.wikipedia.org/wiki/Representational_state_transfer, Abgerufen am 16. Oktober 2015 49 http://www.w3.org/TR/eventsource/, Abgerufen am 16. Oktober 2015 41 2 LÖSUNGSENTWICKLUNG 2.1.2 15 Umsetzung Die wesentliche Zutat für eine IoT-Plattform ist ein ereignisbasierter Bus für den Nachrichtenaustausch, der mit der Laufzeitumgebung harmoniert (siehe Abschnitt 2.1.1 ab Seite 11). Dieser kann sowohl von den Geräten direkt oder indirekt über eine Bridge bzw. ein Gateway genutzt werden. Bewährt hat sich für diesen Bus MQTT (siehe Abschnitt 2.1.1, Seite 13). Als Vermittler zwischen den Geräten ist der quelloffene MQTT Broker Mosquitto50 gängig. Dieser ist als ausführbare Anwendung für zahlreiche Betriebssysteme wie Windows, Mac OS und diverse Unix-Varianten (u. a. Rasperry Pi) erhältlich. Es ist während der Entwicklung nützlich, den Broker im wortreichen Modus (engl. verbose) via mosquitto -v zu starten, um den Nachrichtenfluss beobachten zu können. Auch an Client-Implementierungen mangelt es nicht. Unterstützt werden alleine schon durch das Eclipse Paho Projekt51 die Programmiersprachen C, C++, Java, JavaScript, Lua, Python und Go. Daneben gibt es beispielsweise noch Clients für Delphi, Erlang, .Net, Objective-C, PERL, PHP und Ruby. Die Java-Variante von Eclipse Paho kommt hier auch zur Anbindung der ProB Java API zum Einsatz (siehe Abschnitt 2.2 ab Seite 19). Für die Hardwareintegration auf Basis eines Arduino bzw. Genuino Gerätes kombiniert mit Sensoren (z. B. Seeed Studio Grove52 ) gibt es den mit dem Arduino Ethernet Shield kompatiblen „Arduino Client for MQTT“ als Bilbliothek53 . Ein einfacher MQTT-Client könnte wie in Listing 3 aussehen54 . Listing 3: Arduino als einfacher MQTT-Client. 2 #include <SPI.h> #include <Ethernet.h> #include <PubSubClient.h> 4 6 8 10 12 // the media access control (ethernet hardware) address for the shield byte MAC[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xAD, 0xD3 }; EthernetClient ethClient; PubSubClient mqttClient(ethClient); IPAddress broker(192, 168, 0, 12); // setup function runs once when you press reset or power the board void setup() { 14 // wait for connection to network and IP assignment Ethernet.begin(MAC); // set broker... mqttClient.setServer(broker, 1883); // ...and connect client mqttClient.connect("grove_device"); 16 18 20 50 http://mosquitto.org/, Abgerufen am 16. Oktober 2015 http://www.eclipse.org/paho/, Abgerufen am 16. Oktober 2015 52 http://www.seeedstudio.com/wiki/Grove_IoT_Starter_Kits_Powered_by_AWS, Abgerufen am 10. Oktober 2015. 53 http://pubsubclient.knolleary.net/, Abgerufen am 16. Oktober 2015 54 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ arduino/SimpleMQTT.ino, Revision 05b0c70b 51 2 LÖSUNGSENTWICKLUNG 16 } 22 24 // the loop function runs over and over again forever void loop() { // publish message mqttClient.publish("formaliot/grove_device", "hello world"); // process incoming messages and maintain connection to server mqttClient.loop(); 26 28 30 delay(1000); 32 } Das Topic der Nachricht ist in der Form Project/Device/Sensor aufgebaut, um anderen Clients wie im Listing 4 in den Zeilen 9 bis 11 ein selektives Abonnieren der Nachrichten zu erlauben und wie ab Zeile 14 den Payload zu verarbeiten. Listing 4: Arduino als MQTT-Subscriber. void setup() { 2 // wait for connection to network and IP assignment Ethernet.begin(MAC); // set broker... mqttClient.setServer(broker, 1883); // ...and connect client mqttClient.connect("grove_device"); // set topic and callback for incoming messages mqttClient.setCallback(callback); mqttClient.subscribe("formaliot/grove_device/#"); 4 6 8 10 12 } 14 // the callback functions handles subscribed messages void callback(char* topic, byte* payload, unsigned int length) { 16 String response = ""; for (int i = 0; i < length; i++) { response += (char)payload[i]; } Serial.print(response); 18 20 22 } Basierend auf MQTT fungiert der Client als Agent55 und sendet die Sensorwerte (siehe Listing 5, Zeile 10, 12 und 22) an den Nachrichtenbus – in einer Produktionsumgebung sollte der Versand noch logisch und technisch sinnvoll hinsichtlich der Last optimiert werden (siehe Listing 5 ab Zeile 16). Listing 5: Arduino als MQTT-Publisher. 2 double sensorSum = 0; int sensorValuesCount = 0; 55 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ arduino/FormalIoT.ino, Revision 05b0c70b 2 4 LÖSUNGSENTWICKLUNG 17 void loop() { int newSensorValue = digitalRead(3); if (buttonValue != newSensorValue) { buttonValue = newSensorValue; if (buttonValue == HIGH) { mqttClient.publish("formaliot/grove_device/button", "on"); } else { mqttClient.publish("formaliot/grove_device/button", "off"); } } 6 8 10 12 14 sensorSum += analogRead(A0); sensorValuesCount++; if (sensorValuesCount == 2000) { char str[4]; // calculate average and convert to payload String(sensorSum/2000).toCharArray(str, 4); mqttClient.publish("formaliot/grove_device/sensor", str); sensorSum = 0; sensorValuesCount = 0; } 16 18 20 22 24 26 // process messages and maintain connection to server mqttClient.loop(); 28 } Für den Rückkanal wird ebenfalls der Nachrichtenbus genutzt und auf eingehende Nachrichten wie in Listing 4 gelauscht. Gefiltert wird auf das Topic formaliot/ grove_device/actuator, indem die Zeile 11 in Listing 4 durch mqttClient.subscribe ("formaliot/grove_device/actuator"); ersetzt wird. Die Callback-Methode in Listing 6) aktualisiert die Aktuatoren nun abhängig von der eingehenden Nachricht. Listing 6: Arduino verarbeitet MQTT Payload für Aktuatoren. void callback(char* topic, byte* payload, unsigned int length) { 2 String response = ""; for (int i = 0; i<length; i++) { response += (char)payload[i]; } 4 6 // check payload and set current actuator’s state accordingly if (response.indexOf("on")>-1) { digitalWrite(7, HIGH); } else if (response.indexOf("off")>-1) { digitalWrite(7, LOW); } 8 10 12 14 } Zum Anbinden- und Zusammenführen unterschiedlicher Dienste und Geräte (zum Beispiel ein Embedded Device auf Basis eines Arudino) ist ein Gateway notwendig. Dieses 2 LÖSUNGSENTWICKLUNG 18 bildet außerdem die Anwendungslogik ab. Die auf der Google V8 JavaScript Engine56 basierende Laufzeitumgebung Node.js bietet sich an, da deren Programmierung zugänglich ist und es bereits zahlreiche Module gibt, um Dienste von Dritten zu nutzen und Hardware direkt anzusprechen – unabhängig davon, ob diese direkt am Rechner angeschlossen oder indirekt verbunden sind. Ein weiterer Vorteil von Node.js ist, dass mit Node-RED (siehe Abschnitt 2.1.1, Seite 14) ein darauf basierendes grafisches Werkzeug verfügbar ist, das sich zum Modellieren der Konfiguration, der Steuerung und der Abhängigkeiten eignet57 . Abbildung 7: Node-RED Funktionselement für eingehende MQTT-Nachrichten. Für Node.js gibt es optionale MQTT-Unterstützung, bei Node-RED ist das gleich von Haus aus dabei (siehe Abbildung 7). Zur Verfügung stehen folgende Funktionselemente: • MQTT Eingabe: Verbindet sich mit dem angegebenen MQTT Broker und abonniert ein Topic. Es sind auch Stellvertretersymbole (engl. wildcards) erlaubt, um Nachrichten zu filtern. • MQTT Ausgabe: Verbindet sich mit dem angegebenen MQTT Broker und veröffentlicht Nachrichten u. a. mit Topic und Payload. Für eine Vielzahl an Geräten, die direkt am Gateway angeschlossen sind oder indirekt über andere Schnittstellen als MQTT Verwendung finden, gibt es zahlreiche zusätzliche 56 http://code.google.com/p/v8/, Abgerufen am 16. Oktober 2015 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ node-red/device.json, Revision e4163a36 57 2 LÖSUNGSENTWICKLUNG 19 Funktionselemente58 wie z. B. „Hue Nodes for Node Red” (Paketname ttb-node-hue) zur Nutzung von Philips Hue Lampen und Leuchten. Sollte das Angebot an Paketen für Node-RED einmal nicht ausreichen, kann auch auf Node.js-JavaScript-Pakete oder gleich auf eigenes JavaScript innerhalb von Funktionsblöcken (function node) zurückgegriffen werden (siehe A.2 ab Seite 32). Nachdem nun bereits ein Bus zum Nachrichtenaustausch vorhanden ist und die Einbindung von Geräten und deren Konfiguration innerhalb der Benutzungsoberfläche möglich sind, fehlt es noch an einer interaktiven Steuerung. Abbildung 8: Node-RED Funktionselement zum Injizieren von Nachrichten. Das interaktive Initiieren von Abläufen gelingt am einfachsten mit dem inject-Knoten (siehe Abbildung 8). Durch Betätigung der links am Knoten angeordneten Schaltfläche wird ein Fluss gestartet und eine Nachricht an ein verbundenes Gerät gesendet. Mithilfe der Start- (engl. inject once at start) und Wiederholungseinstellung (engl. repeat) können Abläufe auch automatisiert werden. Zur Verfügung stehen Intervalle sowie Wochentage und Uhrzeiten. Die Kontrolle des Flusses übernehmen wahlweise wieder Funktionsblöcke oder ganz ohne Programmierung der switch-Knoten (siehe Abbildung 9). Das switch leitet den Fluss abhängig von der eingehenden Nachricht und basierend auf Regeln an unterschiedliche Ausgänge weiter. 58 http://flows.nodered.org/, Abgerufen am 10. Oktober 2015 2 LÖSUNGSENTWICKLUNG 20 Abbildung 9: Node-RED Funktionselement zum Auswerten von Nachrichten. 2.2 Anbindung an ProB Bei dem Internet der Dinge (siehe Abschnitt 1.1 ab Seite 1) handelt es sich um ein System aus Systemen (siehe Abbildung 6), das zahlreiche Zustände annehmen kann. Die Modellierung solch zunehmend komplexer Lösungen erfordert die Berücksichtigung sowohl der Soft- als auch der Hardware. Formale Methoden (siehe Abschnitt 1.2 ab Seite 6) erlauben die Spezifikation der Anforderungen, deren Validierung und den Nachweis spezifischer und teils sicherheitsrelevanter Eigenschaften [KS11]. Dies führt sowohl zu einer Qualitätsverbesserung durch Fehlervermeidung als auch zu einer früheren Fehlererkennung. Außerdem hilft eine formale Herangehensweise dabei, die Korrektheit von Programmen bzgl. der Spezifikation zu sichern. 2.2.1 Maschinen und Nachrichten Die bei der B Methode verwendeten abstrakten Maschinen umfassen • Zustände, die aus einer Menge an Variablen bestehen und • Operationen, durch die der Zustand geändert wird. Diese Zustände und Operationen bilden die Schnittstelle einer Maschine (siehe Abbildung 10) und müssen nur noch über einen Bus an eine IoT-Lösung angebunden werden. Als Konvention bieten sich Operationen als Eingabe und die Zustände als Ausgänge einer Maschine an. Dies entspricht auch der Nutzung durch gängige ProB-Werkzeuge wie 2 LÖSUNGSENTWICKLUNG 21 ProB Tcl/Tk (siehe Abbildung 3). Die Integritäts- und Konsistenzprüfung durch Invarianten und Vorbedingungen (engl. preconditions) wird weiterhin intern durch die Maschine sichergestellt. Abbildung 10: Maschine mit Ein- und Ausgängen. Die Methode executeOperation(String operation, String payload)59 in Listing 7 basiert auf dem Beispiel aus Abschnitt 1.2.3 auf Seite 8 und führt auf der aktuell geladenen Maschine die angegebene Operation aus: In Zeile 18 ohne und und in Zeile 20 mit Payload. Zusätzlich zu den in ProB bereits vordefinierten Operationen gibt es noch die Implementierung der $load-Funktionalität ab Zeile 26. Die zugehörige loadMachine-Methode erlaubt das Laden und Initialisieren neuer Maschinen zur Laufzeit. Listing 7: Operation mit der ProB Java API ausführen. 2 4 // Access to ProB API private static Api api = de.prob.servlet.Main.getInjector().getInstance(Api.class); private static AnimationSelector animationSelector = de.prob.servlet.Main.getInjector().getInstance(AnimationSelector.class); 6 8 private static void executeOperation(String operation, String payload) { // Special operation to load a machine. if (operation.equals("$load")) { loadMachine(payload); } else { Trace trace = animationSelector.getCurrentTrace(); if (operation.equals("$any")) { trace = trace.anyOperation(null); } else if (payload.isEmpty()) { trace = trace.execute(operation); } else { trace = trace.execute(operation, payload); } animationSelector.changeCurrentAnimation(trace); } 10 12 14 16 18 20 22 24 } 59 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ java/biz/wolter/formaliot/Main.java, Revision 7dc9f371 2 26 LÖSUNGSENTWICKLUNG 22 private static void loadMachine(String fileName) { StateSpace stateSpace = api.b_load(fileName); Trace trace = new Trace(stateSpace); if (trace.canExecuteEvent("$setup_constants")) trace = trace.execute("$setup_constants"); if (trace.canExecuteEvent("$initialise_machine")) trace = trace.execute("$initialise_machine"); animationSelector.addNewAnimation(trace); 28 30 32 34 } Sowohl spezielle Operation wie das $load als auch in B definierte Operationen werden als MQTT-Nachrichten über den Bus ausgetauscht. Dies geschieht durch Nachrichten mit dem Topic formaliot/notify/[operation] und dem zur Operation optional dazugehörigen Prädikat im Payload. Eine $load-Nachricht wird durch das Topic formaliot/ notify/$load und einen Dateipfad wie z. B. "./src/main/b/switch.mch" im Payload beschrieben. Der Empfang und die Ausführung auf der Maschine erfolgen durch den vereinfachten Programmcode in Listing 8. Zeile 29 abonniert Nachrichten, die dann in der Zeile 24 als Operation ausgeführt werden. Listing 8: Empfang und Verarbeitung von MQTT Nachrichten mit der ProB Java API. 2 4 6 8 10 // MQTT Broker address private static String broker = "tcp://127.0.0.1:1883"; private static MemoryPersistence persistence = new MemoryPersistence(); private static MqttClient subscriber; private static String subscriberId = "formaliotSubscriber"; private static String subscribeTopic = "formaliot/notify/"; private static void initEventBus() { // Setup subscriber subscriber = new MqttClient(broker, subscriberId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); 12 14 16 subscriber.setCallback(new MqttCallback() { @Override public void messageArrived(String topic, MqttMessage message) throws Exception { 18 20 String payload = new String(message.getPayload()); String operation = topic.split(subscribeTopic)[1]; executeOperation(operation, payload); 22 24 } }); 26 subscriber.connect(connOpts); subscriber.subscribe(subscribeTopic + "+", 2); 28 30 } 2 LÖSUNGSENTWICKLUNG 23 Neben dem Empfang von Nachrichten als Eingabe ist auch der Versand erforderlich, damit Veränderungen der Maschinenzustände ausgegeben werden können. Dies erfolgt wie in Lising 9 ebenfalls via MQTT. Die im IAnimationChangeListener festgestellten Zustandsänderungen stehen in der ProB Java API mit den aktuellen und vorherigen Werte zur Verfügung. In diesem Fall wird in Zeile 47 jeder geänderte Wert erst einzeln serialisiert und dann ab Zeile 51 inklusive Variablenbezeichner als Nachricht veröffentlicht. Der Versand erfolgt für jeden Wert separat, damit sowohl ein Gateway als auch andere Geräte diese selektiv abonnieren können. Das Topic ist formaliot/stateChanged/[variable] , wobei [variable] dem Variablenbezeichner entspricht. Der Payload enthält eine String mit dem aktuellen Wert im JSON-Format. Listing 9: Verarbeitung von Änderungen mit der ProB Java API. private static void initProB() { 2 4 6 8 animationSelector.registerAnimationChangeListener( new IAnimationChangeListener() { @Override public void traceChange(Trace currentTrace, boolean currentAnimationChanged) { State state = currentTrace.getCurrentState(); State prevState = currentTrace.getPreviousState(); Map<IEvalElement, AbstractEvalResult> values = state.getValues(); Map<IEvalElement, AbstractEvalResult> prevValues = prevState.getValues(); 10 12 14 for (Entry<IEvalElement,AbstractEvalResult> entry : values.entrySet()){ 16 18 ClassicalB key = (ClassicalB) entry.getKey(); EvalResult value = (EvalResult) entry.getValue(); 20 // Try catch is needed to deal with uninitialized values... EvalResult prevValue; try { prevValue = (EvalResult) prevValues.get(key); } catch (Exception e) { // ...and this forces to send the initial value prevValue = null; } 22 24 26 28 30 if (!value.equals(prevValue)) { publishChangedVariable(key,value); } 32 } 34 } 36 38 40 @Override public void animatorStatus(boolean busy) { } }); 2 LÖSUNGSENTWICKLUNG 24 } 42 44 private static void publishChangedVariable(ClassicalB key, EvalResult value) { // A little bit of marshalling for the message bus JsonElement json = Serializer.Serialize(value.translate().getValue()); String jsonString = json.toString(); 46 48 // Turn key value pair into a MQTT message... MqttMessage message = new MqttMessage(jsonString.getBytes()); publisher.publish(publishTopic + key.getCode(), message); 50 52 } Die Serialisierung der von ProB im Paket de.prob.translator.types bereitgestellten und von der Klasse BObject abgeleiteten Datentypen erfolgt über die statische Methode biz.wolter.formaliot.utils.Serializer(BObject value)60 . Zu berücksichtigen ist, dass Sequenzen und Mengen beide als JSON-Arrays serialisiert werden. Außerdem werden von Tupel (A,B) nur die Werte B und nicht die Schlüssel A berücksichtigt; Dadurch fällt nicht mehr ins Gewicht, dass die verwendete Version der ProB Java API Sequenzen mit weniger als drei Elementen als Menge von Tupel behandelt; als die hier verwendeten JSON-Arrays unterscheiden sich Mengen aus Tupel und Sequenzen nicht. Abbildung 11: Node-RED JSON-Verabreitung. Am einfachsten verarbeitet ein Client den so versandten Payload, indem er diesen wie hier mit Node-RED zuerst wieder von String in JSON verwandelt und dann direkt in 60 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ java/biz/wolter/formaliot/utils/Serializer.java, Revision e56308a9 2 LÖSUNGSENTWICKLUNG 25 JavaScript weiterverarbeitet (siehe Abbildung 11). Der json-Knoten deserialisiert den kompletten Payload und in dem im Flow folgenden Funktionsknoten wird dann beispielsweise das erste Element aus dem erzeugten Array gelesen (siehe Listing 10). Listing 10: Node-RED-Programmcode zur Verabeitung eines JSON-Payload. 2 msg.payload = msg.payload[0]; return msg; Sowohl dieses Element, als auch das Array und der Payload als Zeichenkette werden zur Verdeutlichung durch einen debug-Knoten ausgegeben und sind in Abbildung 11 rechts in der Konsole inklusive Typ zu sehen61 . Alternativ kann ein Funktions-Knoten auch mehrere Ausgänge haben und die Ergebnisse darauf verteilen (siehe Listing 11). Listing 11: Node-RED-JSON-Verarbeitung mit zwei Ausgängen. 2 4 var jsonPayload = msg.payload; msg = []; msg[0] = {payload:jsonPayload[0]}; msg[1] = {payload:jsonPayload[1]}; return msg; 2.2.2 Geräteinteraktion und Regeln Die grundsätzliche Interaktion mit Geräten, oder einem komplexen System aus mehreren Geräten, erfolgt durch den Austausch von Nachrichten. Dafür werden die Eigenschaften des Gesamtsystems als Variablen und die Funktionen als Operationen einer Maschine wie in Listing 12 definiert62 ; hier handelt es sich um ein Modell eines einfachen Smart Home, dass aus zwei Leuchten A und B sowie einem Bewegungsmelder besteht. Die Leuchten verfügen jeweils über eine Variable bulb_state, die den Schaltzustand hält und die Operation Toggle() und Set(new_state) zum Ändern des Zustands (je nach Leuchte jeweils mit a oder b im Bezeichner). Die Bewegung für den Bewegungsmelder wird mit der Methode SetMotion(new_motion) gesetzt und über die Variable motion_detector gelesen. Listing 12: Smart Home als in B spezifizierter Automat. 2 4 6 8 10 MACHINE SmartHome SETS STATES = {on,off} VARIABLES bulb_a_state, bulb_b_state, motion_detector INVARIANT bulb_a_state : STATES & bulb_b_state : STATES & motion_detector : NATURAL INITIALISATION bulb_a_state := off || bulb_b_state := off || motion_detector := 0 OPERATIONS 61 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ node-red/bulbset.json, Revision 5d98bd40 62 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ b/smarthome.mch, Revision c7faac8b 2 12 14 16 18 20 22 24 26 28 LÖSUNGSENTWICKLUNG SetMotion(new_motion) = PRE new_motion : NATURAL THEN motion_detector := new_motion END; ToggleA = BEGIN IF bulb_a_state = on THEN bulb_a_state ELSE bulb_a_state := on END END; SetA(new_state) = PRE new_state : STATES THEN bulb_a_state ToggleB = BEGIN IF bulb_b_state = on THEN bulb_b_state ELSE bulb_b_state := on END END; SetB(new_state) = PRE new_state : STATES THEN bulb_b_state END 26 := off := new_state END; := off := new_state END Node-RED kommuniziert mit der ProB Java API über den MQTT-Broker mit der Standardadresse tcp://localhost:188363 . Dies kann direkt in den Ein- und Ausgabeknoten für MQTT festgelegt und in der Information-Sidebar bearbeitet werden. Eine Maschine wird durch einen „mqtt out“-Knoten mit der über einen inject-Knoten injizierten Nachricht geladen und initialisiert, die aus dem Topic formaliot/notify/$load und einem Dateipfad wie "./src/main/b/smarthome.mch" im Payload besteht. Operationen auf der Maschine werden ebenfalls via MQTT gesandt und dafür über inject-Knoten gesetzt. Das Ausschalten einer Leuchte erfolgt mit der Operation formaliot/notify/SetA im Topic und dem Prädikat "new_state=off" im Payload. Der Bewegungsmelder erhält seinen Wert über die Nachricht mit der Operation formaliot/notify/SetMotion im Topic und dem Prädikat "new_motion=0" im Payload. Veränderungen des Maschinenzustands können ohne weiteres Zutun in der Weboberfläche von ProB kontrolliert werden. Natürlich lassen sich diese auch als Nachrichten abonnieren und in Node-RED weiterverarbeiten. Dies gelingt über einen „mqtt in“Knoten für Nachrichten der Form formaliot/stateChanged/+. Bei dem + handelt es sich um einen Platzhalter für beliebige Nachrichten dieser Struktur. Es steht somit für die möglichen Variablennamen, deren Unterscheidung üblicherweise in einem switchKnoten über msg.topic erfolgt. Beispielsweise über einen regulären Ausdruck oder mit Hilfe des Vergleichsoperators und dem Wert formaliot/stateChanged/bulb_a_state . Hilfreich ist die Ausgabe des Topics inklusive Variablennamen und des zugehörigen aktuellen Wertes aus dem Payload im Debug-Bereich von Node-RED. Dafür wird ein debug-Knoten mit dem „mqtt in“-Knoten verbunden (siehe Abbildung 11). Dieses Verhalten kann nun für eine Regelmaschine (engl. rules engine) genutzt werden64 . Eine Regelmaschine ist letztendlich nur ein anderes Berechnungsmodell als Alternati63 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ node-red/smarthome.json, Revision e4163a36 64 http://tuatara.cs.uni-duesseldorf.de/wolter/FormalIoT/blob/master/src/main/ node-red/rule.json, Revision 4411ce13 2 LÖSUNGSENTWICKLUNG 27 ve zur imperativen Programmierung [Fow09]. Üblicherweise bestehen Regeln aus Auslösern, Bedingungen und Aktionen und ähneln damit einer Folge von bedingten Anweisungen. Ein großer Vorteil von Regelmaschinen ist deren einfache Struktur, die von einigen Systemen grafisch abgebildet wird, andere greifen auf populäre Sprachen wie JavaScript oder domänenspezifische Sprachen (engl. Domain Specific Language65 , kurz DSL) zurück. Abbildung 12: Einfache Regel in Node-RED definiert. In diesem Fall könnte auf Veränderungen der Variable motion_detector gelauscht werden, um davon abhängig eine Leuchte ein- oder auszuschalten. Diese Veränderung kann direkt in ProB stattfinden oder aus Node-RED heraus als Nachricht an ProB gesandt werden. In Abbildung 12 wird dafür eine eingehende Nachricht mit einem switch-Knoten erst auf das entsprechend Topic formaliot/stateChanged/motion_detector geprüft, der Payload dann in JSON umgewandelt und im nächsten Schritt erneut mit switch auf die möglichen Werte geprüft. Abschließend wird mit Hilfe zweier change-Knoten das Topic auf formaliot/notify/SetB und der Payload Abhängig vom Wert wahlweise auf new_state=off oder new_state=on gesetzt und als MQTT-Nachricht versandt. Listing 13: Einfache Regel in B definiert. 2 4 6 OPERATIONS SetMotion(new_motion) = PRE new_motion : NATURAL THEN motion_detector := new_motion; IF motion_detector>0 THEN bulb_b_state := on END END; 65 http://en.wikipedia.org/wiki/Domain-specific_language, Abgerufen am 29. Oktober 2015 2 LÖSUNGSENTWICKLUNG 28 Auch ProB eignent sich als Regelmaschine, indem entsprechende Regeln direkt in den Operationen festgelegt werden. Im Listing 13 ist dies durch die zusätzliche Zeile 5 IF motion_detector>0 THEN bulb_b_state := on END erfolgt. Für die automatisierte Regelausführung kann neben konkreten Operationen der Maschine auch die ProB Java API Methode anyOperation aufgerufen werden. Dies gelingt über die Nachricht formaliot/notify/$any. Dadurch wird eine beliebige verfügbare Operation der aktuellen Maschine ausgeführt. Außerdem können die Nachrichten aus Node-RED heraus über den inject-Knoten zu spezifischen Zeitpunkten oder in regelmäßigen Intervallen versandt und so der Ablauf automatisiert werden. 2.2.3 Visualisierung und Lehre Abbildung 13: Node-RED als Gateway über eine RESTful API. Um Systeme mit größerer Komplexität erfassen und diskutieren zu können, ist es erforderlich, das reale Verhalten haptisch durch Sensoren und Aktuatoren abzubilden und die Zustandsveränderungen sowohl visuell als auch interaktiv erlebbar zu machen. Das trägt nicht nur zum Verständnis bei, sondern erlaubt auch die Berücksichtigung des Benutzerverhaltens und der User Experience66 . Dies gelingt indem die Sensoren Nachrichten senden und Aktuatoren Nachrichten empfangen, die den Konventionen folgen (siehe Abschnitt 2.1.2 ab Seite 14). Node-RED kann bei der physischen Darstellung des Systemzustandes helfen: Dafür fungiert es wie in Abbildung 13 als Gateway und leitet eingehende Nachrichten an ein anderes Gerät weiter – beispielsweise über dessen RESTful API wie im mittleren Fluss. Im 66 http://en.wikipedia.org/wiki/User_experience, Abgerufen am 27. Oktober 2015 3 FAZIT 29 Abbildung 14: Alles zusammen: Virtuelle Leuchte, Node-RED als Gateway und ProB. unteren Fluss in Abbildung 13 wird der umgekehrte Weg eingeschlagen und der aktuelle Wert über die RESTful API des Gerätes ermittelt. Dieser Wert wird anschließend als MQTT-Nachricht formaliot/notify/SetA an ProB weitergeleitet. Im Zusammenhang mit der Lehre zeichnet sich der hier gewählte Ansatz dadurch aus, dass • die Ergebnisse unmittelbar in Soft- und Hardware sichtbar sind (siehe Abbildung 14), • kein aufwendiges Kompilieren notwendig ist, • die Opportunitätskosten gering sind und • dass das verwendete Werkzeug Node-RED dank seiner konkreten visuellen Arbeitsweise und steilen Lernkurve auch von Nicht-Informatikern verstanden wird. Ein weiterer Vorteil ist, dass ausgehend von in B verfassten Anforderungen, diese bereits zu Beginn an ein reales Szenario angebunden werden können. Die dafür in B verfasste Maschine kann dann parallel Schritt-für-Schritt in die Zielsprache überführt werden – vorausgesetzt ein entsprechendes Bussystem wie MQTT kommt zum Einsatz. 3 Fazit Beim Internet der Dinge (siehe Abschnitt 1.1.2 ab Seite 3) handelt es sich um ein System aus Systemen (siehe Abbildung 6), dessen Komplexität durch die zunehmende Ver- 3 FAZIT 30 netzung und Vielzahl an Sensoren und Aktuatoren immer weiter ansteigt. Damit nehmen Abhängigkeiten und Risiken zu. Das betrifft sowohl die Zuverlässigkeit als auch das erwartungskonforme Verhalten (siehe Abschnitt 1.1.3 ab Seite 4). Erst kürzlich gab es Ausfälle im vernetzten Zuhause: Darunter der Wink HUB67 , der intelligente Netzwerklautsprecher Amazon Echo68 und die Telekom Smart Home Plattform QIVICON69 . Glücklicherweise halten sich die Auswirkungen in Grenzen – abgesehen von nächtlicher Ruhestörung durch fälschlich aktivierte Alarmanlagen70 . Formale Methoden (siehe Abschnitt 1.2 ab Seite 6) versprechen Abhilfe, indem sie ein Systems berechenbar und dessen Korrektheit nachweisbar machen. Außerdem können durch Formale Methoden Fehler bereits während der Spezifikation – beispielsweise durch das Verfassen in B (siehe Abschnitt 1.2.2 ab Seite 7) – vermieden werden. Die grundsätzliche Architektur gängiger IoT-Plattformen basiert auf einem Nachrichtenbus über den sich Geräte austauschen, wie in der Referenzarchitektur im Abschnitt 2.1 ab Seite 11 beschrieben. Die Anwendungslogik liegt meist in der Cloud oder auf einem Gateway und kommuniziert direkt oder über den Bus mit den Geräten (siehe Abschnitt 2.1.2 ab Seite 14). Der dafür passende Baukasten ist bereits verfügbar – kostenlos und als Open Source. Als Transportprotokoll für Nachrichten eignet sich das leichtgewichtige MQTT (siehe Abschnitt 37, Seite 13), für die Zentrale bietet sich Node.js in Kombination mit Node-RED an (siehe Abschnitt 2.1.1, Seite 14). Diese Bausteine gelten landläufig als Standard, so dass die Umsetzung eher einer geschickten Kombination als einer umfangreichen Neuentwicklung gleicht: Das erleichtert den Einsteig, denn die Funktionsweise ist bekannt und Entwickler mit entsprechenden Kenntnissen sind weit verbreitet. ProB lässt sich stellvertretend für Formale Methoden via Java API an einen MQTTbasierten Nachrichtenbus binden (siehe Abschnitt 2.2 ab Seite 19) und kann dadurch mit einem System kommunizieren, wenn nicht sogar die Kontrolle übernehmen. Dies funktioniert bidirektional, indem Änderungen über den Nachrichtenbus mit dem System synchronisiert werden. Eine in B definierte Maschine mit ihren Operationen als Eingängen und Variablen als Ausgängen (siehe Abbildung 10) ist Spezifikation und Modell eines IoT-Systems. Diese Maschine lässt sich mit den Mitteln von ProB auf Korrektheit prüfen. Außerdem kann sie zur Interaktion mit Geräten und für automatisierte Abläufe (Regeln) genutzt werden (siehe 2.2.2 ab Seite 25). Nicht nur IoT-Systeme profitieren von Formalen Methoden: Die hier entwickelte Lösung erlaubt es, Formale Methoden auf einfache Art und Weise aus einer eher abstrakten in eine konkrete visuelle und haptische Welt zu überführen, indem die Operationen und Variablen einer Maschine physisch abgebildet werden — dies erhöht das Verständnis für eine in einer Sprache wie B definierten Maschine und erleichtert die Lehre (siehe Abschnitt 2.2.3 ab Seite 27). 67 http://www.wired.com/2015/04/smart-home-headaches/, Abgerufen am 28. Oktober 2015 http://www.zdnet.com/article/the-night-alexa-lost-her-mind/, Abgerufen am 28. Oktober 2015 69 http://www.heise.de/newsticker/meldung/Deutsche-Telekom-Ausfall-desQivicon-Servers-legt-Smart-Homes-lahm-2832456.html, Abgerufen am 28. Oktober 2015 70 http://smarthome.boeffi.net/blog/2015/10/25/bug0021-winterzeit-umstellungda-waren-selbst-die-einbrecher-ueberrascht/, Abgerufen am 28. Oktober 2015 68 A ANHANG A 31 Anhang A.1 Start Die Anwendung wird in der folgenden Reihenfolge gestartet: 1. Mosquitto Broker, die Adresse des Brokers muss in Main.java angepasst werden, sofern nicht der Standard tcp://127.0.0.1:1883 zum Einsatz kommt; 2. Die Anwendung (Main.java), optional kann anschließend zusätzlich die Webbasierte Oberfläche http://127.0.0.1:17080 aufgerufen werden; 3. Node-RED; Eine in B spezifizierte Maschine kann durch eine MQTT-Nachricht mit dem Topic formaliot/notify/$load und dem Pfad zu der Maschinenbeschreibung im Payload erfolgen. In Node-RED gelingt dies über den „mqtt out“-Knoten. Operationen der Maschine werden auf die gleiche Art aufgerufen, indem eine Nachricht das Topic formaliot /notify/[operation] und das Prädikat dieser Operation als Payload erhält. Veränderungen der Maschine werden als MQTT-Nachrichten abonniert. Die Nachrichten enthalten Variablenbezeichner und -wert. In Node-RED erfolgt das mit dem „mqtt in“-Knoten und dem Topic formaliot/stateChanged/[variable]. Beispiele für Node-RED flows sind im Verzeichnis src/main/node-red enthalten. Diese können in Node-RED durch das Hamburger-Menü und dann Import | Clipboard eingefügt werden. Diverse Maschinen für ProB finden sich unter src/main/b. Ein Test-Sketch für Arduino findet sich unter src/main/arduino/SimpleMQTT.ino und ein kompletter Arduino/Genuino basierter Agent für vorgefertigte Grove-Komponenten steht unter src/main/arduino/FormalIoT.ino zur Verfügung. Als Grundlage des Projektes dient ProB. Grundsätzlich würde es ausreichen, den reinen ProB Kernel der Java API einzubinden, doch müsste dann eine Visualisierung ähnlich dem BMotion Studio zusätzlich umgesetzt werden. Glücklicherweise liefern die hier eingebundenen Servlets auf Basis des Kernels von ProB Version 2 eine interaktive Web-basierte Oberfläche frei Haus, die - sofern nicht anders konfiguriert - über http://127.0.0.1:17080/ gestartet wird. Falls kein physisches Testgerät vorhanden ist, kann auf die virtuelle Leuchte aus dem QIVICON SDK71 zurückgegriffen werden. Eine Kopie dieser Node.js-Anwendung befindet sich im Verzeichnis virtualbulb und wird dort über die Kommandozeile via node bulb .js gestartet. Die Nutzung der RESTful API erfolgt durch POST und GET über http:// localhost:3000/api/v1/smarthome/virtual/bulb. Eine Weboberfläche steht unter http://localhost:3000/api/v1/smarthome/virtual/bulb/view ebenfalls zur Verfügung. Die genaue Verwendung und Konfigurationsmöglichkeiten sind in der zugehörigen README.txt-Datei beschrieben. 71 http://developer.qivicon.com/sdk/qivicon-sdk/qivicon-sdk-download/, Abgerufen am 27. Oktober 2015 A ANHANG A.2 32 Erweiterung Sollte das Angebot an Paketen für Node-RED einmal nicht ausreichen, kann auch auf Node.js-JavaScript-Pakete (npm) oder gleich auf eigenes JavaScript innerhalb von Funktionsblöcken (function node) zurückgegriffen werden. Im Falle eines Paketes wie „Node.js Sonos Interface“ (Paketname sonos) für die Steuerung vernetzter SonosLautsprecher72 müsste dieses nach der Installation noch in den Einstellungen settings .js der Node-RED-Anwendung73 bekannt gemacht werden: functionGlobalContext : {sonos:require(’sonos’)} Innerhalb eines Funktionsblocks kann das Paket dann nach einem Neustart von Node-RED direkt im Programmcode genutzt werden (siehe Listing 14). Listing 14: Node-RED-Programmcode zur Nutzung von Sonos. 2 4 // set Sonos IP var sonos = new context.global.sonos.Sonos(’192.168.178.64’); // url with Sonos compatible soundfile var url = ’https://foo.bla/sound.mp3’; 6 8 sonos.play(url, function (err, playing) { console.log([err, playing]); }); 72 73 http://www.sonos.com/, Abgerufen am 26. Oktober 2015 http://nodered.org/docs/configuration.html, Abgerufen am 16. Oktober 2015 A ANHANG A.3 33 Dateien und Datenträger Bitte hier die Hülle mitsamt Datenträger einkleben Der beiliegende Datenträger enthält: • pdf -Version der Bachelorarbeit; • LATEX- und Grafik-Dateien, die verwendet wurden; • Quellcode, der während der Bachelorarbeit erstellt wurde; • Virtuelle Leuchte als RESTful API, sollte einmal kein physisches Gerät vorhanden sein; Der Quellcode ist ebenfalls unter http://tuatara.cs.uni-duesseldorf.de/ wolter/FormalIoT.git verfügbar. LITERATUR 34 Literatur [AFPS11] A LMEIDA, José B. ; F RADE, Maria J. ; P INTO, Jorge S. ; S OUSA, Simão Melo d.: An overview of formal methods tools and techniques. In: Rigorous Software Development. Springer, 2011, S. 15–44 [Ash09] A SHTON, Kevin: That ’Internet of Things’ Thing. http://www. rfidjournal.com/articles/view?4986. Version: 2009. – Abgerufen am 17. Oktober 2015 [BIT14] Bitkom e.V.: Vor dem Boom - Marktaussichten für Smart Home. http://www2.deloitte.com/de/de/pages/technology-mediaand-telecommunications/articles/marktaussichten-fuersmart-home.html. Version: 2014. – Abgerufen am 17. Oktober 2015 [But01] B UTLER, Ricky W.: NASA LaRC Formal Methods Program: What Is Formal Methods? http://shemesh.larc.nasa.gov/fm/fm-what.html. Version: 2001. – Abgerufen am 17. Oktober 2015 [Cis15] Cisco Systems, Inc.: Internet of Everything (IoE) | The Network. http: //newsroom.cisco.com/ioef. Version: 2015. – Abgerufen am 17. Oktober 2015 [Cla14] C LARK, Tim: Mobile World Congress 2014: “Everything that can be connected, will be connected“. http://scn.sap.com/community/businesstrends/blog/2014/02/26/mobile-world-congress-2014everything-that-can-be-connected-will-be-connected. Version: 2014. – Abgerufen am 17. Oktober 2015 [CW96] C LARKE, Edmund M. ; W ING, Jeannette M.: Formal methods: State of the art and future directions. In: ACM Computing Surveys (CSUR) 28 (1996), Nr. 4, S. 626–643 [DB15] D AUGHERTY, Paul ; B ERTHON, Bruno: Winning with the Industrial Internet of Things. https://www.accenture.com/ng-en/~/media/Accenture/ Conversion-Assets/DotCom/Documents/Global/PDF/Digital_ 1/Accenture-Industrial-Internet-of-Things-PositioningPaper-Report-2015.pdf. Version: 2015. – Abgerufen am 17. Oktober 2015 [End13] E NDLER, Michael: Cisco CEO: We’re All In On Internet Of Everything. http://www.informationweek.com/software/informationmanagement/cisco-ceo-were-all-in-on-internet-ofeverything/d/d-id/1108801. Version: 2013. – Abgerufen am 17. Oktober 2015 [Fow09] F OWLER, Martin: RulesEngine. http://martinfowler.com/bliki/ RulesEngine.html. Version: 2009. – Abgerufen am 27. Oktober 2015 LITERATUR 35 [Gar14] Gartner, Inc.: Gartner’s 2014 Hype Cycle for Emerging Technologies Maps the Journey to Digital Business. http://www.gartner.com/newsroom/id/ 2819918. Version: 2014. – Abgerufen am 17. Oktober 2015 [Har87] H AREL, David: Statecharts: A visual formalism for complex systems. In: Science of computer programming 8 (1987), Nr. 3, S. 231–274 [Kre14] K REUZER, Kai: openHAB 2.0 and Eclipse SmartHome. http: //kaikreuzer.blogspot.de/2014/06/openhab-20-and-eclipsesmarthome.html. Version: 2014. – Abgerufen am 17. Oktober 2015 [KS11] K NAPP, Alexander ; S CHELLHORN, Gerhard: Formale Methoden - Universität Augsburg. https://www.informatik.uni-augsburg.de/ lehrstuehle/swt/sse/lehre/fm/downloads/fm.pdf. Version: 2011. – Abgerufen am 18. Oktober 2015 [LB03] L EUSCHEL, Michael ; B UTLER, Michael: ProB: A Model Checker for B. In: A RAKI, Keijiro (Hrsg.) ; G NESI, Stefania (Hrsg.) ; M ANDRIOLI, Dino (Hrsg.): FME 2003: Formal Methods - International Symposium of Formal Methods Europe. Pisa Italy, September 8-14, 2003, Proceedings. Springer, 2003, S. 855–874. – ISBN 978–3–540–40828–4 [Mü14] M ÜLLER, Andreas: Bosch ConnectedWorld - Missing pieces to make the IoT a real success. http://blog.bosch-si.com/categories/technology/ 2014/11/missing-pieces-to-make-the-iot-a-real-success/. Version: 2014. – Abgerufen am 17. Oktober 2015 [MBH09] M ALAKA, Prof. Dr. R. ; B UTZ, Prof. Dr. A. ; H USSMANN, Prof. Dr. H.: Medieninformatik - eine Einführung. 1. Auflage. München : Pearson Deutschland GmbH, 2009. – ISBN 978–3–827–37353–3 [Mic15] Microsoft Corporation: Internet of Things overview | Microsoft. http://www. internetofyourthings.com/. Version: 2015. – Abgerufen am 22. Oktober 2015 [Neg95] N EGROPONTE, Nicholas: Being Digital -. First Edition; later Printing. New York : Knopf, 1995. – ISBN 978–0–679–43919–6 [Nib14] N IBLETT, Peter: Introduction to the IoT Protocol, MQTT. https://www-304. ibm.com/connections/files/basic/anonymous/api/library/ 2f752ce8-0a65-478d-8ae4-6b0bb4a22656/document/6eb61ae3afb9-43c8-8c15-e4bddce7065b/media. Version: 2014. – Abgerufen am 18. Oktober 2015 [OEC12] OECD: Machine-to-Machine Communications. http://dx.doi.org/10. 1787/5k9gsh2gp043-en/content/workingpaper/5k9gsh2gp043en. Version: 2012. – Abgerufen am 17. Oktober 2015 [RGC+ 15] R OWLAND, Claire ; G OODMAN, Elizabeth ; C HARLIER, Martin ; L IGHT, Ann ; L UI, Alfred: Designing Connected Products - UX for the Consumer Internet of Things. Sebastopol, CA : Ö’Reilly Media, Inc.", 2015. – ISBN 978–1–449–37272– 9 LITERATUR 36 [RT13] R OUE -TAYLOR: The technology that will enable the Internet of Things. http://www.successfulworkplace.org/2013/05/25/thetechnology-that-will-enable-the-internet-of-things/. Version: 2013. – Abgerufen am 10. Oktober 2015 [Saf09] S AFFER, Dan: Designing for Interaction - Creating Innovative Applications and Devices. 00002. Aufl. London : New Riders, 2009. – ISBN 978–0–321–64339–1 [Sin09] S INEK, Simon: Simon Sinek: How great leaders inspire action | TED Talk | TED.com. http://www.ted.com/talks/simon_sinek_how_great_ leaders_inspire_action. Version: 2009. – Abgerufen am 17. Oktober 2015 [Ste00] S TEWART, William: Internet Coke Machine. http://www.livinginternet. com/i/ia_myths_coke.htm. Version: 2000. – Abgerufen am 17. Oktober 2015 [Ste04] S TERLING, Bruce: Viridian Note 00422: The Spime - "When Blobjects Rule the Earth"by Bruce Sterling. SIGGRAPH, Los Angeles, August 2004. http://www.viridiandesign.org/notes/401-450/00422_ the_spime.html. Version: 2004. – Abgerufen am 17. Oktober 2015 [Sym97] S YME, Don: Proving Java Type Soundness. http://research.microsoft. com/apps/pubs/default.aspx?id=68466. Version: 1997. – Abgerufen am 19. Oktober 2015 [Vis15] VisionMobile Ltd: IoT report series: The Smart Home Landscape 2015 - Free report sample. http://www.visionmobile.com/product/iot-reportseries-the-smart-home-landscape-2015/. Version: 2015. – Abgerufen am 17. Oktober 2015 [Wei91] W EISER, Mark: The Computer for the 21st Century. http://www.ubiq.com/ hypertext/weiser/SciAmDraft3.html. Version: 1991. – Abgerufen am 17. Oktober 2015 [Wei96] W EISER, Mark: Ubiquitous Computing. http://www.ubiq.com/ hypertext/weiser/UbiHome.html. Version: 1996. – Abgerufen am 17. Oktober 2015 [Wol13] W OLTER, Sascha: Jenseits mobiler Anwendungen: Super-natural interaction und Spielzeuge. In: i-com - Zeitschrift für interaktive und kooperative Medien, Vol. 12, Nr. 3, ISSN 2196-6826 (2013), S. 54–59 [Wol15] W OLTER, Sascha: Nutzen, Sicherheit und Privatsphäre. http://www. wolter.biz/2015/06/nutzen-sicherheit-und-privatsphare/. Version: 2015. – Abgerufen am 17. Oktober 2015 ABBILDUNGSVERZEICHNIS 37 Abbildungsverzeichnis 1 Smart Home Marktprognose. . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Paradigmenwechsel bei der Interaktionsgestaltung. . . . . . . . . . . . . . 5 3 ProB Tcl/Tk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4 ProB 2 Webclient mit einer Schalter-Maschine (Switch). . . . . . . . . . . . 10 5 Die Internet-der-Dinge-Landschaft. . . . . . . . . . . . . . . . . . . . . . . . 12 6 System aus Systemen mit Nachrichtenbus. . . . . . . . . . . . . . . . . . . 13 7 Node-RED Funktionselement für eingehende MQTT-Nachrichten. . . . . 18 8 Node-RED Funktionselement zum Injizieren von Nachrichten. . . . . . . . 19 9 Node-RED Funktionselement zum Auswerten von Nachrichten. . . . . . . 20 10 Maschine mit Ein- und Ausgängen. . . . . . . . . . . . . . . . . . . . . . . . 21 11 Node-RED JSON-Verabreitung. . . . . . . . . . . . . . . . . . . . . . . . . . 24 12 Einfache Regel in Node-RED definiert. . . . . . . . . . . . . . . . . . . . . . 27 13 Node-RED als Gateway über eine RESTful API. . . . . . . . . . . . . . . . 28 14 Alles zusammen: Virtuelle Leuchte, Node-RED als Gateway und ProB. . . 29 LISTINGS 38 Listings 1 Schalter als in B spezifizierter Automat. . . . . . . . . . . . . . . . . . . . . 7 2 Server mit Web-Oberfläche auf Basis der ProB Java API. . . . . . . . . . . . 9 3 Arduino als einfacher MQTT-Client. . . . . . . . . . . . . . . . . . . . . . . 15 4 Arduino als MQTT-Subscriber. . . . . . . . . . . . . . . . . . . . . . . . . . 16 5 Arduino als MQTT-Publisher. . . . . . . . . . . . . . . . . . . . . . . . . . . 16 6 Arduino verarbeitet MQTT Payload für Aktuatoren. . . . . . . . . . . . . . 17 7 Operation mit der ProB Java API ausführen. . . . . . . . . . . . . . . . . . 21 8 Empfang und Verarbeitung von MQTT Nachrichten mit der ProB Java API. 22 9 Verarbeitung von Änderungen mit der ProB Java API. . . . . . . . . . . . . 22 10 Node-RED-Programmcode zur Verabeitung eines JSON-Payload. . . . . . 24 11 Node-RED-JSON-Verarbeitung mit zwei Ausgängen. . . . . . . . . . . . . 25 12 Smart Home als in B spezifizierter Automat. . . . . . . . . . . . . . . . . . 25 13 Einfache Regel in B definiert. . . . . . . . . . . . . . . . . . . . . . . . . . . 27 14 Node-RED-Programmcode zur Nutzung von Sonos. . . . . . . . . . . . . . 32