In der vorliegenden Bachelorarbeit wird die Entwicklung der Hausautomationsapplikation HomeControl für das mobile Betriebssystem iOS beschrieben. Diese soll drei zuvor entwickelten autonom funktionierende Einzelsysteme zusammenführen und erweitern, ohne dass sie angepasst werden müssen. HomeControl besteht aus der Integration folgender drei Systeme:
1. Applikation zur Betätigung des elektrischen Türöffners per Webbrowser mittels Physical-Computing-Plattform Arduino
2. Eine Webbrowser-basierte Funksteuerung der Zimmerbeleuchtung unter Ein- satz eines Raspberry Pi
3. Steuerung der Staubsaugroboters Roomba der Marke iRobot
Im theoretischen Teil werden die Grundlagen der eingesetzten Protokolle sowie Programmiersprachen vorgestellt und im Hinblick auf ihren jeweiligen Einsatzzweck erläutert. Anschließend werden die eingesetzten Hardwarekomponenten, im Speziellen Arduino, Raspberry Pi und Roomba, vorgestellt. Den Abschluss des theoretischen Teils bildet dabei die Einführung in die Entwicklung von iOS Apps.
Der Hauptteil erläutert zunächst die Entwicklungen der Einzelsysteme. Darauf auf- bauend wird die Entwicklung der Applikation HomeControl detailliert mit Bezug auf die im theoretischen Teile erläuterten Designkonzepte beschrieben.
Abschließend wird das Ergebnis dieser Arbeit kritisch im Hinblick auf Sicherheitsaspekte betrachtet und ein Ausblick auf Erweiterungsmöglichkeiten gegeben.
Inhaltsverzeichnis
Abkürzungsverzeichnis
Abbildungsverzeichnis
Quelltextverzeichnis
1 Einleitung
1.1 Voraussetzungen
1.2 Motivation
1.3 Zielsetzung
2 Theoretische Grundlagen Software
2.1 Hypertext Transfer Protrocol
2.1.1 Überblick
2.1.2 HTTP-Request
2.1.3 HTTP-Response
2.1.4 Datenübertragung
2.2 Eingesetzte Programmiersprachen
2.2.1 HTML CSS JavaScript
2.2.2 C / C++
2.2.3 PHP: Hypertext Preprocessor
2.2.4 Swift
3 Theoretische Grundlagen Hardware
3.1 Physical Computing Plattform - Arduino
3.2 Einplatinencomputer - Raspberry Pi
3.3 Staubsaugroboter Roomba
3.3.1 Überblick SCI
3.3.2 SCI Konnektor
3.3.3 SCI Protokoll
4 Theoretische Grundlagen iOS Entwicklung
4.1 iOS Design Pattern
4.2 Model View Controller
4.2.1 Model
4.2.2 View
4.2.3 Controller
4.3 Target-Action
4.4 Delegation
5 Entwicklung der Einzelsysteme
5.1 Türsteuerung Arduino
5.1.1 Zielsetzung
5.1.2 Problemstellung
5.1.3 Umsetzung
5.2 Lichtsteuerung Raspberry Pi
5.2.1 Zielsetzung
5.2.2 Problemstellung
5.2.3 Umsetzung
5.3 Steuerung Staubsaugroboter Roomba
5.3.1 Problemstellung
5.3.2 Umsetzung
6 Entwicklung der App HomeControl
6.1 Navigation
6.2 Gestaltung der View Objekte mittels Interface Builder
6.3 Das Model Objekt
6.3.1 Die Klassen RaspberryPi und Light
6.3.2 Die Klasse Arduino
6.3.3 Die Klasse Roomba
6.4 Controller Objekte
6.4.1 Die Klasse RaspberryPiViewController
6.4.2 Die Klasse ArduinoViewController
6.4.3 Die Klasse RoombaViewController
7 Schlussbetrachtung
7.1 Zusammenfassung
7.2 Fazit
7.3 Ausblick
Literatur
CD Inhaltsverzeichnis
Anhang
Zusammenfassung
In der vorliegenden Bachelorarbeit wird die Entwicklung der Hausautomationsapplikation HomeControl für das mobile Betriebssystem iOS beschrieben. Diese soll drei zuvor entwickelten autonom funktionierende Einzelsysteme zusammenführen und erweitern, ohne dass sie angepasst werden müssen. HomeControl besteht aus der Integration folgender drei Systeme:
1. Applikation zur Betätigung des elektrischen Türöffners per Webbrowser mittels Physical-Computing-Plattform Arduino
2. Eine Webbrowser-basierte Funksteuerung der Zimmerbeleuchtung unter Einsatz eines Raspberry Pi
3. Steuerung der Staubsaugroboters Roomba der Marke iRobot
Im theoretischen Teil werden die Grundlagen der eingesetzten Protokolle sowie Programmiersprachen vorgestellt und im Hinblick auf ihren jeweiligen Einsatzzweck erläutert. Anschließend werden die eingesetzten Hardwarekomponenten, im Speziellen Arduino, Raspberry Pi und Roomba, vorgestellt. Den Abschluss des theoretischen Teils bildet dabei die Einführung in die Entwicklung von iOS Apps.
Der Hauptteil erläutert zunächst die Entwicklungen der Einzelsysteme. Darauf aufbauend wird die Entwicklung der Applikation HomeControl detailliert mit Bezug auf die im theoretischen Teile erläuterten Designkonzepte beschrieben.
Abschließend wird das Ergebnis dieser Arbeit kritisch im Hinblick auf Sicherheitsaspekte betrachtet und ein Ausblick auf Erweiterungsmöglichkeiten gegeben.
Abstract
This bachelor thesis describes the development of the home automation application HomeControl for the mobile operating system iOS. This should extend the steering of three previously developed autonomous systems via a central control, without customizing the systems themselves. The integration includes the following systems:
1. A web browser based electric door opener, embedded via a the physical computing platform Arduino into the house door intercom system
2. A web browser based remote control of room lighting using Raspberry Pi
3. The control of the robotic vacuum cleaner Roomba
In the theoretical part the basics of protocols and programming languages used are presented and discussed with regards to their respective application. Subsequently, the applied hardware components, in particular Arduino, Raspberry Pi and Roomba are presented. The theoretical part ends with an introduction to iOS app development.
The main part starts describing the development of the single systems first. Following that, the development of the application “HomeControl” is described in detail with respect to the design concepts explained in the theoretical part.
In the concluding remarks, the results of this work are critically considered with regards to safety aspects and an outlook on further possible developments.
Abkürzungsverzeichnis
Abbildung in dieser Leseprobe nicht enthalten
Abbildungsverzeichnis
1 Das OSI-Modell im Überblick von [Vara]
2 HTTP Request erstellt mittels Firefox Plugin HttpFox
3 HTTP Response erstellt mittels Firefox Plugin HttpFox
4 Einteilung der HTTP-Status Codes von http://www.tutorialspoint. com/http/http_responses.htm abgerufen am 24.08.2015
5 Arduino Türsteuerung Benutzeroberfläche auf mobilen Browser, Screenshot aus eigener Anfertigung
6 Physical Computing Plattform Arduino UNO Rev.3 von https:// store.arduino.cc/product/A000066 abgerufen am 24.08.2015
7 Übersicht Modelle Raspberry Pi von [Varb]
8 Raspberry Pi Modell B+ von [Varc]
9 Staubsaugroboter Roomba Modell 650, Aufnahme aus eigener Anfertigung
10 Übersicht Anschlüsse SCI Mini-DIN Connector von [iRo05]
11 Roomba SCI Commands Quick Reference von [iRo05]
12 Model View Controller Design Pattern von [Inca]
13 Target-Action Design Pattern von [Incb]
14 Visualisierung des Delegate Design Pattern von [Ban]
15 Prinzipschaltbild Türsteuerung Arduino aus eigener Anfertigung
16 Arduino Ethernet Shield von https://store.arduino.cc/product/ A000072 abgerufen am 24.08.2015
17 Aufbau der Arduino Türsteuerung
18 Funksteckdose der Firma Pollin mit Fernbedienung und ausgebautem Funktransmittermodul aus eigener Anfertigung
19 Prinzipschaltbild Raspberry Pi Lampensteuerung aus eigener Anfertigung
20 Raspberry Pi mit verbundenem 433 Mhz Transmitter Modul aus eigener Anfertigung
21 Roomba Wi-Fi Adapter Roowifi von www.rowifi.com abgerufen am 24
22 RooWifi Embedded Web Server Screenshot aus eigener Anfertigung
23 Projektstruktur Applikation Home Control, Screenshot Integrated Development Environment (IDE) Xcode aus eigener Anfertigung
24 iOS App Home Control, Screenshot aus eigener Anfertigung
25 Main.Storyboard Home Controll innerhalb Interface Builder, Screenshot IDE Xcode aus eigener Anfertigung
26 Aufbau einer HTTP URL von [Pod]
27 Benutzteroberfläche zur Steuerung der Zimmerbeleuchtung auf einem Apple iPhone 5, Screenshot aus eigener Anfertigung
28 Anwendung Home Control im Debug Modus; Screenshot IDE Xcode aus eigener Anfertigung
29 Xcode Asset Catalogs, Screenshot IDE Xcode aus eigener Anfertigung
30 Interface Builder: Erstellung View Objekt Raspberry Pi; Screenshot IDE Xcode aus eigener Anfertigung
31 Strong Referece Cycle von [Inc15]
32 Anwendung HomeControl mit geöffneter Arduino Türsteuerung; Screenshot aus eigener Anfertigung
33 Anwendung HomeControl: Ansichten Roomba und Remote; Screenshots aus eigener Anfertigung
35 Arduino Türsteuerung: Programmablaufplan der loop() Funktion; erstellt mit der Free Version der Software Visustin..
Quelltextverzeichnis
1 Hypertext Markup Language (HTML) Dokument der Arduino Türsteuerung
2 Cascading Style Sheets (CSS) Klasse “button”
3 CSS Klassen “color” und “colorActive”
4 Verwendung JavaScript Benutzeroberfläche Türsteuerung
5 Definition einer Variable als Optional
6 Optional Binding
7 Definition und Implementierung des NSCopying Protokolls
8 Implementierung Swipe Gesture Recognizer
9 Import Statement und Deklaration Enumerations
10 Die Klasse Light: Definition Konstanten und Variablen
11 Die Klasse Light: Initialisierung und interne Funktion “createURL”
12 Die Klasse Light: Die Memberfunktionen “toggleStatus”
13 Die Klasse Raspberry Pi
14 Die Klasse Arduino Teil
15 Die Klasse Arduino Teil
16 Das Enumeration DriveCommand
17 Die Klasse Roomba Teil
18 Die Klasse Roomba Teil
19 Die Klasse RaspberryPiViewController Teil
20 Die Klasse RaspberryPiViewController Teil
21 Die Klasse RaspberryPiViewController Teil
22 Die Klasse RaspberryPiViewController Teil
23 Die Klasse ArduinoViewController Teil
24 Die Klasse ArduinoViewController Teil
25 Die Klasse ArduinoViewController Teil
26 Die Klasse RoombaViewController Teil
27 Klasse RoombaViewController: Die Funktion viewDidLoad()
28 Klasse RoombaViewController: Navigation innerhalb der Ansicht
29 Klasse RoombaViewController: Standardfunktionen
30 Klasse RoombaViewController: weitere @IBAction Funktionen
31 Klasse RoombaViewController: Die Funktionen changeForwardButton, changeBackwardButton und changeButtonAppearance
32 Das Programm “send” zur Erzeugung eines Schaltsignals
33 PHP Quelltext zum Aufruf des Programms “send”..
1 Einleitung
Das Thema dieser Bachelorarbeit ist die Entwicklung einer Hausautomation auf Grundlage der zentralen Steuerung über ein iOS App. Die Basis hierfür bilden bereits autonom funktionierende Einzelsysteme, die über entsprechend etablierte Webserver steuerbar sind.
Im Speziellen sind dies eine Türsteuerung, die das Öffnen der Haustür mit Hilfe der Physical Computing Plattform Arduino über ein in der Programmiersprache C++ erstelltes Skript ermöglicht. Des Weiteren die Steuerung der Zimmerbeleuchtung, die das Schalten von 3 Lampen innerhalb der Wohnung über einen Webserver auf dem Einplatinencomputer Raspberry Pi mit Hilfe handelsüblicher Funksteckdosen implementiert sowie die Fernsteuerung des Staubsaugroboters Roomba der Marke iRobot, der über ein WLAN Interface eines Entwicklerteams aus Spanien ebenfalls eine Steuerung über eine Hypertext Transfer Protocol (HTTP) Schnittstelle ermöglicht. Ziel ist es dabei, die selbst entwickelten Systeme sowie Systeme anderer Hersteller zentral über ein in der Programmiersprache „Swift“ entwickeltes iOS App zu steuern. Dabei wird in der Arbeit auf die Entwicklung der App, die Funktionsweise der Einzelsysteme und die theoretischen Grundlagen der eingesetzten Technologien und Protokolle eingegangen.
1.1 Voraussetzungen
Grundlage dieser Bachelorarbeit bilden die Systeme Türsteuerung, die bereits in der SC-P2 “Integration der Physical-Computing-Plattform Arduino in eine hauseigene Türsprechanlage zur Betätigung des elektrischen Türöffners per Webbrowser” sowie die Steuerung der Zimmerbeleuchtung, die in der SC-A2 “Entwicklung einer Webbrowser-basierten Funksteuerung einer Zimmerbeleuchtung unter Einsatz eines Raspberry Pi” beschrieben worden sind. Beide Systeme stellen reduziert betrachtet einen Webserver dar, der innerhalb eines lokalen Netzwerkes auf Anfragen wartet und diese mit einem Webformular im Sinne eines HTML Dokuments beantwortet. Hierbei dient die bereitgestellte Seite jeweils als Interface, um eine entsprechende Aktion auszulösen. Die Verwirklichung von HTTP erfolgt bei den beiden Systemen auf unterschiedlichen Ebenen der Komplexität. Bei der Physical Computing Plattform Arduino handelt sich um ein sogenanntes “embedded system”, bei dem ein Mikroprozessor auf einer Platine mit anderen elektronischen Bauteilen, wie Analog/Digital Wandler, LED und Transistoren eingebettet ist. Diese werden üblicherweise von Entwicklern genutzt, um Mikroprozessoren für ihren zukünftigen Einsatz zu testen, bevor diese in die Produktion gehen.
Im Gegensatz zum Arduino handelt es sich bei dem Raspberry Pi um einen vollwertigen Minicomputer, inklusive aller Schnittstellen und Ein- und Ausgängen, der mit dem Betriebssystem LINUX betrieben wird. Beide Systeme kommen aus der Open Source Szene und verfolgen das Ziel, auch technikfremden Personen den Einstieg in die Hard- und Softwareentwicklung durch eine didaktisch durchdachte Kombination aus Hardware und dazugehöriger Software zu erleichtern. Arduino ist modular konzipiert und lässt sich mit sogenannten “Shields” um Zusatzfunktionalitäten erweitern. Im Falle der Türsteuerung erfolgt dies über ein Ethernet-Shield. Die Verwirklichung von HTTP erfolgt hierbei auf einer der unteren Ebenen im Sinne des Open Systems Interconnection Model (OSI-Modell). Konträr dazu wird die Realisierung des Netzwerkprotokolls des Raspberry Pi auf der Anwenderebene durch die einfache Installation einer entsprechenden Software erreicht. Dies vereinfacht dem Benutzter die Umsetzung eines Webservers, so dass er sich nur um die Programmierung des HTML Dokuments kümmern muss.
Als drittes System, dass in die iOS Hausautomation App integriert werden soll, ist RooWifi eine von einem spanischen Team entwickelte Wi-Fi Funkschnittstelle für den Staubsaugroboter Roomba der Firma iRobot, die für den kommerziellen Gebrauch erhältlich ist. iRobot wurde 1990 von Robotik-Spezialisten des Massachusetts Institute of Technology mit der Vision gegründet, Roboter in den Alltag zu bringen (siehe [iRo]). Das Unternehmen verfolgt für seine Staubsaugroboterserie Roomba einen quelloffenen Ansatz. So befindet sich unterhalb der Abdeckung jeweils ein Serial Port MINI-DIN Connector, der es über das frei verfügbare Roomba Serial Command Interface (SCI) Protokoll ermöglicht auf sämtliche Funktionalitäten des Roboters zuzugreifen. RooWifi realisiert in diesem Sinne lediglich die Erreichbarkeit der Schnittstelle über WLAN. Die Steuerung ist ähnlich der Tür- sowie der Lampensteuerung, da sie die Kontrolle des Staubsaugers über ein HTML Dokument ermöglicht.
1.2 Motivation
Die Veröffentlichung der Programmiersprache Swift war für den Verfasser dieser Arbeit Anlass in die Entwicklung von mobilen Anwendungen einzusteigen. Diese wurde erst im Herbst 2014 von Apple auf dessen Worldwide Developers Conference (WWDC) veröffentlicht. Sie soll die C basierte Sprache Objective-C zukünftig ersetzen und bringt eine große Anzahl an neuen Konzepten der Programmierung mit sich, auf die im theoretischen Teil der Arbeit eingegangen wird. Heutige Smartphones verknüpfen hohe Rechenleistung mit einer Vielzahl von Sensoren. Die Programmierung von mobilen Anwendungen unterscheidet sich aufgrund der vielschichtigen Möglichkeiten auf Umwelteinflüsse zu reagieren, stark von der konventionellen Anwendungsentwicklung. Diese enthalten Lage-, Beschleunigungs-, Magnet- und Helligkeitssensoren sowie GPS. Dies erfordert eine stark ereignisbasierte Programmierung, konträr zur prozeduralen Abarbeitung von Aufgaben. Deshalb ist Kapitel 4 (s.S. 24) der Einführung in die hierfür notwendigen Programmierkonzepte gewidmet, die eine Vielzahl an möglichen Anwendungen ermöglichen. Aufgrund ihrer Mobilität mit ständiger Vernetztheit mit dem Internet sind Smartphones auch prädestiniert als zentrale Steuereinheit für die Hausautomation. Das oft angepriesene Internet of
Things (IoT) verlangt hierfür vereinheitlichte Protokolle, die es ermöglichen, Einzelsysteme in Gesamtsysteme zu integrieren. Diese Arbeit soll aufzeigen, wie eine zentrale Steuerung aussehen könnte und setzt dies mit der Anwendung HomeCon- trol um.
1.3 Zielsetzung
Im Rahmen der Arbeit sollen die Einzelsysteme zentral über ein iOS App gesteuert werden. Die Kommunikation erfolgt hierbei über HTTP, wobei das App zu diesem Zweck in der neuen Programmiersprache Swift entwickelt wird. Die Entwicklung der Anwendung HomeControl ist nicht als fertiges Produkt zum kommerziellen Vertrieb gedacht, sondern soll aufzeigen, wie eine zentrale Hausautomation funktioniert. Die verwendeten Einzelsysteme stellen vom Verfasser dieser Arbeit entwickelte Einzellösungen dar. Dennoch ist die Funktionsweise vergleichbar mit etablierten Produkten. So funktioniert die kommerziell vertriebene Schnittstelle RooWifi zur Steuerung des Staubsaugroboters Roomba ähnlich der Arduino Türsteuerung und der Raspberry Pi Lichtssteuerung, weil hierbei die Steuerung jeweils über einen implementierten Webserver erfolgt. Alle Einzelsysteme sollen weiterhin autonom funktionieren und ohne Anpassung in eine zentrale Steuerung integriert werden. Hierfür werden die offenen Schnittstellen von RooWifi sowie die Informationsübermittlung mittels des HTTP Protokolls genutzt.
2 Theoretische Grundlagen Software
Im Folgenden wird auf die theoretischen Grundlagen der Software und Protokolle zur Verwirklichung der Hausautomation eingegangen. Dies sind im Speziellen, das eingesetzte HTTP Protokoll sowie die Programmiersprachen die zur Verwirklichung eingesetzt werden.
2.1 Hypertext Transfer Protrocol
HTTP spielt bei der Entwicklung von Anwendungen, die über das Internet miteinander kommunizieren, eine große Rolle. Der folgende Teil dient dazu einen kleinen Überblick, über das doch sehr umfangreiche Protokoll, im Hinblick auf die zur Entwicklung notwendigen Bereiche zu geben. Das vollständige Protokoll umfasst in seiner in der RFC 7230 veröffentlichten Fassung 89 Seiten und eignet sich als allgemeines Dateiübertragungsprotokoll.
2.1.1 Überblick
HTTP ist das Protokoll, auf dem das World Wide Web (WWW) basiert. Es definiert, wie Nachrichten formatiert und übertragen werden. Die Kommunikation findet hierbei meistens zwischen einem Internetserver und Browser statt. Im Sinne des OSI-Modell befindet es sich innerhalb der anwendungsorientierten Schichten 5 bis 7. Abbildung 1 (s.S. 5) zeigt das OSI-Modell im Überblick. Das Protokoll wird von dem World Wide Web Consortium (W3C) standardisiert und ist in der zur Zeit weit verbreitetsten Version 1.1 in der Request for Comments (RFC) 7230 veröffentlicht. Es regelt, wie die verschiedenen Teilnehmer auf gewisse Kommandos reagieren sollen und regelt somit deren Kommunikation. HTTP ist ein zustandsloses Protokoll, was bedeutet, dass jede Anfrage keine Information über die zuvor gestellte Abfrage enthält. Zur Übermittlung von HTML Dokumenten wird beispielsweise die HTTP- GET Methode benutzt. Der Transport der Daten erfolgt dann über Transmission Control Protocol (TCP), das sich im OSI-Modell auf Schicht 4 befindet.
Die genaue Verwirklichung des Protokolls ist dann jeweils von der konkreten Anwendung abhängig. Dies kann beispielsweise wie auf dem System zur Steuerung der Zimmerbeleuchtung mittels Raspberry Pi, durch einen darauf installierten WebServer Programm wie Nginx verwirklicht werden. Bei der Arduino Türsteuerung hingegen werden alle Anfragen über ein C Programm eingelesen, auf Signalwörter untersucht und dann entsprechend des Protokolls beantwortet.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 1: Das OSI-Modell im Überblick
2.1.2 HTTP-Request
Die Kommunikation erfolgt durch eine Anfrage durch einen HTTP-Request, der durch eine Antwort mit einem HTTP-Response erwidert wird. Abbildung 2 (s.S. 5) zeigt den HTTP-Request Header, der notwendig ist, um das auf dem Raspberry Pi gespeicherte .php Dokument abzurufen. Das HTTP-Protokoll ist sehr umfangreich und besitzt eine Vielzahl an Funktionalitäten. Hier wird jedoch nur auf die gebräuchlichsten Anfragenmethoden GET und POST eingegangen. Die Request-Zeile in Abbildung 2 (s.S. 5) gibt die verwendete Methode (GET), die Uniform Resource Identifier (URI), auf der sich das angefragte Dokument innerhalb des Servers befindet und das verwendete Protokoll an. Die Zeile Host gibt die IP Adresse des Servers, auf dem sich das Dokument befindet, an. User-Agent übermittelt dem Server Daten in Bezug auf verwendete Software des Client, um dies beispielsweise serverseitig berücksichtigen zu können.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2: HTTP Request
In den Zeilen Accept, Accept-Language und Accept-Encoding sind spezifische Angaben über akzeptierte Formate des Client angegeben. Dies sind Textcodierung, verwendetet Sprache und eventuelle komprimierte Dateiformate. Connection keepalive ist ein Konzept, das mit dem HTTP-Protokoll in der Version 1.0 eingeführt
wurde und dient zur Aufrechterhaltung der TCP Verbindung, um eventuelle weitere Anfragen auf der selben Verbindung stellen zu können.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 3: HTTP Response
2.1.3 HTTP-Response
Abbildung 3 (s.S. 6) zeigt die Antwort des Servers auf die zuvor gestellte Anfrage in Form eines HTTP-Response, der im Anhang den angefragten Content enthält. Auskunft über Erfolg der Anfrage gibt die Status Zeile, die das verwendete HTTP- Protokoll und den Statuscode ausgibt. Abbildung 4 (s.S. 7) gibt einen Überblick der Einteilung der Status Codes. Der Statuscode 200 OK bedeutet, dass der HTTP- Request erfolgreich war. Analog zum Request enthält der Response Angaben über die Serversoftware, Zeitangaben, akzeptierte Text- und Codierungsformate sowie eventuell serverseitiger installierte Zusatzsoftware. Im Falle des Raspberry Pi ist dies die Skriptsprache PHP zur dynamischen Anzeige von HTML Inhalten.
2.1.4 Datenübertragung
Die autonomen Systeme Raspberry Pi, Arduino und RoWifi implementieren allesamt das HTML-Protokoll und ermöglichen eine Kommunikation über einen darauf verwirklichten Webserver. Hierüber erfolgt jeweils die Steuerung über eine HTML Benutzeroberfläche, die bei Betätigung gewisser Buttons Befehle vom Client an den Server übermitteln und diese entsprechend verarbeiten. Dies kann das Öffnen der Haustür, das Anschalten der Beleuchtung oder die Steuerung eines Staubsaugroboters bewirken. Die Übermittlung der Daten erfolgt entweder über einen HTTP-GET oder einen HTTP-POST Request. Der Unterschied hierbei ist, dass die übertragenen Daten bei der GET Methode sichtbar an die bestehende URL gehängt werden, wohingegen die POST Methode die Daten im Nachrichtenrumpf nach dem Header verbergen. Dabei bestehen die Daten jeweils aus einem Wertepaar, dass sich aus Parametername und Parameterwert zusammensetzt. Es wird jeweils einem Parameter, auch als Argument bezeichnet, ein Wert über ein “=” zugewiesen. Bei der Arduino Türsteuerung erfolgt das Auslösen des Schaltvorganges über die HTTP-POST Methode mit dem Wertepaar “state=on”. Bei der GET Methode werden die Wertepaare durch ein “?” getrennt an die URL angehängt, wobei mehrere Wertepaare durch ein “&” separiert
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 4: Einteilung der HTTP-Status Codes
werden. Das Schalten der Funksteckdosen mit Hilfe des Raspberry Pi ist per GET Methode realisiert. Die URL zum Schalten der Funksteckdose A setzt sich wie folgt zusammen: “http://192.168.178.50/remote.php?Befehl=SteckdoseAan”. Der Parameter “Befehl” erhält den Wert “SteckdoseAan”, dieser wird innerhalb des .php Dokuments weiter zerlegt, um die Informationen über die zu schaltende Steckdose und deren Status zu extrahieren.
2.2 Eingesetzte Programmiersprachen
Um die Funktionsweise und Kommunikation der einzelnen Systeme zu ermöglichen, wurde eine Vielzahl an Programmiersprachen verwendet, auf die im Folgenden eingegangen wird. Im Speziellen auf dessen Rollen zur Verwirklichung der Hausautomationsapplikation HomeControl. Unterschiedliche Prozessorarchitekturen unterstützen unterschiedliche Programmiersprachen. So erfolgt die Programmierung des Arduino, der einen Microcontroller auf einer Experimentierplatine darstellt, mit der hardwarenahen Programmiersprache C. Der Einplatinencomputer Raspberry Pi verfügt bereits über das Betriebsystem Linux. Es bietet auch die Möglichkeit Drittsoftware beispielsweise in Form des Webserver-Programms nginx zu installieren, dass wiederum die Skriptsprachen HTML und PHP unterstützt. Die am weitesten entwickelte Sprache stellt Swift dar, die dafür verwendet wird die Anwendung Home Control auf dem Betriebssystem iOS zu entwickeln.
2.2.1 HTML CSS JavaScript
HTML, CSS und JavaScript ist das Dreigespann, dass bei der Erstellung von Webseiten genutzt wird. HTML strukturiert den Text, indem es ihm Attribute wie beispielsweise eine Überschrift, einen Paragraphen oder einen Link zuweist. Das Aussehen der einzelnen Textelemente kann dann durch CSS individualisiert werden und
JavaScript ermöglicht schließlich ein dynamisches Verhalten der Webseite.
Hypertext Markup Language
Die Erfindung von HTML gilt als Grundstein des WWW, da es die Nutzung des Internets kommerzialisierte. Sie ist eine Auszeichnungssprache, die dazu dient, digitale Dokumente zu strukturieren. Hierfür dienen sogenannte Tags, die den entsprechenden Text umschließen. Listing 1 (s.S. 10) zeigt das HTML Dokument der Arduino Türsteuerung und Abbildung 5 (s.S. 9) die daraus erzeugte Ausgabe auf einem mobilen Webbrowser. In den Zeilen 1 bis 2 befindet sich die Document Type Definition (DTD), auf Deutsch Dokumenttypdefinition. Diese werden vom W3C veröffentlicht und befindet sich auf der angegebenen Adresse. Hierin sind alle HTML Elemente definiert, damit der genutzte Browser weiß, wie er den Inhalt interpretieren soll. Ein Element wird jeweils von einem Start- und Endtag umschlossen, die dessen Inhalt umschließen. Das HTML-Dokument befindet sich innerhalb des HTML-Tags: <html>...</html>. Dieser ist wiederum in einen head und einen body Tag untergliedert. Der head-Tag enthält Metadaten, wie beispielsweise der Titel der Seite, der in Zeile 6 festgelegt wird. Des Weiteren können hier innerhalb style-Tags CSS- Style Elemente definiert bzw. auf externe Dokumente verwiesen werden. In Zeile 7 wird innerhalb der script Tag die JavaScript Bibliothek jQuery eingebunden, die später dazu verwendet wird einen HTTP-POST Request auszulösen. Die eigentliche Layoutdefiniton erfolgt im body Tag. HTML Tags können durch Attribute weiter angepasst werden. Die Zuweisung dieser erfolgt innerhalb des Starttag.
Dem button Element, dass das Schaltsignal auslöst, werden die Attribute class, id und onclick gesetzt. Klassen werden mittels CSS definiert. Der erstellte button erhält die Klassen “button” und “color”, die ID zur Identifizierung innerhalb von CSS und JavaScript wird auf “on” gesetzt und das onclick Event mit der JavaScript Funktion “colorActiveQ” verknüpft. Der Text “iftah ya simsim” zwischen den button Tags ist arabisch und steht für “Sesam öffne dich” und erscheint als Text auf dem button.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 5: Arduino Türsteuerung Benutzeroberfläche auf mobilen Browser
Abbildung in dieser Leseprobe nicht enthalten
Listing 1: HTML Dokument der Arduino Türsteuerung
Cascading Style Sheets
CSS dient dazu, das Erscheinen der HTML Elemente zu individualisieren. Dies erfolgt durch Selektoren die, entweder für alle Elemente, für einzelne Elemente oder über die Zuweisung von Klassen oder Identifikatoren, auf Elemente zugreifen. Anschließend können Eigenschaften wie Farbe, Schrift und Position gesetzt werden. Listing 2 (s.S. 11) zeigt die CSS Klasse button und Listing 3 (s.S. 12) die Klassen color und colorActive zur Anpassung des Auslösebuttons der Arduino Türsteuerung.
Zunächst erfolgt der Zugriff auf die Elemente über den Spezifikator, die auch über logische Operatoren miteinander verknüpft werden können. Beispielsweise alle HTML Link und Paragraph Elemente über die Anweisung a, p {...}. So erfolgt in Listing 2 (s.S. 11) Zeile 3 die Definition der CSS Klasse button. Eine Klasse ist über einen Punkt vor dessen Namen definiert. Innerhalb der geschweiften Klammern werden jeweils durch einen Strichpunkt voneinander getrennt den Eigenschaften Werte zugewiesen. Jeweils nach dem Schema: <Eigenschaft>:<Wert>. So wird in Zeile 12 mit font-family:Arial, die Schriftart auf Arial festgelegt. Alle in der Klasse festgelegten Eigenschaften dienen dazu, für den button in Zeile 17 Listing 1 (s.S. 10), dem die Klasse als Attribut zugewiesen wird, ein Erscheinen wie in Abbildung 5 (s.S. 9) zu erreichen. Wird der button gedrückt, so wird der Summer für 3 Sekunden betätigt. Dies wird dem Anwender durch eine Farbänderung des buttons signalisiert. Hierfür werden die beiden in Listing 3 (s.S. 12) definierten Klassen color und colorActive genutzt. Color legt die Hintergrundfarbe durch das background-color
Abbildung in dieser Leseprobe nicht enthalten
Listing 2: CSS Klasse “button”
Property auf den RGB Farbwert “#5D5E5D” fest. Die Raute signalisiert die Angabe als Hexadezimalwert, wobei die Zahl jeweils in zweistelligen Hexadezimalwerten den Farbwerten für Rot, Grün und Blau entsprechen. Jeder Farbton wird aus den drei Grundfarben kreiert, wobei jeder Farbwert einen Wert von 0 bis 100 Prozent annehmen kann. Die Werte hierfür werden jeweils in einem Byte gespeichert, dass die Werte 0 bis 255 annehmen kann. In diesem Konzept besteht die Farbe “#5D5E5D” aus der Mischung aus 36% Rot, 37% Grün und 36% Blau, was der Farbe Grau mit einem minimalen Grünstich entspricht.
Abbildung in dieser Leseprobe nicht enthalten
Listing 3: CSS Klassen “color” und “colorActive”
JavaScript
JavaScript dient zur dynamischen Darstellung von HTML und CSS Inhalten. Konträr zur Sprache PHP, die auf dem Server läuft, wird die Sprache clientseitig im Browser des Anwenders ausgeführt und muss von diesem unterstützt werden. Diese kann entweder über eine externe Datei innerhalb der HTML-head Elements eingebunden oder direkt im Dokument mit Hilfe des script Elements untergebracht werden. Listing 4 (s.S. 12) zeigt den Einsatz von JavaScript innerhalb der Benutzeroberfläche der Arduino Türsteuerung. Mit Hilfe der Bibliothek jQuery wird der HTML-POST Request bei Bestätigung des buttons ausgelöst. Die Funktion colorAc- tive() dient dazu die Farbe des buttons für 3 Sekunden auf die Farbe Grün zu ändern.
Abbildung in dieser Leseprobe nicht enthalten
Listing 4: Verwendung JavaScript Benutzeroberfläche Türsteuerung Die Bibliothe jQuery dient dazu, den Programmieraufwand von JavaScript zu minimieren, indem es Funktionen für gängige Aufgaben bereitstellt. Der “$”-Operator dient zum Zugriff auf die einzelnen HTML-Elemente. In den Zeilen 2 bis 4 von Listing 4 (s.S. 12) gewährleistet der Funktionsaufruf:
$(document).ready(function(){...});, dass alle in ihr befindlichen Funktionsaufrufe erst ausgeführt werden, wenn das HTML-Dokument fertig geladen ist. $(,.button,).click(performPostRequest);, weist Elementen, die die Klasse button implementieren, ihrem click-Event den Aufruf der Funktion performPostRequest zu. Damit wird beim Klicken auf den button ein HTML-POST Request ausgelöst. Die Funktion performPostRequest ist in den Zeilen 6 bis 8 definiert. Sie löst den request auf der URL ’/lamp_action’ aus und übermittelt den Parameter “state” mit dem Wert “on”. Die Funktion colorActive wird ebenfalls beim Betätigen des button aufgerufen. Diesmal wird diese jedoch durch Zuweisung der Funktion bei der Definition des button Elements innerhalb des HTML Dokuments durch Zuweisung des onclick Attributs erreicht (Listing 1 (s.S. 10) Zeile 17). Zunächst wird durch Zuweisung der CSS Klassen button und colorActive auf das Element mit der ID “on”, auf die Farbe Grün geändert und anschließend mit der setTimeout Funktion, mit einer Verzögerung von 3000 Millisekunden, wieder in den Orginalzustand gebracht.
2.2.2 C / C++
Diese Sprache ist “die Mutter” vieler Programmiersprachen oder hat diese zumindest beeinflusst. Die bekanntesten C Abkömmlinge sind die von Microsoft weiterentwickelte Variante C# bzw. die von Apple um Objektorientierung erweiterte Variante Objective-C. Die Sprache C++ ist eine Erweiterung von C, die dieser objektorientierte Programmierung (OOP) ermöglicht, aber weiterhin mit C kompatibel bleibt. So ist die Verwendung von C in einem C++ Programm ohne weiteres möglich. C und C++ werden vor allem bei der hardwarenahen Programmierung verwendet bei der Effizienz notwendig ist. Höhere Programmiersprachen bieten konträr dazu mächtige Klassen an, die mehr auf Funktionsumfang anstatt auf Performance getrimmt sind, da dies bei steigender Rechenleistungen immer mehr an Bedeutung verliert. Bei der Programmierung von Mikrocontrollern, wie die des 8-bit ATme- ga328 der Arduino Plattform, der eine Rechenleistung von 16 MHz besitzt, wird deshalb die Sprache C genutzt. Aufgrund des geringen Flash Speichers von 32 KB des Modells UNO ist die Verwendung C++ nur begrenzt möglich.
Bei der Arduino Türsteuerung wird ein C++ Programm dazu verwendet, über eine Ethernet Schnittstelle einen einfachen Webserver zu realisieren, der das HTTP Protokoll implementiert. Dieser lauscht in einer Endlosschleife nach HTTP-GET Anfragen und beantwortet diese mit einem HTTP Dokument, welches sich auf einer SD-Karte befindet. Abbildung 35 (s.S. 76) im Anhang zeigt die Funktion loop des Programms, das mit Hilfe eines Programmablaufplans visualisiert wurde.
Weiterhin verwendet die Raspberry Pi Lichtsteuerung ein C++ Programm mit der Bezeichnung send.cpp zur Generierung eines binären Schaltsignals. Dieses wird an ein 433 MHz Funktransmittermodul über die integrierten General Purpose Input/Output (GPIO) Pins des Raspberry Pi übermittelt. Durch die Einbindung der Open Source Bibliothek RCSwitch wird erreicht, dass hierfür ein gültiges Schaltsignal erzeugt wird. Listing 32 (s.S. 74) im Anhang zeigt das Programm “send”.
2.2.3 PHP: Hypertext Preprocessor
Das rekursive Akronym PHP steht für PHP: Hypertext Preprocessor. Es handelt sich hierbei um eine Skriptsprache, die es ermöglicht, ähnlich wie JavaScript HTTP Dokumente dynamisch darzustellen. Der große Unterschied dabei ist, dass der Code auf dem Server und nicht wie bei JavaScript clientseitig innerhalb des Browsers ausgeführt wird. Deshalb wird diese beispielsweise zur Auswertung und Speicherung von Nutzerdaten verwendet. Die eingesetzte Serversoftware muss die Verwendung von PHP zulassen und ggf. nachinstalliert werden. Der eigentliche Programmcode befindet sich dann innerhalb des HTML Dokuments in sogenannten PHP Tags, die ähnlich ihrem HTML Pendant funktionieren. Die Kennzeichnung, dass ein HTML Dokument PHP Code enthält erfolgt über die Dateiendung. So erhält diese anstatt des .htm, die Endung .php.
Die Raspberry Pi Lichtsteuerung verwendet die Software nginx, die über die Nachinstallation von PHP in der Version 5 erweitert wird. Hierbei wird die Sprache PHP dazu genutzt, anhand der Benutzereingaben das Programm “send” aufzurufen und ihm die nötigen Argumente zur Erzeugung eines validen Schaltsignals zu übergeben. Listing 33 (s.S. 75) im Anhang zeigt das sich innerhalb eines PHP Tag befindliche PHP Skript der Raspberry Pi Lichtsteuerung. Die Syntax ist stark an die Sprache C angelehnt. Besonders kennzeichnend ist die häufige Verwendung des $ Zeichen, dass hierdurch direkte Verknüpfung mit HTML Elementen zulässt und seine enge Verstrickung mit HTML verdeutlicht. Die heutig gängigen Internetbrowser besitzen alle Entwicklerfunktionen, die es ermöglichen, den Inhalt von Webseiten als Quelltext auszugeben. Hierbei sind jeweils die Skripte für HTML, CSS und JavaScript sichtbar, was jedoch für PHP nicht der Fall ist.
2.2.4 Swift
Die Programmiersprache Swift wurde im Herbst 2014 auf Apples jährlicher Entwicklerkonferenz WWDC veröffentlicht. Sie soll in Zukunft die Sprache Objective-C ablösen. Diese basierte auf der Programmiersprache C und hat Sie um die Möglichkeit der objektorientierten Programmierung erweitert. Swift greift absturzsicherer Programmierkonzepte auf und integriert viele neuartige Programmierparadigmen anderer Sprachen, die sich in den letzten Jahren bewährt haben. Dies sind beispielsweise Subscripts, auch bekannt als Blocks oder Lamda-Ausdrücke, die es ermöglichen ganze Codefragmente wie Objekte zu behandeln und etwa auch als Argumente und Rückgabewerte für Funktionen dienen können.
Die Sprache ist sicher in dem Sinne, dass Sie den Entwickler zur sicheren Programmierung zwingt. Dies wird durch die Einführung des Konzeptes der “optionals” erreicht, wofür es in anderen Sprachen nichts Vergleichbares gibt. Die meisten Programmabstürze werden durch den Aufruf einer Variablen verursacht, die auf keine Speicheradresse verweist, da diese beispielsweise noch nicht initialisiert worden ist. Dies ist möglich, da es in den meisten Programmiersprachen erlaubt ist, Variablen zu definieren ohne sie zu initialisieren. Dieses Problem wird bei Swift durch die Einführung von optionals gelöst. Diese werden bei der Variablendefinition durch ein nachgestelltes “?” hinter dem Variablentyp gekennzeichnet. Die beiden Zustände, die eine als “optional” definierte Variable haben darf sind “Es gibt einen Wert, und diese ist gleich x”, oder “Es gibt keinen Wert”, was durch das Signalwort “nil” gekennzeichnet wird. Abbildung 5 (s.S. 15) zeigt die Definition und Initialisierung einer Integer-Variablen als “optional”. Dies erfolgt in Zeile Nummer 1.
Abbildung in dieser Leseprobe nicht enthalten
Listing 5: Definition einer Variable als Optional
Der wahre Nutzen erschließt sich jedoch erst in Kombination mit dem Konzept des “Optional Binding”. Hierbei wird innerhalb des Kopfes einer If-Anweisung der Inhalt einer Optional Variablen an eine lokale definierte Variable gebunden. Falls dies möglich ist, wird das darauf anschließende Codefragment ausgeführt. Abbildung 6 (s.S. 15) zeigt die Anwendung von “optional binding”. Es wird die lokale Variable actual- Number definiert, der falls die Konvertierung der String-Variable possibleNumber in ein Integer-Variable erfolgreich ist, dieser ihr Wert zugewiesen wird.
Abbildung in dieser Leseprobe nicht enthalten
Listing 6: Optional Binding
Eine weitere Besonderheit, die vor allem bei Skriptsprachen der Internetprogrammierung hohe Verbreitung hat, ist die Möglichkeit der nachlässigen Handhabung bei der Definition von Variablen. Diese gestaltet sich im Gegensatz zu typischen ScriptSprachen wie Python, VBA oder Java-Script jedoch flexibel. So ist es möglich, die Auswahl des richtigen Datentyps dem Compiler zu überlassen oder diesen explizit anzugeben.
Ein weiteres sehr nützliches Feature ist die Einführung von sogenannten Playgrounds. Dies ist eine in die Apple Entwicklungsumgebung Xcode integrierte Umgebung, die es ermöglicht, Quelltext in Echtzeit auszuführen und zu modifizieren. Dies erleichtert die Entwicklung enorm, da die aufwändige Einarbeitung in Programmbibliotheken durch das Experimentieren mit Programmcode das Lernen enorm erleichtert. Viele Anbieter von APIs bieten dafür bereits vorgefertigte Playgrounds an.
3 Theoretische Grundlagen Hardware
Im Folgenden wird auf die theoretischen Grundlagen der verwendeten Hardware zur Verwirklichung der Hausautomation eingegangen. Dies sind im Speziellen, die Physical Computing Plattform Arduino, der Einplatinencomputer Raspberry Pi und der Staubsaugroboter Roomba, die in die Hausautomation HomeControl integriert werden.
3.1 Physical Computing Plattform - Arduino
Arduino wurde 2005 von Massimo Banzi und David Cuartielles entwickelt und basiert auf einer plattformunabhängigen Software/Hardware Lösung zur Programmierung von Mikrocontroller mit analogen sowie digitalen Ein- und Ausgängen. Im Vergleich zu anderen Mikrocontroller Boards lag hierbei der Fokus darauf, den Einstieg in die Mikrocontroller Entwicklung durch eine entsprechend gestaltete Entwicklungsumgebung zu vereinfachen. Arduino besteht aus einer ganzen Bandbreite von Mikrocontroller-Boards, die sich je nach Anzahl und Funktion der digitalen Ein- und Ausgänge, verwendetem Prozessor und verfügbaren Schnittstellen unterscheiden. Für die Türsteuerung wurde das Modell UNO in der mittlerweile dritten Revision verwendet. Dieser ist in Abbildung 6 (s.S. 18) dargestellt. UNO war, wie der Name bereits vermuten lässt, das erste Modell der Arduino Familie und basiert auf einem 8-bit ATmega328 Mikrocontroller der Serie AVR des US-amerikanischen Chipherstellers Atmel. Dieser wird über einen 16 MHz Schwingquarz versorgt und arbeitet gewöhnlich mit einer Spannung von 5 V. Der Prozessorbefehlssatz ist nach Reduced Instruction Set Computer (RISC) Architektur ausgelegt und die Speicherverwaltung erfolgt nach Harvard-Architektur. Das UNO-Board verfügt über 14 digitale I/O Pins von denen 6 Pulsweitenmodulation (PWM) unterstützen sowie 6 analoge Input Pins mit einer Auflösung von 0 - 1023 Bit bei einer Referenzspannung von bis zu 5V. Über eine USB-Programmierschnittstelle und die gleichnamige IDE lässt sich der μ-Controller mittels C++ bzw. AVR-C Code bespielen. Arduino ist modular konzipiert, in dem Sinne lassen sich über sogenannte Shields Zusatzfunktion wie Ethernet, WiFi oder sogar Global System for Mobile Communications (GSM) verwirklichen. Diese werden einfach auf das bestehende Board gesteckt und mittels gleichzeitiger Einbindung entsprechender C++ Bibliotheken werden hiermit die Funktionalitäten entsprechend erweitert. Arduino wird mittlerweile in vielen Schulen und Hochschulen sowie zur Verwirklichung von Kunstprojekten verwendet und bietet hierdurch eine große Community, was sich in der Verfügbarkeit von Bibliotheken und Tutorials bemerkbar macht. (vgl. [Sch14b])
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 6: Physical Computing Plattform Arduino UNO Rev.3
3.2 Einplatinencomputer - Raspberry Pi
Die Idee der Entwicklung eines bezahlbaren Computers für Kinder entstand bereits 2006 unter den Kollegen Eben Upton, Rob Mullins, Jack Lang und Alan Mycroft an der Cambridge Universität im Fachbereich Informatik. Diese hatten bei ihren Studenten im ersten Semester ein Absinken der Grundkompetenzen der Informatik festgestellt, vor allem in Bezug auf das Gesamtverständis von Computersystemen. Dies führten sie zurück auf das Fehlen von vollwertig programmierbaren Computern wie die des Amiga bzw. Commodore aus den Gründerzeiten. In der heutigen Zeit erfolgt der erste Kontakt mit Computern in Form von abgeschlossenen Systemen wie Heimcomputern, Spielekonsolen, Tablet Computern und Smartphones. Wobei diese nicht einfach ohne das Überwinden von größeren Hürden programmiert werden können. Diese Lücke wollten Sie mit der Entwicklung des ersten Prototyps in den Jahren von 2006 bis 2008 schließen. Durch den Aufschwung der mobilen Geräte ab dem Jahr 2008, wurde auch die dafür benötigte Hardware immer günstiger und ermöglichte es der nun gegründeten Raspberry Pi Foundation das Standardmodell zu einem Preis von ca. 35 US $ auf den Markt zu bringen. (vgl. [RAS]) In der folgenden Tabelle sind die unterschiedlichen Modelle des Raspberry Pi dargestellt.
Für das Projekt wurde das Modell B+, dass in Abbildung 8 (s.S. 19) dargestellt ist, mit einer Rechenleistung 700 MHz des ARM1176JZF-S bei einem Arbeitsspeicher von 512 MB, verwendet. Der Random-Access Memory (RAM) lässt sich je nach Einsatzzweck auf Arbeits- bzw. Grafikspeicher für die Broadcom VideoCore IV Graphics Processing Unit (GPU) aufteilen. Der integrierte HDMI Anschluss ermöglicht den einfachen Betrieb als Desktop Rechner. Über die vier USB-2.0-Anschlüsse lassen sich problemlos weitere Peripheriegeräte sowie Netzwerkanbindung mittels Wireless Local Area Network (WLAN) verwirklichen. Als Festspeicher verfügen alle Model-
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 7: Übersicht Modelle Raspberry Pi
le lediglich über einen SD bzw. microSD Kartenleser. Hierauf wird mithilfe einer Software ein Image in Form spezieller angepasster Linux Distributionen kopiert. Zur Verfügung stehen die Operating Systems (OSs) RASPIAN (Debian Wheezy), PI- DORA (Fedora Remix) und RISC OS (nicht LINUX basiert). Die in Klammern angegebenen Bezeichnungen geben jeweils die LINUX Distribution an, von der das OS abgeleitet worden ist. Des Weiteren besteht die Möglichkeit der Verwendung als Mediacenter über die OSs OPENELEC und RASPBMC, die beide auf der freien plattformunabhängigen Software Xbox Media Center (XBMC) basieren. (vgl. [Sch14a])
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 8: Modell Raspberry B+
[...]
-
-
-
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
-
¡Carge sus propios textos! Gane dinero y un iPhone X.