Home

ORCHID - Stefan Matyba

image

Contents

1. 64 Se MERGEANDFILTER MIT SCHLEIFEN eeneg EE 65 LISTING 22 MERGEANDEILTERMIEL LIND sun ra ara eu 65 LISTING 23 FILTERA NDSORT 00000000000 000000 66 LISTING 24 BEISPIELHAFTE _ 68 LISTING 25 NLOG KONFIGURATION AUS DEM CODE 69 LISTING BEISPIELHAFTE LOG MELDUNG au aaa 70 LISTING 27 BEISPIEL F R EIN NINIJECTMODUEE 2 6 0 00 000000 71 LISTING 28 ERZEUGUNG EINES NINMIGCT RKERNELS 72 LISTING 29 OBJEKTERZEUGUNG MIT 72 LISTING 30 LADEN EINER KONFIGURATIONSDATEI MIT NN 73 LISTING 31 BEISPIEL F R EINE INI DATE ae 73 LISTING 32 VERWENDUNG VON NINI 74 LISTING 33 ALLGEMEINE ANTWORT EINES ORCHID 5 6 82 LISTING 34 BERMITTLUNG EINER INSTRUKTION 22 0 0000000 85 LISTING 35 BERMITTLUNG VON SENSORDATEN 2 0 40 0 0 00 99 LISTING 36 BERMITTLUNG VON CLIENT INFORMATIONEN SERVER ANTWORT 90 LISTING 37 BERMITTLUNG EINES EINZELNEN SENSO
2. 150 KISTING 73 BEISPIERSKETICH mare er 160 16 Anhang V Glossar Aktor Anti Pattern API Buffer Overflow CamelCase gt PascalCase CC BY NC SA 3 0 CLI Client CLR Im Gegenteil zu einem gt Sensor ist ein Aktor eine gt Komponente die mit der Umgebung interagieren und diese manipulieren kann z B ein Motor oder eine gt LED Das Gegenteil zu einem Design Pattern Entwurfsmuster Beschreibt eine sich der Programmierung oftmals w ederholende schlechte L sung f r ein bestimmtes Problem Application Programming Interface Ein Buffer Overflow tritt auf wenn ein Wert einen Speicher Puffer fester Gr e geschrieben wird und ber dessen Grenzen hinaus l uft Eine n der Informatik verbreitete Schreibweise f r aus mehreren Einzelw rtern zusammengesetzte W rter Die Trennung der einzelnen Wortbestandteile wird im CamelCase nicht wie blich ber ein Leerzeichen sondern ber Gro buchstaben innerhalb des Wortes erreicht Creative Commons _Attr bution NonCommercial ShareAlike 3 0 Unported eine Lizenz f r Softwareprodukte http creativecommons org licenses by nc sa 3 0 Chaos Computer Club http www ccc de Common Intermediate Language eine vom Compiler des Mono Frameworks aus dem Quellcode einer Anwendung erzeugte Zwischensprache die vom gt JI
3. Abbildung 41 Referenzierte Server Komponente Die obige Abbildung zeigt die Referenzen des Projekts nachdem Orchid Core di1 erfolgreich hinzugef gt wurde 7 4 Minimalprojekt Dieser Abschnitt beschreibt die Schritte die mindestens notwendig sind um eine Software zu entwickeln die als ORCHID Server eingesetzt werden kann Wie 5 6 erl utert bildet die Klasse Bloom den zentralen Einstiegspunkt in die Server Komponente Entsprechend muss eine Instanz dieser Klasse erzeugt werden um einen funktionierenden ORCHID Server zu entwickeln Das folgende Listing 43 zeigt wie eine Instanz der Klasse erzeugt wird Das in diesem Listing gezeigte Programm ist ein vollst ndiger ORCHID Server der Anfragen von Clients und Drittsoftware entgegennehmen verarbeiten und beantworten kann Dieses Beispiel zeigt wie einfach es ist die Server Komponente in eigene Projekte einzubinden Handbuch Server Komponente using System using Orch1d C ore usina ebe Eege Configuration using Orchid Core Daemons using Orchid Core Servers namespace OrchidReferenceServer public static class MainClass public static void Main string args string efgfile Settings Orchid ini Initialize configuration system Config Instance Initialize new Filelnfo cfgFile Create a new bloom Bloom bloom new Bloom new ServerFactory new DaemonFactory Run the server s bl
4. 166 MET Knete E E 166 112 EE e ee e ee EE 167 42 0 DNachriehten kanns 167 Wa 167 11 23 Smartphone Applikah nen as a aena a a I 167 11 24 Datenbanksysteme era 167 12 Anhans F CIMS ken I 13 Anhang II Abbildungsverzeichnss u u en eeana a E I 14 Anhang Tabellenverzeichnis 15 Anhane V Listmsverzeichnis ee I 16 17 Anhan Ee Eeer Eechelen I Anhans Vle Inhalt Datentr ger ana I Einleitung 1 Einleitung Die grundlegende Idee f r diese Arbeit entstand im Masterstudiengang Medieninformatik an der Beuth Hochschule f r Technik Berlin in dem ich zum ersten Mal mit dem Arduino Microcontroller in Kontakt kam Dieser erste Kontakt ereignete sich im Kurs Interaktive Multimedia Systeme in dessen Verlauf es galt ein Microcontroller Projekt zu realisieren Das damals gew hlte Projekt beinhaltete die Aufgabenstellung ber den Microcontroller regelm ige Twitter Meldungen zu ver ffentlichen wozu der verwendete Arduino Microcontroller mit dem Internet verbunden und Anfragen an den Twitter Server gesendet werden mussten Dies lie sich zwar umsetzen f r die einfache Aufgabe eine kurze Zeichenkette an einen Internetserver zu schicken erschien der Aufwand
5. In den folgenden Abschnitten werden Anfragen die eine bestimmte HTTP Methode verwenden als entsprechende Requests bezeichnet Die Methode eines HTTP Requests wird dessen erstem Header Feld kodiert vgl 2 2 Eine Anfrage die HTTP GET nutzt wird also im Folgenden als GET Request bezeichnet 5 9 2 1 Allgemeines zur Behandlung von Anfragen Jede Art von Request steht f r eine bestimmte Aktion die ein Verbindungspartner auf dem Server ausl sen m chte Entsprechend werden bei jeder Anfrage unterschiedliche Daten ben tigt die als Header Felder bermittelt werden m ssen vgl 5 8 Instanzen von OrchidHardwareDaemon und OrchidSoftwareDaemon sind in der Lage Anfragen bez glich des Vorhandenseins dieser ben tigten Header Felder zu berpr fen Ist ein Request aufgrund fehlender Header Felder ung ltig wird eine entsprechende Antwort an den Verbindungspartner bermittelt HTTP Code 400 Bad Request und die Verarbeitung abgebrochen ORCHID Das Header Feld User Agent wird gesondert betrachtet dieses Verhalten kann ber Server Konfiguration ein und ausgeschaltet werden In diesem Feld wird die Identifikation eines Verbindungspartners bermittelt Die Konfiguration des Servers erm glicht es nur Anfragen zu bearbeiten die in diesem Feld einen festgelegten Wert bertragen Der Wert der in der Referenzimplementierung verwendet wird lautet Orchid Arduino Toolkit Er kann jederzeit ber die Konfig
6. een 118 7 Hlandb ch ServerKompenente 2 EE e 119 74 SYSE MVO uS Se ZUN en ee ae 119 2 Ree 119 Installation der MySQL Datenbank und des 0 1 Serverg 120 7 3 Refere Be UN ee ee ee 121 dae Mapo E 122 7 5 Kon araon sera S 124 29 1 Kategorie Dependencies ie needed 124 123 2 Ee n ee 127 7 9 3 Kategorie E e e EE 127 7 5 4 Kateoorie Be a 128 EI Katesore Database ee 128 7 5 6 Locale 128 22927 E ar al 129 7 5 8 Kategorie DEBUS iunie 129 70 des un ee 129 7 1 Ver nderung und Erweiterung der 132 7 7 1 sn Dainese 132 12 Erweiterung ae ee ee een 135 S Handbuch Chen BiDHOMER ege 137 8 1 137 8 2 ae rer 137 8 2 1 Installation der lee NIT 137 8 22 Installation der Chient Bibliothek 2 aka 138 8 3 Relieren21e 1000 u ee Re er 139 8 4 Code Depe Ee 139 8 4 1 Tot iahs e ee 139 8 4 2 Senden yon EE eg 142 8 4 3 Hochladen von Ssensotd
7. 13 LISTING 5 SERVERANTWORT 404 NOT FOUND u nn 13 LISTING 6 BEISPIELMETHODE IN MEHREREN PROGRAMMIERSPRACHEN 2 15 LISTING 7 ERZEUGUNG EINES STANDARD ORCHID 5 55 LISTING 8 EINE NEUE 56 LISTING 9 VER NDERTE ERZEUGUNG EINES ORCHID SARvERs 56 LISTING 10 NICHT THREADSICHERE 8 55 02 0 0 0 0 0 60 57 LISTING 11 THREADSICHERE SINGLETON KLASSE 20000000 000 00 0 58 LISTING 12 BEISPIELKLASSE OHNE PROPERTIES 2 1 1 11 61 LISTING 13 ANWENDUNG VON 7 5 61 LISTING 14 BEISPIELKLASSE MIT PROPERTIES 62 LISTING 15 ANWENDUNG VON 62 LISTING 16 BEISPIELKLASSE UNTERSCHIEDLICHEN ZUGRIPESMODIRIZIERERN 62 LISTING 17 BEISPIELHAFTE 5 1 0 63 LISTING 18 ANWENDUNG EINER EXTENSION M rnon 63 LISTING 19 EXTENSION METHOD LAMBDA EXPRESSION 64 LISTING 20 EXEMPLARISCHE LAMBDA RXDRESSION
8. Fehler Daten bermitteln Erfolg Abbildung 29 Bearbeitung von Drittsoftware GET Requests Systementwurf 22777777777 5 9 2 6 Drittsoftware PUT Request Sendet eine Software einen PUT Request an den Server bedeutet das dass sie eine Instruktion f r einen Client hochladen m chte Solche Requests werden der Methode HandlePUTRequest der Klasse OrchidSoftwareDaemon behandelt PUT Requests dieser Art sind die komplexesten Requests die die Server Komponente behandeln muss da eine Instruktion stets aus zahlreichen Datenfeldern besteht vgl 5 8 5 und 5 8 6 Zun chst wird die G ltigkeit des Requests gepr ft Kann diese nicht sichergestellt werden oder tritt dabei ein Fehler auf wird die Verarbeitung beendet und eine Fehlermeldung an die anfragende Software gesendet HTTP Code 400 Bad Request Ist der Request g ltig werden zuerst die IDs f r den Client und den Aktor f r deren Kombination eine neue Instruktion auf dem Server hinterlegt werden soll aus den Header Feldern des Requests ausgelesen Sind die IDs ung ltig oder nicht lesbar wird die Verarbeitung mit einer Fehlermeldung den Verbindungspartner beendet HTTP Code 400 Bad Request Sind die IDs g ltig werden weitere Werte aus dem Request ausgelesen darunter u a die auszuf hrende Aktion ein Zeitstempel der des Arduinos und die Priorit t der Instruktion vgl 5 8 5 und 5 8 6 Liegen alle ben tigten Werte vor optionale F
9. 88 TABELLE 76 PROTOKOLL CLIENT INFORMATIONEN ABRUFEN 99 57 102 TABELLE 7 0 DATENBANKTABELLE ACTORS e ee ee SE 102 79 gt DATENBANKTABELLE ARDUINOS ei ner 102 TABELLE S0 DATENBANKTABELLE CREDENTIALS 103 TABELLE 9 L DATENBANKTABELLE INSTRUCTIONS Eu kenne 103 TABELLE 82 6 8 522000 Ee anori 104 TABELLE 93 DATENBANKTABELLE MESSAGES susanne ae ea 104 TABELLE 84 DATENBANKTABELLE e e EE 104 TABELLE 85 DATENBANKTABELLE SENSOR DATA 105 TABELLE 86 DATENBANKTABELLE 5 00 0 0202 105 TABELLE 87 51 NAMENSKONVEN TIONEN nee 107 TABELLE 88 BIN RDATEIEN DER 119 TABELLE 89 EEN RE E E EE MR Te 124 TABELLE 90 EINSTELLUNGSKATEGORIE DEPENDENCIES 127 TABELLE 91 EINSTELLUNGSKATEGORIE SERVER 2 127 TABELLE 92 EINSTELLUNGSKATEGORIE RESTRICTIONS 2 127
10. geschrieben werden 4666 ACTION Es soll von einem analogen gelesen werden 5666 ACTION NONE Es wurde keine Aktion definiert 6666 ACTION OTHER Es wurde eine unbekannte Aktion definiert Tabelle 100 Action Codes und entsprechende Konstanten In Zeile 29 des obigen Beispiels wird die in der abgerufenen Instruktion enthaltene Aktion mit der Konstanten ACTION DW verglichen es wird also gepr ft ob ein Wert auf einen digitalen geschrieben werden soll Ist dies nicht der Fall bricht die Verarbeitung ab da f r den Aktor f r den die Instruktion abgefragt wurde keine anderen Operationen unterst tzt werden 146 ORCHID Gleicht die Aktion der Konstanten ACTION Dw wird in Zeile 31 berpr ft ob der auf den digitalen VO Pin zu schreibende Wert der Zeichenkette HIGH gleicht Instruktionswerte werden stets als Zeichenkette bermittelt Ist dies der Fall wird den Pin an dem der Aktor f r den die Instruktion bestimmt ist angeschlossen ist der Wert HIGH geschrieben Ist dies nicht der Fall und gleicht der zu schreibende Wert der Zeichenkette LOW Zeile 35 wird der Wert Low auf den Aktor Pin geschrieben Alle weiteren Werte sind ung ltig digitale VO Pins kennen nur die Werte HIGH und LOW und werden ignoriert Zeile 39 Zusammengefasst ruft das hier gegebene Beispiel zun chst die n chste Instruktion f r einen Aktor ab Danach wird gepr ft ob sich Aktion und bermittelter Wert
11. Abbildung 45 Erzeugung mehrerer GUIDs mit ggen Jede mit ggen erzeugte GUID ist eindeutig d h das Tool erzeugt niemals zweimal die gleiche ID im Rahmen der M glichkeiten von GUIDs siehe 6 3 1 f r Details Eine auf diese Weise erzeugte ID kann an allen Stellen des ORCHID Toolkits eingesetzt werden an denen eine eindeutige Kennung gefordert wird 9 2 dkgen Die Server Komponente des Toolkits ist in der Lage die Autorisierungsinformationen von Clients oder Drittsoftware den sog Developer Key vgl 6 3 3 2 zu pr fen Obwohl eine beliebige Zeichenkette als Developer Key verwendet werden kann wird empfohlen nur Schl ssel zu nutzen die mit dem Tool dkgen Developer Key Generator erzeugt wurden Jeder Aufruf des Tools erzeugt einen neuen zuf lligen Developer Key zwei auf diese Weise erzeugte Developer Keys sind niemals gleich wie die folgende Abbildung zeigt Abbildung 46 Erzeugung eines Developer Keys mit dkgen 6 Gemeint ist hier mit ausreichend hoher Wahrscheinlichkeit vgl 6 3 1 152 ORCHID 10 Endbenutzerhandbuch Nachdem in den Abschnitten 7 8 und 9 die Verwendung und Erweiterung der Toolkit Komponenten und Zusatztools beschrieben wurde befasst sich dieser Abschnitt mit der letztendlichen Verwendung des ORCHID Toolkits f r eigene Projekte 10 1 Einleitung Auf dem dieser Arbeit beiliegenden Datentr ger befindet sich neben allen zu Nutzung des Toolkits notwendigen Dateie
12. Server Komponente des ORCHID Toolkits typisch sind F r dieses Beispiel wurde die Konfiguration so ver ndert dass ein darin angegebener Typ ProprietaryDatabaseAdapter nicht geladen werden konnte es handelt sich also um ein Szenario dem die Software weiterentwickelt bzw ver ndert wurde der Entwickler jedoch 1 der Konfiguration einen Fehler gemacht hat Besonderes Augenmerk liegt beim Logging in einem solchen Fall darauf dass eine potentielle Fehlerquelle verst ndlich benannt wird Die entsprechenden Stellen sind farblich hervorgehoben 25 08 2011 20 56 03 495 Orch1d Core Typeloadaing NinjeectBase Go Debug Creating Ninject Kernel 25 08 2011 20 56 03 596 Orchid Core Typeloading ServerModule Load Debug Injecting dependencies 25 08 2011 20 56 03 616 Orchid Core Typeloading ServerModule GetTypeByName Debug Loading Orchid Core Servers OrchidHardwareServer from Orchid2 dl1l Kaes 25 08 2011 20 56 03 686 Orchid Core Typeloading ServerModule GetTypeByName warn Warning Assembly file N svn trunk Orchid bin Debug SomeCompany DataAccess dl1 could not be loaded 25 08 2011 20 56 03 686 Orchid Core Typeloading ServerModule GetTypeBinding warn Warning Type SomeCompany DataAccess ProprietaryDatabaseAdapter could not be loaded from SomeCompany DataAccess di1l 25 08 2011 20 56 03 716 Orchid Core Typeloading ServerModule GetTypeBinding Info Using Type Orchid Data MySqlAdapter
13. 107 ORCHID 6 3 Realisierungsdetails In diesem Abschnitt werden besonders interessante Aspekte der Realisierung des ORCHID Toolkits beschrieben 6 3 1 Eindeutige Kennungen Um das ORCHID Toolkit in Lage zu versetzen zahlreiche verschiedene Clients und die an diese angeschlossenen Komponenten Sensoren und Aktoren verwalten zu k nnen musste ein Weg gefunden werden jedes verwaltete Objekt eindeutig zu identifizieren Eine Verwechslung zweier solcher Objekte h tte im schlimmsten Fall die Besch digung einer Komponente oder eines Clients zur Folge weshalb sie jedem Fall zu vermeiden ist Zus tzlich gilt dass die eindeutige Kennzeichnung von Objekten keine sp rbar negativen Auswirkungen auf Ausf hrungsgeschwindigkeit und Stabilit t des Toolkits haben darf Die verwalteten Objekte werden n einer Datenbank gespeichert jedem Objekt automatisch einen Prim rschl ssel eine Ganzzahl zuweist Anhand dieser Zahl und der Art des Objekts ist es zwar durchaus m glich es eindeutig zu identifizieren jedoch birgt diese Vorgehensweise ein Problem die Identifizierung von Clients und Komponenten w re w rde dieser Ansatz verfolgt abh ngig von der Reihenfolge der sie Datenbank eingef gt werden Insbesondere wenn ein ORCHID Server mit mehreren Clients kommuniziert ist dies problematisch da neue Komponenten einem Clients nur mit vergleichsweise gro em Aufwand hinzugef gt werden k nnen Um Objekte ei
14. Internal Server Error und einer kurzen Fehlermeldung im Message Body beantwortet Antworten eines ORCHID Servers sind immer wie im folgenden Listing gezeigt aufgebaut 1 1 lt HTTP CODE gt Connection close lt BODY gt Listing 33 Allgemeine Antwort eines ORCHID Servers Der Platzhalter lt gt wird dabei durch einen der oben beschriebenen Fehler oder Erfolgscodes ersetzt lt BODY gt durch eine Meldung oder die abgerufenen Daten falls solche vorliegen In den folgenden Abschnitten werden die verschiedenen Arten von Anfragen an einen ORCHID Server im Detail beschrieben Die Antworten des Servers werden nur erl utert wenn Daten bertragen werden da sie ansonsten dem obigen Listing entsprechen Systementwurf 5 8 3 Sensordaten hochladen Ein Client kann Sensordaten auf einen ORCHID Server laden indem er eine PUT Anfrage an den Server sendet Die ben tigten Header Felder dieser Anfrage sowie deren Aufbau werden der folgenden Tabelle gezeigt Header Feld bertragener Wert Board ID GUID des Clients der die Anfrage an den Server stellt Sensor ID GUID des Sensors der d e Daten ermittelt hat User Agent Zeichenkette die den Kommunikationspartner als ORCHID Client oder mit dem Toolkit kompatible Drittsoftware identifiziert Host Die IP Adresse des Servers und der Port auf dem s ch der Client verbinden m chte Authorization Der Developer Key der verwendet werden sol
15. 5 5 Frameworks und Tools In diesem Abschnitt der Arbeit wird beschrieben welche Frameworks und Tools bei der Entwicklung der Server Komponente zum Einsatz kamen Dieser Abschnitt konzentriert sich auf die Server Komponente da f r die Entwicklung der Client Bibliothek keine besonderen Frameworks oder Tools eingesetzt wurden 5 5 1 NLog Da Server Software m Gegensatz zu Anwender Software meist auf einem System ausgef hrt wird das ohne grafische Benutzeroberfl che auskommt und die Ausgaben einer solchen Software oft sogar g nzlich ausgeblendet werden z B wenn Software im Hintergrund l uft ist es sehr wichtig Meldungen in eine Log Date auszugeben F r Tests oder die Entwicklung eigener Projekte mit dem ORCHID Toolkit muss aber auch eine Ausgabe der Log Meldungen auf dem Bildschirm m glich sein Aus diesen Gr nden musste flexibles Logging Framework gefunden werden dass die og Anforderungen erf llt ohne zu sehr in den Programmablauf einzugreifen Weiteres Kriterium bei der Suche nach einem Logging Framework war der Konfigurationsaufwand der zum Einsatz des Frameworks notwendig ist sowie wiederum die Flexibilit t der Konfiguration http www ladyada net make boarduino ORCHID Die Wahl fiel schlie lich auf NLog NLog ist kostenlos verf gbar und unter der BSD Lizenz ver ffentlicht weshalb Nutzung innerhalb des ORCHID Toolkits keine lizenzrechtlichen Probleme bereitet NLog bietet eine voll
16. INT 4 7 11 7 71 arduino_id INT 11 7 11 7 id INT 11 sensor_id INT 11 lt gt host_name 100 type_name VARCHAR 50 lt lt 9 datatype INT 11 guid VARCHAR 36 ve W V w host_ip VARCHAR 36 type_description TEXT gt sensor_value TEXT 2 name 200 gt short_name VARCHAR 100 1 more lt description TEXT gt gt F 11 gt arduino_id 11 id INT 11 VARCHAR id INT 11 jp Saa i lasti To name VARCHAR 200 d A P 89 gt arduino_id INT 11 arduino_id INT 11 name VARCHAR 200 i gt lt description TEXT send_messages 1 component_id INT 11 lt gt description TEXT Beie Hj gt receive_messages action INT 11 lat VARCHARI20 lt Ge gt sensor bes value TEXT 20 EEE reques instructions sss value_type INT 11 first seen DATETIME gt can_instruct_others TINYINT 1 lt gt posted DATETIME last_seen DATETIME e e pin INT 2 id INT 11 model VARCHAR 200 gt priority INT 1 F action_code INT 4 D 1 more action_name 50 gt action_descnption TEXT gt Abbildung 32 Datenbankstruktur ORCH
17. ORCHID AHardwareDaemon auf die Darstellung von Namespaces wurde aufgrund der besseren bersicht verzichtet Andngvertier ER Fe BER 2 23 MT een 1 1 Credentials Verifier Responder 1 1 ADataFacto AHardwareDaemon 2 1 4 AHardwareFactory DataFactory HardwareFactory 1 Database CurrentRequest 1 1 ee ee 1 Abbildung 17 Beziehungen der Daemon Klasse 5 6 2 Parser und Requests Clients und Drittsoftware bermitteln Daten als Strom von Bytes Um Anfragen komfortabel und fehlerfrei zu verarbeiten werden eingehende Datenstr me durch eine Parser Instanz in eine Request Instanz berf hrt Die abstrakte Klasse AHttpRequestParser dient als Grundlage f r alle Parser Instanzen und erzeugt Objekte der Klasse AHttpReguest die wiederum die abstrakte Basisklasse f r alle Request Instanzen ist OrchidHttpRequestParser Abbildung 18 Vererbungshierarchie von Parsern und Requests Die obige Abbildung zeigt die Vererbungshierarchie in einem UML Klassendiagramm 5 6 3 Datenhaltungsklassen Die Server Komponente beinhaltet zahlreiche Datenhaltungsklassen und zus tzlich entsprechende Fabriken um Instanzen dieser Klassen zu erzeugen Als Basis kommt eine Schnittstelle namens TGuid zum Einsatz die von allen Datenhaltungsklassen implementiert wird mit Ausnahme von ASensorData Auf diese Weise verf gen alle Objekte implementierender
18. bermitteln Float Vorbedingung FCI10 Tabelle 31 FC20b Float bermitteln FC20c Sensorwert an ORCHID Server bermitteln Double Vorbedingung FCI10 Tabelle 32 FC20c Double bermitteln FC20d Sensorwert ORCHID Server bermitteln Unsigned Integer Vorbedinsung FCI10 Tabelle 33 FC20d Unsigned Integer bermitteln ORCHID FC20e Sensorwert an ORCHID Server bermitteln Character Vorbedinsung FCI10 Tabelle 34 FC20e Character bermitteln FC2Of Sensorwert an ORCHID Server bermitteln Boolean Vorbedinsung FCI10 Tabelle 35 FC20f Boolean bermitteln FC20g Sensorwert an ORCHID Server bermitteln Zeichenkette Vorbedinsung FCI10 Anmerkung Es handelt sich intern um einen char also einen Zeiger auf eine Kette von Zeichen weshalb die Bezeichnung String nicht verwendet wurde Tabelle 36 FC20g Zeichenkette bermitteln FC20h Sensorwert an ORCHID Server bermitteln Byte Vorbedinsuns FC10 Anmerkung Intern wird der Datentyp uint8_t verwendet der in der Header Date inttypes h definiert ist Tabelle 37 20 Byte bermitteln FC20i Sensorwert an ORCHID Server bermitteln Long Vorbedingung FCI10 Tabelle 38 FC20i Long bermitteln 20 Sensorwert ORCHID Server bermitteln Unsigned Long Vorbedinsung FCI10 Tabelle 39 FC20j Unsigned Long bermitteln FC30 Heartbeat an ORCHID Serv
19. entwickelten Framework ist aber im Gegensatz dazu nicht nur f r Microsoft Windows sondern auch f r Linux und MacOS verf gbar Mono erlaubt es Anwendungen mehreren Programmiersprachen darunter insbesondere C zu entwickeln die dann sowohl unter Microsoft Windows als auch Linux und MacOS ausf hrbar sind vorausgesetzt das Mono Framework ist auf dem ausf hrenden System installiert Eine aktuelle Liste aller von Mono unterst tzen Sprachen kann von der Herstellerwebsite 12 abgerufen werden Zur Ausf hrung von Mono Programmen wird eine Laufzeitumgebung ben tigt Wie Monos Vorbild dem Microsoft NET Framework wird Programmcode vom Compiler nicht direkt in Maschinencode bersetzt sondern in eine Form von Zwischencode den sog Common Intermediate Language Code CIL Code CIL Code ist nicht direkt ausf hrbar hnlich wie Java Bytecode der von der Java Virtual Machine JVM ausgef hrt werden muss sondern kann nur von einer virtuellen Maschine die die sog Common Language Infrastructure CLI implementiert ausgef hrt werden Im Framework von Microsoft wird diese Aufgabe der Common Language Runtime CLR bernommen Mono verf gt zu diesem Zweck ber die Mono Runtime Wird wie in vielen anderen Programmiersprachen blich keine virtuelle Maschine zur Ausf hrung verwendet muss ein Programm f r jedes Betriebssystem auf dem es lauff hig sein soll einzeln kompiliert werden da de
20. oz en ru eig Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orchid Core Data MySqlAdapter Kategorie Wunschkriterium Tabelle 24 FS200 Nachricht an ORCHID Client bermitteln FS210 Berechtigungen f r ORCHID Client abrufen Vorbedingung Erfolgsfall Berechtigungen f r einen ORCHID Client wurden aus der Datenbank abgerufen und k nnen verwendet werden Fehlerfall Berechtigungen k nnen nicht verwendet werden jeder Client hat alle Berechtigungen Beschreibung F r jeden ORCHID Client der einem ORCHID Server bekannt ist existieren Berechtigungsinformationen die angeben was dieser Client tun darf und was nicht Diese Berechtigungen Credentials sagen aus ob ein Client e Daten auf den Server laden darf e Instruktionen vom Server abrufen darf e Nachrichten empfangen darf Nachrichten senden darf Instruktionen f r andere Clients auf den Server laden darf Instruktionen f r s ch selbst vom Server abrufen darf Datenstrukturen Orchid Cora kegues Cs Orchnohtrrpre guest core Orchid Dala Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orchid Core Data MySqlAdapter Kategorie Wunschkriterium Tabelle 25 FS210 Berechtigungen f r ORCHID Client abrufen Client Instruktion speichern gesendet durch ORCHID Client Vorbedingung FS100 Request Typ CONNECT angenommen durch Hardware Server Erfolgsfal
21. 9 Arduino 2011 Mai Arduino Ethernet Shield Online http arduino cc en Main ArduinoEthernetShield 10 Network Working Group 1996 Hypertext Transfer Protocol HTTP 1 0 Online http www w3 org Protocols rfe 1945 rfc 1945 txt 11 The Internet Society 1999 Hyptertext Transfer Protocol HTTP 1 1 Online http www w3 org Protocols rfc26 16 rfc2616 html 12 Novell Inc 2011 Languages Mono Online http mono project com Languages 13 Rose Herleth GbR EZcontrol Heimautomatisierung Produkte Online http www ezcontrol de content blogsection 4 28 14 digitalSTROM org 2010 digitalSTROM Bilder Online http www digitalstrom org support images html 15 Pachube com 2011 Press Room Pachube Online https pachube com press 16 Stefan Matyba Entwicklung eines Frameworks zur Analyse Synthese und Visualisierung von Graphen Berlin Berlin Technische Fachhochschule Berlin 2008 17 Tobias Klein Buffer Overflows und Format String Schwachstellen 1 Auflage 2004 Heidelberg Deutschland dpunkt verlag GmbH 2004 18 The Computer Language Benchmarks Game 2011 August C Mono speed Java 7 server speed Online http shootout alioth debian org u64gq benchmark php test all amp lang csharp 19 Creative Commons Creative Commons Legal Code Online http creativecommons org licenses by nc sa 3 0 legalcode 20 Creative Commons Creative Commons At
22. Die in Listing 10 gezeigte n cht threadsichere Klasse kann mit diesem Verfahren threadsicher gemacht werden wie das folgende Listing 11 zeigt public sealed class ThreadSafeSingleton Only instance is private private statico Torsassares ngletsn _ instance Lock object private static object _Lock bjecet Arrest Et Prevent instances from being created private ThreadSafeSingleton Instance Property will create an instance if necessary public static ThreadSafeSingleton Instance Ek Instanee pull lock _lockObject SEL instance pull Afstance new Threadsafesinglet n return Instance Listing 11 Threadsichere Singleton Klasse Trifft in der Klasse ThreadSafeSingleton ein Thread auf die Erzeugungsroutine der einzigen Instanz instance wird wie zuvor gepr ft ob es bereits eine solche Instanz gibt Ist dies nicht der Fall wird das Mutex Objekt ber den 1ock Befehl gesperrt Kein anderer Thread kann nun in den damit eingeschlossenen Codeabschnitt hineinlaufen die Erzeugung wird garantiert nur von einem Thread bernommen Trifft ein anderer Thread auf die Stelle im Code an der das Mutex Objekt gesperrt wird und ist dieses Objekt bereits gesperrt wird die Ausf hrung des Threads an dieser Stelle unterbrochen und der Thread gibt Kontrolle wieder ab Er kann also unm glich eine zweite Instanz von ThreadSafeSingleton erzeugen 5 3
23. Im Anschluss wird der Klasse Orchid eine neue Methode hinzugef gt die in der Lage ist HEAD Requests an einen ORCHID Server zu bermitteln in 7 7 2 wurde entsprechend beschrieben wie die Server Komponente um die Behandlung solcher Requests erweitert werden kann ORCHID 8 6 1 Ver nderung Wie bereits in Abschnitt 6 6 1 beschrieben setzt das ORCHID Toolkit keine Verschl sselung der Daten die zwischen Server und Client bertragen werden ein Um verschiedene kryptografische Verfahren nutzen zu k nnen m ssen Server und Client in der Lage sein den in einer bertragung verwendeten Verschl sselungsalgorithmus zu erkennen ber ein Header Feld kann diese Information komfortabel bermittelt werden F r das folgende Beispiel wird angenommen dass das hinzuzuf gende Header Feld dem in Listing 69 gezeigten entspricht X Content Encryption XTEA Listing 69 Beispielhaftes Header Feld zur Inhaltsverschl sselung W rde dieser Header exakt m obigen Listing angegeben bertragen k nnte ein entsprechend angepasster ORCHID Server daraus schlie en dass zur Datenverschl sselung der XTEA Algorithmus zum Einsatz kommen soll XTEA eXtended Tiny Encryption Algorithm ist eine Erweiterung des f r Angriffe anf lli gen TEA Tiny Encryption Algorithm die aufgrund ihrer geringen Gr e f r die Implementierung in einem ORCHID Client geeignet erscheint vgl 26 S 148 149 Die Client Bibliothek stellt zahlreiche b
24. Listing 58 Einbindung der Client Bibliothek Nachdem die Cl ent Bibliothek eingebunden wurde kann ein globales Objekt vom Typ Orchid erzeugt werden ber das der Sketch einem ORCHID Server kommunizieren kann Die Klasse Orchid verf gt ber einen einzigen Konstruktor der eine Reihe von Parametern erwartet Die meisten dieser Parameter werden genutzt um Objekte vom Typ Client aus der mit der Arduino IDE ausgelieferten Ethernet Bibliothek zu erzeugen Solche Objekte erm glichen es einem Arduino mit einem Server m lokalen Netzwerk oder m Internet zu kommunizieren Ein Objekt vom Typ Orchid wird wie in Listing 59 gezeigt erzeugt Grcnid Srchlrd subnet Ip Server arduino id devkey Listing 59 Erzeugung eines Orchid Objekts 1 Tabelle 99 erl utert die im obigen Listing gezeigten Parameter Parameter Funktion mac MAC Adresse des Arduino Microcontrollers frei w hlbar routerip IP Adresse des zu verwendenden Gateways subnet Zu verwendende Subnetzmaske 1 Die IP Adresse die dem Arduino zugewiesen wird port Der Port des Servers zu dem sich der Client verbinden soll server Die IP Adresse des ORCHID Servers mit dem s ch der Client verbinden soll arduino_id Die GUID des Clients vgl 6 3 1 devkey Der Developer Key der verwendet werden soll vgl 6 3 3 2 Tabelle 99 Konstruktorparameter der Klasse Orchid Handbuch Client Bibliothek Die Ethernet Bibli
25. Srchld ezecutreNexztinstr ct1onlact r 10 2 Listing 66 Direktes Ausf hren einer Instruktion 8 4 6 R ckgabewerte und Fehlercodes verwenden Die verschiedenen berladungen der in 8 4 3 beschriebenen Methode push liefern bei ihrer Ausf hrung einen Wahrheitswert bool zur ck der f r den Erfolg oder Misserfolg der Methode steht Die Methoden geben true zur ck wenn der Server auf hre Anfragen mit dem HTTP Code 200 OK antwortet ansonsten wird false zur ckgegeben Die Methode getNextInstruction char gibt ein Objekt vom Typ OrchidInstruction zur ck die Methode heartbeat verf gt hingegen ber keinen R ckgabetyp void Aus dem R ckgabewert einer Methode kann also nicht auf eine Fehlerursache oder die eigentliche Server Antwort geschlossen werden Handbuch Client Bibliothek Deshalb bietet die Klasse Orchid der Client Bibliothek die M glichkeit an auf den letzten Fehler Code zur ckzugreifen Jede Methode setzt diesen Code w hrend ihrer Ausf hrung abh ngig von ihrem Erfolg oder Misserfolg Der letzte Fehlercode kann ber die Methode getLastError der Klasse Orchid abgefragt werden und enth lt zu jedem Zeitpunkt einen der Tabelle 101 genannten Werte Code Name Bedeutung 0 Kein Fehler 1 ORCHID NO CONNECTION Es konnte keine Verbindung zum angegebenen Server hergestellt werden 2 _ANSWER Der Server hat keine Antwort gesendet 3 ORCHID Der
26. Systementwurf 5 8 6 Instruktion hochladen Um eine Instruktion f r einen Client auf einen ORCHID Server zu laden bermittelt eine Drittsoftware einen speziell geformten PUT Request Die ben tigten Header Felder und der Aufbau dieses Requests k nnen der folgenden Tabelle entnommen werden Header Feld bertragener Wert Board ID GUID des Clients f r den die Instruktion bestimmt ist Component ID GUID des Aktors f r den die Instruktion bestimmt 15 User Agent Zeichenkette die den Kommunikationspartner als ORCHID Client oder mit dem Toolkit kompatible Drittsoftware identifiziert Host Die IP Adresse des Servers und der Port auf dem sich die Drittsoftware verbinden m chte Pin Der Pin an dem die Instruktion durchgef hrt werden soll Allgemeine Form 1 1 Board ID lt GUID gt Component ID lt GUID gt User Agent lt STRING gt Host lt IP gt lt PORT gt Authorization lt DEVELOPER KEY gt Action lt INT gt Value lt STRING gt Value Type lt INT gt Posted lt TIMESTAMP gt Priority lt INT gt Done lt BOOL gt Pin lt INT gt Connection close Beispiel PUT 1 1 Board ID 9f476a50 d4e3 11e0 801d 001492396635 Component ID 17e8a812 d574 11e0 a3c1 001492396635 User Agent Orchid Arduino Toolkit Host 192 168 1 123 8181 Authorization cd0887447e04c15b5128629 04b53c4c4858bble8ff2e8b6bfcb32dc99fb4e7198d72ed2 Action 1666 Value HIGH Value Type 1114 Poste
27. Werkzeugsammlung entwickelt werden kann die die Integration nahezu beliebiger Hardware n nahezu beliebige Softwareprojekte und damit die Verbindung der realen Welt mit der Welt der Software erm glicht Zun chst wurden dazu die verwendeten Technologien und die notwendigen technologischen Grundlagen beschrieben Darauf aufbauend wurde m weiteren Verlauf der Arbeit ein Softwaresystem entworfen und implementiert dass einerseits die geforderten M glichkeiten bietet andererseits auch f r zuk nftige Ver nderungen und Erweiterungen ger stet st Im Rahmen des Entwurfs und der Implementierung wurden weitere Technologien und Techniken erl utert und entwickelt mit denen die Zukunftssicherheit und Flexibilit t der entwickelten Werkzeuge sichergestellt werden konnte Die Wahl Mono mit C als Entwicklungsplattform f r Server Komponente einzusetzen kann r ckblickend als richtige Entscheidung angesehen werden C bietet zahlreiche einzigartige Sprachkonstrukte die in anderen Programmiersprachen und auf anderen Entwicklungsplattformen nicht zur Verf gung stehen und ist diesen gegen ber entsprechend m Vorteil Zus tzlich k nnen die entstandenen Werkzeuge ohne jede Anpassung auf allen g ngigen Betriebssystemen eingesetzt werden Dar ber hinaus existieren f r die Plattform Mono einzigartige Werkzeuge die f r andere Plattformen wie Java nicht verf gbar sind Diese Werkzeuge von denen mehrere f r die Entwicklung m Zuge dieser Arbei
28. eine Instanz einer konkreten Implementierung von AType zu erzeugen und zur ckzugeben Dynamisches Typeloading es in der Server Komponente des ORCHID Toolkits zum Einsatz kommt geht einen Schritt weiter Hier werden konkreten Implementierungen der Klassen von denen Instanzen ber das Typeloading System erzeugt werden sollen nicht fest kodiert sondern deren Typ zur Laufzeit dynamisch bestimmt und erst danach eine Instanz erzeugt 6 3 2 2 Dynamisches Typeloading in der Server Komponente Durch die Verwendung von Ninject als Dependency Injection Framework st es m glich das Abstract Factory Pattern so anzupassen dass es in ein dynamisches Typeloading System berf hrt werden kann Die Funktionsweise dieser Anpassung soll im Folgenden erl utert werden 109 ORCHID Wie in Abschnitt 5 5 2 beschrieben wird dem Ninject Dependency Injection Framework ber ein Modul mitgeteilt welche abstrakte Bas sklasse bzw welche Schnittstelle an welche konkrete Implementierung gebunden werden soll Diese Bindung wird in der Server Komponente durch die Klasse ServerModule bernommen die von der Klasse NinjectModule aus dem Ninject Framework abgeleitet ist und die notwendige Load Methode implementiert NinjectModule geht aber noch einen Schritt weiter als es bei einem regul ren Ninject Modul der Fall st Anstatt lediglich eine Liste von Typ Bindungen Typebindings abzuarbeiten enth lt diese Modul Klasse zus tzlich Methoden
29. gung die jeweils eine bestimmte Art von Konfigurationsquelle verarbeiten k nnen Um eine Konfigurationsdatei nutzen zu k nnen muss lediglich eine neue Instanz einer von IConfigSource abgeleiteten Klasse erzeugt und dieser der Pfad zu der zu verwendenden Konfigurationsquelle genannt werden INI file Icont gssurse inicource new INiConiig ourte coniig ini XML file IConfigSource xmlSource new XmlConfigSource config xml Listing 30 Laden einer Konfigurationsdatei mit Nini Listing 30 zeigt die Initialisierung zweier Konfigurationsquellen Die Quelle iniSource ist vom Typ ITniConfigSource und repr sentiert eine Konfigurationsdatei im INI Format Details zu INI Date en k nnen Abschnitt 7 5 entnommen werden xmlSource hingegen ist vom Typ XmlConfigSource und repr sentiert entsprechend eine Datei im XML Format Liest eine Instanz einer von IConfigSource abgeleiteten Klasse vor k nnen Konfigurationselemente aus der bergebenen Konfigurationsdate ausgelesen werden F r das folgende Beispiel w rd angenommen dass eine INI Date mit dem m folgenden Listing gezeigten Aufbau als Konfigurationsquelle bergeben wird Example configuration file Example Entryl Demonstration Entry2 1234 Others Entryl Another Demonstration Listing 31 Beispiel f r eine INI Datei gt Attp www opensource org licenses mit license php http nini sourceforge net
30. hinf llig Der Austausch einer konkreten Klasse gegen eine andere kann also durch einen einfachen Eintrag einer Konfigurationsdatei durchgef hrt werden ohne den Quellcode der Server Komponente ver ndern zu m ssen Ein weiterer Vorteil ergibt sich direkt aus dem ersten Server Komponente kann von Entwicklern jederzeit sehr komfortabel erweitert werden ohne dass diese die urspr ngliche Implementierung modifizieren m ssen Diese Eigenschaft eignet s ch insbesondere zum Testen eines Gesamtprojekts welches das ORCHID Toolkit einsetzt Ein solches Projekt besteht immer aus mindestens drei Komponenten einem ORCHID Server einem ORCHID Client und einer Anwendung die an den Client angeschlossene Hardware integriert werden soll Wird m Rahmen eines solchen Projekts eine eigene Klasse z B ein eigener Datenbankadapter entwickelt kann diese neue Klasse sehr leicht bestehende Server Komponente eingebunden werden Entsteht w hrend der Entwicklung ein Problem kann testweise wieder auf die urspr ngliche Klasse gewechselt werden ohne nderungen am Code vornehmen zu m ssen 0 3 2 5 Nachteile Der wohl gravierendste Nachteil des beschriebenen Verfahrens ist dass durch die Verwendung zahlreicher verschiedener Klassen die f r das dynamische Typeloading notwendig sind die Lesbarkeit des Quellcodes eingeschr nkt wird Dieser Nachteil wird aber durch die hohe Dynamik und die strenge Entkopplung die das Verfahren mit s
31. hrende Assembly verwendet wird Kann ein Typ nicht geladen werden entweder weil er nicht korrekt benannt oder weil die ihn enthaltende Assembly nicht gefunden werden konnte wird ein Fehler gemeldet und die Ausf hrung Realisierung und Tests des Programms entsprechend abgebrochen So wird bereits beim Laden der zu bindenden Types sichergestellt dass es im weiteren Programmablauf nicht zu Fehlern aufgrund nicht existierender Bindungen kommen kann Sind auf diese Weise alle Typen erfolgreich geladen worden und nur dann werden sie an die abstrakten gebunden die im restlichen Code der Server Komponente verwendet werden Die hier beschriebene Vorgehensweise zum Typeloading ber einen Eintrag der Konfigurationsdatei erscheint zun chst sehr komplex und aufw ndig m Bezug auf die ben tigte Rechenzeit Die Verwendung von Reflection im Code ist stets mit Performanceeinbu en verbunden da die entsprechenden Methoden rechenintensiv sind Das Typeloading geschieht m gesamten Programmablauf jedoch nur ein einziges Mal n mlich w hrend des Startvorgangs des Servers wenn die erste Instanz eines auf diese Weise geladenen angefordert wird Der Performanceverlust kann daher vernachl ssigt werden 6 3 2 3 Dynamisches Typeloading und das Abstract Factory Pattern Die Eigenschaften des 1 5 3 1 beschriebenen Entwurfsmusters Abstract Factory Pattern lassen es sehr geeignet f r das dynamische Typeloading ersc
32. und bergibt deren Methode HandleRequest als ThreadStart Methode einen neuen Thread Innerhalb dieses weiteren Threads Daemon Thread wird die Anfrage behandelt w hrend der Server Thread bereits wieder den hm zugewiesenen Port beobachten kann Abbildung 24 bildet den hier geschilderten Ablauf einem UML Sequenzdiagramm f r eine Instanz von OrchidHardwareServer ab Systementwurf rchidDaeman 2 Listen 3 HandleRequest 4 Listen OrchidD aemon 0 Abbildung 24 Multithreading OrchidHardwareServer 5 9 2 Behandlung von Anfragen in der Server Komponente Wie bereits im vorhergehenden Abschnitt beschrieben setzt Server Komponente Threads ein um Anfragen von Clients zu behandeln ohne die Ausf hrung der Software zu unterbrechen zu m ssen Dieser Abschnitt beschreibt detailliert die Abl ufe die durch einen Aufruf der Methode HandleRequest einer Instanz von OrchidHardwareDaemon bzw OrchidSoftwareDaemon durch eine entsprechende Server Instanz ausgel st werden Allgemein betrachtet setzt der Aufruf der Methode HandleRequest einer Daemon Instanz stets die folgenden Prozesse in Gang Identifikation des Verbindungspartners und dessen Speicherung Auslesen und Transformieren der Anfrage Daten Bestimmen der Art der Anfrage basierend auf der HTTP Methode Aufruf derjenigen Methode die die bestimmte Art von Anfrage behandelt a
33. und dem Wunsch Hardware Dartscheibe ber einen solchen Microcontroller an einen Server anzubinden ergab sich die letztendliche Idee f r die vorliegende Arbeit es soll eine Werkzeugsammlung Toolkit entwickelt werden mit der nicht nur eine ganz bestimmte sondern beliebige Hardware in Softwareprojekte eingebunden werden kann Im Gegensatz zur urspr nglichen Idee soll die Kommunikation bidirektional m glich sein Software die ein oder mehrere Arduino Microcontroller und an diese angeschlossene Hardware eingebunden sind soll Daten von diesen empfangen jedoch auch Daten an diese senden k nnen 1 1 Gliederung Zun chst wird n Abschnitt 2 auf das fachliche Umfeld dieser Arbeit eingegangen Dazu werden Wissensgrundlagen zu Microcontrollern im Allgemeinen und f r den Arduino Microcontroller im Speziellen vermittelt ein berblick ber das verwendete Kommunikationsprotokoll HTTP gegeben sowie technologische Grundlagen der verwendeten Programmiersprachen und Plattformen angef hrt Danach wird n Abschnitt 3 auf die aktuelle Marktsituation eingegangen und gezeigt welche bestehenden Ans tze f r die L sung des dieser Arbeit zugrunde liegenden Problems bereits existieren F r jeden diskutierten L sungsansatz werden Vor und Nachteile genannt Im Anschluss wird www twitter com 2 beliebig bedeutet hier kompatibel mit einem Arduino Microcontroller ORCHID beschrieben welche Eigenschaften der m Zu
34. 123 29100 Authorization cd0887447e04c15b5128629 04b53c4c4858bble8ff2e8b6bfcb32dc99fb4e7198d72ed2 Connection close Tabelle 71 Protokoll Instruktion abrufen Aus der obigen Tabelle wird ersichtlich dass GET Anfragen eines Clients an einen ORCHID Server von der Form bisher gezeigter Anfragen abweichen Die Pfadangabe nach der Nennung der Methode in der ersten Zeile des oben gezeigten Requests bestimmt f r welchen Cl ent erste GUID und welchen Aktor zweite GUID eine Instruktion abgerufen werden soll Im oben gezeigten Beispiel soll eine Instruktion f r den Client mit der GUID 9r476350 d4e3 11e0 801d 001d92396635 und den Aktor mit der GUID b0ce2688 d56a 11e0 85d1 001d492396635 abgerufen werden Diese Form der Anfrage ist z B f r sp tere Erweiterungen n tzlich da auch komplexere Hierarchien als die oben gezeigte problemlos abgebildet werden k nnen Neben den einleitend erw hnten allgemeinen M slichkeiten f r den HTTP Code der Antwort des Servers kann das Versenden eines GET Requests zu zwei weiteren Arten von Antworten f hren Liegt auf dem Server keine bisher unbearbeitete Anfrage f r den anfragenden Client vor wird als Antwort HTTP Code 404 Not Found und eine kurze Meldung gesendet Konnte eine Instruktion ermittelt werden wird diese ber den Message Body der Antwort mit HTTP Code 200 OK bermittelt wie das folgende Listing zeigt HTTP 1 1 200 OK Connection close Content Length 42 ac
35. 19 41 54 GMT CRLF Content Length lt n gt CRLF Content Type text html charset iso 8859 1 CRLF CRLF lt Message Body gt Listing 5 Serverantwort 404 Not Found Eine vollst ndige Liste aller HTTP Status Codes kann 11 Sektion 10 entnommen werden 2 2 5 Verwendung von HTTP im ORCHID Toolkit Das ORCHID Toolkit stellt keine Implementierung des HTTP Standards dar sondern verwendet das Protokoll lediglich um Daten zwischen Clients und Servern auszutauschen Zus tzlich zu dieser Einschr nkung ist das Toolkit nicht daf r ausgelegt Anfragen von Webbrowsern entgegenzunehmen und zu verarbeiten Entsprechend sind Abweichungen vom HTTP Standard und die Einf hrung neuer Header Felder unproblematisch vgl 5 8 ORCHID ORCHID Clients identifizieren sich ber einen entsprechenden Wert im Header Feld User Agent Beinhaltet dieses Feld einen Wert der einen Client nicht als g ltigen ORCHID Client ausweist werden dessen Anfragen abgelehnt wie in Abschnitt 5 8 ausf hrlich beschrieben wird 2 3 Technologische Grundlagen Im Folgenden werden technologische Grundbegriffe der verwendeten Programmiersprachen und Entwicklungsplattformen erl utert Eine detaillierte Beschreibung der M glichkeiten die diese Technologien bieten kann Abschnitt 5 4 entnommen werden 2 3 1 Mono Das Mono Framework ist eine von der Firma Novell unterst tzte quelloffene Entwicklungsplattform Mono basiert auf dem von der Microsoft Corporation
36. 2 Fachliches Umfeld Dieser Abschnitt befasst sich mit dem fachlichen Umfeld der vorliegenden Arbeit das f r das Verst ndnis der restlichen Abschnitte von gro er Bedeutung ist Zun chst werden grundlegende Informationen zu Microcontrollern gegeben wobei der Fokus auf dem Arduino Microcontroller liegt Im Anschluss w rd auf das verwendete Kommunikationsprotokoll HTTP eingegangen bevor die Grundlagen der verwendeten Programmiersprachen und Entwicklungsplattformen erl utert werden 2 1 Grundlagen Microcontroller Ein Microcontroller ist ein Halbleiterchip der sich mindestens einen Prozessor Speicher sowie Ein und Ausgabem glichkeiten vereint Der haupts chliche Einsatzbereich von Microcontrollern ist deren Verwendung als eingebettetes System engl embedded system gr eren komplexen Ger ten Zahlreiche Gegenst nde des allt glichen Lebens werden m Inneren von Microcontrollern gesteuert die Anzahl der eingebetteten Microcontroller und deren Art variiert dabei von Fall zu Fall darunter u a Waschmaschinen Handys MP3 Player elektronische Bilderrahmen Messger te Taschenrechner oder auch Eingabeger te f r Computer 2 1 1 Microcontroller allgemein Dadurch dass Microcontroller die grundlegenden Funktionalit ten eines Computers einem Chip vereinen bieten sich viele Vorteile die der Hauptgrund f r ihre enorme Verbreitung sind Diese Vorteile sollen im Folgenden erl utert werden 2 1 1 1 Vielfalt durch
37. 3 Dependency Injection Dependency Injection dt etwa Abh ngigkeits Injektion beschreibt ein Entwurfsmuster f r objektorientierte Systeme Es handelt sich nicht um ein klassisches Entwurfsmuster vgl 23 und 24 sondern vielmehr um eine Technik zur Reduzierung von starren Abh ngigkeiten innerhalb eines Programms sich zur Abh ngigkeitsreduzierung des Prinzips der Inversion of Control dt Kontroll Umkehrung bedient In der sequentiellen Programmierung existiert im Code ein Hauptabschnitt der nach und nach Methoden aufruft um bestimmte Aufgaben durchzuf hren Ist eine Methode abgearbeitet wird der Systementwurf Programmfluss wieder auf den Hauptabschnitt umgeleitet der die n chste Methode aufruft Diese Schritte werden wiederholt bis die letzte Zeile des Hauptabschnitts erreicht ist woraufhin das Programm beendet wird Inversion of Control bedeutet dass dieser Prozess umgekehrt wird Der Hauptabschnitt kann einzelne Methoden bei einer zentralen Stelle z B einem Framework registrieren Dazu muss angegeben werden unter welchen Bedingungen diese Methoden ausgef hrt werden sollen also z B wenn ein bestimmtes Ereignis eintritt Der Hauptabschnitt ruft die Methoden nicht mehr selbst auf sondern meldet nur noch eintretende Ereignisse an die zentrale Stelle die daraufhin die passenden Methoden aufruft Ein gutes Beispiel f r Verwendung von Inversion of Control sind die sog Callback Methoden dt e
38. 5db57feac465 amp type INT INT amp value 972 123 amp stamp 1 7 23 12 22 03 2011 17 285 1e 02 09 2071 Listing 35 bermittlung von Sensordaten Server Antwort Die ermittelten Sensordaten werden als Liste von Schl ssel Wert Paaren bertragen wobei die Felder type Datentyp value Wert und stamp Zeitstempel wiederum Listen als Wert enthalten Der ORCHID Server garantiert dass die Indizes von Werten eines Datensatzes n allen Listen stets konsistent sind Diese Garantie wird im obigen Listing durch die farbliche Hervorhebung der Werte verdeutlicht Werte gleicher Farbe geh ren zum gleichen Datensatz F r den jeweiligen Datentyp der ermittelten Werte wird das Datentyp K rzel vgl 5 8 5 bermittelt 5 8 8 Client Informationen abrufen Um ausf hrliche Informationen ber einen Client von einem ORCHID Server abzurufen kann eine Drittsoftware einen SEARCH Request an den Server senden dessen ben tigte Header Felder und Aufbau der folgenden Tabelle entnommen werden k nnen Header Feld bertragener Wert Board ID Die GUID des Clients dessen Informationen abgerufen werden sollen User Agent Zeichenkette die den Kommunikationspartner als ORCHID Client oder mit dem Toolkit kompatible Drittsoftware identifiziert Host Die IP Adresse des Servers und der Port auf dem sich die Drittsoftware verbinden m chte Authorization Der Developer Key der verwendet werden soll Allgemeine Form SEARCH 1 1 Board I
39. 80 aspx 13 Anhang Abbildungsverzeichnis ABBILDUNG 1 ARDUINO DUEMILANOVE 6 ABBILDUNG 2 DIGITALE VO PINS DES ARDUINO DUEMILANONE 9 ABBILDUNG 3 ISO OSI REFERENZMODELL 9 ABBIEBDUNG SEREENSHOT FIDDLER arena 11 ABBILDUNG 5 EZ CONTROL STEUERGER T XSL 17 6 2000000 0000 18 ABBILDUNG PACHUBE LOGO ee ee ee 19 ABBILDUNG 8 LoGoppRCCRYV NGC SAA30 26 ABBIEDUNG ER NLIO RE 26 ABBILDUNG 10 PROJEKTSTRUKTUR DER SERVER KOMPONENTE 50 ABBILDUNG 11 NAMESPACES IN ORCHID CORE 51 ABBILDUNG 12 PROJEKTSTRUKTUR DER CLIENT BIBLIOTHEK 0 00 0000 52 ABBILDUNG 13 HIERARCHIE IN DER SERVER KOMPONENTE 2 120 1 610 53 ABBILDUNG 14 ENTWURFSMUSTER ABSTRAKTE FABRIK 54 ABBILDUNG 15 FABRIKEN F R SERVER UND 85 55 ABBILDUNG 16 VERERBUNGSHIERARCHIE VON SERVERN UND DAEMONS 77 ABBILDUNG 17 BEZIEHUNGEN DER DAEMON KLASSE 2 2 1 6 66 1 78 ABBILDUNG 18 VERERBUNGSHIERARCHIE VON PARSERN UND 5 78 ABBILDUNG 19 BEZIEHUNGEN UND
40. Dual Core Pentium oder kompatibel e Arbeitsspeicher 2 Gigabyte e Festplattenspeicher 4 Gigabyte freier Speicherplatz ORCHID Die hohen Anforderungen an den freien Festplattenspeicherplatz ergeben sich aus den ggf anfallenden gro en Datenmengen die durch die Clients verursacht werden wenn sie Sensordaten an den Server bermitteln 4 3 2 2 Anforderungen der Client Bibliothek Die Client Bibliothek ist f r Arduino Microcontroller Boards ausgelegt erfordert also die Verwendung eines Arduino Andere Microcontroller Boards werden nicht unterst tzt Die Mindestanforderungen an ein verwendetes Arduino VO Board entsprechen der Spezifikation des Arduino Duemilanove und lauten wie folgt e Microcontroller Atmel ATmegal68 e Flash Speicher 32 Kilobyte e Arbeitsspeicher 2 Kilobyte Desweiteren wird zur Verwendung der Client Bibliothek ein Ethernet Shield ben tigt Insbesondere der verf gbare Arbeits und Flash Speicher des verwendeten VO Boards ist f r die stabile Ausf hrung der Client Bibliothek essentiell vgl 6 6 4 4 3 3 Produktschnittstellen Die einzige direkte Produktschnittstelle zu anderen Systemen st die Anbindung der Server Komponente an eine MySQL Datenbank Alle anderen Schnittstellen bas eren auf HTTP und werden gesondert in 5 8 beschrieben Die Client Bibliothek bietet keine Schnittstellen zu anderen Systemen 4 4 Produktfunktionen Im Folgenden werden die Produktfunktionen des Toolkits beschr
41. Klassen ber eine GUID mit der sie eindeutig zu identifizieren sind Systementwurf Die folgende Abbildung 19 zeigt Beziehungen und Hierarchien der Datenhaltungsklassen untereinander und in Verbindung mit den entsprechenden Fabriken Orchid Core Data builds AHardwareFactory builds imo ADataFactory builds Abbildung 19 Beziehungen und Hierarchien der Datenhaltungsklassen Da es durch die Vorgaben des Entwurfsmusters Abtract Factory Pattern vgl 5 3 1 notwendig ist eine direkte Erzeugung von Objekten zu verhindern die von Fabrikklassen erzeugt werden sollen verf gen die dargestellten Datenhaltungsklassen nicht ber ffentliche public Konstruktoren Nur Klassen im gleichen Namespace Orchid Core Data oder erbende Klassen k nnen die Konstruktoren der abgebildeten Klassen aufrufen da diese mit dem Zugriffsmodifizierer protected internal ausgestattet sind Deshalb befinden sich auch die Fabrikklassen ADataFactory und AHardwareFactory im Namespace Orchid Core Data 5 6 4 Datenbankadapter Zur Anbindung an eine Datenbank oder einen anderen Mechanismus zur Datenspeicherung nutzt die Server Komponente die abstrakte Klasse ADatabaseAdapter Diese Klasse stellt zahlreiche Methoden zur Verf gung um verschiedene Operationen auf der zugrunde liegenden Datenbank durchzuf hren Da diese Methoden h ufig Objekte von anderen Klassen der Server Komponente zur ckgeben existieren zahlreiche Beziehungen zwischen ADatabaseAdapter
42. Linux Windows und MacOS Dokumentation Enth lt die automatisch aus den Quellcodekommentaren generierte Dokumentation Dokumente Enth lt die PDF Version dieses Dokuments und verwendete Abbildungen in voller Ausl sung Orchid Enth lt alle Dateien des ORCHID Toolkits Client Enth lt die Client Bibliothek examples Enth lt verschiedene Codebeispiele f r die Verwendung der Client Bibliothek Enth lt die eigentliche Client Bibliothek zur Verwendung in einem Sketch Database Enth lt Datenbankstruktur und ben tigte Mindestdaten Server Enth lt die Server Komponente bin Enth lt die kompilierte Version der Server Komponente die direkt in eigenen Projekten verwendet werden kann sowie die Referenzimplementierung eines ORCHID Servers Enth lt Tests f r Server Komponente und Client Bibliothek Tools Enth lt die Zusatztools dkgen und ggen STC Enth lt den Quellcode von dkgen und ggen bin Enth lt die kompilierte und ausf hrbare Version von dkgen und ggen Quellen Quellen im Verlauf der Arbeit genannt wurden und Bildschirmfotos von genannten Internetseiten Runtime Enth lt die Mono Laufzeitumgebung f r Linux Installationsscript ben tigt eine aktive Internetverbindung und Administratorrechte und Windows VM Enth lt die virtuelle Maschine Tabelle 107 Inhalt der beiliegenden DVD
43. N Abbildung 43 Bibliotheksimport in der Arduino IDE Handbuch Client Bibliothek 8 3 Referenzierung Die Client Bibliothek besteht aus mehreren Dateien die in der folgenden Tabelle aufgef hrt sind Datei Beschreibung Orchid2 cpp Die Hauptdatei der Bibliothek Orchid2 h Die zu Orchid2 cpp geh rende Header Datei Strings cpp Hilfsbibliothek f r String Operationen Strings h Die zu Strings cpp geh rende Header Date Tabelle 98 Quelldateien der Client Bibliothek OrchidInstruction h Die Klasse die Instruktionen kapselt Um die Bibliothek in einem Sketch nutzen zu k nnen m ssen die in der obigen Tabelle gezeigten Header Dateien Orchid2 h OrchidInstruction hund Strings h n den Sketch eingebunden werden Die Einbindung kann entweder von Hand oder ber den Men befehl Sketch gt Import Library vorgenommen werden In beiden F llen werden die in Listing 56 gezeigten Zeilen am Anfang des Sketchs eingef gt include lt O rchid2 h gt include lt O rch1d4lInesr rnetish h gt include lt Strings h gt Listing 56 Referenzierung der Client Bibliothek Das Einbinden der Header Date Strings h ist optional und nur notwendig wenn darin enthaltenen Funktionen im einbindenden Sketch genutzt werden sollen 8 4 Codebeispiele Dieser Teil des Handbuchs zur Client Bibliothek erl utert wie die eingebundene Bibliothek in eigenen Sketches verwendet werden kann um den ausf hrenden Ardu
44. ORCHID Die Eintr ge der Konfigurationsdatei k nnen ber eine Instanz einer von IConfigSource abgeleiteten Klasse ausgelesen werden wie in Listing 32 gezeigt wird Dabei m ssen der abfragenden Methode die Namen der Kategorie und des gesuchten Elements bergeben werden Aus diesem Grund ist es auch m glich dass zwei Elemente mit dem gleichen Namen verschiedenen Kategorien existieren k nnen im Beispiel ist dies f r Entry1 der Fall private void ConfigExample string file IConfigSource src new IniConfigSource file will contain Demonstration stering entry example pre Coniigs Ger ZZ will contain 1234 int int entry2 sre ConrT1gs Example GetiInt ZZ WLLL contain Another Demonstration string entry Schere Sre Conrf1gs Ocher2t Get Listing 32 Verwendung von Nini Das Beispiel m obigen Listing zeigt wie IConfigSource die Struktur der verwendeten Konfigurationsdatei abbildet die Instanz src stellt eine Eigenschaft Configs bereit es handelt s ch um einen sog Indexer also eine Property vgl 5 4 1 1 die einen Parameter erwartet der als Parameter der Name der Sektion bergeben werden muss aus der ein Eintrag gelesen werden soll Configs ist eine Sammlung von Konfigurations Sektionen Eine solche Sektion stellt ihrerseits die Methode Get und weitere Varianten z B GetIn
45. Programmierbarkeit Microcontroller k nnen programmiert werden um bestimmte Aufgaben durchzuf hren So ist es grunds tzlich denkbar dass ein Microcontroller der einer Kaffeemaschine verbaut ist die Wassertemperatur ber einen Temperatursensor berwacht w hrend ein zweiter Microcontroller des gleichen Typs der jedoch anders programmiert wurde einem Handy daf r verantwortlich ist dass bei einem eingehenden Anruf das Display aufleuchtet Ohne Microcontroller m ssten f r beide Aufgaben komplexe nicht in Ger ten mit anderen Aufgaben w ederverwendbare Schaltungen entwickelt werden 2 1 1 2 L sen komplexer Aufgaben Genau wie ein vollwertiger Computer k nnen Microcontroller 2 1 1 1 beschrieben auf unterschiedliche Art und Weise programmiert werden Durch diese Eigenschaft k nnen sie ebenfalls genau wie Computer auch sehr komplexe Aufgaben bernehmen die ansonsten nur durch sehr aufw ndige Schaltungen oder dieser Form gar nicht realisierbar w ren Beispiel f r diese vorteilhafte Eigenschaft sind MP3 Player In ihnen sind Microcontroller verbaut neben zahlreichen anderen Funktionen z B Interpretation eines Tastendrucks und entsprechende Reaktion darauf auch das Decodieren von MP3 Dateien bernehmen und somit das Abspielen einer solchen Datei erm glichen 2 1 1 3 Effizienz durch Spezialisierung Microcontroller sind keine vollst ndigen Computer Sie arbeiten bedeutend langsa
46. Sensorwerte tendieren gegen 102376 Im R ckschluss kann bei einem sehr niedrigen Sensorwert lt 100 angenommen werden dass d e Lampe eingeschaltet und ansonsten dass sie ausgeschaltet ist Die LED dient als Repr sentation beliebiger an einen Arduino Microcontroller anschlie barer Hardware Genau wie f r einen Client selbst m ssen auch f r an diesen Cl ent angeschlossene Bauteile von einem ORCHID Server verarbeitet werden sollen ber eine GUID identifiziert werden Tabelle 105 zeigt die in diesem Beispiel verwendeten IDs 765 Der Arduino rechnet gemessene Spannungen in Werte zwischen 0 und 1023 um Endbenutzerhandbuch Bauteil GUID Arduino 435 48 11 0 93 080027 251 7 ba222420 4254 1180 8579 050027C251F7 LED1 902 09292 11 025060 000 Tabelle 105 Beispiel GUIDs Der Photowiderstand und die LED sind dem ORCHID Server bisher nicht bekannt es ist entsprechend nicht m glich sie zu verwenden Um sie dem Server bekannt zu machen m ssen sie in die Datenbanktabelle actors bzw sensors R1 eingetragen werden Es ist dabei sehr wichtig dass im Feld arduino id die numerische ID des neu hinzugef gten Clients ausgew hlt wird wie die folgende Abbildung zeigt arduino_id int 11 7 2 varchar 36 200 2 Test Arduino 9 Abbildung 60 Verweis auf einen Client Die Eintragung verl uft analog zu der in 10 5 1
47. Singleton Klasse z B wie im nachfolgenden Listing 10 aufgebaut werden Systementwurf public sealed class NonThreadSafeSingleton Only instance is private private static BonThresdsares nglefsn instance Prevent instances from being created private NonThreadSafeSingleton 1 Instance property will create an instance if necessary public static NonThreadSafeSingleton Instance get 151 instance mull instance new return instance Listing 10 Nicht threadsichere Singleton Klasse Die im obigen Listing gezeigte Klasse NonThreadSafeSingleton ist eine Singleton Klasse sie kann nicht von au en instanziiert werden Zugriffe auf die Klasse geschehen ber die Property Instance die falls es zum Zeitpunkt eines Zugriffs noch keine Instanz von NonThreadSafeSingleton obt die einzige Instanz erzeugt In Umgebungen denen eine Software nur auf einem Thread arbeitet kann diese Klasse gefahrlos eingesetzt werden Sobald aber mehr als ein Thread existiert kann es zu Problemen kommen Es kann nicht vorausgesagt werden wann welcher Thread auf welchen Codeabschnitt eines Programms zugreifen wird Entsprechend kann es vorkommen dass aus einem Thread A heraus auf Instance zugegriffen wird der den Code bis unmittelbar vor der Erzeugung der einzigen Instanz instance abarbeitet und dann die Kontrolle wieder abgibt Zu diesem Zeitpunkt existiert n
48. TABELLE 93 EINSTELLUNGSKATEGORIE 128 TABELLE 94 EINSTELLUNGSK TEGORIE DATABASE un asia nes ae 128 TABELLE 95 EINSTELEUNGSKATEGORIE LOCALE a ER EEE 129 TABELLE 96 EINSTELLUNGSKATEGORIE NERBOSITNT 129 S7 SEINSTEEEUNGSKA TEGORIE DEBUG sa arena 129 TABELLE 98 QUELLDATEIEN DER 00000 0000000000000000000 139 TABELLE 99 KONSTRUKTORPARAMETER DER KLASSE 2 1 140 TABELLE 100 ACTION CODES UND ENTSPRECHENDE 5 145 Eee ee En 147 TABELLE 102 EINSTELLUNGEN DER VIRTUELLEN 5 0 0 00 000 00000 152 TABETER OS DESKTOP BEEMENTE sn ee ee ee 153 TABELLE 104 AUF DER INSTALLIERTE BOPTWARE 154 TABBLLE GU TD Sasse 159 TABELLE 106 ZUSAMMENFASSUNG DER TOOLKIT VERWENDUNG 165 TABELLE 107 INHALT DER BEILIEGENDEN 0 2 00 1 I 15 Anhang IV Listingverzeichnis LISTING 1 STRUKTUR EINER 10 LISTING 2 BERSICHT 12 LISTING 3 STRUKTUR EINES HIIR H appRs 12 KISTINSH SERVERANIWORT 200
49. TABFILE 30 DS 20 SENSOREN sauren nee 43 TABELLE SI DS 30 ARDUINO 44 TABELLE 52 DS40 44 TABELLE 5 5 DS 30 GEOLOCATIONS 44 TABELLE 94 lt DS00 SENSORDATEN nissan aaa 44 TABEELE 2510 INSTRUK TIONEN WEE 45 TABELLE 562 DSS0F NACHRICHTEN EE 45 TABELELE S7 PC IO INSTRUK TONEN eenean heiraten 45 TABE EEPOS SESIO ANI WORTA TEN ae ee ee 46 TABELLE 99s ESPOEBETRIEBSD UER sn en akt G 46 TABELLE O0 55202 BELASTBARKEIT EE 46 TABELLE e HE RAR MN Le EE RE EENHEETEN TABELLE O3 EC LE ER AR E ch san TABELLE ES DATENGENAUIGKEIT elek TABELLE OJIA 3O ROBUSTHE E 48 TABELLE 66 NICHT VERWENDETE FXCOP REGELN 75 TABELLE 67 NICHT VERWENDETE STYLECOP REGELN O E I 76 TABELLE 68 PROTOKOLL SENSORDATEN HOCHLADEN 83 TABELLE 69 CODESFUR E DCH EE 94 TABELLE 70 PROTOKOLL HEARTBEAT SENDEN 0000 94 TABELLE 71 PROTOKOLL INSTRUKTION ABRUFEN genannten 85 TABELLE 72 CODES F R AUSZUF HRENDE AKTIONEN arriera S S S 86 TABELLE ODES FUR DATENT PEN ee a ee 86 TABELLE 74 PROTOKOLL INSTRUKTIONEN 10 87 TABELLE 75 PROTOKOLL SENSORDATEN ABRUFEN 0000 0
50. Using directives must be In Programmiersprachen die ber Pakete verf gen ist placed within the namespace es blich using Direktiven in Java import an den Anfang einer Date zu stellen Diese Vorgehensweise wird auch m Code der Server Komponente angewendet Tabelle 67 Nicht verwendete StyleCop Regeln Systementwurf 5 6 Klassen der Server Komponente Im Folgenden werden die wesentlichen Klassen der Server Komponente auf Basis der in 4 1 1 definierten Anforderungen entwickelt Es handelt sich dabei nicht um eine vollst ndige Auflistung aller in der Server Komponente enthaltenen Klassen sondern um eine Hervorhebung der wichtigsten Bestandteile Eine vollst ndige Liste kann der DVD die dieser Arbeit beiliegt entnommen werden 5 6 1 Server und Daemons Server und Daemons s nd die zentralen Klassen zur Annahme und Behandlung von Anfragen eines Clients oder einer Drittsoftware an einen ORCHID Server Server bilden dabei die Schnittstelle zum Netzwerk bzw Internet w hrend Daemons f r die eigentliche Anfragebehandlung zust ndig sind Es existieren je zwei Arten von Servern und Daemons Hardware Server und Hardware Daemons sind f r die Annahme und Behandlung von Client Anfragen zust ndig w hrend Software Server und Software Daemons Anfragen von Drittsoftware entgegennehmen und verarbeiten Orchid Core Orchid Core Servers Orchid Core Daemons AH rdwareserver Daemon AHardwareDaemon 1 ASoftwareServer OrchidHardwa
51. bearbeitet wurde wird eine Antwort aus dieser Kategorie bermittelt Redirection Kann eine angeforderte Ressource nicht ohne eine Umleitung an einen anderen Server ermittelt werden werden Antworten dieser Kategorie versendet Client Error Wird verwendet wenn ein Client eine fehlerhafte oder unvollst ndige Anfrage an einen Server gesendet hat Server Error Diese Kategorie wird f r Antworten verwendet die einen Fehler des Servers anzeigen Tabelle 4 HTTP Status Codes Wie die Methode die ein Client in einer HTTP Anfrage in der ersten Zeile der versendeten Nachricht benennen muss wird auch der Status Code einer Antwort als erste Information innerhalb einer Server Antwort erwartet Listing 4 zeigt beispielhaft die Antwort eines Servers auf eine erfolgreiche GET Anfrage 1 1 200 OK CRLF Date Sun 04 Sep 2011 19 31 57 GMT CRLF Content Type text html charset 1SO 8859 1 CRLF Content Length lt length gt CRLF CRLF lt Message Body gt Listing 4 Serverantwort 200 Eine nicht erfolgreiche Anfrage kann auf verschiedene Arten beantwortet werden Der bermittelte Status Code h ngt dabei von den Gr nden ab warum die Anfrage nicht erfolgreich bearbeitet werden konnte Eine Anfrage die eine nicht vorhandene Ressource auf einem Server abrufen m chte wird z B mit Statuscode 404 Not Found beantwortet wie das folgende Listing zeigt HTTP 1 1 404 Not Found CRLF Date Sun 04 Sep 2011
52. com Java Zusammenfassung Gravierende Probleme die ein Scheitern zur Folge gehabt h tten traten n cht auf Im Hinblick auf das Ziel dieser Arbeit n mlich die Entwicklung und Implementierung einer Werkzeugsammlung ber die Entwickler die Lage versetzt werden ihren Softwareprojekten mit Hardware zu interagieren wobei diese einerseits m glichst ohne gro en Aufwand einsetzbar andererseits aber sehr flexibel und erweiterbar sein sollte 15 das Ergebnis als Erfolg einzusch tzen 11 2 Ausblick Aufgrund der Auslegung des ORCHID Toolkits auf eine sp tere Ver nderung und dessen Einsatz in Drittsoftware Projekten ergibt sich ein gro es Weiterentwicklungspotential das durch die konsequente Anwendung objektorientierter Techniken und offener Frameworks zus tzlich verst rkt wird Einige der meiner Meinung nach interessantesten M glichkeiten f r potentielle Weiterentwicklungen des Toolkits werden im Folgenden beschrieben 11 2 1 Nachrichten Das Versenden von Nachrichten zwischen zwei ORCHID Clients ber einen ORCHID Server ist ein optionales Wunschkriterium Clients k nnten mit dieser Erweiterung des Toolkits Daten austauschen angefangen von einfachen Statusmeldungen bis hin zum Austausch komplexer Datenstrukturen wie Sensordaten oder sogar Instruktionen Ein Client w re damit der Lage auch andere Clients zu instruieren wenn ein Entwickler dies w nscht Die grundlegende Infrastruktur f r Nachrichten b
53. com setzt wie auch das ORCHID Toolkit auf Daten bermittlung Die Webservice API kann entsprechend mit den meisten aktuellen Programmiersprachen verwendet werden Die von einem Anwender auf den Servern des Anbieters gespeicherten Daten werden in sog Feeds aufbereitet und k nnen ber das Internet n verschiedenen Formaten abgerufen werden Diese Feeds sind mit Ausnahme der teuersten kostenpflichtigen Variante ffentlich d h jeder kann sie einsehen Zun chst erscheint Pachube com als sehr geeignet die gestellten Anforderungen zu erf llen Diese Einsch tzung muss jedoch nach eingehender Pr fung revidiert werden da der Anbieter trotz aller hnlichkeiten einen g nzlich anderen Weg geht als das ORCHID Toolkit Es gibt zwar die M glichkeit den angebotenen Dienst kostenfrei zu nutzen jedoch ist diese Nutzung stark eingeschr nkt gespeicherte Daten werden nach einem Monat vom Server entfernt die Webservice API erlaubt die Unterscheidung von lediglich 5 verschiedenen Datenquellen und es k nnen pro http www pachube com 75 https pachube com plans ORCHID Minute h chstens 5 Anfragen an den Webservice gestellt werden Selbst die kostenpflichtige Nutzung ist nicht vollst ndig unlimitiert Der Dienst erm glicht es Daten auf dem Server des Anbieters zu speichern und abzurufen bietet aber keinen Mechanismus zur entfernten Steuerung von Hardware Ein solcher Mechanismus ist ein zentraler Bestandt
54. dem Code Die Konfiguration aus dem Code heraus die in Listing 25 gezeigt wurde konfiguriert NLog genau wie die XML Konfiguration aus Listing 24 5 5 1 2 Vorteile der Code Konfiguration Durch die Konfiguration des Logging Systems aus dem Code der eigentlichen Server Anwendung heraus ergibt sich der Vorteil dass ein Entwickler der den Code anpassen oder eigenen Code verwenden m chte die Konfiguration des Logging Systems vollst ndig selbst die Hand nehmen kann In der Referenzimplementierung wird die Konfiguration des Logging Systems aus der Konfigurationsdatei f r Server Komponente ausgelesen einem Entwickler steht es aber stets frei eine eigene Konfiguration zu verwenden oder die Konfiguration im Quellcode anzupassen Ein zweiter Vorteil der sich durch den Verzicht auf eine Konfigurationsdatei ergibt ist die M glichkeit gesamte Konfiguration mit einem Debugger berpr fen zu k nnen Fehler k nnen so schnell identifiziert und behoben werden Weiterhin entspricht es dem Entwurfskriterium der Einfachheit dass die gesamte Server Komponente ber eine zentrale Datei konfiguriert werden kann ein Entwickler muss sich lediglich mit dieser einen Datei vertraut machen um die Komponente nach seinen eigenen Vorstellungen zu konfigurieren 46 http nlog project org wiki Targets ORCHID 5 5 1 3 Beispiel f r Log Meldung An dieser Stelle soll ein Beispiel f r Log Meldungen in Ausz gen gegeben werden wie s e f r
55. den Daten den Server geschickt werden sollen bekannt sein Eine zus tzliche globale Variable erf llt diesen Zweck wie im folgenden Listing 63 zu sehen ist Definition und Initialisierung der Sensor ID in Zeile 14 SIE lt rch1igalnstmuer isn bs include lt Strings h gt byte mac 1 0 12 23 0834 0x45 056 0267 byte gateway 192 168 1 1 byte subnet 255 255 255 255 byte ip 1 192 168 1 150 byte server 192 168 1 140 char client Ydbdabr 11 2733 422 e 5459 aen LE Ee 723 int port 29100 char dev key 8178b0492fad1e60f59706484146f17b4bflafeaba9c2b7dA3db102450cb6b9c18347806 char sensor 531 2 4635 60645943 6 Ee Srehl Almac gateway Subnet 1p server Client 1d dev key void setup orchid reset void loop int senseVal analogRead sensorPin orchid push sensor senseVal delay 10000 Listing 63 Hochladen von Sensordaten In Zeile 26 des obigen Beispiels werden die Sensordaten gemessen es wird davon ausgegangen dass ein Sensor dem analogen Pin des Arduinos angeschlossen ist der den Index sensorPin tr gt Zeile 27 enth lt den Aufruf der Methode push char int der Klasse Orchid es erm glicht Sensordaten an einen Server zu bermitteln Diese Methode verf gt ber zahlreiche berladungen so das
56. die richtigen Werte und Fehlercodes zur ck 6 4 3 Lasttests Lasttests werden ausschlie lich f r die Server Komponente ausgef hrt ORCHID Clients werden Definition nicht stark belastet da sie zu jedem Zeitpunkt mit maximal einem Server kommunizieren und Kommunikation stets von ihnen initialis ert wird Die durchgef hrten Lasttests pr fen ob die Server Komponente auch unter st rkerer Belastung noch voll funktionsf hig ist und 4 6 beschriebenen Leistungsvorgaben erf llen kann Zu diesem Zweck wurde das Testprogramm loadtest sh ein Shellscript f r die Bash entwickelt dass auf einem ORCHID Server eine gro e Last erzeugen kann entspricht dem nebenl ufigen Zugriff mehrerer Clients Auch unter gro er Last bis zu 20 Anfragen pro Sekunde arbeitet die Server Komponente fehlerfrei 6 5 Probleme w hrend der Entwicklung Aufgrund der guten Dokumentation sowohl des Mono Frameworks als auch der Arduino Microcontroller Plattform traten w hrend der Entwicklung kaum Probleme auf besonders schwierig zu l sendes Problem sei aber an dieser Stelle genannt da dessen L sung wichtig f r potentielle Weiterentwicklungen des Toolkits ist Die Client Bibliothek des Toolkits wurde C entwickelt da dies die Programmiersprache ist mit der Bibliotheken f r den Arduino Microcontroller implementiert werden Ein Debugger oder hnliche Werkzeuge die bei der Fehlersuche hilfreich h tten sein k nnen s
57. diesem Zweck existiert eine weitere Klasse in der Server Komponente Es handelt sich dabei um die Singleton Klasse NinjectBase die einen Ninject Kernel n einer Singleton Umgebung bereitstellt Dieser Kernel kann von allen Fabr kklassen zur Instanzerzeugung verwendet werden Zusammenfassend kann der Prozess des dynamischen Typeloadings wie folgt beschrieben werden Zu Beginn der Programmausf hrung werden alle Typen die dynamisch geladen werden aus der Konfigurationsdatei ausgelesen mittels Reflection geladen und dann ber Ninject Modul innerhalb eines Ninject Kernels an hre abstrakten Basisklassen gebunden Wird an einer beliebigen Stelle im Programmcode eine Instanz einer solchen Klasse angefordert geschieht dies ber eine entsprechende Fabrik Jede konkrete Fabrik der Server Komponente greift zur Erzeugung der Instanzen auf einen Ninject Kernel der ber die Singleton Klasse NinjectBase bereitgestellt wird zu 111 112 ORCHID 0 3 2 4 Vorteile Der Hauptvorteil des den vorherigen Abschnitten beschriebenen dynamischen Typeloading Verfahrens st vollst ndige Entkopplung der konkreten Klassen voneinander Wird das regul re Abstract Factory Pattern eingesetzt muss ein Entwickler der eine konkrete Implementierung einer Klasse gegen eine andere austauschen will den meisten F llen auch eine entsprechende konkrete Fabr kklasse implementieren Diese Anforderung wird durch das dynamische Typeloading mit Ninject
58. en 113 ORCHID 6 4 Testf lle und Auswertung Im Folgenden werden die Tests beschrieben die durchgef hrt wurden um Richtigkeit und Fehlerfreiheit der entwickelten Software gew hrleisten zu k nnen Getestet wurde einerseits ob Bestandteile des Toolkits fehlerfrei und richtig arbeiten und berechnete Ergebnisse den erwarteten entsprechen Unit Tests andererseits ob die Bestandteile auch unter Belastung noch vorgegeben arbeiten Lasttests Da den folgenden Abschnitten beschriebenen Tests sehr umfangreich sind handelt es sich hierbei nicht um eine vollst ndige Liste sondern um eine zusammenfassende Beschreibung Die durchgef hrten Tests befinden s ch vollst ndig auf dem dieser Arbeit beiliegenden Datentr ger im Verzeichnis Orchid Tests 6 4 1 Uu Tests Server Komponente Die durchgef hrten Unit Tests stellen sicher dass alle Bestandteile der Server Komponente fehlerfrei und richtig arbeiten sie wurden unter Verwendung des NUnit Frameworks implementiert 0 4 1 1 Server Tests Unter dem Begriff Server Tests werden alle Unit Tests zusammengefasst die pr fen ob die Server Komponente eingehende Anfragen korrekt bearbeitet und beantwortet Dazu werden f r alle Arten von Requests die die Server Komponente verarbeiten kann vgl 5 8 g ltige und ung ltige Anfragen erzeugt eine laufende Server Instanz bermittelt und die entsprechenden Antworten ausgewertet Die Server Komponen
59. entsprechend geringer Aktuelle Prozessoren f r Computer kosten auch n gro en St ckzahlen wesentlich mehr und ben tigen zudem kostenintensivere zus tzliche Bauteile Aktuelle Einzelhandelspreise f r die Microcontroller die der Arduino Produktreihe verbaut werden vgl 2 1 2 1 k nnen der folgenden Tabelle entnommen werden Microcontroller Anbieter Einzelpreis Atmel 108 Conrad Electronic SE 4 37 4 946 RS Components 1 92 5 22 Tabelle 1 Preis bersicht ATmega Microcontroller 2 1 1 4 Flexibilit t durch Komponenten Wie bereits in 2 1 1 1 beschrieben k nnen Microcontroller durch unterschiedliche Programmierung an verschiedenste Aufgabenbereiche angepasst werden Diese Anpassungsf higkeit beruht jedoch nicht allein auf der Programmierbarkeit eines Microcontrollers sondern auch darauf dass neben dem Prozessor und dem Speicher auch Ein und Ausgabem glichkeiten auf einem Microcontroller vorhanden sind ber diese k nnen verschiedenste Sensoren und Aktoren an einen Microcontroller angeschlossen werden mit denen Daten aus der Umgebung gemessen Sensoren und diese auch manipuliert werden kann Aktoren Der gleiche Microcontroller kann durch seine Programmierung z B ber den Wert eines angeschlossenen Lichtsensors entscheiden ob eine Lampe eingeschaltet werden soll oder mittels eines angeschlossenen LC Displays eine Meldung ausgeben 2 1 2 Die Arduino Microcontroller Plattform In dieser A
60. f r das ORCHID Toolkit sind sehr zahlreich und h ngen stets von den Vorstellungen eines Entwicklers ab Entsprechend sind die im Folgenden beschriebenen M slichkeiten nicht als vollst ndige Liste zu verstehen 4 2 4 1 Heimautomatisierung Auf Basis des Toolkits k nnen L sungen zur Heimautomatisierung entwickelt werden Das bedeutet dass ber eine zentrale Schnittstelle z B einen Server im Internet oder Netzwerk Haushaltsger te angesteuert und geschaltet werden k nnen Denkbare Szenarien f r eine solche Automatisierung sind u a programm oder zeitgesteuerte Schaltung von Lampen in einer Wohnung oder einem Haus aus der Ferne die berwachung bestimmter Haushaltsger te deren unbeaufsichtigter Betrieb eine Gefahr darstellen k nnte z B B geleisen oder Kaffeemaschinen oder auch die Einsparung von Strom ber die Schaltung von Ger ten abh ngig von gemessenen Sensorwerten hier insbesondere Heizung und Licht 42 42 berwachung Da an einen Arduino Microcontroller zahlreiche Sensoren angeschlossen werden k nnen die unterschiedlichste Umgebungswerte w e Luftfeuchtigkeit Temperatur Menge des einfallenden Lichts Umgebungslautst rke oder auch die Konzentration bestimmter Gase der Luft messen kann auf Basis des Toolkits ein umfassendes System zur berwachung eines Geb udes oder eines einzelnen Raums realisiert werden Ist der ORCHID Server dabei ber das Internet erreichbar kann der berwachte Ort zu jeder Zeit vo
61. h ufig als r n abgek rzt werden lt METHOD gt lt URI gt lt HTTP VERSION gt HEADER FIELD 1 CRLF HEADER FIELD 2 CRLF HEADER FIELD n 1 CRLF HEADER FIELD CRLF CRLF MESSAGE BODY Listing 1 Struktur einer HTTP Nachricht Die Reihenfolge in der die im obigen Listing gezeigten Angaben gemacht werden ist nur f r die erste Zeile der Anfrage und f r die Trennung zwischen Header Feldern und Message Body von Bedeutung Header Felder k nnen in beliebiger Reihenfolge bertragen werden 2 2 2 1 HTTP Methoden HTTP unterscheidet verschiedene Arten von Anfragen Die Unterscheidung beruht dabei haupts chlich auf der bermittelten Methode es handelt sich hier nicht um eine Methode im Sinne der objektorientierten Programmierung Die folgenden Methoden sind Teil des Standards HTTP 1 1 siehe 11 Sektion 9 2 ff Die Reihenfolge der Methoden wurde RFC 2616 entnommen Fachliches Umfeld Methode Einsatz OPTIONS Erlaubt es einem Client die f r eine angegebene Ressource verf gbaren Optionen von einem Server abzurufen e 15 ee 8 Fordert eine durch einen spezifizierte Ressource von einem Server an Der Server bermittelt die Ressource im Message Body der Antwort Identisch mit GET jedoch ist der Server nicht verpflichtet einen Message Body zu bertragen Wird haupts chlich eingesetzt um zu pr fen ob ein URI g ltig ist Erlaubt es einem Client Daten auf einen Server zu laden
62. hervorgehoben Aktoren Inhalt e Name e Eindeutige ID GUID e Beschreibung Anmerkungen Gespeichert n der Datenbanktabelle actors Tabelle 49 DS10 Aktoren Sensoren Inhalt Name e Eindeutige ID GUID e Beschreibung Anmerkungen Gespeichert der Datenbanktabelle sensors Tabelle 50 DS20 Sensoren ORCHID Arduinos Inhalt Name Eindeutige ID GUID Numerische Datenbank ID Beschreibung Aktoren Sensoren Geolocation Zeitstempel f r ersten Kontakt Zeitstempel f r letzten Kontakt Anmerkungen Gespeichert der Datenbanktabelle arduinos Tabelle 51 DS30 Arduinos Berechtigungen Inhalt Eindeutige ID GUID des betroffenen Arduinos Sendeberechtigung f r Nachrichten Empfangsberechtigung f r Nachrichten Berechtigung zum Hochladen von Sensordaten Empfangsberechtigung f r Instruktionen Berechtigung zum Hochladen von Instruktionen Anmerkungen Gespeichert der Datenbanktabelle credentials Tabelle 52 0540 Berechtigungen DS50 Geolocations Position auf der Erde Inhalt e L ngengrad e Breitengrad Anmerkungen Gespeichert als Teil des Datensatzes eines Arduinos vgl DS30 Tabelle 53 DS50 Geolocations Sensordaten Inhalt e Eindeutige ID GUID des Sensors der die Daten gemessen hat e Textuelle Repr sentation des Datentyps der Sensordaten e Textuelle Repr sentation der gemessenen Daten e Zeitpunkt der Messung Anmerkungen Gespeicher
63. im folgenden Listing eine Methode definiert die zwei Ganzzahlen addiert Diese Methode kann ohne Anpassungen u a Arduino Processing Wiring Java C C und C verwendet werden int add int a int return a b Listing 6 Beispielmethode in mehreren Programmiersprachen 2 3 2 1 Sketches Ein Programm das f r die Ausf hrung durch einen Arduino Microcontroller entwickelt wurde wird Sketch deutsch Konzept oder Skizze genannt Ein Sketch besteht dabei aus einer oder mehreren Dateien in denen der Quellcode des Programms enthalten ist ben tigte Bibliotheken k nnen in Sketches eingebunden werden falls der Entwickler dies w nscht 2 3 2 2 Bibliotheken Die Arduino IDE erm glicht die Einbindung von Bibliotheken auch Library genannt in einen Sketch Eine Bibliothek ist in C geschriebener Code der vom eigentlichen Sketch unabh ngig ist Funktionen die in einer Bibliothek enthalten sind k nnen aus einem Sketch der diese Bibliothek 22 http www wiring org 2 http www processing org ORCHID einbindet aufgerufen werden Der Vorteil dieser Vorgehensweise liegt dar n dass der Umfang von Sketches die Bibliotheken einbinden verringert wird und sie dadurch wesentlich leichter zu lesen und zu warten sind Zus tzlich k nnen ber Bibliotheken die Funktionen des Microcontrollers angesprochen werden die durch Arduino Programmiersprache vor dem Programmierer versteckt werden vg
64. innerhalb der Instruktion falls diese nicht leer ist von dem betroffenen Aktor ausf hren lassen und wenn dies der Fall ist die bermittelte Akt on mit dem bermittelten Wert ausgef hrt Um ein Ger t ber eine solche Instruktion einzuschalten m sste der Entwickler also als Akt on ACTION DW und als Wert HIGH bertragen Der Sketch w rde HIGH auf den Pin an dem der Aktor angeschlossen ist schreiben und der Stromkreis des Ger ts geschlossen werden Entsprechend w rde die Aktion ACTION mit dem Wert Low das Ger t ausschalten 8 4 5 Direktes Ausf hren einer Instruktion Das vorherige Beispiel hat gezeigt dass es mit der Client Bibliothek m glich ist eine Instruktion von einem ORCHID Server abzurufen sie zu analysieren und entsprechende Schritte einzuleiten Die dazu notwendige Menge an Code ist jedoch im Vergleich zum Nutzen sehr gro 16 Zeilen Code um ein Ger t ein oder auszuschalten F r die Aufgabe einen Aktor ein oder auszuschalten stellt die Client Bibliothek deshalb mit executeNextInstruction char eine weitere Methode zur Verf gung es einem Entwickler erlaubt eine Instruktion abzurufen und direkt ausf hren zu lassen mit der Einschr nkung dass dies nur f r die Aktion ACTION Dw und die Werte HIGH und LOW m glich ist Das n Listing 65 gezeigte Beispiel ver ndert sich bei Verwendung der Methode executeNextInstruction char entsprechend Listing 66 void loop
65. jedoch unverh ltnism ig hoch Ich spiele meiner Freizeit gerne und ambitioniert Darts und protokolliere dabei meine erzielten Ergebnisse handschriftlich um Trainingserfolge erkennen und auswerten zu k nnen Diese Aufgabe ist jedoch sehr m hsam da innerhalb einer Trainingseinheit leicht mehrere Hundert W rfe absolviert werden Die Auswertung der notierten Zahlen erfordert zus tzliche Aufw nde Aus diesem Umstand entstand die Idee eine elektronische Dartscheibe so zu modifizieren dass sie an einen Arduino Microcontroller angeschlossen werden k nnte Durch diese Verbindung k nnten die erzielten Punkte bei jedem Wurf automatisch ber die Verbindung zu einem Computer gespeichert und m Nachhinein ausgewertet werden Schnell entwickelte sich diese Idee weiter es k nnten auch mehrere elektronische Dartscheiben modifiziert und so die Ergebnisse mehrerer Spieler automatisch aufgezeichnet und ausgewertet werden Diese Idee w rde aber nur dann sinnvoll umgesetzt werden k nnen wenn nicht jeder Microcontroller an einen anderen Computer angeschlossen w re sondern es einen zentralen Ort f r die Datenhaltung g be einen Server im Netzwerk oder Internet ber eine spezielle Software k nnten die Ergebnisse einzelner Spieler dann verarbeitet und z B untereinander verglichen werden Aus der Erfahrung dass die Anbindung eines Arduino Microcontrollers an das Internet Netzwerk zwar m glich der dazu notwendige Aufwand jedoch sehr hoch st
66. tsfunktionen der Serverkomponente bestimmen Einstellung Bedeutung AcceptedUserAgent Der User Agent der vom Server akzeptiert wird VerifyUserAgent Bestimmt ob der Server den bertragenen User Agent betrachtet oder nicht CredentialsEssential Gibt an ob Credentials verwendet werden sollen oder nicht DeveloperKey Der Developer Key der vom Server akzeptiert wird DeveloperKeyNeeded Gibt an ob der Server den Developer Key verwendet oder nicht RestrictToKnownIPs Bestimmt ob der Server nur Anfragen von hm bekannten IP Adressen entgegennimmt oder ob jede IP Adresse zugelassen ist VerifyDataStrings Bestimmt ob Datentyp Stringss in Sensordaten bertragungen an den Server auf G ltigkeit gepr ft werden oder nicht Tabelle 92 Einstellungskategorie Restrictions ici ORCHID 7 5 4 Kategorie Logging Die in dieser Kategorie enthaltenen Einstellungen bestimmen wie sich das Logging in der Server Komponente verh lt Einstellung Bedeutung ConsoleLogEnabled Bestimmt ob Log Meldungen auf Standardausgabe ausgegeben werden sollen oder nicht ConsoleLogLayout Das Format von Log Meldungen auf der Standardausgabe ConsoleMinLevel Das Log Level f r Log Meldungen auf der Standardausgabe M gliche Werte Debug Warn Error botal FileLogLayout Das Format von Log Meldungen die in die Log Datei geschrieben werden FileMinLevel Das Log Level f r Log Meldungen die in die Log Datei geschrieben werden M gliche W
67. und anderen Klassen die der nachstehenden Abbildung 20 dargestellt werden ORCHID Abbildung 20 Beziehungen der Datenbankadapter Klasse 5 6 5 Dynamisches Typeloading Das dynamische Typeloading wird 6 3 2 im Detail erl utert und an dieser Stelle nur aus Gr nden der Vollst ndigkeit erw hnt Orchid Core Data S _ A 9 ur ur Ai TE F A Do m ME OLE Abbildung 21 Abh ngigkeiten des Typeloading Systems Die obige Abbildung zeigt die Abh ngigkeiten derjenigen Klassen die ma geblich am Prozess des dynamischen Typeloadings in der Server Komponente beteiligt sind Um Entwicklern die M glichkeit zu geben die Server Komponente ohne eine Bindung an das verwendete Dependency Injection Framework Ninject vgl 5 5 2 erweitern und ver ndern zu k nnen gibt es keine Abh ngigkeiten abstrakter Basisklassen an die von Ninject bereitgestellten Klassen Lediglich die konkreten Implementierungen der Fabrikklassen HardwareFactory DataFactory DaemonFactory und ServerFactory nutzen Ninject ber die Klasse NinjectBase um Objekte mittels Dependency Injection zu erzeugen Systementwurf 5 7 Klassen der Client Bibliothek Die Client Bibliothek besteht aus lediglich zwei Klassen die Sketches f r einen Arduino Microcontroller verwendet werden k nnen Orchidund OrchidInstruction Die Klasse Orchid bildet den zentrale
68. und einem dynamischen Typeloading System ist die Anpassung an neue Aufgaben auch ohne Ver nderung der Kernsoftware m glich gilt f r Server Komponente vgl 6 3 2 Der Einsatz von HTTP zur Kommunikation zwischen den einzelnen Bestandteilen des ORCHID Toolkits erlaubt es grunds tzlich jedem Entwickler es f r die Integration von Hardware in ein eigenes Softwareprojekt zu nutzen da jede moderne Programmiersprache ber M glichkeit verf gt HTTP Anfragen zu senden und Server Antworten zu empfangen Anforderungsdefinition Das Toolkit ist nicht an ein Betriebssystem gebunden sondern kann auf allen Systemen ausgef hrt werden d e es erlauben das Mono Framework zu installieren und auszuf hren vgl 4 3 1 Zus tzlich wird das Toolkit unter einer sehr flexiblen Open Source Lizenz ver ffentlicht vgl 4 2 3 um f r die Verwendung in m glichst vielen Projekten geeignet zu sein Die Lizenz erh ht die Wi ederverwendbarkeit und Flexibilit t der Software da auch Weiterentwicklungen und Ver nderungen unter die gleiche oder eine hnliche Lizenz gestellt werden m ssen und so einer breiten Zielgruppe zur Verf gung stehen 4 7 3 Software Ergonomie Die saubere semantische Trennung von Klassen innerhalb des Toolkits f hrt zu einem erleichterten Verst ndnis sowohl der Programmstrukturen als auch der Programmabl ufe Meldungen an Benutzer und Kommunikationspartner sind aussagekr ftig vgl 5 8 und 5 5 1 3 und leicht verst ndli
69. vgl 6 3 2 soll sie in diesem Abschnitt erkl rt werden Ninject nutzt zur Dependency Injection einen sog Kernel dt Kern Dieser dient als zentrale Anlaufstelle f r alle Codeabschnitte Objekte ber Dependency Injection erzeugen wollen Abstrahiert dargestellt 151 ein Ninject Kernel also eine sehr allgemein gehaltene Fabrikklasse vgl 5 3 1 die eine generische Methode zur Objekterzeugung bereitstellt Um einen Ninject Kernel de Lage zu versetzen Objekte zu erzeugen m ssen vor dessen Verwendung die Bindungen zwischen abstrakten Basisklassen und Schnittstellen zu den jeweiligen konkreten Implementierungen bekannt gemacht werden Dies geschieht ber ein sog Modul Ein Modul ist dabei eine beliebige Klasse die von der von Ninject gelieferten Klasse NinjectModule erbt und deren abstrakte Methode Load berschreibt Eine Bindung zwischen einer abstrakten Bas sklasse oder einer Schnittstelle zu der jeweiligen konkreten Implementierung wird der Load Methode des Moduls definiert wie das folgende Listing 27 zeigt public class CustomModule NinjectModule public override void Load Bind lt AbstractClass gt To ConcreteType Bind lt InterfaceClass gt OtherConcreteType Listing 27 Beispiel f r ein NinjectModule Die hier gezeigte Load Methode bindet die konkrete Implementierung ConcreteType an die abstrakte Bas sklasse AbstractClass sowie d e konkrete Implementie
70. warten Vorbedingung FS30 Erfolgsfall Es wird auf eingehende Verbindungen einer Drittsoftware gewartet Fehlerfall Software Server kann nicht auf eingehende Verbindungen warten Abbruch und Neustart der Server Komponente Beschreibung Der Software Server wartet an dem ihm zugewiesenen Port auf eingehende Verbindungen von Drittsoftware Beteiligte Core errers Orechndsortwareserver Kategorie Musskriterium Tabelle 9 FS50 Auf eingehende Drittsoftware Verbindung warten 560 Eingehende Client Verbindung annehmen Vorbedingung FS40 Erfolgsfall Eine eingehende Verbindung eines ORCHID Client wird angenommen die Verarbeitung der Anfrage beginnt Fehlerfall Hardware Server kann eingehende Verbindung nicht annehmen die Anfrage kann nicht verarbeitet werden Beschreibung Geht eine Verbindung an dem Port ein an dem der Hardware Server auf eingehende Verbindungen wartet nimmt er diese entgegen und leitet sie an eine neu erzeugte Instanz eines Hardware Daemons weiter Beteiligte Core e ver erver Orchid Core Daemons O rchidHardwareDaemon Kategorie Musskriterium Tabelle 10 FS60 Eingehende Client Verbindung annehmen ES70 Eingehende Drittsoftware Verbindung annehmen Vorbedingung FS50 Erfolgsfall Eine eingehende Verbindung einer Drittsoftware wird angenommen die Bearbeitung der Anfrage beginnt Fehlerfall Software Server kann eingehende Verbindung nicht annehmen die Anfrage
71. wird Abschlie end werden einige Beispiele f r den Einsatz des Toolkits gegeben 4 2 1 Anwendungsbereich Das ORCHID Toolkit st auf den gleichen Anwendungsbereich ausgelegt w e auch die Arduino Microcontroller Plattform mit der haupts chlich Prototypen und nur selten Projekte f r Produktivumgebungen entwickelt werden Entsprechend sollen auch mit dem Toolkit zum gr ten Teil Prototypen f r Softwareprojekte entwickelt werden ein Einsatz in einer Produktivumgebung ist m glich aber nicht vorgesehen Das Toolkit ist explizit nicht f r den Einsatz in s cherheitskritischen Umgebungen ausgelegt Details zu dieser Einschr nkung k nnen 6 6 1 entnommen werden 4 2 2 Zielgruppe Zielgruppe des Toolkits sind private Softwareentwickler die ber einen oder mehrere Arduino Microcontroller angeschlossene Hardware ein Softwareprojekt einbinden wollen und mindestens ber Grundkenntnisse in der Server Administration der Softwareentwicklung und der Entwicklung mit dem Arduino Microcontroller verf gen Zum Anschluss von Hardware an den Arduino sind nat rlich ebenfalls entsprechende Kenntnisse notwendig Als wichtige Einschr nkung der Zielgruppe gilt dass das Toolkit nicht f r kommerzielle Projekte eingesetzt werden darf vgl 4 2 3 Firmen geh ren nicht per Definition zur Zielgruppe k nnen das Toolkit aber zur Entwicklung eigener Prototypen verwenden sofern diese nicht kommerziell ver ffentlicht werden 4 2 3 Lizenzbedingung
72. 50 byte server 192 168 1 140 char client AbssbrLir 27235 4228 5469 7baal317716 1377 int port 29100 char dev key 8178b0492fad1e60f59706484146f17b4bflafeaba9c2b7dA3db102450cb6b9c18347806 char actor 005 4 2 9 3 ebe orchid mac gateway Subnet Server client id dev key void setup orchid reset void loop raus Listing 64 Initialisierung zum Abrufen von Instruktionen Die GUID des Aktors wird in Zeile 14 definiert und initialisiert Um eine Instruktion von einem ORCHID Server abzurufen stellt die Client Bibliothek die Methode getNextInstruction char zur Verf gung Dieser Methode muss die eindeutige ID des Aktors bergeben werden f r den nach einer auszuf hrenden Instruktion gesucht werden soll diese ID muss dem ORCHID Server bekannt sein da nur Instruktionen f r bekannte Aktoren abgerufen werden k nnen Die Methode liefert ein Objekt vom Typ OrchidInstruction zur ck das alle Daten enth lt die zur Ausf hrung einer Instruktion notwendig sind Das folgende Listing 65 zeigt die Verwendung eines solchen Objekts Handbuch Client Bibliothek void loop rohidinstruction orch1d getNeztlnstructl1onlact r 1d if i isEmpty LE iget ction Orchid ACTION DW if strcemp 1 getValue HIGH 0 digitalNrite actor pin HIGH
73. 68 1 123 29100 Authorization cd0887447e04c15b5128629 04b53c4c4858bble8ff2e8b6bfcb32dc99fb4e7198d72ed2 Connection close Tabelle 70 Protokoll Heartbeat senden Mit diesem Request meldet der durch die GUID 9f476a50 d4e3 11e0 801d 001492396635 identifizierte Client einem ORCHID Server der unter der IP Adresse 192 168 1 123 und Port 29100 erreichbar ist seine Bereitschaft 5 8 5 Instruktion abrufen Ein Client kann Instruktionen f r einen an ihn angeschlossenen Aktor abrufen indem er einen GET Request an einen ORCHID Server sendet Die f r diese Art von Anfrage ben tigten Header Felder und ihr Aufbau werden in Tabelle 71 dargestellt Systementwurf Header Feld bertragener Wert Board ID GUID des Clients der die Anfrage an den Server stellt User Agent Zeichenkette die den Kommunikationspartner als ORCHID Client oder mit dem Toolkit kompatible Drittsoftware identifiziert Host Die IP Adresse des Servers und der Port auf dem sich der Client verbinden m chte Authorization Der Developer Key der verwendet werden soll Allgemeine Form GET lt GUID gt lt GUID gt 1 1 Board ID lt GUID gt User Agent lt STRING gt Host lt IP gt lt PORT gt Authorization lt DEVELOPER KEY gt Connection close Beispiel GET 9 476a50 d4e3 11e0 801d 001492396635 b0ce2688 d56a 11e0 85d1 001492396635 1 1 Board ID 9 f476a50 d4e3 11e0 801d 001492396635 User Agent Orchid Arduino Toolkit Host 192 168 1
74. 844b03 7257 2 463 600 45 7 9494 844 03 7257 4907712 4 9 2 9 Listing 39 bermittlung von Client Informationen Server Antwort Listing 39 zeigt eine beispielhafte Antwort auf einen SEARCH Request Eine solche Antwort enth lt neben allgemeinen Informationen zum angeforderten Arduino z B Name Beschreibung und geografische Position auch die GUIDs der angeschlossenen Sensoren Feld sensors und Aktoren Feld components Dar ber hinaus wird zus tzlich mitgeteilt wann der Arduino zum ersten und zum letzten Mal Verbindung mit dem Server aufgenommen firstseen und lastseen und welche IP Adresse er zuletzt verwendet hat Eine Software die diese Antwort erh lt kann sie analysieren und so umfangreiche Informationen ber einen Client abrufen z B die letzten Sensorwerte f r jeden angeschlossenen Sensor etc oder zahlreiche verschiedene Aktionen ausl sen z B Abschalten aller angeschlossenen Aktoren 5 10 Datenbank Das ORCHID Toolkit nutzt eine MySQL Datenbank zur Datenspeicherung Von Clients bermittelte Sensordaten werden ebenso in der Datenbank gespeichert wie Instruktionen die eine Drittsoftware f r einen Client hinterlegt Dieser Abschnitt der Arbeit besch ftigt sich mit dem Aufbau der Datenbank Die folgende Abbildung 32 zeigt die Struktur der Datenbank in einer bersicht id INT 11 lt gt 1
75. 92396635 f6 f9a4Ac0 dae6b Afcc ald2 5db57feac465 1 1 User Agent Orchid Arduino Toolkit Host 192 168 1 123 8181 Authorization cd0887447e04c15b5128629 04b53c4c4858bble8ff2e8b6bfcb32dc99fb4e7198d472ed2 Limit 10 Connection close Tabelle 75 Protokoll Sensordaten abrufen Der Server verh lt sich bei der Verarbeitung solcher Anfragen hnlich wie bereits in 5 8 5 beschrieben die Pfadangabe nach dem Methodenkennzeichen GET enth lt de GUID des Clients erster Wert und des Sensors zweiter Wert f r den Daten abgerufen werden sollen ber das Header Feld Limit wird bestimmt wie viele Datens tze maximal angefordert werden sollen Soll nur ein Datensatz abgerufen werden dieser entspricht dem aktuellsten Sensorwert kann das Feld ausgelassen oder in ihm der Wert 1 bermittelt werden Um alle Sensordaten abzurufen ein Server jemals f r die Kombination aus Client und Sensor gespeichert hat wird als Limit der Wert bertragen K nnen f r die angegebenen GUIDs keine Sensordaten ermittelt werden antwortet der Server mit HTTP Code 404 Not Found Liegen Daten vor wird eine Antwort mit HTTP Code 200 Systementwurf 22777777777 bermittelt die die aufbereiteten Sensordaten im Message Body enth lt wie das folgende Listing zeigt Zeilenumbr che wurden zur Verbesserung der Lesbarkeit hinzugef gt HTTP 1 1 200 OK Connection close Content Length 199 sensor f6f9a4c0 dae6 4fcc ald2
76. Befehl zudem ein UUID Generator installiert werden dessen Ausgabe als Kennung im Rahmen des Toolkits verwendbar ist apt get install uuid Listing 41 Installationsbefehl f r uuid apt get gt Objekt bezieht sich hier nicht auf eine Instanz einer Klasse sondern gilt als Sammelbegriff f r Clients Sensoren und Aktoren 58 2128 340 282 366 920 938 463 463 374 607 431 768 211 456 Realisierung und Tests Jeder Client jeder Aktor und jeder Sensor m ssen zur Verwendung mit dem ORCHID Toolkit ber eine eindeutige Kennung also eine g ltige GUID verf gen Diese Kennung wird bei allen Anfragen an einen ORCHID Server mit bertragen um das betroffene Objekt eindeutig identifizieren zu k nnen 6 3 2 Dynamisches Typeloading mit Ninject Wie bereits in Abschnitt 5 3 3 beschrieben nutzt die Server Komponente des ORCHID Toolkits das Entwurfsmuster Dependency Injection Abschnitt 5 5 2 erl uterte das eingesetzte Dependency Injection Framework Ninject im Detail In diesem Abschnitt sollen nun Details der Realisierung eines dynamischen Typeloading Systems unter Verwendung von Ninject betrachtet werden 6 3 2 1 Definition Typeloading Unter Typeloading deutsch etwa versteht man das dynamische Laden von Instanzen zur Laufzeit eines Programms Anstatt direkt im Quellcode konkretes Objekt ber den Konstruktor seiner Klasse zu erzeugen wird beim Typeloading stattdessen eine Instanz von einer zentr
77. C60 Erfolgsfall Die Nachricht wurde abgerufen und kann verwendet werden Fehlerfall Die Nachricht kann nicht abgerufen werden Beschreibung Ein ORCHID Client ruft eine Nachricht ber einen SEARCH Request an einen ORCHID Server ab Datenstrukturen Client Kategorie Wunschkriterium Tabelle 47 FC100 Nachricht von ORCHID Server abrufen FC110 Instruktion an ORCHID Server senden Erfolgsfall Die Instruktion wurde auf den ORCHID Server geladen und kann abgerufen werden Fehlerfall Die Instruktion wurde nicht auf den ORCHID Server geladen Beschreibung Ein ORCHID Client kann eine Instruktion f r einen anderen Client ber eine CONNECT Anfrage an einen ORCHID Server senden Datenstrukturen Client Kategorie Wunschkriterium Tabelle 48 FC110 Instruktion an ORCHID Server senden 4 5 Produktdaten Eine Hauptaufgabe des ORCHID Toolkits ist es von ORCHID Clients gemessene Daten zu speichern und abzurufen Die folgenden Tabellen zeigen mit welchen Daten die Server Komponente und die Client Bibliothek arbeiten und geben falls notwendig wichtige zus tzliche Hinweise zu diesen Daten 4 5 1 Server Komponente F r Server Komponente gilt dass die Menge an gespeicherten Daten nur durch den physikalischen Speicher des ausf hrenden Computersystems begrenzt ist Theoretisch k nnen beliebig viele Datens tze gespeichert werden Daten durch ein Wunschkriterium vgl 4 1 2 verwaltet werden m ssen sind ihrem Titel kursiv
78. D lt GUID gt User Agent lt STRING gt Host lt IP gt lt PORT gt Authorization lt DEVELOPER KEY gt Connection close Beispiel SEARCH 1 1 Board ID 9 f476a50 d4e3 11e0 801d4 001492396635 User Agent Orchid Arduino Toolkit Host 192 168 1 123 8181 Authorization cd0887447e04c15b5128629 04b53c4c4858bble8ff2e8b6bfcb32dc99fb4e7198d72ed2 Connection close Tabelle 76 Protokoll Client Informationen abrufen EEE ORCHID Kann der Server die gew nschten Informationen nicht abrufen wird eine Fehlermeldung mit HTTP Code 404 Not Found als Antwort gesendet ansonsten werden die ermittelten Informationen entsprechend dem im folgenden Listing gezeigten Schema bermittelt Zeilenumbr che wurden zur Verbesserung der Lesbarkeit hinzugef gt 1 1 200 Connection close Content Length 433 41088 6 5 4 71 4 40 292 7 0 amp name Test Arduino amp description Ein Arduino zum Testen amp latitude 52550506 amp longitude 13349386 amp firstseen 14 05 2011 22 49 41 amp lastseen 02 09 2011 17 49 216 lastip 192 168 1 145 amp sensors 531la3bbe 2bec 4bff a4c3 c6064594AIf6d amp components fec2b463 600a 45a47 9494 e844b03 72517 2 463 600 45 7 9494 844 03 7257 49c77f2b 0bd9 49a5 a940 50ff8bb2d9c3 amp model Arduino Duemilanove with Ethernet Shield Listing 36 bermittlung von Client Informationen Server Antwort Die Client Informa
79. Die Verwendung der Daten obliegt jedoch dem Server Im Gegensatz zu PUT werden unter Verwendung von POST Daten als neue Teilmenge einer bestehenden Ressource angesehen Erlaubt es einem Client wie POST Daten auf einen Server zu laden Im Gegensatz zu POST werden diese Daten jedoch nicht als Teilmenge einer existierenden Ressource betrachtet sondern als neue eigene Ressource oder ggf als Aktualisierung einer solchen DELETE ber die Methode DELETE kann ein Client einen Server dazu auffordern eine durch einen URI spezifizierte Ressource zu l schen Erlaubt es einem Client die Ver nderungen eines Requests durch andere Hosts falls solche existieren zu berpr fen CONNECT CONNECT ist eine f r Proxy Server reservierte Methode und wird an dieser Stelle nicht weiter behandelt Tabelle 2 HTTP Methoden Es existieren noch weitere nicht im Standard enthaltene Methoden und es ist leicht m glich weitere zu implementieren Die folgende Abbildung 4 zeigt ein Bildschirmfoto der Software Fiddler mit der HTTP Anfragen an einen Server manuell aufgebaut werden k nnen Die abgebildete Auswahlliste enth lt verschiedene weitere HTTP Methoden Parsed Raw Options http www example com POST PUT ler HEAD MOVE TRACE DELETE SEARCH CONNECT PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK OPTIONS Abbildung 4 Screenshot Fiddler Wie aus Listing 1 ersichtlich wird muss die Methode die
80. ENBANK 155 ABBILDUNG 53 DIALOG ZUM IMPORT EINER SOL Dart 155 ABBEDUNGIL USGABE VON en tie ee 155 ABBILDUNG 55 AUFLISTUNG VON DATENBANKTABELLEN IN 156 ABBILDUNG 56 EINGABEMASKE F R NEUE DATENS TZE 156 ABBILDUNG 57 HINZUF GEN EINES NEUEN ORCHID CLIENTS SHELLSCRIPT 197 ABBILDUNG 58 AUSGABE DES REFERENZSERVERS 157 ABBILDUNG 59 SCHALTPLAN DER BEISPIELSCHALTUNG 1 158 ABBILDUNG VERWEIS AUFEINEN A 159 ABBILDUNG 61 FEHLERCODES SERIELLEN MONITOR DER ARDUINO 161 ABBILDUNG 62 EINF GEN VON CREDENTIALS IN PHPMYADMIN 00000 161 ABBILDUNG 63 AUSGABE IM SERIELLEN MONITOR DER ARDUINO 161 ABBILDUNG 64 INFORMATIONSBEREICH DER PROOF OF CONCEPT 2 222 162 ABBILDUNG 65 STEUERELEMENTE ZUM ABRUFEN VON SENSORDATEN 162 ABBILDUNG 66 AUSGABE EINES ABGERUFENEN SENSORWERTS OI 163 ABBILDUNG 67 AUSGABE EINES ABGERUFENEN SENSORWERTS 2 163 ABBILDUNG 68 AUSGABE MEHRERER ABGERUFENER SENSORDATEN IN EINEM DIAGRAMM 163 ABBILDUNG 69 STEUERELEMENTE ZUM SENDEN VON INSTRUKTIONEN 164 ABBILDUNG 70 A
81. ERMITTELN 39 TABELLE 33 20 UNSIGNED INTEGER 39 TABELLE 34 20 CHARACTER BERMITTELN ceeescseceessssenensnsreonnnensnsanenonsnsenonenensonenenonsnnenonsnensonenensnsanenensnene 40 TABELLE 35 20 BOOLEAN URBERMITTELN 40 TABELLE 36 FC20G ZEICHENKETTE BERMITTELN 40 TABELLEDS BERMITTELN E 40 TABELLE 38 LONG BERMITIEEN uch 40 TABELLE 39 FC20J UNSIGNED LONG BERMITTELN 40 TABELLE 40 FC30 HEARTBEAT AN ORCHID SERVER 5 1 40 TABELLE 41 40 INSTRUKTION F R ABRUFEN 41 TABELLE 42 50 INSTRUKTION F R AUSF HREN EEEE AEN 41 TABELLE 43 FC60 ANFRAGE ORCHID SERVER SENDEN 41 TABELLE 44 FC70 AUF EINGEHENDE SERVER ANTWORT 42 TABELLE 45 FC80 EINGEHENDE SERVER ANTWORT AUSLESEN 22 42 TABELLE 46 90 NACHRICHT AUF ORCHID SERVER HOCHLADEN 42 TABELLE 47 FC100 NACHRICHT VON ORCHID SERVER ARBRUEEN 43 TABELLE 48 FC110 INSTRUKTION AN ORCHID SERVER SENDEN 43 TABELLEA49I DS AKFOREN see em enge ee 43
82. HIERARCHIEN DER DATENHALTUNGSKLASSEN 2 2 2222 19 ABBILDUNG 20 BEZIEHUNGEN DER 55 0 90 ABBILDUNG 21 ABH NGIGKEITEN DES TYPELOADING SYSTEMS 90 ABBILDUNG 22 KLASSEN DER EE RETTEN EE EE 91 ABBILDUNG 23 LEBENSZYKLUS EINES 8 0 2 4 0 0 0000 91 ABBILDUNG 24 MULTITHREADING 2 0000 1 93 ABBILDUNG 25 ALLGEMEINE BEARBEITUNG VON 5 8 07 7 94 ABBILDUNG 26 BEARBEITUNG VON CLIENT GET REQUESTS 95 ABBILDUNG 27 BEARBEITUNG VON 5 4 96 ABBILDUNG 28 BEARBEITUNG VON CLIENT TRACE REQUESTS 97 ABBILDUNG 29 BEARBEITUNG VON 56 98 ABBILDUNG 30 BEARBEITUNG VON 5 5 008 99 ABBILDUNG 31 BEARBEITUNG VON DRITTSOFTWARE SEARCH REQUESTS 100 ABBILDUNG 32 DATENBANKSTRUKTUR 101 ABBIEDILNG 33 TYPELOADING E 110 ABBILDUNG 34 AUSGABE VON 113 ABBILDUNG 35 BILDSCHIRMFOTO WIRESHARK unse 117 ABBILDUNG 36 INSTALLATION VON XAMPP FOR LIm
83. HandleGETRequest der Klasse OrchidSoftwareDaemon verarbeitet Zun chst werden die IDs des Clients und des Sensors f r deren Kombination Sensordaten abgerufen werden sollen aus dem Request ausgelesen Ist dies nicht m glich oder tritt dabei ein Fehler auf ist die Anfrage ung ltig und ihre Verarbeitung wird mit einer Fehlermeldung an den Verbindungspartner abgebrochen HTTP Code 400 Bad Request Liegen die IDs f r Client und Sensor vor wird die Methode GetSensorData Guid Guid int bool der Klasse MySglAdapter aufgerufen Diese Methode pr ft ob der bermittelte Sensor tats chlich an den angegebenen Client angeschlossen ist so wird verhindert dass irrt mlich Daten f r einen anderen als den gew nschten Sensor ausgelesen werden Ist dies nicht der Fall wird die Verarbeitung des Requests mit einer Fehlermeldung an den Verbindungspartner HTTP Code 400 Bad Request abgebrochen Ist der Sensor an den angegebenen Client angeschlossen werden die gew nschten Sensordaten aus der Datenbank ausgelesen und an den Verbindungspartner bermittelt HTTP Code 200 OK EEE ORCHID Fragt ein Verbindungspartner nach einem einzelnen Datensatz dem aktuellsten Datensatz der f r den angegebenen Sensor gespeichert wurde wird eine Antwort wie die folgende bermittelt sensor 531la3bbe 2bec 4bff a4c3 c60645943f6edstype INTs amp value 12 amp stamp 3 28 21 PM Listing 37 bermittlung eines einzelnen Sen
84. ID Im Folgenden werden die einzelnen Tabellen und hr Verwendungszweck m Detail beschrieben Tabelle actions Beschreibung Speichert m gliche Aktionen die in einer Instruktion an einen Client zur Ausf hrung ermittelt werden k nnen und dient entsprechend als Mapping Tabelle bertragen wird nur ein numerischer Schl ssel vgl 5 8 Datenfelder id Prim rschl ssel action_code INT 4 Numerischer Schl ssel der an Clients bertragen wird action_name VARCHAR 20 Der Name der Aktion action_description TEXT Eine kurze Beschreibung der Aktion Tabelle 77 Datenbanktabelle actions actors Beschreibung Speichert Grundinformationen ber Aktoren die dem ORCHID Server bekannt sind Jede Zeile in dieser Tabelle steht f r einen an einen Client angeschlossenen Aktor Datenfelder id Prim rschl ssel arduino_id INT 11 Fremdschl ssel arduinos id Der Client an den dieser Aktor angeschlossen ist suid VARCHAR 36 Die GUID des Aktors name VARCHAR 200 Der Name des Aktors frei w hlbar description TEXT Die Beschreibung des Aktors frei w hlbar Tabelle 78 Datenbanktabelle actors Beschreibung Speichert Grundinformationen ber Arduino Microcontroller die einem ORCHID Server bekannt sind Jede Zeile in dieser Tabelle steht f r einen Client Datenfelder suid VARCHAR 36 Die GUID des Clients last_ip VARCHAR 7 Die letzte IP mit der sich der Client mi
85. NG 53 G LTIGE METHODE ZUR BEHANDLUNG VON 8 136 LISTING 54 PFAD ZUM SKETCH VERZEICHNIS UNTER MICROSOFT WINDOWS 138 LISTING 55 PFAD ZUM SKETCH VERZEICHNIS UNTER LINUN 138 LISTING 56 REFERENZIERUNG DER 0 2 139 LISTING 57 GRUNDGER ST EINES SKETCHS 140 LISTING 58 EINBINDUNG DER CLIENT BIBLIOTHEK 140 LISTING 59 ERZEUGUNG EINES ORCHID OBJEKTS 1 020220000000 00 011000 140 LISTING 60 ERZEUGUNG EINES ORCHID OBJEKTS OO 141 8 61 INITIALISIERUNG EINES ORCHID OBJERTS 0222000000 0 0 001 142 LISTING 62 SENDEN EINES HEARTBEATS un aa en 142 eene ee 143 LISTING 64 INITIALISIERUNG ZUM ABRUFEN VON INSTRUKTIONEN 144 LISTING 65 ABRUFEN EINER 22556 nal 145 LISTING 66 DIREKTES AUSF HREN EINER INSTRUKTION 1 146 FEHLERMEEDUNG DER ARDUINO 2522 ae aan 147 LISTING 68 FEHLERBEHEBUNG DURCH EINBINDUNG VON ETHERNET H 147 LISTING 69 BEISPIELHAFTES HEADER FELD ZUR NHALTSVERSCHL SSELUNG 3 32 148 LISTING 70 HINZUF GEN DES NEUEN HEADER FELDS 148 LISTING 71 HINZUF GEN DES NEUEN H GaDpR FtLDgOh 149 LISTING 72 ERWEITERUNG DER
86. NUS 120 ABBILDUNG 37 ERZEUGUNG DER 121 ABBILDUNG 38 IMPORT DER DATENBANKSTRUKTUR 121 ABBILDUNG 39 REFERENZIERUNG DER 9 121 ABBILDUNG 40 REFERENZIERUNGSDIALOG VON 122 ABBILDUNG 41 REFERENZIERTE 1 1 1 1 0 122 ABBILDUNG 42 HAUPTFENSTER DER ARDUINOIDP 137 ABBILDUNG 43 BIBLIOTHEKSIMPORT IN DER ARDUINO 138 ABBILDUNG 44 AUSGABE VON GOEN 151 ABBILDUNG 45 ERZEUGUNG MEHRERER GUIDS MIT GOEN 151 ABBILDUNG 46 ERZEUGUNG EINES DEVELOPER KEYS MIT 1 1 151 ABBILDUNG 47 AUSWAHL EINER VIRTUELLEN 152 ABBILDUNG 48 DESKTOP DER VIRTUELLEN 5 153 ABBILDUNG 49 STARTEN VON 02 0 0 06000 00000000000 154 ABBILDUNG 50 ANMELDUNG AM LOKALEN WEBSERVER 154 ABBILDUNG 51 LOGIN IN 155 ABBILDUNG 52 DIALOG ZUR ERZEUGUNG EINER NEUEN DAT
87. ORCHID Entwicklung eines Toolkits zur Integration der Arduino Microcontroller Plattform n Softwareprojekte AUTOR Stefan Matyba Medieninformat k Master Matrikelnummer 758356 BETREUUNG DURCH BEUTH HOCHSCHULE INS F R TECHNIK u BERLIN University of Applied Sciences Beuth Hochschule f r Technik Berlin Luxemburger Stra e 10 13353 Berlin Betreuerin Prof Dr Kar n Schiele Gutachter Prof Dr Ing Ren G rlich Inhaltsverzeichnis E REEL NEBENAN 1 1 1 E 1 1 2 2 Dokumentkonvenfionen 2 1 3 Englische Bestiffe und Namen ae a 3 Nanon e ee 3 1 5 gt ante 8 3 2 Tele ee ee ee 4 24 Grondlagen Eege 4 2 1 1 Microcontroller allgeme nenne 4 2 2 Die Arduino Microcontroller Plattform 5 22 RN KE 9 22 7201 9 22 Aniragen u een 10 23252 12 2 2 4 ats Ehlers 12 2 2 5 Verwendung von ORCHID Toolkit 00000000 13 2 3 Technolosische E 14 2 3 1 ON er E een 14 232 15 e 17 34 DI AR A 17 3 1 1 EE 17 3 1 2 17 3 1 3 E 18 3 1 4 E
88. QUEST VERARBEITEN 34 TABELLE 18 FS 140 CLIENT INSTRUKTION ABRUEEN 35 TABELLE 19 FS150 CLIENT INSTRUKTION SPEICHERN 2 35 TABELLE 20 FS160 CLIENT INFORMATIONEN ABRUFEN 35 TABELLE 21 FS170 UNG LTIGE ODER FEHLERHAFTE ANFRAGE BEHANDELN 36 TABELLE 22 FS180 NACHRICHT SPEICHERN 120 0 002220 36 TABELLE 23 FS190 NACHRICHT SPEICHERN CLIENT 36 TABELLE 24 FS200 NACHRICHT AN ORCHID CLIENT 2 00 37 TABELLE 25 5210 BERECHTIGUNGEN F R ORCHID CLIENT ABRUFEN 2 2 37 TABELLE 26 FS220 CLIENT INSTRUKTION SPEICHERN CLIENT 38 TABELLE 27 FS230 DEVELOPER KEY 2 38 TABELLE 28 FC10 ORCHID CLIENT INSTANZ ERZEUGEN 39 TABELLE 29 20 SENSORWERT ORCHID SERVER 1 39 TABELLE 30 20 INTEGER BERMITTELN 39 TABELLE 31 FC2OB FLOAT 2 6 00660 000000000000000000000000000 39 TABELLE 32 20 DOUBLE ORB
89. RACE Request eines Clients wird von einer Instanz von OrchidHardwareDaemon verarbeitet Die im Request enthaltenen Daten werden gelesen und der Client der Datenbank aktualisiert Datenstrukturen Orchid Orchndkterpreguest Orchid Hereregueschvpe Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orchid Core Data MySqlAdapter Kategorie Musskriterium Tabelle 17 FS130 Heartbeat Request verarbeiten Anforderungsdefinition FS140 Client Instruktion abrufen Vorbedingung FS100 Request Typ GET angenommen durch Hardware Server Erfolgsfall Instruktion f r Client wurde aus der Datenbank ausgelesen in der Datenbank aktualisiert und an den anfragenden Client bermittelt Fehlerfall Datensatz kann nicht aktualisiert werden Fehlermeldung an Client Beschreibung Ein GET Request eines Clients wird von einer Instanz von OrchidHardwareDaemon verarbeitet Die gesuchte Instruktion wird aus der Datenbank abgerufen und an den anfragenden Client bermittelt Datenstrukturen EE EE ae er Oron T ne Tu Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orchid Core Data MySqlAdapter Kategorie Musskriterium Tabelle 18 FS140 Client Instruktion abrufen 5150 Client Instruktion speichern Vorbedingung FS100 Request Typ PUT angenommen durch Software Server Erfolgsfall Instruktion f r einen Client wur
90. RWERTS SERVER ANTWORTI 98 LISTING 38 BERMITTLUNG MEHRERER SENSORWERTE SERWVER ANTWORT 98 LISTING 39 BERMITTLUNG VON CLIENT INFORMATIONEN SERVER ANTWORT 101 LISTING 40 STYLEGUIDE ZU EINR CKUNGEN UND KLAMMERN 106 LISTING 41 INSTALLATIONSBEFEHL F R UUID 0 0 0 2 010 000 0 6 108 LISTING 42 BEISPIEL EINFACHES 109 LISTING 43 MINIMALPROJEKT ORCHID SERVER 123 LISTING 44 INITIALISIERUNG DES 5 8 65 0 0 00 000000000000 130 LISTING 45 VERBESSERTES MINIMALPROJEKT ORCHID SERVER 1 LISTING 46 GRUNDGER ST CUSTOMHARDWAREDAEMON 000000000 132 LISTING 47 KONSTRUKTOR CUSTOMHARDWAREDAEMON 2 133 LISTING 48 BERSCHREIBEN VON HANDLEREQUEST 2 1 2 060 006 6000100100 80 133 LISTING 49 METHODE ZUR BEHANDLUNG VON IRACE Rtrourpsrg 134 LISTING 50 ANPASSUNG DER KONFIGURATIONSDATEI eeesseeeesssssessnnssensnnssennnenennnnenennnensnnnnenensnnsnennenensnnenenennen 134 LISTING 51 VER NDERUNG DER METHODE ZUR ANFRAGEBEHANDLUNG 135 LISTING 52 UNG LTIGE METHODE ZUR BEHANDLUNG VON HEAD REQUESTS 135 LISTI
91. Request data Limit 10 18 Auto refresh off 8 Auto refresh off Abbildung 65 Steuerelemente zum Abrufen von Sensordaten Endbenutzerhandbuch ber den Button Request last sensor data wird der letzte Sensorwert den ein Client f r einen Sensor an den Server bermittelt hat abgerufen Request data ruft mehrere Sensorwerte ab die Anzahl kann im nebenstehenden Eingabefeld bestimmt werden Wird der letzte Sensorwert abgerufen ver ndert sich die Anzeige wie in Abbildung 66 dargestellt 7 7 1 ET 1393 ITNT A 222420 54 11 0 8879 080027 251 7 23 INT measured 12 32 35 9 9 20 7 1 2 Abbildung 66 Ausgabe eines abgerufenen Sensorwerts 1 Der Ausgabe kann entnommen werden dass der letzte f r den Sensor mit der GUID ba222420 da54 11e0 8879 080027c251f7 ermittelte Sensorwert 23 betrug und um am 09 09 2011 um 00 32 35 Uhr gemessen wurde Die Drittsoftware interpretiert diesen Wert selbst ndig als die Lampe ist eingeschaltet und zeigt entsprechend das 1 der obigen Abbildung dargestellte Bild an Ein h herer Sensorwert der Schwellenwert kann der Datei orchid php angepasst werden w rde bedeuten dass weniger Licht auf den Sensor f llt Entsprechend w rde s ch auch die Darstellung ver ndern wie in der folgenden Abbildung demonstriert wird Last sensor data for ba222420 da54 11e0 8879 080027c251
92. S180 Nachricht speichern Drittsoftware FS190 Nachricht speichern gesendet durch ORCHID Client Vorbedingung FS100 Request Typ POST angenommen durch Hardware Server Erfolgsfall Nachricht wurde gespeichert und kann abgerufen werden Fehlerfall Nachricht wurde nicht gespeichert Fehlermeldung an Verbindungspartner Beschreibung Ein POST Request eines Clients wird durch eine Instanz von OrchidHardwareDaemon verarbeitet Die notwendigen Informationen ber die zu speichernde Nachricht werden der Anfrage entnommen und die neue Nachricht der Datenbank gespeichert Datenstrukturen Orchid core Rreguezscer OrchridHecpreguese Orchid Cor2e Hrrpkegueserype Orchad core Data Mess ge Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orchid Core Data MySqlAdapter Kategorie Wunschkriterium Tabelle 23 FS190 Nachricht speichern Client Anforderungsdefinition FS200 Nachricht an ORCHID Client bermitteln Vorbedingung FS100 Request Typ SEARCH angenommen durch Hardware Server Fehlerfall Nachricht wurde nicht bermittelt Fehlermeldung an Client Beschreibung Ein SEARCH Request eines Clients wird durch eine Instanz von OrchidHardwareDaemon verarbeitet Die notwendigen Informationen ber eine zu versendende Nachricht werden der Anfrage entnommen die entsprechende Nachricht aus der Datenbank ausgelesen und an den anfragenden ORCHID Client bermittelt Datenstrukturen Core neomer omeee
93. Server hat die maximale Zeitspanne zwischen Anfrage und Antwort berschritten 5 Es wurden keine Daten bermittelt 5 ORCHID SERVER ERROR Ein interner Serverfehler trat auf 6 ORCHID UNKNOWN VALUE Der Server hat Daten bermittelt die nicht verwendet werden k nnen 7 ORCHID BAD REQUEST Der vom Client bermittelte Request war ung ltig oder fehlerhaft 8 ORCHID_UNAUTHORIZED Der Server hat die Anfrage abgewiesen da der Client sich nicht ordnungsgem authentifizieren konnte Tabelle 101 Fehlercodes 8 5 Problembehebung Es kann vorkommen dass sich ein Sketch nach der Einbindung der Client Bibliothek nicht mehr kompilieren l sst Beinhaltet die entsprechende Fehlermeldung den im folgenden Listing gezeigten Text muss zus tzlich zur Client Bibliothek auch die Ethernet Bibliothek eingebunden werden error Ethernet h No such file or directory Listing 67 Fehlermeldung der Arduino IDE Tritt dieser Fehler auf muss die in Listing 68 gezeigte Zeile am Anfang des Sketches hinzugef gt werden include lt Ethernet h gt Listing 68 Fehlerbehebung durch Einbindung von Ethernet h 8 6 Ver nderung und Erweiterung der Client Bibliothek Die Ver nderung und Erweiterung der Client Bibliothek wird im Folgenden exemplarisch beschrieben Dazu wird zun chst als Ver nderung den Methoden mit denen Sensordaten auf einen ORCHID Server geladen werden ein neues Header Feld hinzugef gt
94. Server stellt mit HTTP Code 401 Unauthorized beantwortet Um dem neuen Client alle Operationen zu erlauben muss ein Eintrag in die Datenbanktabelle credentials vorgenommen werden wie Abbildung 62 zeigt arduino_id int 11 Neuer Client 15 Send messages tinyint 1 1 receive messages tinyint 1 1 upload_sensor_data tinyint 1 1 request_instructions tinyint 1 1 can_instruct_others tinyint 1 1 Abbildung 62 Einf gen von Credentials in phpMyAdmin Ist dieser Eintrag gespeichert ist es dem neuen Client erlaubt jede Operation auf dem Server durchzuf hren um eine Operation zu verbieten muss als Wert 0 eingetragen werden Die Ausgabe im seriellen Monitor ver ndert sich entsprechend ohne Server Neustart dev ttyUSBO Push 0 Execute 4 Push 0 Execute 4 Push 0 Execute 4 19600 bad v Abbildung 63 Ausgabe im seriellen Monitor der Arduino IDE ORCHID Das Hochladen von Sensordaten ist nun m glich die Ausf hrung der n chsten Instruktion wird erwartungsgem mit Fehlercode 4 abgebrochen da auf dem Server bisher keine Instruktionen f r den neuen Client vorliegen 10 8 Drittsoftware einbinden Instruktionen werden von Drittsoftware an einen ORCHID Server bermittelt die nicht Bestandteil dieser Arbeit st Als Proof of Concept befindet sich aber eine in PHP implementierte Bibliothek und eine entsprechende Demonstrationss
95. Stream gekapselt Eine solche Instanz wird von der Methode ParseRequest erwartet die von der Klasse AHttpReguestParser angeboten wird und den Datenstrom in eine komfortablere Datenstruktur vom Typ AHttpRequest berf hrt In Zeile 5 wird der aktuelle Request den die Instanz der neuen Daemon Klasse verarbeitet auf das Ergebnis der Methode ParseRequest 155 ORCHID gesetzt Die Eigenschaft Request enth lt danach die aufbereitete HTTP Anfrage des Clients oder ist leer Ist Request leer wird Zeile 7 die Verarbeitung abgebrochen Sind Daten in Request vorhanden wird ber de HTTP Methode der aufbereiteten Anfrage this Request ReguestType ermittelt welche Methode zur Verarbeitung der Anfrage aufgerufen werden soll F r dieses Beispiel ist insbesondere Zeile 13 interessant da die Behandlung von TRACE Anfragen ver ndert werden soll Um eine TRACE Anfrage eines Clients zu verarbeiten wird die Methode HandleTRACERequest aufgerufen Solange sie nicht in der neuen Klasse berschrieben wird handelt es sich dabei um die urspr ngliche Methode aus OrchidHardwareDaemon In Zeile 18 jedoch eine neue Methode mit dem gleichen Namen deklariert weshalb der Aufruf in Zeile 13 nun die Methode der neuen Klasse aufruft und die urspr ngliche Behandlung der Anfrage nicht mehr stattfindet Die Behandlung der TRACE Anfrage muss nun dem in 5 8 beschriebenen Protokoll folgend implementiert werden Der Einfachheit halber wir
96. T Compiler der gt CLR bzw der gt Mono Runtime in ausf hrbaren Maschinencode bersetzt wird Common Language Infrastructure beschreibt eine allgemeine Entwicklungsinfrastruktur f r Anwendungen die bez glich hrer Ausf hrung unabh ngig von der verwendeten Programmiersprache und der ausf hrenden Systemumgebung sind In einer Cl ent Server Infrastruktur ist Client derjenige Kommunikationspartner der eine Anfrage an einen gt Server sendet also derjenige der Kommunikation initialisiert Common Language Runtime Siehe gt Mono Framework Credentials CRLF Daemon Delegate Dependency Injection Developer Key DI DLL Drittsoftware Framework Gateway Geolocation gt GPS Als Credentials werden im Rahmen dieser Arbeit die Berechtigungen eines gt ORCHID Clients auf einem gt ORCHID Server bezeichnet D Die Zeichenfolge Carriage Return gefolgt von Line Feed r n Wird als Zeilenumbruch verwendet und trennt HTTP Transaktionen gt Header voneinander sowie den gt Message Header vom gt Message Body In UNIX und hnlichen Systemen wird ein Systemprozess der m Hintergrund l uft als Daemon bezeichnet Im Rahmen dieser Arbeit werden Daemons von gt ORCHID Servern erzeugt um Anfragen von gt ORCHID Clients zu verarbeiten und zu beantworten Ein Objekt das als Mittelsmann zwischen zwei anderen Objekten auftritt wird als Delegate bezeichn
97. USGABE VON CLIENT JNPORMATIONEN 164 14 Anhang Tabellenverzeichnis TABELLE 1 PREIS BERSICHT ATMEGA MICROCONTROLLER 5 KA CECR SR E Ce KEE 11 EE AUSGEW HLTE B DER une eege 12 TABELLE 4 HI IPSTATUS CODES EE 13 TABELLE 5 FS10 SERVERKONFIGURATION EINLESEN 001 31 TABELLE 6 FS20 HARDWARE SERVER STARTEN 31 TABELLE ES 30 SOFTWARESSERVER STARTEN E 31 TABELLE 8 FS40 AUF EINGEHENDE CLIENT VERBINDUNG 1 31 TABELLE 9 FS50 AUF EINGEHENDE DRITTSOFTWARE VERBINDUNG 3 32 TABELLE 10 FS60 EINGEHENDE CLIENT VERBINDUNG 32 TABELLE 11 570 EINGEHENDE DRITTSOFTWARE VERBINDUNG ANNEHMEN 1 32 TABELLE 12 580 EINGEHENDE ANFRAGE AUSLESEN 33 TABELLE 13 590 GELESENE ANFRAGE TRANSFORMIEREN 33 TABELLE 14 5100 REQUEST TYP BESTIWMMEN 33 TABELLE 15 5110 SENSORDATEN SPEICHERN 34 TABELLE 16 PS 120 SENSORDATEN ABRUFEN eeneg 34 TABELLE 17 5130 HEARTBEAT RE
98. Verlauf der Arbeit aber detailliert beschrieben werden Aufbau einer HTTP Verbindung zu einem ORCHID Server Senden von gemessenen Sensordaten an einen ORCHID Server Senden von Heartbeats an einen ORCHID Server Anfordern von Anweisungen von einem ORCHID Server Auslesen von Anweisungen als HTTP Antwort von einem ORCHID Server gesendet wurden Ausf hren einer von einem ORCHID Server erhaltenen Anweisung Zus tzliches Musskriterium ist die Implementierung eines Referenz Sketchs der Funktionen verwendet um mit einem ORCHID Server zu kommunizieren l Eine Heartbeat Anfrage ein Heartbeat ist eine Anfrage die dem Server lediglich mitteilt dass der sendende Client bereit ist vgl auch 5 8 Anforderungsdefinition 4 1 1 3 Drittsoftware Da das ORCHID Toolkit einen Entwickler n d e Lage versetzen soll beliebige Hardware vgl Abschnitt 0 eigene Softwareprojekte einzubinden muss dieser Arbeit als Machbarkeitsnachweis eine entsprechende Software beiliegen die die diesem Abschnitt beschriebenen Funktionen des Toolkits nutzt um mit Hardware zu kommunizieren Aus diesem Grund wird als dritter Softwarebestandteil der Arbeit eine PHP Bibliothek entwickelt die die folgenden Kriterien erf llt Abrufen von Sensordaten von einem ORCHID Server einzelner Datensatz Abrufen von Sensordaten von einem ORCHID Server mehrere Datens tze Hochladen von Anweisungen f r einen ORCHID Client auf ei
99. Zusammenfassend kann die Verwendung des ORCHID Toolkits mit den in der folgenden Tabelle genannten Schritten beschrieben werden wobei die Installation entsprechender Software und ein vorhandener Developer Key vorausgesetzt werden Beschreibung 1 Einrichtung der MySQL Datenbank auf dem Server und Import der Mindestdaten 2 Erzeugung von GUIDs f r jeden Client Sensor und Aktor der mit dem Toolkit verwendet werden soll 3 Eintragung der GUIDs in die entsprechenden Datenbanktabellen auf dem Server 4 Aufbau einer Schaltung mit den Sensoren und Aktoren die dem Server bekannt sind 5 Implementierung eines Sketchs der die Sensoren und Aktoren anspricht und die Client Bibliothek einbindet 6 Festlegung der Berechtigungen f r den Client auf dem Server 7 Implementierung einer Drittsoftware die mit einem ORCHID Server kommunizieren kann Tabelle 106 Zusammenfassung der Toolkit Verwendung 166 ORCHID 11 Zusammenfassung Im Folgenden wird abschlie end zusammengefasst welche Schl sse aus den m Verlauf dieser Arbeit gewonnen Erkenntnissen gezogen werden k nnen r ckblickend Auswahl der verwendeten Technologien bewertet und eine Aussage ber den Erfolg der Arbeit getroffen Im Anschluss daran wird ein Ausblick auf das Weiterentwicklungspotential der im Rahmen der Arbeit entwickelten Software gegeben 11 1 R ckblick Im Verlauf dieser Arbeit wurde gezeigt wie durch Kombination verschiedener Technologien eine
100. a yield return data Listing 19 Extension Method mit Lambda Expression Die hier gezeigte Extension Method Filter erwartet als Parameter eine Liste von Sensordaten sie erweitert also Klasse List lt ASensorData gt und ein Pr dikat eine Lambda Expression Sie geht alle Elemente der bergebenen Liste durch und pr ft f r jedes Element ob das Pr dikat f r dieses Element den Wert true liefert Ist des der Fall wird das Element zur ckgegeben ansonsten verworfen Um diese Extension Method m eigenen Code verwenden zu k nnen muss ein Entwickler d e Lambda Expression angeben die als Pr dikat bergeben werden soll private IEnumerable lt ASensorData gt FilterSensorData List lt ASensorData gt list return list Filter x gt x DataType INT Listing 20 Exemplarische Lambda Expression Im obigen Beispiel wird angenommen dass der Methodenparameter list eine ungefilterte Liste von Sensordaten enth lt Ein Entwickler m chte eventuell aber nur Sensordaten erhalten die Integer Werte enthalten gekennzeichnet durch das K rzel INT Mit der Lambda Expression x gt x DataType INT werden genau diese Werte gefiltert Die Expression wird gelesen als f r pr fe ob x DataType gleich ist und liefert den Wahrheitswert dieser Aussage zur ck In der Extension Method wird diese Lambda Expression als Pr dikat auf jedes Element der bergebenen Liste angewendet a
101. abe Viele elektronische Ger te k nnen oft auch ohne Modifikation der Ger te selbst ber das Toolkit an einen ORCHID Server angebunden und ber diesen von einer Drittsoftware angesteuert werden 4 2 4 4 K nstlerische Projekte Ebenso wie die Automatisierung bestimmter Aufgaben oder ganzer Wohnbereiche sind mit dem ORCHID Toolkit auch k nstlerische Projekte realisierbar k nstlerisch bezieht sich hier auf die kreative Verwendung elektronischer Bauteile Im September 2001 begann ein Projekt des Chaos Computer Club CCC in Berlin namens Blinkenlights 34 Dabei wurden die oberen acht Stockwerke eines Geb udes Haus des Lehrers am Alexanderplatz in Berlin mit Lampen versehen die von einem zentralen Computer gesteuert werden konnten Das Projekt bot u a die M glichkeit Pixelgrafiken maximal 8x18 Pixel mit diesen Lampen darzustellen Die folgende Abbildung 9 aufgenommen durch Tim Pritlove einen der Mitbegr nder des Projekts zeigt eine Luftansicht von Blinkenlights vom Berliner Fernsehturm aus Im mittleren Bereich ist das Haus des Lehrers zu sehen auf dessen Fassade zum Zeitpunkt der Aufnahme ein Herz dargestellt wurde Abbildung 9 Blinkenlights Eine solche Installation kann entsprechenden Aufwand vorausgesetzt auch mit dem ORCHID Toolkit realisiert werden 33 http www ccec de 4 http www blinkenlights net 9 Quelle http commons wikimedia org wiki File Project blin
102. actory EZ BuildHardwareDaemon BuildSoftwareDaemon Serverfactory ZZ ZZ BuildHardwareServer AHardwareServer BuildSoftwareServer ASoftwareServer e BuildHardwareDaemon BuildSoftwareDaemon OrchidHardwareDaemon Abbildung 15 Fabriken f r Server und Daemons Wie Abbildung 15 darstellt gibt es zur Erzeugung von Server und Daemon Instanzen jeweils eine Fabrikklasse AServerFactory ServerFactory und ADaemonFactory DaemonFactory Jede deser Fabrikklassen kann zwei verschiedene Klassen nstanziieren HardwareServer und SoftwareServer bzw HardwareDaemon und SoftwareDaemon Diese Doppelung wurde bewusst implementiert da die Klassen die durch die gezeigten Fabriken erzeugt werden semantisch eng miteinander verbunden sind eine Aufteilung in insgesamt vier Fabrikklassen erschien nicht sinnvoll 5 3 1 1 Erweiterbarkeitsvorteile Verwendet ein Entwickler die Server Komponente und m chte eine konkrete Klasse selbst neu implementieren ist dies ohne Ver nderung der bisherigen Klassen m glich An einem Beispiel soll dies im Folgenden verdeutlicht werden Bloom bloom new Bloom new ServerFactory new DaemonFactory bloom Blossom Listing 7 Erzeugung eines Standard ORCHID Servers Listing 7 zeigt die Erzeugung eines ORCHID Servers entsprechend der Referenzimplementierung Die Klasse Bloom verf gt ber einen
103. alen Stelle angefordert Der anfordernden Klasse ist zu diesem Zeitpunkt die konkrete Instanz unbekannt sie kennt lediglich die abstrakte Bas sklasse oder eine Schnittstelle F r gew hnlich existiert zu diesem Zweck eine zentrale Verwaltungsklasse die Methoden bereitstellt die eine Instanz einer konkreten Klasse auf Wunsch erzeugen und zur ckgeben Dieses Verfahren kann als statisches Typeloading bezeichnet werden da hier die konkreten Klassen im Code fest kodiert sind und ein Austausch nur durch Ver nderung der entsprechenden Codestellen und eine Neukompilierung des Programmcodes m glich ist Klassische Objekterzeugung SomeType instance new SomeType Objekterzeugung mit Typeloading instance TypeDispatcher Createlnstance Listing 42 Beispiel f r einfaches Typeloading Listing 42 zeigt ein Beispiel f r einfaches statisches Typeloading im direkten Vergleich zur klassischen Objekterzeugung ber den Konstruktor der konkreten Klasse SomeType Schon aus diesem einfachen Beispiel wird ersichtlich dass Typeloading die Kopplung zwischen Klassen stark verringern kann Stelle im Code an der die Objekterzeugung stattfindet ist unabh ngig von der Definition der konkreten Klasse im Gegenteil zur klassischen Objekterzeugung bei der die konkrete Klasse bekannt sein muss da ansonsten der Konstruktor nicht aufgerufen werden kann Die Klasse TypeDispatcher ist im obigen Beispiel daf r zust ndig
104. ass genannt wird BindingVerifierClass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data ABindingVerifier gebunden werden soll BindingVerifierClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt BindingVerifierClass genannt wird CredentialsClass Der volle Name der konkreten Implementierung der Klasse die 252112 dere gebunden werden soll CredentialsClassAssembilyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt gt CredentialsClass genannt wird DatabaseAdapterClass Der volle Name der konkreten Implementierung der Klasse dies ann 252110 core Am tabaseAdapter gebunden werden soll DatabaseAdapterClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt gt DatabaseAdapterClass genannt wird DataFactoryClass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data ADataFactory gebunden werden soll DataFactoryClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt in gt DataFactoryClass genannt wird GeolocationClass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data AGeolocation gebunden werden soll GeolocationClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die gt Ge
105. aten au EE 142 8 4 4 Abrufen von Instruktionen EE 143 6 4 5 Direktes Ausf hren einer Instruktionen u 146 8 4 6 R ckgabewerte und Fehlercodes verwenden 000 146 8 5 Problembebebuns eu une 147 8 6 Ver nderung und Erweiterung der Client Bibliothek 22000 0000 147 8 6 1 N 148 8 6 2 a A 149 9 E 151 9 1 ee en 151 SE 151 10 Endbenutzerhandb uch nee ae 152 ee ae ee ee 152 102 Einrichtung der virtuellen Maschiner ae 152 10 3 bersicht waste east 153 10 4 Einrichtung der MySQL Datenbank 154 10 5 FiinzutusenemesORCHID EE 155 10 5 1 Hinzuf gen mit 156 10 5 2 Hinzuf gen ber die Kommandozeile 157 10 6 Konfiguration und Start des ORCHID Servers 157 10 7 Einbindung GER EES 158 10 8 Drittsortware eindinden as ee 162 EECHELEN 162 10 52 Eeer esse 164 10 8 5 Chent Informatisnenabrufen uunnc Ee 164 10 9 Zusammenfassung en ei Essen 165 11 Zusammen as ee
106. ben das m Rahmen dieser Arbeit entwickelte Toolkit und damit Konkurrenzprodukte sind Dabei wird analysiert ob diese Produkte alle Anforderungen erf llen die an das ORCHID Toolkit gestellt werden 3 1 1 Allgemeines Die Analyse eines Konkurrenzprodukts in den folgenden Abschnitten beinhaltet auch jeweils die Pr fung ob dieses Produkt neben dem Funktionsumfang den das ORCHID Toolkit bietet auch die anderen genannten Anforderungen wie Quelloffenheit und Kostenfreiheit erf llt Propriet re Produkte oder solche deren Einsatz die Zahlung von Lizenzgeb hren erfordert gelten im Rahmen dieser Analyse als L sungen die als nicht geeignet erscheinen die gestellten Anforderungen zu erf llen 3 1 2 EZ Control Die Produkte der Reihe EZ Control dienen zur Heimautomatisierung Grunds tzlich wird ein Ansatz verfolgt der dem des ORCHID Toolkits hnelt Steuerger te werden in ein Netzwerk eingebunden und nehmen Daten von Sensoren entgegen oder schalten Aktoren Die Bedienung erfolgt durch eine Drittsoftware z B ber einen Webbrowser oder ein mobiles Endger t Die folgende Abbildung Quelle Herstellerwebsite 13 zeigt ein solches Steuerger t Abbildung 5 EZ Control Steuerger t 51 Die Produkte aus der Reihe EZ Control werden als Systemprodukte vertrieben d h dass ein Anwender eine Basisstation wie in der obigen Abbildung zu sehen erwirbt und ber Lizenzen und entsprechende Firmware verschi
107. beschriebenen Nachdem die Schaltung aufgebaut und sowohl der Client als auch die an diesen angeschlossenen Komponenten dem Server bekannt gemacht wurden kann ein Sketch entwickelt werden der die Funktionen der Client Bibliothek nutzt Da die Entwicklung von Sketches mit der Client Bibliothek bereits 8 4 ausf hrlich beschrieben wurde wird an dieser Stelle nur der Code des Beispiel Sketchs gezeigt ohne im Detail darauf einzugehen Kommentare wurden aus dem nachstehenden Listing 73 entfernt eine kommentierte Version befindet sich auf dem dieser Arbeit beiliegenden Datentr ger vgl Abschnitt 17 ORCHID include lt Ethernet h gt include lt Strings h gt Finclude lt rchidlinstrucricn gt include lt Orchid2 h gt byte 1 00 0X39 0 92 DIL 086586 0835 byte gateway 192 168 1 1 pyte subnet 1 255 252 255 U byte ip 192 168 1 146 byte server 192 168 1 117 int port 29100 ehar arduino id Passsrzee 09343 L1e0 34337 023002 722312 T sensor ba222420 9354 1120 33 7970800270231177 led 1detserl22504 2324 1120 BE50 TED O2 E25 127 char devkey a2da24f8b064af8fdba7e31da4e2518f4b5785e307955723adf5da9fa604838f187ca324 oreh1d mac gateway server ardu no devkey void setup Serial begin 9600 delay 1500 pinMode 8 OUTPUT orchid reset void loo
108. bracht ffnende und schlie ende geschweifte Klammer sind exakt gleich weit einger ckt Von dieser Regel ausgenommen sind geklammerte Bl cke die nur eine einzelne Anweisung enthalten Optionale geschweifte Klammern werden immer gesetzt Das folgende Listing zeigt die wichtigsten Regeln an einem Beispiel public class IndentationDemo private number 1 public int Number get return chis number public IndentationDemo int number if number gt 0 this number number else thiis number number 1 Listing 40 Styleguide zu Einr ckungen und Klammern Realisierung und Tests 6 1 2 Sprache und Namenskonventionen Variablen Methoden Klassen und Namespaces werden grunds tzlich mit englischen Namen versehen Kommentare s nd ebenfalls ausschlie lich englischer Sprache verfasst 66 Bezeichner werden entweder im CamelCase oder im PascalCase geschrieben CamelCase bezeichnet eine Schreibweise bei der ein Begriff der eigentlich aus mehreren W rtern besteht z B IndentationDemo in Listing 40 in einem Wort zusammengefasst wird und anstatt der Worttrennung mittels Leerzeichen jedes ehemals eigenst ndige Wort mit einem Gro buchstaben beginnt aus Indentation demo wird entsprechend ndentationDemo PascalCase ist eine Sonderform des CamelCase bei der auch der Anfangsbuchstabe eines Bezeichners stets ein Gro buchs
109. ch Als nat rliche Sprache innerhalb des ORCHID Toolkits zum Einsatz kommt wurde Englisch gew hlt Dies gilt sowohl f r Meldungen der Toolkt Komponenten als auch f r Kommentare und Namen innerhalb des Quellcodes Diese Entscheidung f hrt dazu dass nahezu jeder Softwareentwickler n die Lage versetzt wird die Software einsetzen und verstehen zu k nnen Alle gespeicherten Daten inkl Einstellungen liegen in menschenlesbarer Form vor gilt f r die Server Komponente Die hohe Konfigurierbarkeit der Server Komponente f hrt dar ber hinaus dazu dass zahlreiche Aspekte des Toolkits an Vorstellungen eines Entwicklers der es einsetzt angepasst werden k nnen ohne den Code der Software ver ndern zu m ssen ORCHID 5 Systementwurf Im Folgenden wird mit der grundlegenden Struktur des Toolkits die Basis f r die Implementierung der Software die im Rahmen dieser Arbeit entwickelt wurde beschrieben Der Fokus der Beschreibung liegt dabei insbesondere auf strukturellen Besonderheiten die f r die Verwendung oder die Weiterentwicklung des Toolkits wichtig sind 5 1 bersicht Wie bereits erw hnt besteht das ORCHID Toolkit aus zwei Hauptbestandteilen der Server Komponente und der Client Bibliothek F r beide Bestandteile ist zus tzlich eine exemplarische Referenzimplementierung enthalten Dar ber hinaus wurde im Rahmen dieser Arbeit eine Drittsoftware entwickelt die aber nicht Teil des eigentlichen Toolkits ist sond
110. chland und der Schweiz vertrieben die Software Komponenten sind hingegen unter einer Open Source Lizenz ver ffentlicht Zusammenfassend kann die Technologie die digitalSTROM org anbietet zwar als sehr hnlich zum ORCHID Toolkit eingestuft werden erf llt aber letztlich nicht alle Anforderungen die im Rahmen dieser Arbeit an eine Werkzeugsammlung zur Integration von Hardware Softwareprojekte gestellt wurden Durch das propriet re Chip Design die Tatsache dass die Technologie nicht kostenfrei zur Verf gung steht und die Ausrichtung auf ein anderes Hauptziel Energieeinsparung erscheint die digitalSTROM Technolosgie als nicht geeignet die gestellten Anforderungen zu erf llen 3 1 4 Pachube com Der Anbieter Pachube com verfolgt eine Strategie d e der n dieser Arbeit vorgestellten sehr hnlich ist ber den Internetauftritt von Pachube com wird ein Webservice angeboten der es erm glicht beliebige Daten ber ein auf HTTP bas erendes APTI Application Programming Interface zu senden oder abzurufen Um Pachube com nutzen zu k nnen muss ein Nutzerkonto angelegt werden In einer eingeschr nkten Basisversion ist die Nutzung kostenlos die kostenpflichtige Nutzung erm glicht einen weniger limitierten Zugriff auf den Dienst eine unlimitierte Nutzung ist aber nicht m glich Die folgende Abbildung zeigt das Logo des Anbieters Quelle Herstellerwebsite 15 nachube Abbildung 7 pachube Logo Pachube
111. d 2011 08 19 16 25 45 Priority 1 Done false Pin 6 Connection close Tabelle 74 Protokoll Instruktionen hochladen ORCHID Das oben gezeigte Beispiel f hrt zur Speicherung einer Instruktion f r einen Aktor mit der GUID 17 8 812 574 11 0 3 1 0014 92396635 angeschlossen an einen Client der durch 9f476a50 d4e3 11e0 801d 001d92396635 identifiziert ist die den Wert HIGH auf den digitalen VO Pin 6 schreibt Die Angabe eines Pins ist nicht zwingend notwendig es sei denn die Instruktion soll direkt von der Client Bibliothek ausgef hrt werden 5 8 7 Sensordaten abrufen Eine Drittsoftware kann einen GET Request an einen ORCHID Server senden um Sensordaten die dieser f r einen bestimmten Sensor gespeichert hat abzufragen Header Felder und Aufbau eines solchen Requests werden in Tabelle 75 beschrieben Header Feld bertragener Wert User Agent Zeichenkette die den Kommunikationspartner als ORCHID Client oder mit dem Toolkit kompatible Drittsoftware identifiziert Die IP Adresse des Servers und der Port auf dem sich die Drittsoftware verbinden m chte Authorization Der Developer Key der verwendet werden soll Limit Die max male Anzahl von Datens tzen optional Allgemeine Form GET lt GUID gt lt GUID gt 1 1 User Agent lt STRING gt Host lt IP gt lt PORT gt Authorization lt DEVELOPER KEY gt Limit lt INT gt Connection close Beispiel GET 9 476a50 d4e3 11e0 801d4 0014
112. d f r dieses Beispiel auf die G ltigkeitspr fungen und die Analyse der Anfrage verzichtet und stattdessen auf jede TRACE Anfrage eine Antwort mit HTTP Code 418 Im a Teapot vgl 25 Abschnitt 2 3 2 gesendet wie im folgenden Listing dargestellt ist protected internal new void HandleTRACERequest this Respond HttpProtocolHelper HttpResponseHeaderTeapot HttpProtocolHelper HttpResponseTextTeapot Listing 49 Methode zur Behandlung TRACE Requests Nach diesem letzten Schritt st neue Daemon Klasse einsatzbereit und kann der Server Komponente ber die Konfigurationsdatei bekannt gemacht werden F r das folgende Konfigurationsbeispiel wird angenommen dass die neue Klasse in der Assembly CustomDaemon dl1 enthalten ist sich im gleichen Verzeichnis befindet wie die Assembly Orchid Core dl11 Dar ber hinaus wird angenommen dass sie sich im Custom Daemons befindet Weichen die tats chlichen Namen ab m ssen im Folgenden gezeigten Einstellungen entsprechend ver ndert werden Wie aus Abschnitt 7 5 1 ersichtlich wird der Server Komponente ber das Konfigurationselement HardwareDaemonClass mitgeteilt welche Klasse zur Behandlung von Anfragen durch ORCHID Clients verwendet werden soll ber das Element HardwareDaemonClassAssemblyFile wird festgelegt n welcher Assembly s ch diese Klasse befindet Um neue Klasse zu verwenden muss die Konfiguration entsprechend folgen
113. de in der Datenbank gespeichert Erfolgsmeldung an Drittsoftware gesendet Fehlerfall Instruktion kann nicht gespeichert werden Fehlermeldung an Software Beschreibung Ein PUT Request einer Drittsoftware wird von einer Instanz von OrchidSoftwareDaemon verarbeitet Die zu speichernde Instruktion wird aus der Anfrage ausgelesen der Datenbank gespeichert und eine Erfolgsmeldung an die Drittsoftware bermittelt Datenstrukturen Dee EE Ozean ek EE Hrecrpkeauesenype Beteiligte Orchid Core Daemons OrchidSoftwareDaemon Orchid Core Data MySqlAdapter Kategorie Musskriterium Tabelle 19 FS150 Client Instruktion speichern 5160 Client Informationen abrufen Erfolgsfall Informationen ber den angegebenen ORCHID Client wurden aus der Datenbank ausgelesen und an Drittsoftware bermittelt Fehlerfall Informationen konnten nicht ermittelt werden Fehlermeldung an Drittsoftware Beschreibung Ein SEARCH Request einer Drittsoftware wird von einer Instanz von OrchidSoftwareDaemon verarbeitet Die Informationen ber den Client werden aus der Datenbank gelesen und an die Drittsoftware bermittelt Datenstrukturen Orchid Cora kegueses Orchl hercrpre guest Beteiligte Orchid Core Daemons OrchidSoftwareDaemon Orchid Core Data MySqlAdapter Kategorie Musskriterium Tabelle 20 FS160 Client Informationen abrufen Ung ltig
114. dem Listing angepasst werden HardwareDaemonClass Custom Daemons CustomHardwareDaemon HardwareDaemonClassAssemblyFile CustomDaemon di1 Listing 50 Anpassung der Konfigurationsdatei Wird nun ein ORCHID Server mit der neuen Konfiguration gestartet werden alle Anfragen die durch ORCHID Clients gesendet werden durch die neue Klasse CustomHardwareDaemon behandelt und TRACE Anfragen stets mit HTTP Code 418 Teapot beantwortet Handbuch Server Komponente 7 7 2 Erweiterung Die m vorherigen Abschnitt entwickelte Klasse CustomHardwareDaemon ver ndert das Verhalten der Server Komponente f gt ihr aber keine neue Funktionalit t hinzu Dieser zweite Schritt wird diesem Abschnitt beschrieben indem die Klasse die Lage versetzt wird HEAD Anfragen von ORCHID Clients zu behandeln Es wurde bereits gezeigt wie die Unterscheidung von verschiedenen Request Typen anhand deren HTTP Methode durchgef hrt werden kann Entsprechend muss zur Behandlung eines weiteren Typs die daf r zu verwendende Methode genannt und implementiert werden wie das folgende Listing zeigt public override void HandleRequest BufferedStream bs new BufferedStream this Socket GetStream this SetRequest this Parser ParseRequest stream if this Request null this Request count 0 return switch this Request RequestType case HttpRequestType Get this HandleGETRequest break case Ht
115. der Ver nderungen der Server Komponente des ORCHID Toolkits ausgew hlt Alle Code Beispiele und Technologiebeschreibungen in diesem Abschnitt beziehen sich auf die Programmiersprache C und das Mono Framework 5 4 1 1 Properties In der objektorientierten Programmierung ist es blich dass Instanzen von Klassen die in hnen enthaltenen Variablen nach au en verbergen so dass andere Instanzen nicht darauf zugreifen k nnen private Soll der Zugriff m glich sein werden der Klasse entsprechende Methoden hinzugef gt die eine private Variable auslesen oder ver ndern Ein Beispiel f r diese Vorgehensweise kann dem folgenden Listing entnommen werden public class GetterAndSetter Private int theaAnswer 42 public int GetTheAnswer return che nswer public void SetTheAnswer int newAnswer this theAnswer newAnswer Listing 12 Beispielklasse ohne Properties Werden Instanzen der im obigen Listing gezeigten Klasse GetterAndSetter verwendet kann dies durch die Notwendigkeit der Zugriffsmethoden GetTheAnswer und SetTheAnswer int zu Code f hren der schlecht lesbar ist wie das folgende Listing beweist private void TestGetterAndSetter GetterAndSetter a GetterAndSetter b a SetTheAnswer b GetTheAnswer a GetTheAnswer Listing 13 Anwendung von Zugriffsmethoden Der Code in Listing 13 ist unvorteilhaft da der einzige Unterschied zwischen den Zugriffsmethod
116. des ORCHID Toolkits einsetzt wird als ORCHID Client bezeichnet Ein ORCHID Daemon ist eine Instanz einer Klasse die zur Verarbeitung eingehender gt Requests von gt ORCHID Clients oder gt Drittsoftware eingesetzt wird Eine Instanz der Server Komponente des ORCHID Toolkits als ORCHID Server bezeichnet Online Real Life Clients Internet Toolkit ein Akronym das namensgebend f r das ORCHID Toolkit ist PascalCase gt CamelCase PHP Puffer berlauf Request Response RFC RISC Sensor Server Shield Sketch Software Daemon Software Server SOL PascalCase bezeichnet eines Sonderform des gt CamelCase bei der der erste Buchstabe eines Worts stets ein Gro buchstabe sein muss Hypertext Preprocessor Programmiersprache f r das Internet Netzwerk http www php net Siehe gt Buffer Overflow Eine HTTP Anfrage eines gt Clients wird auch als Request bezeichnet Die Response ist die Antwort eines gt Servers auf einen gt HTTP Request Request For Comment ein Werkzeug zur Bewertung von vorgeschlagenen Internet Standards Reduced Instruction Set Computer eine Prozessorarchitektur in der Befehle innerhalb eines Prozessortakts abgearbeitet werden k nnen Im Gegenteil zu einem gt Aktor nimmt ein Sensor seine Umgebung wahr In einer Cl ient Server Infrastruktur ist ein Server derjenige Kommunikationspartner der auf eingehende Anfragen eines gt Clien
117. det ihre Eigenschaften unter Spannung ver ndern LED LINO MAC Adresse Message Body Message Header Mono Runtime Mutex ORCHID ORCHID Client ORCHID Daemon ORCHID Server ORCIT gt ORCHID Light Emitting Diode eine gt Komponente gt Aktor die bei anliegender Spannung Licht aussendet Language Integrated Query ein Sprachkonstrukt der gt CLI das es erlaubt gt SOL hnliche Abfragen auf Objekte aus dem Quellcode einer Anwendung heraus durchzuf hren Media Access Control Adresse eine eindeutige Kennung eines netzwerkf higen Ger ts Der einem gt HTTP Request oder einer gt HTTP Response bermittelte Inhalt wird als Message Body bezeichnet Innerhalb eines gt oder einer gt HTTP Response k nnen Zusatzinformationen ber die im gt Message Body bermittelten Daten gt Headern bertragen werden die als Message Header bezeichnet werden Die Laufzeitumgebung des Mono Frameworks Stellt Klassenbibliotheken und eine Implementierung der gt CLR zur Verf gung um Anwendungen die f r die gt CLI entwickelt wurden auszuf hren Exclusion gegenseitiger Ausschluss ein Mutex Objekt wird eingesetzt um den konkurrierenden Zugriff mehrerer Objekte auf einer Ressource zu verhindern Der Name des im Zuge dieser Arbeiten entwickelten Toolkits ein Homophon auf gt ORCIT Ein Arduino Microcontroller der die Client Bibliothek
118. die in der Lage sind mittels Reflection einen Type anhand dessen Namen und dem Namen der ihn enthaltenen Assembly zu finden In einem Ninject Modul dient die Load Methode dazu dem Framework die vorgesehenen Bindungen bekannt zu machen Im Fall von NinjectModule geschieht dies ebenfalls jedoch werden die Namen der zu bindenden Types zuvor aus der globalen Konfigurationsdatei der Server Komponente ausgelesen und versucht diese Types zu finden Dar ber hinaus existieren optionale M glichkeiten die Stabilit t des Moduls zu erh hen einerseits wird immer Standard Binding angegeben andererseits wird falls ein Typ nicht einer angegebenen Assembly auffindbar ist auch der aktuellen Assembly Orchid Core gesucht Diese M glichkeiten k nnen ber die Konfigurationsdatei ein und ausgeschaltet werden vgl 7 5 Verwende Standardtypnamen Fehler Lese Assemblynamen Feher Verwende Standardassemblynamen Erfolg Erzeuge Typebinding 26 3 Finde Assemblydatei nicht gefunden me Verwende ausf hrende Assembly gefunden Verwende Standardtyp Erfolg d Fehler Abbildung 33 Typeloading Abbildung 33 stellt einem Aktivit tsdiagramm dar wie Types ber einen Eintrag der Konfigurationsdatei gefunden und geladen werden Das Diagramm zeigt den Prozess unter der Pr misse dass bei nicht auffindbarem der Standardtyp bzw bei nicht auffindbarer Assembly die ausf
119. dieser kann bei Verwendung der neuen Version des Ethernet Shield mit integriertem Micro SD Kartenslot nicht genutzt werden solche Shields nutzen Pin 4 zur Kommunikation mit dem Kartenslot siehe 9 F r diese Arbeit kommen sowohl die serielle Kommunikation zwischen und Computer als auch ein Ethernet Shield mit integriertem Micro SD Kartenslot zum Einsatz Die in Abbildung 2 markierten digitalen O Pins stehen also nicht zur Verf gung Fachliches Umfeld D 2 2 Grundlagen HTTP Das m Rahmen dieser Arbeit entwickelte ORCHID Toolkit versetzt Hard und Software in die Lage ber eine zentrale Stelle im Netzwerk oder Internet einen Server miteinander zu kommunizieren Sowohl Hardware Arduino Microcontroller als auch Software Drittsoftware bernehmen also die Rolle eines Clients der mit einem Server kommuniziert Die Kommunikation zwischen einem Client und einem Server basiert auf dem Hypertext Transfer Protocol HTTP in der Version 1 1 Die Grundlagen dieses Protokolls werden im Folgenden erl utert 2 2 1 Allgemeines HTTP ist ein Netzwerkdatentransferprotokoll also ein Protokoll f r den Austausch von beliebigen Daten zwischen zwei Kommunikationspartnern die an das gleiche Netzwerk angeschlossen sind Es wurde in den 1990er Jahren als Grundlage des heute allgegenw rtigen Internets entwickelt und im Mai 1996 als 1945 der Version 1 0 ver ffentlicht Im Juni 1999 wurde mit 2616 der auch heute noch v
120. e Eigenschaft der Arduino Microcontroller Plattform ist ihre Ver ffentlichung als Open Source Projekt Sowohl die Software als auch die Diagramme f r die Hardware sind quelloffen und k nnen ver ndert oder selbst implementiert bzw gebaut werden Dieser Aspekt st meiner Meinung nach einer der Hauptfaktoren f r die enorme Beliebtheit der sich die Arduino Plattform erfreuen kann zus tzlich wird es Entwicklern so erheblich erleichtert ihre eigenen Erweiterungen f r die Plattform zu entwickeln und der ffentlichkeit zur Verf gung zu stellen vgl 2 1 2 3 Ein weiterer Grund f r die Beliebtheit der Plattform ist deren Ausrichtung auf die nahezu spielerische Entwicklung von Prototypen Die Philosophie der Plattform ist dem Internetauftritt des Herstellers 4 zu entnehmen Arduino is an open source electronics prototyping platform based on flexible easy to use hardware and software It s intended for artists designers hobbyists and anyone interested in creating interactive objects or environments deutsch Arduino ist eine Open Source Elektronik Prototypen Plattform die auf flexibler einfach zu nutzender Hard und Software basiert Sie ist f r K nstler Designer Hobbyisten und jeden der daran interessiert ist interaktive Objekte und Umgebungen zu kreieren gedacht 2 1 2 1 Microcontroller Die Arduino Plattform verwendet 8 Bit Microcontroller der Firma Atmel aus der Microcontroller Familie AVR Die Microcontr
121. e Konfiguration ist oft sehr aufw ndig und verringert de Lesbarkeit des Codes da zum Verst ndnis betroffener Codeabschnitte auch die Konfiguration der Software bzw des Frameworks betrachtet werden muss Je nach Dependency Injection Framework und den darin verwendeten Techniken kann es auch zu Performance Einbu en kommen Dies gilt insbesondere f r die Verwendung von Reflection unter Reflection werden Techniken zusammengefasst die es einem Programm erlauben sich selbst zur Laufzeit zu analys eren und zu ver ndern 5 3 3 3 Beispiel Ohne auf ein konkretes Dependency Injection Framework einzugehen sollen diesem Abschnitt die Verwendung des Musters und dessen Vorteile erl utert werden Die einzige Annahme die ber das verwendete Framework getroffen wird ist dessen Konfigurierbarkeit ber eine externe Datei Es wird angenommen dass ein abstraktes Softwareprojekt unter Verwendung von Dependency Injection entwickelt wurde In diesem Softwareprojekt gibt es eine zentrale Klasse Center haupts chliche Arbeit deren Art an dieser Stelle nicht von Bedeutung ist der Anwendung leistet Die Hauptaufgabe der Anwendung soll nun ver ndert werden allerdings nicht vom urspr nglichen Entwickler sondern von einem Dritten Dieser Dritte kennt die abstrakte Bas sklasse ACenter als Bas s f r die Klasse Center dient Er schreibt nun eine eigene Implementierung dieser Klasse namens Center2 an die neuen Anforderungen an
122. e des Herstellers entnommen werden 8 2 1 Installation der Arduino IDE Die Arduino IDE kann kostenlos f r Microsoft Windows Linux und MacOS heruntergeladen werden Nachdem die f r das Entwicklungssystem passende Version der IDE von der Herstellerwebsite heruntergeladen und entpackt wurde kann die IDE ohne weitere Installation gestartet werden erfordert Java Unter Microsoft Windows muss dazu das Programm arduino exe gestartet werden die Distribution f r Linux enth lt ein Shellscript namens arduino Nach dem Start ffnet sich das Hauptfenster der Arduino IDE das in Abbildung 42 zu sehen ist sketch_aug27a Arduino 0022 File Edit Sketch Tools Help Abbildung 42 Hauptfenster der Arduino IDE 7 nttp arduino cc en Guide HomePage 6 http arduino cc en Main Software ORCHID 8 2 2 Installation der Client Bibliothek Die Arduino IDE erwartet dass Bibliotheken die in Sketches genutzt werden sollen in einem bestimmten Verzeichnis abgelegt werden Unter Microsoft Windows befindet sich dieses Verzeichnis im Order Arduino der im Dokumente Ordner des aktuellen Benutzers zu finden ist Listing 54 zeigt wie dieser Pfad unabh ngig vom Benutzernamen gefunden werden kann Windows 7 Eingabe in die Adresszeile des Windows Explorers HOMEPATH Documents Arduino Listing 54 Pfad zum Sketch Verzeichnis unter Microsoft Windows D Der Ordner Arduino enth lt einen weiteren O
123. e oder fehlerhafte Anfrage behandeln Vorbedingung 5100 Erfolgsfall Ung ltige oder fehlerhafte Anfrage wird nicht verarbeitet Fehlermeldung wird an Verbindungspartner bermittelt Fehlerfall Anfrage kann nicht bearbeitet werden Fehlermeldung an Verbindungspartner Beschreibung Ung ltige unbekannte oder fehlerhafte HTTP Anfragen werden nicht verarbeitet sondern mit einer Fehlermeldung an den Verbindungspartner beantwortet Datenstrukturen El Ee oe ee ame Omehid Core Hrcrpkequeseiype Beteiligte Orchid Core Daemons OrchidHardwareDaemon oder Orchid Core Daemons OrchidSoftwareDaemon Kategorie Musskriterium Tabelle 21 FS170 Ung ltige oder fehlerhafte Anfrage behandeln FS180 Nachricht speichern gesendet durch Drittsoftware Vorbedingung FS100 Request Typ POST angenommen durch Software Server Erfolgsfall Nachricht wurde gespeichert und kann von einem Client abgerufen werden Fehlerfall Nachricht wurde nicht gespeichert Fehlermeldung an Verbindungspartner Beschreibung Ein POST Request einer Drittsoftware wird durch eine Instanz von OrchidSoftwareDaemon verarbeitet Die Nachricht wird der Anfrage entnommen und in der Datenbank gespeichert Datenstrukturen OTOPI Ore eome Or CNI Onchid lCore Hrcpkegueschype Oreh1d Cor2 Data Message Beteiligte Orchid Core Daemons OrchidSoftwareDaemon Orchid Core Data MySqlAdapter Kategorie Wunschkriterium Tabelle 22 F
124. edene Funktionen freischaltet Heimautomatisierung ist ein potentielles Einsatzgebiet des ORCHID Toolkits deckt aber nur einen kleinen Teil aller M glichkeiten ab die es bietet Steuerger te der hier beschriebenen Produktreihe 2 nttp www ezcontrol de ORCHID EZ Control erlauben es hingegen nicht dass beliebige Sensoren und Aktoren mit ihnen verbunden werden da sie nur mit einer ausgew hlten Teilmenge kompatibel sind Die Hard und Software der Produktreihe ist nicht quelloffen und wird kommerziell vertrieben EZ Control erscheint aus den geschilderten Gr nden nicht geeignet die im Rahmen dieser Arbeit gestellten Anforderungen zu erf llen 3 1 3 digitalSTROM org Die Organisation digitalSTROM org wurde an der Eidgen ssischen Technischen Fachhochschule Z rich gegr ndet und entwickelt und vertreibt eine Technologie die die in dieser Arbeit gestellten Anforderungen zu einem gro en Teil erf llt Zentraler Bestandteil der Technologie ist ein Mikrochip der direkt in das Deutschland vorhandene 230V Stromnetz eingebunden werden kann ber diesen Chip werden elektrische Ger te in die Lage versetzt ber das Stromnetz miteinander zu kommunizieren wenn die kommunizierenden Ger te jeweils ber einen Chip verf gen und sich gegenseitig zu steuern Die folgende Abbildung Quelle Herstellerwebsite 14 zeigt einen solchen Mikrochip Deutlich erkennbar ist dessen geringe Gr e im Vergleich zu einer men
125. eer 19 3 15 20 3a 20 3 2 1 ae ee nee 20 3 2 2 EE E PETT EE ee er 21 e E uge eg EE A 23 41 SEET 23 4 1 1 kt e een een 23 4 1 2 ne nee EEEE A rien re ee 25 4 1 3 ADS 25 4 2 ee 26 4 2 1 eege Ee 26 4 2 2 Ee 26 4 2 3 117 26 4 2 4 Einsatz noslichKeiten 27 4 3 Produktantorder ngen 2 05 29 4 3 1 SOLL Ware anlorder nsen sn 29 4 3 2 E E 29 4 3 3 Produktsehnittstelen nes eu 30 44 Broduktiunktionen ee nee u ed 30 4 4 1 att eene e NEE 31 442 Funktionen der Client Bibliothek une AE 39 4 5 Produktdaten es meer en ee re ee 43 4 5 1 EE 43 452 erter 45 Produkce un nel 46 4 6 1 GEET 46 4 6 2 Chent Bibliothek 47 4 7 e 48 4 7 1 Technische Quaht tsanforder
126. eiden von verschiedenen HTTP Requests d h HTTP Requests die eine bestimmte HTTP Methode verwenden vgl 2 2 Verifizieren der G ltigkeit eingehender HTTP Anfragen Speichern von durch Clients bertragenen Sensordaten in einer Datenbank Abrufen von Sensordaten aus einer Datenbank Speichern von durch Drittsoftware bertragenen Instruktionen f r Clients in einer Datenbank Abrufen von Instruktionen aus einer Datenbank Abrufen von Informationen ber Clients Sensoren und Aktoren aus einer Datenbank Senden von Sensordaten als HTTP Antwort an Drittsoftware Senden von Instruktionen als HTTP Antwort an Clients Senden von Informationen ber Clients Sensoren und Aktoren als HTTP Antwort Drittsoftware Senden von Fehlermeldungen als HTTP Antwort an Clients Senden von Fehlermeldungen als HTTP Antwort an Drittsoftware Zus tzliches Musskriterium ist die exemplarische Umsetzung einer umfassend konfigurierbaren Referenzimplementierung eines ORCHID Servers d h einer Software die Server Komponente verwendet um mit ORCHID Clients und Drittsoftware zu kommunizieren bzw als Vermittler der Kommunikation zwischen diesen dient 4 1 1 2 Client Bibliothek Die Client Bibliothek dient dazu Entwickler die Lage zu versetzen einen oder mehrere Clients mit der Server Komponente kommunizieren zu lassen Um diese Aufgabe zu bew ltigen muss die Bibliothek die folgenden Funktionen bereitstellen die hier lediglich genannt im weiteren
127. eil des ORCHID Toolkits Der dritte und gravierendste Unterschied zwischen Pachube com und dem ORCHID Toolkit st dass Pachube com es einem Entwickler weder erlaubt die serverseitige Verarbeitung und Speicherung von Daten noch deren Verwendung zu kontrollieren Auch eine Erweiterung des Diensts durch einen Anwender oder Entwickler ist nicht m glich da es sich um propriet re nicht offene Software handelt Durch die erzwungene ffentlichkeit der Feeds au er in der teuersten kostenpflichtigen Variante ist dar ber hinaus im Gegensatz zum ORCHID Toolkit der Zugang zu den gespeicherten Daten f r jeden m glich Auch wenn Pachube com einen gro en Teil der gestellten Anforderungen abdeckt erscheint der Dienst durch seine Limitierungen und Kostenpflichtigkeit den nicht ffentlichen Quellcode sowie durch die fehlende Kontrolle die ein Anwender ber Daten und deren Verarbeitung hat als nicht geeignet die im Rahmen dieser Arbeit gestellten Anforderungen zu erf llen 3 1 5 Fazit Es existieren nur wenige Produkte auf dem Markt die Integration einer Hardwareplattform in eine Software erm glichen Die wenigen Konkurrenzprodukte es gibt erf llen stets nur eine Teilmenge der Anforderungen die im Rahmen dieser Arbeit gestellt werden Sie sind entweder auf einen anderen Einsatzbereich ausgelegt oder weisen M ngel n Teilbereichen auf Eine vollst ndig quelloffene kostenlose und leicht erweiterbare L sung ist auf dem Mar
128. ein Client f r eine Anfrage verwenden will stets n der ersten Zeile eines Requests enthalten sein Das folgende Listing 2 zeigt beispielhaft die ersten Zeilen f r Tabelle 2 gezeigten HTTP Methoden gt Uniform Resource Identifier deutsch etwa Einheitlicher Ressourcen Bezeichner l6 Http www fiddler2 com ORCHID OPTIONS lt URI gt HTTP 1 1 CRLF GET lt URI gt 1 1 CRLF HEAD lt URI gt HTTP 1 1 CRLF POST lt URI gt 1 1 CRLF PUT lt URI gt 1 1 CRLF DELETE lt URI gt HTTP 1 1 CRLF TRACE lt URI gt HTTP 1 1 CRLF CONNECT lt URI gt HTTP 1 1 CRLF Listing 2 bersicht HTTP Methoden Es handelt sich bei den im obigen Listing gezeigten Zeilen nur um die erste Zeile einer vollst ndigen HTTP Anfrage Header Felder und Message Body fehlen die Anfragen sind entsprechend nicht g ltig 2 2 3 HTTP Header Der Standard 1 1 kennt 47 verschiedene Header Felder vgl 11 Sektion 14 die unterschiedliche Metadaten ber die im Message Body bertragenen Daten enthalten k nnen Auch ohne die bertragung eines Message Bodys k nnen Header Felder verwendet werden HTTP Header werden als Schl ssel Wert Paare Key Value Pairs bertragen und haben immer die im folgenden Listing gezeigte Form lt KEY gt lt VALUE gt CRLF Listing 3 Struktur eines HTTP Headers Eine Auflistung aller Header Felder die im HTTP Standard bekannt sind w rde den Rahmen dieser Arbeit sp
129. eine Sonderform des gt URI In einem URL st zus tzlich das zu verwendende Protokoll z B gt HTTP angegeben Ein gt Client der ber gt HTTP auf eine Ressource zugreifen m chte bermittelt optional eine Zeichenfolge d e dessen Identifikation darstellt diese wird als User Agent bezeichnet Universally Unique Identifier ein Standard zur Erzeugung eindeutiger Kennungen Eine Umsetzung ist gt GUID Virtuelle Maschine als virtuelle Maschine wird eine Software bezeichnet der Lage ist ein Betriebssystem auszuf hren indem s e diesem vort uscht ein kompatibler Computer zu sein XAMPP ist ein Serverpaket das unter anderem einen Apache2 Webserver einen MySQL Server und gt PHP enth lt http www apachefriends org eXtensible Markup Language Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten eXtended Tiny Encryption Algorithm eine Weiterentwicklung von gt TEA die bisher als sicher gilt 17 Anhang Inhalt Datentr ger Der Datentr ger der dieser Arbeit belegt enth lt alle zur Verwendung des ORCHID Toolkits ben tigten Dateien und Programme Zus tzlich ist eine mit Oracle VirtualBox nutzbare virtuelle Maschine vgl Abschnitt 10 enthalten Die folgende Tabelle zeigt die auf der DVD enthaltenen Verzeichnisse und beschreibt welche Dateien ihnen enthalten sind Verzeichnis Beschreibung Arduino IDE Enth lt die aktuelle Version 0022 der Arduino IDE f r
130. einzigen Konstruktor der jeweils eine Instanz der abstrakten Klassen AServerFactory und ADaemonFactory als Parameter erwartet Diese beiden Instanzen werden von Bloom dazu verwendet die intern genutzten Server und Daemon Klassen zu erzeugen Verf gt ein Entwickler ber eine eigene Implementierung von AHardwareDaemon die als neue Daemon Klasse einem eigenen ORCHID Server verwendet werden soll muss lediglich eine entsprechende Fabrik erzeugt werden Dazu kann er seine Fabrikklasse von der abstrakten Klasse ADaemonFactory erben lassen und muss nun nur noch die Daemon Erzeugung in dieser Klasse implementieren Angenommen die neuen Daemon Klassen hie en CustomHardwareDaemon und CustomSoftwareDaemon die neue Fabrikklasse CustomDaemonFactory Dann w rde sich eine Fabrikklasse wie in Listing 8 ergeben vereinfachte Darstellung ohne Initialisierung der einzelnen Instanzen 55 Im regul ren Abstract Factory Pattern In der Server Komponente kommen weitere Techniken zum Einsatz die die Implementierung einer Fabrik optional machen vgl 6 3 2 ORCHID public class CustomDaemonFactory ADaemonFactory public override AHardwareDaemon BuildHardwareDaemon return new CustomHardwareDaemon public override ASoftwareDaemon BuildSoftwareDaenmon return new CustomSoftwareDaemon Listing 8 Eine neue Daemon Fabrik Der Aufruf der B1oom Klasse ver ndert sich entsprechend wie im folg
131. ekte Product zu erzeugen Der Klient kennt dabei nur die abstrakte Bas sklasse AProduct und die abstrakte Fabrik AFactory und kommt mit den konkreten Implementierungen Product und Factory n cht n Ber hrung Die Fabrik erzeugt Objekte ber eine sog Fabrikmethode Produce indem sie die Konstruktoren der konkreten Klasse die instanziiert werden soll aufruft Die konkrete Fabrik ist also die einzige Klasse die den Konstruktor der konkreten Produktklasse nutzt Im Toolkit das Abstract Factory Pattern f r alle zentralen Klassen der Server Komponente verwendet F r jede dieser Klassen existiert eine eigene Fabrikmethode mehrere zusammengeh rende Fabr kmethoden sind dabei einer Fabrikklasse zusammengefasst Ausgehend vom zentralen Einstiegspunkt der Server Komponente Klasse Bloom vgl 5 1 1 werden alle ben tigten Objekte von den Server Instanzen ber Parser bis hin zu Datenhaltungsklassen z B Arduino Sensor oder Actor ausschlie lich ber Fabriken erzeugt Diese Vorgehensweise Systementwurf erlaubt es das Toolkit serverseitig mit eigenen Klassen zu erweitern ohne bestehende Klassen ver ndern zu m ssen Die folgende Abbildung zeigt die Verwendung des Entwurfsmusters innerhalb der Server Komponente Server und Daemon Klassen 1 el gun ZZ BuildHardwareServer AHardwareServer BuildSoftwareServer ASoftwareServer ADaemonfF
132. elder werden falls sie nicht vorhanden sind mit Standardwerten gef llt wird eine neue Instanz der Klasse Instruction erzeugt und ber die Methode StoreInstruction Alnstruction der Klasse MySglAdapter der Datenbank gespeichert Diese Methode versucht zun chst d e bergebenen Werte n der Datenbank zu lokalisieren Schl gt dieser Versuch fehl w rd dem Verbindungspartner eine Fehlermeldung bermittelt HTTP Code 400 Bad Request und die Verarbeitung der Anfrage abgebrochen Sind alle ben tigten Werte vorhanden wird die neue Instruktion der Datenbank gespeichert und dem Verbindungspartner eine Erfolgsmeldung gesendet HTTP Code 200 Abbildung 30 zeigt den geschilderten Programmablauf in einem UML Aktivit tsdiagramm Anfrage annehmen 9 Verbindungspartner speicher we Fehler Erfolg rn Fehler Erf nn Erfolg Fehlermeldung senden G ltigkeit pr fen jp Requesttyp bestimmen Fehler I ung ltig pe g ltig en en User Agent pr fen g ltig Fehler Arduino ID bestimmen gt Erfolg Fehler Erfolg e Fehler Parameter auslesen Erfolg SI Parameter verifizieren gt lt vollst ndig Erfolg Erfolgsmeldung senden Abbildung 30 Bearbeitung von Drittsoftware PUT Requests unvollst ndig ORCHID 5 9 2 7 Dritt
133. else if strcmp 1 getValue LOW 0 d igitalWwritelactor LOW else Do nothing Listing 65 Abrufen einer Instruktion Zun chst wird in Zeile 25 ber die Methode getNextInstruction char der Klasse Orchid eine Instanz der Klasse OrchidInstruction erzeugt Diese Instanz ist entweder die n chste durchzuf hrende Instruktion f r den angegebenen Aktor oder die leere Instruktion Ob die Instruktion tats chlich Anweisungen enth lt wird Zeile 27 mit dem Aufruf der Methode isEmpty der Instanz gepr ft Ist die Instruktion leer wird die Verarbeitung nicht fortgef hrt und die loop Methode beginnt von vorne Liegen hingegen Anweisungen der Instruktion vor wird zun chst die Aktion abgefragt die ausgef hrt werden soll Dies geschieht ber die Methode getAction der Klasse OrchidInstruction Diese Methode liefert einen numerischen Wert zur ck der f r die Aktion steht die der Aktor ausf hren soll Entsprechende Konstanten 1 der Klasse Orchid erleichtern die Verwendung indem die Zahlenwerte durch aussagekr ftige Namen ersetzt werden Die folgende Tabelle 100 zeigt verschiedenen Zahlenwerte sowie zugeh rigen Namen und erl utert Bedeutung jedes einzelnen Werts Wert Name Bedeutung 1666 ACTION DW Es soll auf einen digitalen I O Pin geschrieben werden 2666 ACTION Es soll von einem digitalen I O Pin gelesen werden 3666 ACTION Es soll auf einen analogen
134. ementierung einer Funktion beschreibt die bereits verf gbar ist Systementwurf Studio 2010 einem Entwickler bieten In dieser Entwicklungsumgebung auf die Entwicklung mit dem NET Framework ausgerichtet ist K nnen Anwendunsgseinstellungen leicht ber Funktionen des Frameworks vorgenommen und verwaltet werden es besteht aber stets die Gefahr einer Inkompatibilit t zu Mono weshalb diese Vorgehensweise ebenfalls ungeeignet erschien In der Server Komponente wird deshalb das unter der MIT Lizenz ver ffentlichte Konfigurations Framework Nini verwendet Nini ist ein Open Source Projekt und kann aufgrund der verwendeten Lizenz problemlos 1 die Server Komponente eingebunden werden Nini ist in der Lage zahlreiche verschiedene Quellen f r die Konfiguration einer Anwendung zu lesen und zu schreiben darunter u a INI Dateien XML Dateien und Kommandozeilenparameter Dennoch handelt es sich um eine sehr kleine Bibliothek die keine tiefgreifenden Auswirkungen auf den restlichen Code der Server Komponente hat Dar ber hinaus ist die Verwendung von Nini sehr einfach und flexibel wie im Folgenden exemplarisch gezeigt werden soll 5 5 3 1 Konfigurationsdateien mit Nini verwenden Die Verwendung von Konfigurationsdateien mit Nini ist denkbar einfach gehalten und erfordert seitens eines Entwicklers lediglich einen geringen Aufwand Nini stellt die Schnittstelle IConfigSource und verschiedene davon abgeleitete Klassen zur Verf
135. en Maschine restart_orchid sh Startet einen laufenden ORCHID Server neu start_orchid sh Startet einen ORCHID Server auf der virtuellen Maschine Orchid Arduino Toolkit Startet den Firefox Webbrowser und navigiert zur Live Live Demo Demonstration des ORCHID Toolkit Terminal ffnet die Kommandozeile Tabelle 103 Desktop Elemente 7 http www mozilla org de firefox ORCHID Die folgende Software st auf der virtuellen Maschine bereits installiert Software Version Mono 2 6 7 Java SE Laufzeitumgebung 1 6 0 24 Arduino IDE 0022 MonoDevelop 2 4 XAMPP for Linux 1 7 4 MySQL Server 5 5 8 Tabelle 104 der installierte Software 10 4 Einrichtung der MySQL Datenbank Die MySQL Datenbank die f r den Betrieb eines ORCHID Servers ben tigt wird kann ber das zum Lieferumfang des XAMPP Server Pakets geh rende Programm phpMyAdmin komfortabel eingerichtet werden Zun chst muss dazu der Apache Webserver ber die Kommandozeile gestartet werden Den entsprechenden Befehl zeigt Abbildung 49 Abbildung 49 Starten von XAMPP Linux Auf der virtuellen Maschine l uft nun sowohl ein Apache Webserver als auch eine MySQL Server Instanz phpMyAdmin ist eine Anwendung die im Browser aufgerufen wird S e ist unter der Adresse http localhost phpmyadmin zu finden und als Startseite des installierten Firefox Webbrowsers eingetragen Beim ersten Aufruf dieser Adresse verlangt XAMPP
136. en Das ORCHID Toolkit wird unter der Lizenz Creative Commons Attribution NonCommercial ShareAlike 3 0 Unported ver ffentlicht deren Lizenztext unter 19 in englischer und deutscher Sprache verf gbar ist Aufgrund des langen Namens der Lizenz wird sie h ufig als CC BY NC SA 3 0 bezeichnet Das Logo dieser Lizenz wird in Abbildung 8 gezeigt 959 Abbildung 8 Logo der BY NC SA 3 0 Im Detail erlaubt es die CC BY NC SA 3 0 einer Person ein Werk zu kopieren und zu verteilen sowie es zu ver ndern und auch eigene Projekte daraus abzuleiten solange diese Person den eigentlichen Autor benennt Attribution das Werk nicht f r kommerzielle Zwecke verwendet Noncommercial und jegliche ver ffentlichte Verwendung des Werks inkl Ver nderungen 32 Quelle http mirrors creativecommons org presskit buttons 88x31 png by nc sa eu png Anforderungsdefinition Erweiterungen und darauf aufbauender Werke unter der gleichen oder einer hnlichen voll kompatiblen Lizenz ver ffentlicht ShareAlike Ein weiterer gro er Vorteil dieser Lizenz ist die M glichkeit dass der eigentliche Autor eines Werks der Inhaber des Urheberrechts jede der Bedingungen einzeln f r eine einzelne Person oder Gruppe von Personen aufheben kann wenn er dies m chte Eine komfortable bersicht ber die Lizenz kann unter 20 in englischer Sprache eingesehen werden 4 2 4 Einsatzm glichkeiten Die potentiellen Einsatzm glichkeiten
137. en Ausgaben der Server Komponente zu erm glichen Wird dem Projekt eine NLog Konfigurationsdatei hinzugef gt vgl 5 5 1 werden die Logging Einstellungen aus der Konfigurationsdatei nicht verwendet um Verwendung des Logging Systems m glichst flexibel zu gestalten wird dessen Konfiguration nicht ber eine Klasse aus Orchid Core dil bernommen sondern muss von einem Entwickler stets selbst durchgef hrt werden Die zweite M glichkeit n mlich die Konfiguration aus dem Code der Anwendung heraus wird diesem Abschnitt beschrieben In einem Beispiel wird dazu gezeigt wie Ausgaben auf der Standardausgabe aktiviert werden k nnen die Referenzimplementierung eines ORCHID Servers die auf der beliegenden DVD enthalten ist ist dar ber hinaus in der Lage in Log Dateien zu schreiben Die Aktivierung der Ausgabe von Log Meldungen n Dateien verh lt sich analog zu der in diesem Abschnitt gezeigten Vorgehensweise Im nachfolgenden Listing 44 wird eine neue Methode InitializeLogging definiert die die Einstellungen f r das Logging System es werden nur die Einstellungen f r Standardausgabe betrachtet aus der Konfigurationsdatei ausliest und NLog konfiguriert Der Aufruf dieser Methode wird der Main Methode hinzugef gt 129 ORCHID using System using System IO using NLog using Nee Contes using NLog Targets using Orchid Co re using Orch14 Core Configurat on using Orchid Core Servers using Orch
138. en bei der Methoden nicht wie blich direkt aufgerufen sondern bei einer zentralen Stelle registriert werden die ihrerseits den Aufruf dieser Methoden bernimmt Der urspr ngliche Aufrufer teilt der zentralen Stelle mit dass eine Methode aufgerufen werden soll ruft sie aber nicht mehr selbst auf Als VO Board wird im Kontext dieser Arbeit ein Arduino Microcontroller Board bezeichnet Siehe gt Inversion of Control Ein gt MO Board verf gt ber digitale und analoge Ein und Ausg nge die als O Pins bezeichnet werden IP Spoofing bezeichnet einen Prozess bei dem ein Angreifer in einem Netzwerk Anfragen mit gef lschter Absender IP Adresse an einen Server sendet International Organization for Standardization http www iso org Open Systems Interconnection Modell der gt ISO beschreibt Abstraktionsebenen der Netzwerkkommunikation Ein Just In Time Compiler bersetzt Quelltext erst unmittelbar vor dessen Ausf hrung in die Z elsprache Eine Komponente ist ein gt Sensor oder ein gt Aktor Anonyme Funktionen d e als Parameter an eine Methode bergeben werden k nnen werden in der gt CLI als Lambda Expression bezeichnet Der Lambda Operator gt kann innerhalb einer gt Lambda Expression als Zuweisungsoperator verwendet werden LAMPP ist f r Linux Systeme verf gbare Version von gt Liquid Crystal Display ein Display das zur Anzeige von Daten Fl ssigkristalle verwen
139. en der erste Buchstabe ihres Namens ist So kann es leicht zu Verwechselungen der Methoden kommen Die zahlreichen Klammern die bei der Verwendung von Zugriffsmethoden gesetzt werden m ssen verschlechtern die Lesbarkeit weiter und k nnen zu Fehlern in komplexen Berechnungen oder logischen Vergleichen f hren ORCHID C bietet mit Properties Eigenschaften ein Sprachkonstrukt an das dieses Problem beseitigt und gleichzeitig die Anzahl der f r die Implementierung einer Klasse notwendigen Zeilen stark verringert Das folgende Listing zeigt die in Listing 12 mit Zugriffsmethoden implementierte Klasse GetterAndSetter unter Verwendung von Properties public class GetterAndSetter private int theAnswer 42 public int TheAnswer get returni this theanswer set 1 this yale Listing 14 Beispielklasse mit Properties In ihrer Funktionalit t entspricht die in Listing 14 gezeigte Klasse exakt der in Listing 12 gezeigten kommt aber mit weniger Codezeilen aus Auch die Verwendung im Code die in Listing 15 gezeigt wird ist bersichtlicher und intuitiver als die in Listing 13 demonstrierte private void TestGetterAndSetter GetterAndSetter a GetterAndSetter b a TheAnswer b TheAnswer a TheAnwser Listing 15 Anwendung von Properties Obwohl das obige Beispiel genau die gleiche Operation durchf hrt wie das zuvor beschriebene ist der Code weitaus leichte
140. en obwohl ein englischsprachiges Betriebssystem verwendet wird UseEnvironmentLocale Bestimmt ob die unter gt Culture angegebene Kulturinformation oder die System Sprache zur Formatierung von Ausgaben verwendet werden soll Tabelle 95 Einstellungskategorie Locale 7 57 Kategorie Verbosity Die einzige Einstellung in dieser Kategorie bestimmt ob eine Willkommensnachricht ausgegeben werden soll wenn die Server Komponente startet Einstellung Bedeutung PrintWelcomeMessage Gibt den Inhalt der Datei welcome msg aus wenn die Server Komponente gestartet wird Tabelle 96 Einstellungskategorie Verbosity 7 5 8 Kategorie Debug Diese Kategorie enth lt Einstellungen die bei der Fehlersuche und behebung hilfreich sein k nnen Einstellung Bedeutung LogRequests Bestimmt ob Anfragen in die Log Date und oder auf der Standardausgabe ausgegeben werden sollen oder nicht LogResponses Bestimmt ob die Antworten des Servers Log Datei und oder auf der Standardausgabe ausgegeben werden sollen oder nicht Tabelle 97 Einstellungskategorie Debug 7 6 Aktivierung des Logging Systems Das 7 4 gezeigte Minimalprojekt nutzt die M glichkeiten die das Logging System bietet nicht Entsprechend werden keine Meldungen auf der Standardausgabe oder in eine Log Date ausgegeben Im Folgenden wird beschrieben wie das Logging System aktiviert werden kann Ein Entwickler hat zwei M glichkeit
141. en filtern und aufbereiten 5 4 22 Arduino und Wie bereits 2 1 2 4 beschrieben erleichtert Sprache Arduino Programmierung eines Microcontrollers erheblich ohne den Funktionsumfang einzuschr nken Dies st m glich da Arduino auf C C aufbaut und Sketches zun chst f r diese Sprachen g ltigen Code umgesetzt und erst danach kompiliert werden Aus der Basis von Arduino in den Sprachen und C ergeben sich verschiedene Vor und Nachteile die im Folgenden beschrieben werden 5 4 2 1 Geschwindigkeit und C sind sehr maschinennahe Programmiersprachen die einem Entwickler die vollst ndige Kontrolle ber die ausf hrende Hardware geben und damit deren volles Potential ausnutzen k nnen was zu erheblichen Geschwindigkeitsvorteilen f hren kann Diese Eigenschaft st insbesondere deshalb ein Vorteil da Microcontroller nicht ber leistungsstarke Prozessoren verf gen sondern im Vergleich sehr langsam arbeiten Ein aktueller Prozessor f r einen Privatcomputer arbeitet mit Taktfrequenzen im Gigahertz Bereich wohingegen Microcontroller des auf einem Arduino verbauten Typs mit 16 Megahertz arbeiten vgl 2 1 2 1 Im Vergleich zu einem Prozessor mit einer Taktfrequenz von 2 arbeitet ein Arduino also 125 Mal langsamer Der Nachteil der sich aus der Maschinenn he von und ergibt ist der hohe Aufwand der zur Programmierung in diesen Sprachen notwendig ist Durch die Verwendung vo
142. enden Listing 9 zu sehen ist Bloom bloom new Bloom new ServerFactory new CustomDaemonFactory bloom Blossom Listing 9 Ver nderte Erzeugung eines ORCHID Servers Weitere Ver nderungen am Code sind nicht notwendig Die neuen Klassen CustomHardwareDaemon und CustomSoftwareDaemon werden automatisch innerhalb der Server Instanzen verwendet 5 3 2 Das Singleton Entwurfsmuster Das Singleton Entwurfsmuster engl singleton einelementige Menge wird verwendet wenn zur Laufzeit einer Software garantiert werden soll dass es von einer bestimmten Klasse zu jedem Zeitpunkt der Ausf hrung nur eine Instanz gibt und dass es sich dabei stets um dieselbe Instanz handelt Das Singleton Entwurfsmuster kommt innerhalb der Server Komponente u a zum Einsatz um die Klasse Configuration zu realisieren Diese Klasse wird eingesetzt um zahlreiche Einstellungen f r die Server Komponente des Toolkits zu verwalten und bereitzustellen Die besondere Natur des Toolkits macht es dabei notwendig dass eine Singleton Klasse threadsicher ist d h dass sie auch von mehreren Threads nebenl ufig verwendet werden kann ohne dabei die S ngleton Eigenschaften zu verlieren vgl 5 9 1 Besonders deutlich wird diese Anforderung dann wenn eine Singleton Instanz zur Laufzeit erzeugt wird Diese Erzeugung geschieht nur ein einziges Mal n mlich beim ersten Zugriff auf die Instanz Wird Threadsicherheit nicht beachtet kann eine
143. endency Injection Framework registriert wie das Objekt zu erzeugen ist Wenn n tig k nnen neue Instanzen vom Programmcode bei der zentralen Stelle angefordert werden Dieser Abschnitt befasst sich ausschlie lich mit Dependency Injection im Allgemeinen Die konkrete Verwendung dieses Entwurfsmusters in der Server Komponente des ORCHID Toolkits wird in Abschnitt 6 3 2 detailliert erl utert 5 3 3 1 Vorteile Die Vorteile der Dependency Injection liegen insbesondere der Reduzierung von Abh ngigkeiten innerhalb des Codes hnlich wie im Abstract Factory Pattern ist es bei Verwendung dieses Musters nicht notwendig dass Objekte konkreten Implementierungen der von ihnen verwendeten Abh ngigkeiten kennen eine Schnittstelle oder abstrakte Basisklasse gen gt Durch diese Vorgehensweise werden Abh ngigkeiten zwischen einzelnen Klassen reduziert konkrete Implementierungen k nnen leicht gegeneinander ausgetauscht werden ohne Implementierung anderer Klassen ver ndern zu m ssen Ein weiterer Vorteil der sich insbesondere bei sehr komplexen Objekten zeigt entsteht ebenfalls durch Abh ngiskeitsreduzierung Wird in der traditionellen objektorientierten Programmierung ein sehr komplexes Objekt erzeugt das wiederum viele Objekte vieler unterschiedlicher anderer Klassen verwendet m ssen alle verwendeten Klassen bekannt sein und entsprechenden Objekte durch das komplexe Objekt nitialisiert werden bzw bei dessen Erz
144. ent angeschlossenen Aktor wird direkt ausgef hrt Fehlerfall Die n chste unbearbeitete Instruktion kann nicht ausgef hrt werden Beschreibung Wie FC40 beschrieben wird die n chste unbearbeitete Instruktion vom Server abgerufen dieser Funktion jedoch direkt ausgef hrt Datenstrukturen Kategorie Musskriterium Tabelle 42 50 Instruktion f r Aktor ausf hren FC60 Anfrage an ORCHID Server senden Vorbedingung FC10 Erfolgsfall Eine HTTP Anfrage wurde an einen ORCHID Server gesendet Fehlerfall Die gew nschte HTTP Anfrage kann nicht gesendet werden Beschreibung Die Client Bibliothek nutzt die Arduino Ethernet Library um HTTP Anfragen an einen ORCHID Server zu senden die Ethernet Library wird ber die an die Client Bibliothek bergebenen Parameter wie IP Adresse Server Adresse etc konfiguriert Datenstrukturen Kategorie Musskriterium Tabelle 43 FC60 Anfrage an ORCHID Server senden ORCHID FC70 Auf eingehende Server Antwort warten Vorbedingung FC60 Erfolgsfall Die Ausf hrung des Sketches wird unterbrochen bis eine Antwort auf eine gesendete Anfrage eingeht Fehlerfall Der Prozess der mit der ausgehenden Anfrage eingeleitet wurde kann nicht durchgef hrt werden Beschreibung Nachdem eine Anfrage an einen ORCHID Server gesendet wurde wird auf eine Antwort des Servers gewartet und das Programm der Sketch unterbrochen bis diese Antwort eintrifft oder ein
145. er nderung zwingend notwendig wird als ver ndernder Wert genutzt eine Zeitangabe f r die nur ein Datum bereitgestellt wird wird also um die Zeit 00 00 00 erweitert Tabelle 61 LS40 Datengenauigkeit Robustheit Beschreibung Sie Server Komponente verursacht keine Programmabst rze Fehler werden aufgefangen und gemeldet der regul re Betrieb danach falls m glich wiederhergestellt Ist eine Wiederherstellung nicht m glich wird die Ausf hrung der Server Komponente mit einer Fehlermeldung beendet es kommt aber nicht zu einem Programmabsturz Bemerkung Angriffe auf die Server Komponente z B Denial of Service siehe dazu 22 S 274 ff werden nicht als regul rer Betrieb eingestuft Tabelle 62 LS50 Robustheit 4 6 2 Client Bibliothek Die Client Bibliothek muss die den folgenden Tabellen dargestellten Leistungsmerkmale erf llen k nnen LC10 Betriebsdauer Beschreibung Die Client Bibliothek ist f r den Dauerbetrieb ausgelegt l ngere Betriebszeiten beeinflussen die Ausf hrung der Bibliothek nicht negativ Metrik Die Betriebsdauer wird in Tagen Stunden Minuten und Sekunden gemessen Bemerkung Die Betriebsdauer h ngt direkt vom verwendeten Arduino Microcontroller ab und dessen Stromversorgung ab Tabelle 63 LC10 Betriebsdauer LC20 Datengenauigkeit Beschreibung Die Clent Bibliothek ver ndert die Genauigkeit ein und ausgehender Daten nicht Metrik Ganzzahlen werden auf 1 genau berechne
146. er Abschnitt der Arbeit befasst sich mit der Realisierung der den vorherigen Abschnitten beschriebenen und entwickelten Software die das ORCHID Toolkit bildet Dazu werden zun chst allgemeine Eigenschaften der Implementierung beschrieben und ein berblick ber das Entwicklungssystem gegeben Im weiteren Verlauf des Abschnitts werden besonders interessante Aspekte der Implementierung hervorgehoben und deren Eigenschaften detailliert dargestellt Durchgef hrte Tests mit denen die Robustheit und Richtigkeit der entstandenen Software berpr ft wurden werden dar ber hinaus ebenso aufgef hrt wie nicht gel ste oder nicht l sbare Probleme 6 1 Styleguide Der Code der im Zuge der Entwicklung des ORCHID Toolkits geschrieben wurde h lt sich an zahlreiche Regeln vgl 5 5 4 und 5 5 5 Diese umfassen auch Richtlinien f r die Gestaltung des Codes und die Namensgebung f r Klassen Methoden und Variablen Die grundlegenden Gestaltungsrichtlinien die w hrend der Entwicklung der Server Komponente angewendet wurden werden diesem Abschnitt beschrieben Die Gestaltung der Client Bibliothek weicht von dem hier gezeigten Schema ab 6 1 1 Einr ckungen und Klammerungen Mit Ausnahme von Zeilen die aufgrund ihrer L nge ansonsten schlecht lesbar w ren wird nur nach einer ffnenden geschweiften Klammer einger ckt wobei die Weite der Einr ckung vier Leerzeichen betr gt Geschweifte Klammern werden stets in einer eigenen Zeile unterge
147. er Name des verwendeten kryptografischen Algorithmus in einer Instanzvar iablen wie im obigen Listing der Developer Key der m Header Feld Authorization bertragen wird namens cryptoName verwaltet w rde sich der Code entsprechend dem folgenden Listing 71 ver ndern if client connect client princlin PUT eljent print Board ID2 7 board client println User Agent Orchid Arduino Toolkit client print X Content Encryption client printlin _cryptoName eltent prinL Auchsrirar ellent printini devkey Listing 71 Hinzuf gen des neuen Header Felds 2 Nach diesen einfachen nderungen bertr gt die Client Bibliothek in jedem PUT Request das neue Header Feld 8 6 2 Erweiterung In Abschnitt 7 7 2 wurde beschrieben wie die Server Komponente so erweitert werden kann dass HEAD Requests eines Clients von ihr verarbeitet und beantwortet werden k nnen Entsprechend diesem Beispiel soll nun der Client Bibliothek eine Methode hinzugef gt werden HEAD Requests einen ORCHID Server sendet Es steht einem Entwickler frei die neue Methode zun chst in der Datei Orchid h zu deklarieren und ihre eigentliche Implementierung in der Datei Orchid cpp vorzunehmen oder aber die gesamte Methode direkt in Orchid h zu implementieren Der Einfachheit halber nutzt dieses Beispiel die zweite M glichkeit Um ei
148. er senden Vorbedingung FC10 Erfolgsfall Heartbeat Anfrage wurde an ORCHID Server bermittelt der Datensatz des sendenden Clients in der Datenbank aktualisiert Fehlerfall Heartbeat Anfrage kann nicht gesendet Datenbankeintrag nicht aktualisiert werden Beschreibung Ein ORCHID Client kann einen Heartbeat Request TRACE Request an einen ORCHID Server bermitteln um diesem mitzuteilen dass er bereit ist Kategorie Musskriterium Tabelle 40 FC30 Heartbeat an ORCHID Server senden Anforderungsdefinition FC40 Instruktion f r Aktor abrufen Vorbedingung FC10 FC80 Erfolgsfall Die n chste unbearbeitete Instruktion f r einen an den sendenden Client angeschlossenen Aktor wurde vom Server abgerufen und liegt in einer Datenstruktur vor Fehlerfall Die n chste unbearbeitete Instruktion kann nicht abgerufen werden Beschreibung Ein ORCHID Client kann unter Angabe seiner eigenen ID und der ID des Aktors f r den eine Instruktion abgerufen werden soll einen GET Request an einen ORCHID Server senden Dieser Request wird im Erfolgsfall unter Angabe der n chsten Instruktion beantwortet im Fehlerfall oder falls keine Instruktion vorliegt variiert die Antwort Datenstrukturen TASC rU en Kategorie Musskriterium Tabelle 41 40 Instruktion f r Aktor abrufen FC50 Instruktion f r Aktor ausf hren Vorbedingung FC10 80 Erfolgsfall Die n chste unbearbeitete Instruktion f r einen an den sendenden Cli
149. erband ist ein in die bin re Form berf hrtes Projekt Assemblies k nnen ausf hrbare Programme oder Bibliotheken sein Bibliotheken k nnen im Gegensatz zu Programmen nicht direkt von einer CLI implementierenden virtuellen Maschine ausgef hrt werden sondern stellen ihre Funktionen anderen Programmen zur Verf gung 2 3 1 3 Namespaces Namespaces dt Namensr ume erm glichen es zusammengeh rige Klassen innerhalb eines Projekts logische Einheiten zu unterteilen ohne das Projekt aufteilen zu m ssen In Java sind Namespaces als Pakete bekannt 2 3 2 Arduino Dieser Abschnitt beschreibt die Programmiersprache Arduino und geht auf deren Besonderheiten ein Arduino basiert auf Wiring einer Sprache die f r die Programmierung eines gleichnamigen Microcontroller Boards entwickelt wurde und ihrerseits auf Processing basiert Processing wurde haupts chlich f r d e k nstlerische Anwendung der Programmierung also das Erzeugen von Bildern und Animationen entworfen Processing Wiring und Arduino hneln sich u erlich sehr Die Syntax der Sprachen ist vergleichbar mit der von C C Java und CH Wie auch Wiring basiert Arduino auf C C Processing basiert auf Java Durch die gro e hnlichkeit der Syntax von Arduino mit der bekannter Programmiersprachen wie C C Java und C f llt einer gro en Zahl von Programmierern der Einstieg die Sprache sehr leicht Um diese Tatsache zu verdeutlichen wird
150. erden Tabelle 57 DC10 Instruktionen ORCHID 4 6 Produktleistung Die diesem Abschnitt beschriebenen Leistungsmerkmale des Toolkits sind in zwei Kategorien unterteilt Server Leistung und Client Leistung Leistungen die Server Komponente erf llen muss sind mit 1 5 gekennzeichnet Client Leistungen mit LC 4 6 1 Server Komponente Die folgenden Tabellen zeigen die Leistungsmerkmale von der Server Komponente erf llt werden m ssen Antwortzeiten Beschreibung Die Server Komponente muss bei Vorhandensein entsprechend leistungsf higer Hardware eingehende HTTP Anfragen zeitnah behandeln und m glichst schnell eine Antwort senden Metrik Die durchschnittliche Zeit zwischen eingehender Anfrage und ausgehender Antwort darf eine Sekunde nicht berschreiten Bemerkung Da die bertragungsgeschwindigkeit von Anfragen und Antworten direkt mit der Geschwindigkeit des Netzwerks abh ngt gilt die f r LS10 angegebene Metrik f r das Szenario dass sich der Server und die Clients im gleichen lokalen Netzwerk befinden und die verwendete Hardware mindestens der des Entwicklungssystems entspricht vgl 6 2 Tabelle 58 LS10 Antwortzeiten Betriebsdauer Beschreibung Die Server Komponente ist f r den Dauerbetrieb ausgelegt l ngere Betriebszeiten haben keinen negativen Einfluss auf die Leistung der Komponente Metrik Die Betriebsdauer wird Tagen Stunden Minuten und Sekunden gemessen Bemerk
151. erladungen der Methode push zur Verf gung mit denen Daten vieler verschiedener Datentypen bertragen werden k nnen Um ein neues Header Feld hinzuzuf gen muss jedoch nur die zentrale Methode push char ver ndert werden die in der Datei Orchid h definiert ist Diese Methode nutzt eine Instanz der Klasse Client die in der Ethernet Library enthalten ist um einen ausgehenden Request zu erzeugen Eine solche Instanz verh lt s ch hnlich w e eine Datei und bietet die Methoden print und printin an die Daten an einen Request anh ngen Das Protokoll das in 5 8 ausf hrlich beschrieben wurde gibt vor dass Header Felder durch die Zeichenfolge Carriage Return Line Feed CRLF auch r n voneinander getrennt werden m ssen Die Methode printin der Klasse Client f gt diese Zeichenfolge automatisch an Das folgende Listing 70 zeigt einen Ausschnitt der Methode push prefix char Diesem Ausschnitt wurde das neue Header Feld bereits hinzugef gt fett hervorgehoben if client connect glient println PUT BTIE 1 1 ellent pr ntlin board client println Orchid Arduino Toolkit ES client println X Content Encryption TI zu devkey LENT Listing 70 Hinzuf gen des neuen Header Felds 1 Handbuch Client Bibliothek W rde d
152. ermeiden jedoch k nnen Stabilit tsprobleme dadurch nicht vollst ndig ausgeschlossen werden 6 6 3 Stabilit tsbedenken Ethernet Bibliothek Die mit der Arduino IDE ausgelieferte Ethernetbibliothek kann nicht als ausgereifte Software bezeichnet werden In hr kann vielmehr der Versuch erkannt werden eine m glichst schnell verf gbare Bibliothek zu entwickeln um mit einem Arduino Microcontroller ber das Netzwerk kommunizieren zu K nnen Die Bibliothek ist nur rudiment r kommentiert und bietet keinerlei Fehlerbehandlung an weshalb von Zeit zu Zeit Probleme auftreten k nnen Diese u ern sich meist darin dass ein Client s ch nicht zu einem Server verbinden kann ohne dass daf r ein Grund erkennbar ist Dieses Verhalten ist zum Teil vollst ndig unvorhersehbar es kann vorkommen dass eine oder zwei Verbindungen erfolgreich zustande kommen w hrend der dritten aber ein Fehler auftritt und danach keine weitere Verbindung mehr m glich ist Nur ein R cksetzen des Arduinos behebt diesen Fehler Es wurde w hrend der Implementierung der Client Bibliothek versucht die Ethernet Bibliothek so fehlertolerant wie m glich zu nutzen und auftretende Fehler ggf zu umgehen So konnte eine durchaus stabile Bibliothek geschaffen werden Fehler durch die Ethernet Bibliothek k nnen aber weiterhin nicht ausgeschlossen werden 6 6 4 Speicherprobleme Wie bereits erw hnt kann es aufgrund von Speichermangel zu Problemen mit einem Arduino Micr
153. ermittlung ist bereits Teil des Toolkits Zur Umsetzung muss lediglich entsprechende Programmlogik die Server Komponente und die Client Bibliothek implementiert werden 11 2 2 Drittsoftware Ein langfristiges Ziel des ORCHID Toolkits das den Rahmen dieser Arbeit jedoch gesprengt h tte ist die Implementierung von Bibliotheken in m glichst vielen Programmiersprachen und f r m glichst viele Plattformen die es einer Drittsoftware erlauben das Toolkit einzusetzen um Hardware ber das Netzwerk oder Internet zu integrieren und zu kontrollieren 11 2 3 Smartphone Applikationen Moderne Smartphone Betriebssysteme wie Android Google oder iOS Apple erlauben die Programmierung von Software f r mobile Ger te Apps Apps sind oftmals der Lage Daten aus dem Internet zu beziehen oder Daten auf einen Server im Internet zu laden Entsprechend w re eine Bibliothek mit der eine Smartphone App die Lage versetzt w rde mit einem ORCHID Server zu kommunizieren ein m chtiges Werkzeug dessen Verf gbarkeit zur Entwicklung zahlreicher n tzlicher Apps zur entfernten Steuerung und berwachung von Hardware mit dem ORCHID Toolkit f hren k nnte 11 2 4 Datenbank Systeme Durch die abstrakte Bas sklasse die dem verwendeten MySQL Datenbankadapter zugrunde liegt k nnen weitere Datenbanksysteme auch andere Speichersysteme sind denkbar schnell und leicht implementiert werden Eine Erweiterung des Toolkits auf jedes be
154. ern nur als Proof of Concept gilt und deshalb an dieser Stelle nicht betrachtet wird Im Folgenden werden lediglich die eigentlichen Komponenten des Toolkits beschrieben Details zu den Referenzimplementierungen und der Drittsoftware k nnen den Abschnitten 7 8 und 10 entnommen werden 5 1 1 Projektstruktur Server Komponente Die gesamte Funktionalit t die einem ORCHID Server durch Orchid Core zur Verf gung gestellt wird befindet sich in einer einzigen Assembly Obwohl dieser Ansatz dazu f hrt dass diese eine Assembly sehr viele Klassen enth lt erscheint er unter dem Gesichtspunkt der einfachen Verwendung des Toolkits jedoch geeigneter als die Verteilung der Klassen auf mehrere Assemblies Ein Entwickler der das Toolkit einsetzt muss lediglich eine einzige Datei in sein Server Projekt integrieren damit die gesamte Funktionalit t des ORCHID Toolkits genutzt werden kann Um die bersicht innerhalb der Assembly Orchid Core dennoch nicht zu gef hrden ist sie in zahlreiche semantisch sauber voneinander getrennte Namespaces aufgeteilt m weiteren Verlauf dieses Abschnitts m Detail erl utert werden ORCHID Toolkit Server Orchid Core Abbildung 10 Projektstruktur der Server Komponente Die obige Abbildung 10 zeigt die Struktur der Server Komponente zusammen mit der Referenzimplementierung Orchid anhand einer an die UML Notation angelehnten Grafik Die Abh ngigkeit der Assembly Orchid von der Assembly Orchid Core ist ei
155. erscheidet ist die F higkeit ber sog Shields deutsch Schilde nahezu beliebig erweiterbar zu sein Ein Shield ist eine Erweiterung f r ein die auf das Board gesteckt werden kann daher auch der Name Mehrere Shields k nnen bereinander auf ein gestapelt werden um die Funktionen die sie mitbringen miteinander zu kombinieren Es obt unterschiedlichste Arten von Shields verschiedene Erweiterungen mit sich bringen Das wohl bekannteste Shield ist das sog Ethernet Shield siehe 9 das es einem Arduino erlaubt sich ber ein Netzwerkkabel mit dem Internet oder Netzwerk zu verbinden Weitere Shields erweitern ein z B um die F higkeit GPS Signale zu empfangen GPS Shield einen Touchscreen nutzen zu k nnen 2 8 TFT Touch Shield oder sogar Videospiele ber einen VGA Monitor darstellen zu k nnen Gameduino Shield Eine sehr umfangreiche Liste verf gbarer Arduino Shields kann der Arduino Shield List von Jonathan Oxer entnommen werden 2 1 2 4 Erleichterte Programmierung Wie bereits beschrieben umfasst die Arduino Microcontroller Plattform auch eine IDE Integrated Development Environment deutsch etwa Integrierte Entwicklungsumgebung und eine Programmiersprache die f r Programmierung von Arduino V O Boards ausgelegt sind Im Vergleich zu anderen Microcontrollern kann ein Arduino VO Board sehr viel leichter programm
156. ert die nicht verwendet werden w rden andererseits aufw ndig der Konfiguration http www springsource org 5 http www springframework net Systementwurf ist hnliche Probleme ergaben sich bei anderen Frameworks oft ist Dependency Injection nur ein kleiner Teil des Funktionsumfangs dieser Frameworks oder die Konfigurationsaufw nde sind sehr hoch Die Wahl fiel letztendlich auf Ninject Dieses Dependency Injection Framework wurde nach genau den geforderten Prinzipien entwickelt Es ist leichtgewichtig da es keine Abh ngigkeiten zu anderen Frameworks beinhaltet und ein reines Dependency Injection Framework das keine weiteren Funktionen liefert die es f r vorliegende Arbeit ungeeignet erscheinen lassen w rden Ein weiterer Vorteil den Ninject mit sich bringt ist der Verzicht auf gro e komplexe Konfigurationsdateien wie sie z B bei Spring net zum Einsatz kommen Solche Konfigurationsdateien bergen die Gefahr von Fehlern die erst zur Laufzeit sichtbar und entsprechend schwer zu beheben sind das Debugging von Fehlern n Konfigurationsdateien ist immer ein manueller Prozess da Debugger diese Dateien nicht ber cksichtigen Ninject ist ein Open Source Projekt und f r jeden Zweck frei verwendbar es ergeben sich also keine Lizenzprobleme im Zusammenhang mit der Verwendung im ORCHID Toolkit 5 5 2 1 Funktionsweise Da die Funktionsweise von Ninject im weiteren Verlauf dieser Arbeit von zentraler Bedeutung ist
157. erte Debug Warn Error Fatal LogArchiveFileName Das Format des Namens der Archivdatei f r Log Dateien wen das Archivieren von Log Dateien aktiviert ist siehe auch gt LogFileRolling LogFileEnabled Bestimmt ob Log Meldungen in die Log Datei gt LogFile ausgegeben werden sollen oder nicht LogFileMaxSize Die maximale Dateigr e einer Log Datei in Bytes wenn das Archivieren von Log Dateien aktiviert ist siehe auch gt LogFileRolling LogFileRolling Bestimmt ob das Archivieren von Log Dateien aktiviert ist oder nicht Bestimmt ob SQL Abfragen als Log Meldungen ausgegeben werden sollen oder nicht Tabelle 93 Einstellungskategorie Logging 7 5 5 Kategorie Database Enth lt die zu verwendenden Datenbankparameter als Connection String Einstellung Bedeutung DatabaseConnectionString Der Connection String der zum Aufbau einer Datenbankverbindung verwendet wird Tabelle 94 Einstellungskategorie Database 7 5 6 Kategorie Locale Diese Kategorie enth lt Einstellungen die die Ausgabe der Server Komponente abh ngig von den Einstellungen des Betriebssystems beeinflussen Einstellung Bedeutung Culture Die zur Formatierung von Ausgaben 5 5 Kann die System Sprache berschreiben um z B Zahlen 7 http msdn microsoft com en us library system globalization cultureinfo aspx Handbuch Server Komponente Einstellung Bedeutung mit Dezimalpunkt zu formatier
158. erver GetCurrentRuntime Console Write Hardware Server is running since GCons le Write ts Totalseconds Tostringt AN seconds Console WriteLine Listing 18 Anwendung einer Extension Method Ohne Klasse AHardwareServer oder eine davon abgeleitete Klasse ver ndert zu haben kann nun im Code die aktuelle Laufzeit einer Server Instanz ermittelt werden als ob die entsprechende Methode eine Instanzmethode der Klasse selbst w re 5 4 1 3 Lambda Expressions Das Mono Framework bietet die M glichkeit das Konstrukt der Lambda Expressions Lambda Ausdr cke der Programmiersprache C zu nutzen Eine Lambda Expression ist eine anonyme Methode die u a als Methodenparameter an andere Methoden bergeben werden kann Durch diese ORCHID Eigenschaft ergeben sich zahlreiche interessante und vorteilhafte M glichkeiten Lambda Expressions f r die Erweiterung der Server Komponente einzusetzen Insbesondere Verbindung mit den bereits beschriebenen Extension Methods sind Lambda Expressions ein m chtiges Werkzeug um bestehenden Code zu erweitern ohne ihn zu ver ndern Das folgende Beispiel zeigt eine weitere Extension Method die als Parameter eine Lambda Expression erwartet public static class ServerExtension public static IEnumerable lt ASensorData gt Filter this List lt ASensorData gt list Func lt ASensorData bool gt p foreach ASensorData data in list if p dat
159. ervorgehobene im Klartext bermittelte Developer Key Auch alle anderen bermittelten Daten k nnen auf diese Weise aus dem Netzwerk mitgelesen werden Kennt ein Dritter den Developer Key und die ben tigten GUIDs von Client und Sensor Aktor kann er Anfragen an den ORCHID Server f lschen Ist das Protokoll bekannt das vom ORCHID Toolkit eingesetzt wird k nnen so z B Instruktionen f r einen ORCHID Client auf einem ORCHID Server hinterlegt werden die der urspr ngliche Entwickler nicht vorgesehen hat Da ein ORCHID Client in der Lage ist Hardware zu steuern kann eine b sartige Instruktion auf dem Server zu erheblichem Schaden f hren wenn z B ein K chenger t etwa ein Toaster mit dem Toolkit angesteuert werden kann Solche und hnliche Ger te k nnen potentiell einen Brand ausl sen wenn sie nicht ordnungsgem oder ohne Aufsicht betrieben werden Ein anderes Szenario in dem eine eingeschleuste Instruktion zu erheblichem Schaden f hren kann ist die Steuerung eines elektronischen Schlosses z B an einer Wohnungst r Ein Angreifer w re theoretisch in der Lage dieses Schloss zu ffnen Die vorliegende Implementierung des Toolkits verf gt ber verschiedene Mechanismen fehlerhafte oder b sartige Anfragen von nicht autorisierten Clients zu erkennen und abzuweisen diese Mechanismen k nnen aber umgangen werden wenn ein Angreifer wie in diesem Abschnitt beschrieben den Developer Key eines Entwicklers erf hrt Auch die Sicher
160. erwendete Nachfolger 1 1 ver ffentlicht Die vollst ndigen Spezifikationen von RFC 1945 bzw RFC 2616 k nnen 10 bzw 11 entnommen werden und befinden sich zus tzlich auf dem dieser Arbeit beiliegenden Datentr ger Der eigentliche Zweck und das am weitesten verbreitete Einsatzgebiet des Protokolls ist die bertragung von HTML Dokumenten Hypertext Markup Language in einem Netzwerk bzw ber das Internet HTTP ist aber in der Lage beliebige Daten zu bermitteln ist ein anwendungsorientiertes Protokoll das auf den Schichten 5 bis 7 des ISO OSI Referenzmodells arbeitet und auf Transmission Control Protocol TCP als Datentransferprotokoll aufsetzt 5 7 Application gt l re HTTP S mn 5 5 Session Lem 4 Transport 3 Network 2 Data Link lt E We E 79 Ethernet Token Ring 5 hysikalisch 1 Physical Physikalische Daten bertragung Abbildung 3 ISO OSI Referenzmodell Die obige Abbildung 3 zeigt die Schichten des ISO OSI Referenzmodells links und auszugsweise die Protokolle die auf den jeweiligen Schichten arbeiten rechts 14 RFC 793 siehe http tools ietf org html rfc793 ORCHID Da HTTP in den h heren Schichten 5 bis 7 arbeitet k nnen Anwendungsentwickler das Protokoll leicht f r eigene Projekte verwenden ohne tiefer in ein System eingreifen zu m ssen Die u
161. erzeugt Dieser Instanz werden im Konstruktor zwei Fabok Instanzen bergeben ServerFactory und DaemonFactory vgl 5 3 1 Mit diesen Fabriken werden im weiteren Verlauf Instanzen von Server und Daemon Klassen erzeugt Die Klasse B1oom bietet nur die ffentliche Methode Run an Diese Methode erzeugt ber die Fabrikklassen je eine Instanz der Klassen OrchidHardwareServer und OrchidSoftwareServer und bergibt deren Methode Start als ThreadStart Methode an jeweils einen eigenen Thread Jede Server Instanz l uft also in einem eigenen Thread der die Methode Start des jeweiligen Servers abarbeitet Die Start Methode der Server Klassen beinhaltet eine Schleife sie wird erst dann beendet wenn diese nicht mehr wiederholt oder der entsprechende Thread auf andere Weise beendet oder abgebrochen wird Innerhalb der Schleife wartet jede der beiden Server Instanzen an einem ihr zugewiesenen Port auf eine eingehende Verbindung W rde dieses Warten nicht in einem eigenen sondern im Main Thread der Anwendung durchgef hrt w re sie so lange blockiert bis eine wartende Server Instanz eine eingehende Anfrage erh lt Anfragen an zweite Server Instanz w rden w hrend dieser Blockierung nicht behandelt werden Trifft eine Anfrage an einem von einer Server Instanz berwachten Port ein erzeugt diese ber die DaemonFactory Instanz einer Daemon Klasse je nach Server Klasse entweder vom Typ OrchidHardwareDaemon oder OrchidSoftwareDaemon
162. es Projekts Projekt ist hier als Einheit aus einem beliebigen Softwareprojekt und dem im Zuge dieser Arbeit entwickelten Toolkit zu verstehen den jeweils anderen nicht unmittelbar beeinflussen Das ORCHID Toolkit besteht aus zwei Komponenten die eine Cl ent Server Struktur bilden einer Server Komponente und einer Client Bibliothek Die Server Komponente verf gt ber zwei Schnittstellen Server der Lage sind spezielle HTTP Anfragen von Clients und Drittsoftware entgegen zu nehmen Ein Client ist dabei ein Arduino Microcontroller dessen Programm die Client Bibliothek eingebunden wurde Drittsoftware ist jede Software die ber das Toolkit die Lage versetzt werden soll mit Hardware zu kommunizieren Die Kommunikation zwischen ORCHID Server und ORCHID Client bzw ORCHID Server und Drittsoftware ist bidirektional d h dass Daten sowohl an die Server Komponente z B Sensordaten durch einen Client oder Instruktionen f r einen Client durch eine Drittsoftware als auch von ihr z B gesammelte Sensordaten eines Clients oder Instruktionen f r einen Client gesendet werden k nnen Der Ursprung der Kommunikation ist dabei immer ein Client oder eine Drittsoftware niemals der ORCHID Server selbst die Server Komponente folgt damit der Arbeitsweise regul rer Webserver wie z B der des Apache HTTP Servers der Apache Software Foundation ber die zwei Schnittstellen der Server Komponente werden Clients und Drittsof
163. es Zeichen 16 bit ORCHID Datentyp Code M gliche Werte DOUBLE Flie kommazahlen 64 bit FLOAT Flie kommazahlen 32 pit INT Ganzzahlen 32 bit Integer LONG Ganzzahlen 64 bit Integer STR Zeichenketten UINT Vorzeichenlose Ganzzahlen unsigned 32 bit Integer ULONG Vorzeichenlose Ganzzahlen unsigned 64 bit Integer Tabelle 69 Codes f r Datentypen 5 8 4 Heartbeat senden M chte ein Client einem Server seine Bereitschaft signalisieren kann er dies durch die bertragung einer TRACE Anfrage tun Ein solcher Request wird auch als Heartbeat Request oder kurz Heartbeat Herzschlag oder Puls bezeichnet Die ben tigten Header Felder und der Aufbau eines Heartbeats k nnen der folgenden Tabelle entnommen werden Header Feld bertragener Wert Board ID GUID des Clients der die Anfrage an den Server stellt User Agent Zeichenkette die den Kommunikationspartner als ORCHID Client oder mit dem Toolkit kompatible Drittsoftware identifiziert Host Die IP Adresse des Servers und der Port auf dem sich der Client verbinden m chte Authorization Der Developer Key der verwendet werden soll Allgemeine Form TRACE 1 1 Board ID lt GUID gt User Agent lt STRING gt Host lt IP gt lt PORT gt Authorization lt DEVELOPER KEY gt Connection close Beispiel TRACE 1 1 Board ID 9 f476a50 d4e3 11e0 801d4 001492396635 User Agent Orchid Arduino Toolkit Host 192 1
164. es nicht zu einem Fehler da auch ein Arduino ohne angeschlossene Komponenten mit dem ORCHID Toolkit verwendet werden k nnen soll Die folgende Abbildung 31 zeigt den beschriebenen Ablauf in einem UML Aktivit tsdiagramm Anfrage annehmen Verbindungspartner speichern P e SE eem Erfolg Fehler UserAgent pr fen G ltigkeit pr fen Request parsen 6 d Erfolg ung ltig Requesttyp bestimmen g ltig ung ltig Erfolg Arduino ID bestimmen ung ltig Erfolg ID berpr fen gt Arduino Informationen auslesen Erfolg Erfolg Arduino Daten auslesen lt gt Erfolg Antwort aufbauen Antwort senden Abbildung 31 Bearbeitung von Drittsoftware SEARCH Requests Nachdem alle gesuchten Daten aus der Datenbank ausgelesen wurden wird die Antwort an den Verbindungspartner zusammengesetzt und daraufhin bermittelt HTTP Code 200 OK Eine solche Antwort hat stets die folgende Form zur Verbesserung der Lesbarkeit wurden Zeilenumbr che hinzugef gt Systementwurf arduino fdb41088 6cf5 4bd8 b7 le 4e40e292d47 f0 amp name Test Arduino amp description Ein Arduino zum Testen amp latitude 52 550506 amp longitude 13 349386 amp firstseen 5 14 2011 10 49 41 PM amp lastseen 8 23 2011 6 31 49 PM amp lastip 192 168 1 141 amp sensors 531la3bbe 2bec 4bff a4c3 c60645943Ff6d amp components fec2b463 600a 45a7 9494 e
165. et Dependency Injection ist eine auf gt Inversion of Control basierende Technik zur Reduzierung starrer Abh ngigkeiten innerhalb objektorientiertes Codes Eine Zeichenfolge die zwischen gt ORCHID Client und gt ORCHID Server bertragen wird um einen Client bei einem Server zu als zugriffsberechtigt zu autorisieren Siehe gt Dependency Injection Dynamic Link Library eine Sammlung von Funktionen und oder Klassen in einer bin ren Datei Im Kontext dieser Arbeit wird jede Software die das ORCHID Toolkit einsetzt um mit Hardware zu kommunizieren als Drittsoftware bezeichnet Ein Framework ist eine Sammlung von Bibliotheken und oder Programmen Als Gateway wird in einem Netzwerk ein Teilnehmer bezeichnet der anderen Teilnehmern als zentraler Zugriffspunkt in ein anderes Netzwerk dient Die Koordinaten eines Ortes auf der Welt GPS GUID Hardware Daemon gt Software Daemon Hardware Server gt Software Server Header Heartbeat HTML HTTP HTTP Code HTTP Methode IDE INI Global Positioning System ein planetenumspannendes System von Satelliten die die Lokalisierung eines Ortes auf der Welt auf wenige Meter genau erm glichen Globally Unique Identifier eine Implementierung des gt UUID Standards Eine GUID ist eine 128 Bit Zahl als eindeutige Kennung f r Objekte genutzt werden kann Ein Hardware Daemon ist ein gt ORCHID Daemon der mit gt ORCHID Clients kommun
166. eugung bereits initialisiert sein Der Aufwand f r einen Entwickler ist entsprechend hoch die Lesbarkeit und Wartbarkeit des Codes wird zum Teil ORCHID stark beeintr chtigt je nach Komplexit t der betroffenen Objekte Wird stattdessen das Dependency Injection Entwurfsmuster verwendet k nnen sowohl die Codekomplexit t verringert als auch Lesbarkeit und Wartbarkeit des Codes erheblich erh ht werden Durch die u erst geringe Kopplung zwischen einzelnen Klassen die sich durch die Verwendung von Dependency Injection erreichen l sst ergibt sich auch der Vorteil einer hohen Flexibilit t Je nach eingesetztem Framework ist es so z B m glich die zu verwendenden konkreten Klassen auszutauschen ohne den Code einer Anwendung neu bersetzen zu m ssen Dazu ist jedoch ein erh hter Konfigurationsaufwand notwendig wie 6 3 2 Detail erl utert wird Da durch die zus tzliche Flexibilit t die Dependency Injection einem Projekt verleiht jedoch dessen Erweiterbarkeit sehr stark erh ht wird berwiegt der Vorteil 5 3 3 2 Nachteile Dependency Injection erfordert aufw ndige Prozesse um Objekte zu erzeugen Diese Prozesse werden meist in einem Framework gekapselt das von Entwicklern genutzt wird um das Entwurfsmuster zu verwenden Damit das Entwurfsmuster in m glichst jedem Szenario funktionieren Kann m ssen solche Frameworks h ufig ber externe Dateien oder direkt aus dem Code heraus konfiguriert werden Dies
167. f einen ORCHID Server zu laden Realisierung und Tests 0 3 3 1 Credentials Die Server Komponente ist der Lage jedem Client der ihr bekannt ist Berechtigungen Credentials zuzuweisen vgl 5 10 M chte ein Client eine bestimmte Aktion durchf hren z B Sensordaten auf den Server laden wird zun chst gepr ft ob dieser Client ber die entsprechende Berechtigung verf gt Ist dies nicht der Fall wird Anfrage als nicht autorisierter Zugriff HTTP Code 401 Unauthorized abgewiesen Ansonsten wird die geforderte Aktion durchgef hrt 6 3 3 2 Developer Keys Das Prinzip der Developer Keys dt etwa Entwickler Schl ssel entspricht im Wesentlichen der Verwendung eines Passworts Ein Entwickler der ein Projekt auf Bass des ORCHID Toolkits entwickelt kann sich einen Developer Key generieren lassen ein entsprechendes Programm liegt dem Toolkit bei und diesen in Anfragen an einen ORCHID Server bertragen Der Server vergleicht den bertragenen Developer Key mit dem ihm bekannten zul ssigen Schl ssel und weist alle Anfragen die diesen Schl ssel nicht bertragen mit einer Fehlermeldung zur ck HTTP Code 401 Unauthorized Ein Developer Key kann theoretisch jede beliebige Zeichenfolge sein Die Verwendung des mitgelieferten Programms dkgen wird jedoch empfohlen da dieses Programm einzigartige im Sinne von unique Schl ssel generiert die lang genug sind um mit ausreichend hohe
168. f von Thread Start Abarbeitung der ThreadStart Methode Beendigung des Threads Abbildung 23 Lebenszyklus eines Threads ORCHID Wie bereits erw hnt kann es vorkommen dass die ThreadStart Methode nicht vollst ndig abgearbeitet werden kann da der Thread zuvor durch ein bestimmtes Ereignis wie einen Timeout oder einen Fehler unterbrochen wird Durch die Verwendung von Threads zur Abarbeitung einer bestimmten Methode der ThreadStart Methode ergibt sich der Vorteil dass der startende Thread lediglich die Abbildung 23 gezeigten Schritte 1 bis 3 ausf hren muss Der eigentliche rechenintensive Teil der Bearbeitung n mlich die ThreadStart Methode wird vom neu erzeugten Thread ausgef hrt der startende Thread kann w hrenddessen bereits andere Aufgaben bernehmen Jedes Programm das in C unter Mono oder dem NET Framework entwickelt wird wird zur Laufzeit durch mindestens einen Thread den Main Thread dt etwa Hauptfaden repr sentiert Dieser Thread muss vom Entwickler nicht explizit angelegt werden sondern wird durch die ausf hrende virtuelle Maschine CLR bzw Mono Runtime vgl 2 3 1 erzeugt Weitere Threads werden f r den Entwickler nicht sichtbar ebenfalls von der virtuellen Maschine erzeugt z B f r die Ausf hrung von Code innerhalb ener Bibliothek 5 9 1 2 Multithreading in der Server Komponente Beim Start des Servers wird im Main Thread der Anwendung eine Instanz der Klasse Bloom
169. f7 690 INT measured 12 50 35 AM 9 9 20 Abbildung 67 Ausgabe eines abgerufenen Sensorwerts 2 Werden mehrere Datens tze abgerufen wird ein einfaches Diagramm angezeigt in dem die gemessenen Werte auf der y Achse die Zeitpunkte der Messungen auf der x Achse abgetragen sind Je weiter rechts sich ein Datenpunkt in diesem Diagramm befindet desto aktueller ist er Die folgende Abbildung 68 zeigt die Darstellung von zehn aufeinander folgenden Sensorwerten Last 10 Sensor Data Records Abbildung 68 Ausgabe mehrerer abgerufener Sensordaten in einem Diagramm Unter jedem der beiden erl uterten Buttons befindet sich eine Schaltfl che Auto Refresh mit der die automatische Aktualisierung der abgerufenen Sensordaten ein und ausgeschaltet werden kann 77 Es k nnen maximal 100 Sensorwerte abgerufen werden ORCHID 10 8 2 Instruktionen bermitteln Der zweite Bereich der auf der linken Seite im unteren Teil der Anwendung befindet dient dazu einem Client Instruktionen zu geben indem diese an den ORCHID Server bermittelt werden Zu diesem Zweck enth lt der Bereich drei Schaltfl chen die in der folgenden Abbildung gezeigt werden Animation Abbildung 69 Steuerelemente zum Senden von Instruktionen ber den Button LED off kann eine Instruktion an den Server bermittelt werden die dazu f hrt dass die an den Client angeschlossene LED ausgeschaltet wird LED on schaltet s
170. fikation auf der Herstellerseite entnommen werden siehe 5 Eine der Besonderheiten der Arduino Microcontroller Plattform ist die Verf gbarkeit von zwei Arten von V O Pins es gibt digitale Pins die sowohl als Eingang als auch als Ausgang konfiguriert werden k nnen und analoge Pins ausschlie lich als Eingang dienen 10 http www adafruit com products 98 l http www adafruit com products 376 12 http www adafruit com products 384 http www shieldlist org EEE ORCHID Weitere Pins auf jedem VO Board dienen ua der Spannungsversorgung angeschlossener Komponenten Der Arduino Duemilanove verf gt ber 14 digitale 0 13 und 6 analoge Eing nge 0 5 Details sind der Spezifikation des Duemilanove auf der Herstellerseite zu entnehmen siehe 7 Abbildung 2 Digitale O Pins des Arduino Duemilanove Die obige Abbildung zeigt die digitalen 1 des Arduino Duemilanove rot markierte Pins k nnen unter bestimmten Umst nden f r regul re Eingabe Ausgabe Aufgaben nicht verwendet werden die digitalen Pins und 1 werden intern vom VO Board f r die serielle Kommunikation mit einem Computer genutzt vgl 6 S 20 Die Pins 10 bis 13 werden daf r verwendet mit weiterer Peripherie nicht Sensoren und Aktoren wie beispielsweise einem Shield zu kommunizieren und k nnen falls solche Peripherie verwendet wird ebenfalls nicht regul r genutzt werden vgl 6 S 20 und 9 Ein Sonderfall ist Pin 4
171. for Linux nach einem Benutzernamen und einem Passwort Diese lauten lampp und orchid Authentication Required A username and password are being requested by http localhost The site says xampp user User Name Password Cancel OK Abbildung 50 Anmeldung am lokalen Webserver 74 http www phpmyadmin net 5 Auf der beiliegenden virtuellen Maschine ist die Datenbank bereits eingerichtet Endbenutzerhandbuch Da phpMyAdmin auf den lokalen MySQL Server zugreift ben tigt es den Benutzernamen und das Passwort des Datenbankadministrators Der Benutzername des Administrators lautet root das Passwort lautet orchid Log in Username root Password Abbildung 51 Login in phpMyAdmin Nach der Best tigung von Benutzername und Passwort wird das Hauptfenster von phpMyAdmin angezeigt Im Zentrum des Fensters kann eine neue Datenbank angelegt werden wie in der folgenden Abbildung gezeigt wird Create new database orchid Collation Create MySQL connection collation utf8_general_ci A Abbildung 52 Dialog zur Erzeugung einer neuen Datenbank Nachdem die neue Datenbank erzeugt wurde wird sie automatisch als aktive Datenbank ausgew hlt Im oberen Bereich des dargestellten Fensters befindet sich der Reiter mport ber den der Dialog zum Import einer bestehenden Datenbankstruktur aufgerufen wird Wie in Abbildun
172. funktionsf hige Logging Umgebung die direkt auf Verwendung NET Mono zugeschnitten ist und sich entsprechend nahtlos in den eigenen Code einf gen l sst Der Konfigurationsaufwand der zum Betrieb von NLog notwendig ist ist im Vergleich zu anderen Logging Frameworks z B log4net etwa gleich oft jedoch geringer und flexibler Bei anderen Logging Frameworks handelt es sich oft um Portierungen von Java Frameworks hier insbesondere log4net wobei es sich um eine Portierung des log4j Frameworks handelt ist keine Portierung sondern speziell auf die NET Mono Umgebung ausgerichtet und von Grund auf daf r entwickelt ein solches Framework ist bei gleichem Funktionsumfang einer Portierung vorzuziehen Ein weiterer Vorteil von NLog den nicht alle verf gbaren Logging Frameworks bieten ist die Konfiguration aus dem eigenen Code w hrend der Laufzeit Die meisten Logging Frameworks erfordern das Vorhandensein einer eigenen Konfigurationsdatei die vom Framework eingelesen und zur Konfiguration verwendet wird Die Konfiguration von NLog kann wahlweise ber eine Konfigurationsdatei oder aus dem Code vorgenommen werden 5 5 1 1 Flexible Konfiguration aus dem Quellcode Da die Konfiguration von NLog aus dem Quellcode einer Anwendung heraus f r die Verwendung und Anpassung der Server Komponente von Bedeutung ist soll sie an dieser Stelle erl utert werden H ufig werden externe Logging Frameworks ber eine oder mehrere Konfi
173. g 53 dargestellt kann ber diesen Dialog eine Date f r den Import ausgew hlt werden File to import Location of the text file home orchid orchid_server Browse Max 2 048KiB Character set of the file utf8 Imported file compression will be automatically detected from None gzip bzip2 zip Abbildung 53 Dialog zum Import einer SO Datei Die Datenbankstruktur befindet sich der Datei home orchid orchid server orchid sql Nach der Best tigung des Dateiimports ber den Button Go wird die angegebene Datei importiert und eine Erfolgsmeldung ausgegeben Die Datenbank ist nach diesen Schritten einsatzbereit 10 5 Hinzuf gen eines ORCHID Clients Ein ORCHID Server nimmt nur Anfragen von Clients entgegen die sich ber eine GUID identifizieren dem Server bekannt ist Entsprechend muss wenn ein neuer Client hinzugef gt werden soll diesem eine solche ID zugewiesen und die Datenbank eingetragen werden Zur Erzeugung einer neuen GUID kann das Zusatztool ggen oder das Programm uuid verwendet werden Auf der virtuellen Maschine ist uuid bereits installiert und kann ber die Kommandozeile aufgerufen werden Der Aufruf entspricht dem in Abbildung 54 gezeigten Abbildung 54 Ausgabe von uuid ORCHID Ein neuer Client kann entweder ber phpMyAdmin oder ber die Kommandozeile hinzugef gt werden 10 5 1 Hinzuf gen mit phpMyAdmin Um einen Client unter Verwendung von phpMyAdmin
174. g systemTicks Environment TickCount this Respond HttpProtocolHelper HttpResponseHeaderoOk systemTicks ToString Listing 53 G ltige Methode zur Behandlung von HEAD Requests Diese Art der Verarbeitung ist g ltig und sendet einem Client als Antwort die Anzahl der Millisekunden die vergangen sind seit das System in diesem Fall der Server gestartet wurde Handbuch Client Bibliothek 8 Handbuch Client Bibliothek Dieser Abschnitt bildet das Handbuch zur Verwendung der Client Bibliothek Zun chst wird auf die Voraussetzungen eingegangen die ein System auf dem die Bibliothek eingesetzt werden soll erf llen muss Danach werden Installation und Verwendung der Bibliothek erl utert und Codebeispiele gegeben 8 1 Systemvoraussetzungen Die Client Bibliothek stellt keine gesonderten Anforderungen an ein System Sie kann auf allen Systemen verwendet werden f r die eine Arduino Entwicklungsumgebung verf gbar ist Zur Verwendung der Bibliothek ist ein Arduino Microcontroller Board mit Ethernet Shield oder ein kompatibles Microcontroller Board notwendig das mindestens die in 4 3 2 2 beschriebenen Anforderungen erf llt 8 2 Installation Um die Client Bibliothek verwenden zu k nnen muss auf dem Entwicklungssystem eine Arduino IDE installiert sein Die Installation der IDE f r Microsoft Windows und Linux wird im Folgenden beschrieben eine vollst ndige Anleitung zur Installation unter Windows Linux und MacOS kann der Websit
175. ge dieser Arbeit entwickelten L sung m Vergleich zu den bestehenden L sungen von besonderer Bedeutung sind Abschnitt 4 stellt das Pflichtenheft f r die zu entwickelnde Software dar und beschreibt welche Funktionen sie bereitstellen muss mit welchen Daten sie arbeitet und welche qualitativen Anforderungen an sie gestellt werden Auf Basis des Pflichtenhefts wird in Abschnitt 5 das Toolkit entworfen Dabei wird besonders auf die Hervorhebung verwendeter Technologien und Entwurfsstrategien eingegangen und exemplarisch gezeigt welche Vorteile diese f r die Entwicklung der Software bieten Weiterhin werden eingesetzte Werkzeuge und Bibliotheken die selbst nicht Bestandteil dieser Arbeit sind beschrieben Abschlie end werden fachlich besonders interessante Punkte der entwickelten Software detailliert betrachtet darunter ausgew hlte Klassen und das verwendete Kommunikationsprotokoll sowie bestimmte Verhaltensweisen der Software und der Aufbau der Datenbank erl utert Abschnitt 6 beschreibt die Realisierung der Software und geht dabei auf ausgew hlte Punkte und Besonderheiten des Toolkits Zus tzlich werden Sicherheitsaspekte diskutiert und qualit tssichernde Ma nahmen beschrieben die w hrend der Entwicklung eingesetzt wurden Die Abschnitte 7 und 8 bilden die Benutzerhandb cher f r Anwender der Server Komponente bzw der Client Bibliothek des Toolkits und beschreiben ausf hrlich wie diese verwendet ver ndert und erweitert we
176. gel ufiger als sein deutsches quivalent so wird der englische Begriff verwendet Dies trifft insbesondere auf die W rter Server Client Request und Microcontroller zu Sind der deutsche und der englische Begriff gleich gel ufig werden beide Begriffe synonym verwendet 1 4 Namensgebung Viele bekannte Softwareprojekte tragen ein Akronym 1 Backronym 2 oder Apronym als Namen Bekannte Beispiele sind PHP PHP Hypertext Preprocessor oder TWAIN Technology Without An Interesting Name Auch der Name der f r das Zuge dieser Arbeit entwickelte Toolkit gew hlt wurde basiert auf einem Akronym ORCHID ORCHID ist ein Homophon 3 auf das Akronym ORCIT Online Real Life Clients Internet Toolkit also Werkzeugsammlung f r an das Internet angebundene Clients der realen Welt und ein Apronym auf das englische Wort f r Orchidee 1 5 Beegriffsdefinitionen Im Verlauf dieser Arbeit werden verschiedene Begriffe verwendet d e vorab erl utert werden m ssen um das Verst ndnis nicht zu beeintr chtigen Ein ORCHID Server ist eine Instanz einer Software die das ORCHID Toolkit genauer die Server Komponente des ORCHID Toolkits vgl 4 1 einsetzt ein ORCHID Client oder wenn der Kontext es zul sst auch nur Client ist entsprechend ein Arduino Microcontroller der mit einem Sketch Programm f r einen Arduino Microcontroller vgl 2 3 2 1 programmiert wurde der ebenfall
177. genden genannten Kriterien sind ausdr cklich nicht Bestandteil dieser Arbeit Ihre Implementierung in das Toolkit ist nicht vorgesehen aber nicht unm glich Vollst ndige Kompatibilit t zu 1 1 Verschl sselung der Kommunikation zwischen Kommunikationspartnern Nutzungsm glichkeit als Webserver oder Browser Bibliotheken von Entwicklern in ihren Softwareprojekten genutzt werden k nnen um mit der Server Komponente zu kommunizieren sind nicht Bestandteil der Arbeit Aufgrund der hohen Flexibilit t des Toolkits und dessen Unabh ngigkeit von der Implementierung von Drittsoftware ergeben sich so viele verschiedene M glichkeiten dass es unm glich ist diese im Rahmen einer Arbeit wie dieser abzudecken Als einzige Ausnahme wird die 4 1 1 3 beschriebene Dr ittsoftware als Proof of Concept entwickelt Weitere Bibliotheken sind nicht Teil dieser Arbeit ORCHID 4 2 Produkteinsatz Das ORCHID Toolkit wird unter der Pr misse entwickelt dass es von m glichst vielen Entwicklern in deren Softwareprojekten eingesetzt werden kann Aufgrund der Vielfalt von M glichkeiten die sich aus der Kombination von Arduino Microcontrollern und Drittsoftware ergibt ist es schwierig eine einzelne Definition f r den Einsatzbereich des Toolkits zu finden Die M glichkeiten f r den Einsatz des ORCHID Toolkits ergeben sich stattdessen aus den vorgesehenen Anwendungsbereichen der Zielgruppe und der Lizenz unter der es ver ffentlicht
178. gepasst ist Um die Anwendung so zu ver ndern dass sie nicht mehr die alte sondern die neue Aufgabe erledigt muss der Entwickler nur die Konfigurationsdatei so anpassen dass anstatt Center nun die neu entwickelte Klasse Center2 verwendet wird Die Bereitstellung dieser Klasse st abh ngig vom verwendeten Dependency Injection Framework und wird an dieser Stelle nicht behandelt Ist die Konfigurationsdatei angepasst und wird die Anwendung gestartet wird nun an jeder Stelle an der zuvor eine Instanz von Center erzeugt wurde eine Instanz von Center2 erzeugt die die neuen Anforderungen abdeckt in dem Rahmen den abstrakte Basisklasse ACenter vorgibt Die Anwendung wurde also stark ver ndert ohne s e im Kern neu kompilieren oder auch nur eine einzige Zeile Quellcode ver ndern zu m ssen Systementwurf 5 4 Verwendete Technologien Dieser Abschnitt befasst sich mit den f r die Implementierung der Toolkit Komponenten verwendeten Technologien geht auf deren f r die vorliegende Arbeit interessanten Besonderheiten ein und hebt besondere Vorteile die eine Technologie f r die Entwicklung von Software bietet hervor 5 41 C und das Mono Framework Einige der sich aus der Verwendung des bereits n 2 3 1 beschriebenen Mono Frameworks ergebenden programmiertechnischen Vorteile werden im Folgenden erl utert Die hier beschriebenen M glichkeiten die Mono einem Entwickler bietet wurden speziell im Hinblick auf m gliche Erweiterungen o
179. gurationsdateien konfiguriert wobei es sich dabei meist um XML Dateien handelt Auch NLog kann ber eine solche Datei konfiguriert werden lt xml version 1 0 encoding utf 8 gt lt nlog xmlns http www nlog project org schemas NLog xsd xmlns xsi http www w3 org 2001 XMLSchema instance gt lt gt lt target name logfile xsi type File fileName log log gt lt targets gt lt rules gt lt logger minLevel Debug writeTo logfile gt lt rules gt lt nlog gt Listing 24 Beispielhafte NLog Konfigurationsdatei Listing 24 zeigt ein Beispiel f r eine NLog Konfigurationsdatei In diesem Beispiel wird ein einfacher Logger eine Instanz die Meldungen schreibt konfiguriert der eine Datei namens log log schreibt Die Datei wird als Target dt Ziel bezeichnet In einer solchen Konfigurationsdatei k nnen beliebig viele verschiedene Targets und Logger definiert werden der Regelsatz ist sehr umfangreich und erlaubt u a auch die formatierte Ausgabe von Log Meldungen Es gibt dar ber hinaus zahlreiche M glichkeiten Targets zu definieren so ist es u a m glich Log Meldungen in 7 http www nlog project org http www opensource org licenses bsd license php http logging apache org log4net 5 http logging apache org log4j Systementwurf 12277777777 Dateien auf die Standard Ausgabe und Datenbanken zu schre
180. heinen der urspr nglichen Form handelt es sich beim Abstract Factory Pattern allerdings um ein statisches Typeloading System da zu verwendenden konkreten Klassen den konkreten Fabrikklassen und Fabrikmethoden bekannt und entsprechend fest kodiert sein m ssen Um das Muster ein dynamisches Typeloading System zu berf hren muss Weg gefunden werden die konkreten Fabrikklassen von den konkreten Implementierungen der in den Fabr kmethoden erzeugten Instanzen zu entkoppeln Ziel ist es also dass auch die konkreten Fabrikklassen lediglich die abstrakten Bas sklassen oder Schnittstellen kennen und die eigentlichen Instanzen an anderer Stelle erzeugt werden Im vorherigen Abschnitt wurde beschrieben w e Typen dynamisch geladen werden k nnen Ohne weitere Klassen w re es nun m glich die konkreten Fabrikklassen ber einen Ninject Kernel vgl 5 5 2 konkrete Instanzen der zu verwendenden Klassen erzeugen zu lassen ohne dass diese die konkreten Klassen kennen m ssen Jede Fabrikklasse m sste zu diesem Zweck aber ber eine Instanz der Klasse StandardKernel aus dem Ninject Dependency Injection Framework verf gen Eine solche Instanz muss immer auch mindestens Modul kennen es w re also notwendig f r jede Fabrik ein solches Modul bereitzustellen und zu in tial sieren bzw jeder Instanz ein solches bereits initialisiertes Modul zu bergeben Eine solche Doppelung im Code ist nach M glichkeit zu vermeiden Zu
181. heitsma nahme nur Anfragen von bekannten IP Adressen entgegenzunehmen und zu verarbeiten kann umgangen werden indem ein Angreifer P Spoofing dt etwa IP Verschleierung oder einsetzt Dabei werden Datenpakete so manipuliert dass sie als Absender IP Adresse nicht mehr die wirkliche Adresse des Absenders sondern eine beliebige von diesem gew hlte IP Adresse enthalten 7 http www wireshark org 117 ORCHID Zusammenfassend kann festgehalten werden dass das ORCHID Toolkit um eine M glichkeit zur Verschl sselung der zwischen Client und Server versendeten Daten erweitert werden muss um f r sicherheitskritische Einsatzbereiche geeignet zu sein 6 6 2 Stabilit tsbedenken Durch den f r die Entwicklung einer Bibliothek f r die Arduino Plattform notwendigen Einsatz von C als Programmiersprache ergeben sich zum Teil Probleme die unter bestimmten Umst nden zu Stabilit tsproblemen der Client Bibliothek f hren k nnen In Abschnitt 6 5 wurde ein solches Problem bereits beschrieben dieses spezielle Problem ist aber bereits gel st Weitere Probleme dieser Art sind zu bef rchten da besonders fehlertoleranter Code einen Gro teil des zur Verf gung stehenden Speichers verbrauchen w rde vgl 6 6 4 W hrend der Entwicklung der Client Bibliothek wurde stets darauf geachtet typische Fehler Zugriffe auf Array Indizes au erhalb des definierten Bereichs Puffer berl ufe etc zu v
182. hien werden falls m glich vermieden um einerseits die Erweiterbarkeit zu erleichtern andererseits Wartbarkeit der Software zu erh hen L sungsans tze Das ORCHID Toolkit soll leicht zu verwenden sein und es auch weniger erfahrenen Entwicklern erm glichen ihre Vorstellungen m glichst schnell umzusetzen Ein Hauptkriterium beim Entwurf der Software ist entsprechend die Vermeidung hoher H rden f r den Einsatz der Werkzeugsammlung 3 2 2 Technologiewahl Durch die starke Auslegung auf Flexibilit t und Erweiterbarkeit des Toolkits musste f r die Entwicklung eine m glichst zeitgem e und flexible Plattform gew hlt werden die durch die Arduino Plattform erzwungenen Limitierungen lie en f r die Client Bibliothek keine freie Wahl zu weshalb sich das Folgende lediglich auf die Entwicklung der Server Komponente des Toolkits bezieht Aus den positiven Erfahrungen mit C und dem Microsoft Framework die ich im Verlauf meiner Bachelorarbeit sammeln konnte vgl 16 fiel die Wahl f r diese Arbeit ebenfalls auf C und da die Server Komponente plattform bergreifend ausf hrbar sein soll das Mono Framework das Framework erfordert zur Ausf hrung Microsoft Windows Da sowohl das NET Framework als auch Mono einen Compiler beinhalten der Quellcode verschiedener Programmiersprachen in CIL vgl 2 3 1 bersetzt wird eine gro e Zahl von Programmierern Lage versetzt den Toolkit Code zu erweitern ode
183. hinzuzuf gen muss die Anwendung im Browser aufgerufen http localhost phpmyadmin und die Datenbank orchid ausgew hlt werden orchid 10 x actions EI actors EI arduinos EI credentials EI instructions known _hosts EI messages EI sensors EI sensor data typemappings Abbildung 55 Auflistung von Datenbanktabellen in phpMyAdmin Wie in der obigen Abbildung zu sehen werden daraufhin alle in der Datenbank vorhandenen Tabellen angezeigt Um einer Tabelle einen Datensatz hinzuzuf gen muss diese der abgebildeten Auswahlliste angeklickt werden woraufhin alle bereits enthaltenen Datens tze und das Men zum Bearbeiten der Tabelle dargestellt werden ber die Auswahl des Men punkts Insert wird die Eingabemaske f r neue Datens tze aufgerufen die in Abbildung 56 zu sehen ist browse structure RSQL j Search Insert FBiExport FEjlmport 2 Field Type Function Null Value id int 11 guid varchar 36 last_ip varchar 39 4 4 4 4 4 200 description text E lat varchar 20 41 lon 20 E first_seen datetime E last_seen datetime E model 200 Unknown Arduino Go Abbildung 56 Eingabemaske f r neue Datens tze Die Bedeutung der auszuf llenden Felder kann Abschnitt 5 10 entnommen werden Als Wert f r das Feld las
184. hkonstrukts deutlich erkennbar ist Eine typische Aufgabe in der Programmierung ist die Zusammenf hrung und Filterung zweier Listen von Elementen des gleichen Datentyps die aus unterschiedlichen Quellen stammen beispielsweise aus zwei gesonderten Datenbankabfragen Ohne die Verwendung eines Konstrukts wie LINQ ist der Einsatz einer oder mehrerer Schleifen notwendig wie im folgenden Listing zu sehen ist private List lt int gt MergeAndFilter List lt int gt first List lt int gt second List lt int gt result new List lt int gt int element an firse ir elemente 2 0 1 j toreach int element second In second ir element second 5 2 0 1 zesult Add element second 7 return result Listing 21 MergeAndFilter mit Schleifen Das obige Beispiel zeigt wie unter Verwendung von zwei Schleifen zwei Listen von Integer Werten zusammengef hrt werden wobei lediglich diejenigen Werte erhalten bleiben die ohne Rest durch zwei teilbar sind gerade Zahlen Die gleiche Funktionalit t kann unter Verwendung von LINQ wie folgt implementiert werden private List lt int gt MergeAndFilter List lt int gt first List lt int gt second return first Where lt int gt x gt 2 gt ya 2 EK lobie Ine K Union lt int gt second Where lt int gt Listing 22 MergeAndFilter mit LINQ Bei gleicher E
185. hlossene Komponente einen Aktor vorliegen Die Abarbeitung eines GET Requests geschieht in der Methode HandleGETRequest der Klasse OrchidHardwareDaemon Nachdem sichergestellt wurde dass zur Verarbeitung des GET Requests notwendigen Daten vorliegen wird zun chst der bermittelte Developer Key gepr ft Ist der Key nicht g ltig wird Verarbeitung abgebrochen und eine Fehlermeldung an den Client gesendet HTTP Code 401 Unauthorized Im n chsten Schritt werden die ID des Clients und der Komponente aus dem Systementwurf Request ausgelesen Tritt dabei ein Fehler auf z B weil eine ID ung ltig ist wird eine Fehlermeldung HTTP Code 400 Bad Request an den Client gesendet und die Verarbeitung abgebrochen Liegen die IDs von Client und Komponente vor wird gepr ft ob es diesem Client erlaubt ist Instruktionen vom Server abzurufen Dazu werden ber die Methode GetCredentials Guid der Klasse MySsglAdapter die Berechtigungen des Clients aus der Datenbank ausgelesen Ist es dem Client nicht erlaubt Instruktionen abzurufen wird die Anfrage mit einer Fehlermeldung HTTP Code 401 Unauthorized beantwortet und die Verarbeitung beendet Um die n chste vorliegende Instruktion abzurufen wird die Methode GetNextInstruction Guid Guid der Klasse MySgqlAdapter aufgerufen Diese sucht in der Datenbank nach der n chsten bisher unbehandelten Instruktion f r die Kombination aus Client und Aktor Diese Instr
186. iben Eine vollst ndige Liste der m glichen Targets kann der Website des Herstellers entnommen werden Da die Server Komponente ber lediglich eine einzige Konfigurationsdatei verf gen sollte vgl 7 5 wurde von der Konfiguration des Logging Systems ber eine zus tzliche Datei abgesehen Die Konfiguration sollte aber dennoch flexibel genug sein um Entwicklern Server Komponente verwenden wollen die M glichkeit zu geben sie ganz nach ihren Vorstellungen zu konfigurieren ohne die Assembly selbst ver ndern zu m ssen Zu diesem Zweck findet Konfiguration des Logging Systems nicht der Assembly Orchid Core sondern extern statt in der Referenzimplementierung in der Assembly Orchid Um eine weitere Konfigurationsdatei zu vermeiden wird NLog aus dem Quellcode der Referenzimplementierung heraus konfiguriert Das folgende Listing 25 zeigt die Konfiguration aus dem Code heraus angelehnt an die tats chliche Verwendung der Referenzimplementierung dort werden weitere Code Teile ber hrt die an dieser Stelle nicht relevant sind private static void BuildLoggers LogLevel lvl LogLevel Debug LoggingConfiguration config new LoggingConfiguration FileTarget fileTarget new FileTarget fileTarget FileName log log config AddTarget fileTarget LoggingRule rule new LogqggingRule 1 1 fileTarget config LoggingRules Add rule Listing 25 NLog Konfiguration aus
187. ich bringt relativiert Die durch die Verwendung von Reflection auftretenden Performanceeinbu en sind durch ihr fr hes Auftreten im Programmablauf und ihre Einmaligkeit vernachl ssigbar gering und werden an dieser Stelle nur aus Gr nden der Vollst ndigkeit genannt Dar ber hinaus ist das Laden eines Typs ber dessen Namen immer mit dem Risiko verbunden dass es zu Fehlern kommen kann Solche Fehler k nnen z B auftreten wenn der Typname nicht korrekt oder nicht vollst ndig angegeben wird Geschieht dies zur Laufzeit eines Programms kann es durch nicht initialisierte Objektreferenzen zu Fehlern Abst rzen kommen Da das Typeloading System der Server Komponente aber ber Sicherheitsma nahmen und Integrit tspr fungen verf gt k nnen solche Fehler oder gar Abst rze der Software ausgeschlossen werden 6 3 3 Sicherheitsaspekte Da das ORCHID Toolkit f r die Entwicklung von Prototypen ausgelegt ist und Projekte die auf dem Toolkit basierend entwickelt werden nicht in Produktivumgebungen eingesetzt werden sollen kann auf Sicherheitsfunktionen weitgehend verzichtet werden Da aber ein ORCHID Server unter Umst nden von einem Entwickler nicht im lokalen Netzwerk sondern im Internet betrieben wird oder auf andere Weise ber das Internet erreichbar ist ist es sinnvoll ein Mindestma an Sicherheitsfunktionen zu implementieren die es einem potentiellen Angreifer schwieriger machen Daten von einem ORCHID Server abzurufen oder Daten au
188. iche Hilfsklassen 5 1 1 2 Orchid Core Configuration Orchid Core Configuration enth lt alle zur Verwendung des Konfigurationssystems notwendigen Klassen Es handelt sich um einen zentralen Namespace auf den aus den meisten anderen Namespaces zugegriffen wird Aus diesem Grund ist er in Abbildung 11 nicht enthalten 5 1 1 3 Orchid Core Daemons Alle Daemon Klassen und deren abstrakte Basisklassen sind in Orchid Core Daemons enthalten Zus tzlich enth lt der Namespace abstrakte und konkrete Fabrikklassen f r Daemon Instanzen 5 1 1 4 Orchid Core Data Dieser Namespace enth lt Datenhaltungsklassen f r alle Arten von Daten mit denen die Server Komponente arbeitet sowie die abstrakte Basisklasse f r Datenbankadapter und die konkrete Implementierung dieser Basisklasse f r MySQL Datenbanken Zus tzlich enth lt der Namespace abstrakte und konkrete Fabr kklassen f r Instanzen von Datenhaltungsklassen ORCHID 5 1 1 5 Orchid Core Exceptions Speziell auf die Anforderungen der Server Komponente zugeschnittene selbst implementierte Exception Klassen Fehler Klassen sind in diesem Namespace untergebracht Er ist in Abbildung 11 nicht aufgef hrt 5 1 1 6 Orchid Core Parsers Orchid Core Parsers enth lt diejenigen Klassen die daf r zust ndig sind Anfragen die eine Server Instanz an eine Daemon Instanz weiterreicht zu analysieren und aufzubereiten zu parsen 5 1 1 7 Orchid Core Requests In diesem Namespace befinden sich Klas
189. id Core Daemons namespace OrchidReferenceServer public static class MainGlass private statio Config public void Main string args string cfgrile Sertings Drenid inT Initialize configuration system Crg InLt1al1ze ger EE Eer Lekt Initialize Logging System InitializeLogging f Create new bloom Bloom bloom new Bloom new ServerFactory new DaemonFactory Run the server s bloom Blossom private static void InitializeLogging bool enabled 1 Cerpen TConsoleLogEnabled True LoggingConfiguration conf new LoggingConfiguration if enabled ConsoleTarget t new ConsoleTarget t Layout cfg Get Logging ConsoleLogLayout Smessage conf AddTarget console t LogLevel 1 LogLevel FromString Coneeleminlevel LoggingRule rule new LoggingRule 1 conf LoggingRules Add rule LogManager Configuration conf Listing 44 Initialisierung des Logging Systems Handbuch Server Komponente 5 In einer nicht berwachten Umgebung also z B auf einem entfernten Server sollte der n Listing 44 gezeigte Code nicht ohne weitere Anpassungen verwendet werden da u a Fehler nicht abgefangen werden sondern zu einem Absturz des Programms f hren k nnen Um den Server nach einem problematischen Fehler neu starten
190. ie entsprechend ein Die Schaltfl che Animation sendet sechs Instruktionen an den Server die nacheinander vom Client angefordert und ausgef hrt werden was zu dreimaligem Ein und Ausschalten der LED f hrt 10 8 3 Client Informationen abrufen Der dritte und letzte Bereich befindet sich auf der rechten Seite im unteren Teil der Anwendung und erm glicht das Abrufen von Informationen ber einen ORCHID Client Er enth lt nur die Schaltfl che Get Arduino Info Wird diese angeklickt werden die dem Server bekannten Informationen ber den angegebenen Client abgerufen und angezeigt w e n der folgenden Abbildung 70 zu sehen ist Info about Neuer Client Unknown Arduino ID a435ffee da48 11e0 ad93 080027c251f7 Description Beschreibung Geolocat on First contact 9 8 2011 8 30 34 Last seen 9 9 2011 1 32 41 AM Last IP address 127 0 0 1 Connected sensors Connected components 1 2504 54 11 0 0860 080027 251 7 Get Arduino info Abbildung 70 Ausgabe von Client Informationen Verbundene Sensoren werden als Link dargestellt Ein Klick auf diesen Link ruft den aktuellsten Sensorwert vom Server ab Unter wird die auf dem Server gespeicherte Position des Clients auf der Erde als Link auf Google Maps angezeigt ber den die entsprechenden Koordinaten auf einer Weltkarte angezeigt werden k nnen 78 http maps google com Endbenutzerhandbuch 10 9 Zusammenfassung
191. ieben sich aus den in 4 1 beschriebenen Muss und Wunschkriterien ergeben Jede Funktion ist dazu in einer eigenen Tabelle untergebracht der sie kurz beschrieben wird Zus tzlich wird genannt welche Bedingungen an vorhergehende Ereignisse oder Voraussetzungen die Funktion hat was die Konsequenzen f r den Erfolgs oder Fehlerfall sind und falls notwendig welche Datenstrukturen ben tigt werden Wenn es f r das Verst ndnis der beschriebenen Funktion von Vorteil ist werden zudem ausgesuchte beteiligte Klassen genannt F r alle hier genannten Produktfunktionen an denen ein ORCHID Client als anfragender Verbindungspartner beteiligt ist gilt dass die entsprechende Funktion nur dann erfolgreich ist wenn der Client auch die Berechtigung hat die ausl sende Aktion durchzuf hren Da Berechtigungen jedoch ein Wunschkriterium s nd vgl 4 1 2 wird diese Bedingung nicht den Vorbedingungen der entsprechenden Produktfunktionen erw hnt Eine Anfrage eines ORCHID Clients der nicht berechtigt ist die entsprechende Produktfunktion zu nutzen wird bei Umsetzung der Berechtigungsverwaltung und entsprechender Server Konfiguration stets mit einer Fehlermeldung HTTP Code 401 Unauthorized beantwortet gt Seit dem 13 Juli 2011 ist das Arduino Ethernet O Board erh ltlich Es verf gt ber einen integrierten Ethernet Port und kann entsprechend ohne Ethernet Shield betrieben werden Informationen unter http arduin
192. ientierung bereits jetzt als neue Daemon Klasse einsetzbar da sie alle Eigenschaften und Methoden der abgeleiteten Klasse OrchidHardwareDaemon erbt und vom Typeloading System korrekt nitialisiert werden kann Sie stellt jedoch bisher keine Ver nderung dar Um Behandlung von Anfragen eines Clients zu ver ndern muss de Methode HandleRequest berschrieben werden die jede Daemon Klasse anbietet public override void HandleRequest BufferedStream bs new BufferedStream this Socket GetStream this SetRequest this Parser ParseRequest stream if this Request null this Request count 0 return switch this Request RequestType case HttpRequestType Get this HandleGETRequest break case HttpRequestType Put this HandlePUTRequest break case HttpRequestType Trace this HandleTRACERequest break default this HandleUnknownRequestType break protected internal new void HandleTRACERequest New handling goes in here Listing 48 berschreiben von HandleRequest Das obige Listing 48 zeigt wie die Methode HandleReguest berschrieben werden kann Zun chst muss die Anfrage eine Instanz einer Server Klasse den Daemon weiterleitet aus einem Datenstrom ausgelesen werden Dieser Datenstrom wird Zeile 3 aus dem Socket ber den die aktuelle Daemon Instanz mit einem Client verbunden ist ermittelt und eine Instanz der Klasse Buffered
193. iert werden Microcontroller zu programmieren ist ein aufw ndiger Prozess da den meisten F llen als Programmiersprache C C oder ein davon abgeleiteter Dialekt zum Einsatz kommen muss Nicht nur tiefgreifende Kenntnisse dieser Sprachen sowie ein fundiertes technisches Verst ndnis der eingesetzten Microcontroller sind erforderlich sondern oft auch der Einsatz spezieller Hardware die die Programmierung des Microcontrollers berhaupt erst m glich macht sog Programmer Im Gegensatz dazu erm glichen es die Arduino IDE und die Arduino Programmiersprache auch unerfahrenen Programmierern einen Microcontroller zu programmieren Zahlreiche Beispiele die zum Lieferumfang der IDE geh ren und zahllose Ressourcen m Internet erleichtern den Einstieg zus tzlich Die Programmierung eines Arduino VO Boards f r Einsteiger wird erleichtert indem die Arduino Programmiersprache die aus der Verwendung von C C stammenden Probleme durch viele hilfreiche Konstrukte vor dem Benutzer versteckt 61 5 5 Dennoch k nnen die fortgeschrittenen Konzepte die diese Programmiersprachen anbieten auf Wunsch genutzt werden wodurch eine gr ere Flexibilit t und eine Erweiterung der M glichkeiten f r Entwickler erreicht werden 2 1 2 5 Weitere Eigenschaften Ein Arduino verf gt ber je nach Board unterschiedlich viele Ein und Ausg nge 1 Pins Die genaue Zahl f r jeden kann der Spezi
194. im Verzeichnis der DVD bei ber den Button am rechten Rand des Fensters kann diese Datei als Festplatte ausgew hlt werden Die folgende Abbildung zeigt die notwendigen Einstellungen f r die virtuelle Festplatte 2 Bootfestplatte O Festplatte erzeugen Festplatte benutzen OrchidVM vdi normal 15 00 GB v Abbildung 47 Auswahl einer virtuellen Festplatte 70 http www virtualbox org 1 http www virtualbox org wiki Downloads 72 http www linuxmint com Endbenutzerhandbuch Nach diesem Schritt ist die Einrichtung der virtuellen Maschine abgeschlossen und s e kann verwendet werden Im Hauptfenster von VirtualBox erscheint sie auf der linken Seite und kann ber einen Doppelklick gestartet werden 10 3 bersicht Nach dem Start der virtuellen Maschine Benutzername und Passwort lauten orchid wird der Desktop angezeigt der Abbildung 48 hnelt Computer Kireiox WED Browsen stop Orchid Arduino Toolkit Live Demo 2 orchid s Home Monoapevelgp faari arankan d Arduino IDE Start orechid sh Abbildung 48 Desktop der virtuellen Maschine Auf dem Desktop befinden sich Verkn pfungen zu den wichtigsten f r den Betrieb eines ORCHID Servers notwendigen Dateien und Programmen Datei Verkn pfung Beschreibung orchid s Home ffnet das Heimverzeichnis des Benutzers orchid stop_orchid sh Beendet einen laufenden ORCHID Server auf der virtuell
195. ingabe liefern die in Listing 21 und Listing 22 gezeigten Methoden exakt das gleiche Ergebnis zur ck Die Redundanz m Code die de Verwendung von zwei Schleifen m ersten Beispiel verursacht wird durch den Einsatz von LINQ entfernt die Lesbarkeit zus tzlich erh ht Aus dem obigen Beispiel Listing 22 wird ersichtlich dass LINQ zu gro en Teilen als Extension Methods implementiert wurde Where lt T gt Union lt T gt und ToList lt T gt sind generische Extension ORCHID Methods der Klasse List lt T gt Es existiert dar ber hinaus jedoch noch eine zweite Form die den aus SQL bekannten Abfragen noch st rker hnelt als die bisher gezeigte Das folgende Beispiel zeigt d e Filterung und aufsteigende Sortierung einer Liste von Ganzzahlen nur gerade Zahlen sollen erhalten bleiben unter Verwendung von LINQ private IEnumerable lt int gt FilterAndSort List lt int gt list return from in list where 2 0 orderby x ascending select Listing 23 FilterAndSort mit LINQ Diese Methode liefert alle geraden Zahlen aus list aufsteigend sortiert zur ck Ohne die Verwendung von LINQ w ren dazu mindestens eine Schleife und ein einfacher Sortieralgorithmus notwendig Die M glichkeiten die LINQ einem Entwickler bietet sind nat rlich nicht auf die hier gezeigten Anwendungsf lle begrenzt Komplexe Abfragen k nnen hnlich wie bei der Verwendung relationaler Datenbanken Daten auf zahlreiche Art
196. ino Microcontroller zu einem ORCHID Client zu machen Jedes hier genannte Beispiel f hrt einen praktischen Verwendungszweck f r die beschriebenen Aktionen an Ausnahme ist das erste Beispiel das lediglich die In tialisierung abdeckt und befindet sich auf der dieser Arbeit beiliegenden DVD 8 4 1 Initialisierung Dieses Beispiel zeigt wie die Client Bibliothek eingebunden und initialisiert werden kann Alle weiteren Beispiele basieren auf diesem der Initialisierungscode wird deshalb in den folgenden Beispielen nicht wiederholt Zun chst wird ber File gt New ein neuer Sketch erzeugt oder ein bestehender Sketch in die Arduino IDE geladen Jeder g ltige Arduino Sketch verf gt mindestens ber die Methoden setup und loop Sind diese Methoden im neuen oder geladenen Sketch nicht vorhanden m ssen sie erzeugt werden ORCHID Der Aufbau des Sketchs hnelt nun dem im folgenden Listing gezeigten Example sketch No 1 old setup 1 void loop Listing 57 Grundger st eines Sketchs Im n chsten Schritt muss die Client Bibliothek des ORCHID Toolkits den Sketch eingebunden werden Dies geschieht entweder manuell oder ber die Men s der Arduino IDE Nach der Einbindung hat sich der Code des Sketchs entsprechend Listing 58 ver ndert inelude lt O rchid2 h gt lt OrchidInastruction h gt include lt Strings h gt void setup void loop
197. instead Listing 26 Beispielhafte Log Meldung Der im obigen Listing gezeigte Auszug aus einer typischen Logdate der Server Komponente zeigt deutlich dass der Fokus der erzeugten Log Meldungen auf deren Verst ndlichkeit liegt Wie einleitend erw hnt ist die Konfiguration der Server Komponente die de obige Log Meldung erzeugt hat fehlerhaft d h eine Assemblydate ist nicht auffindbar ein Typ der sich dieser Datei befinden soll kann entsprechend nicht geladen werden Ein Entwickler der eine solche Log Meldung erh lt kann die Ursache des Problems leicht beheben indem er pr ft ob die Datei vorhanden ist und den angegebenen Typ tats chlich beinhaltet 5 5 2 Ninject Bereits zu Beginn der Entwicklung stand fest dass Dependency Injection Framework zum Einsatz kommen sollte Besonderes Augenmerk f r die Auswahl eines Frameworks lag dabei einerseits auf der m glichst einfachen und intuitiven Verwendung andererseits auf der Leichtgewichtigkeit es sollte sich um ein reines Dependency Injection Framework handeln das keine weiteren Funktionen liefert und keine zus tzlichen Abh ngigkeiten zu anderen Frameworks beinhaltet Aus dem Umfeld von Java ist das Spring Framework sehr bekannt Eine Portierung f r NET Mono ist mit Spring uer verf gbar Spring net erschien f r die Verwendung als Dependency Injection Framework n der Server Komponente jedoch ungeeignet da es einerseits zahlreiche weitere Funktionen lief
198. int Authorization client printlin devkey int irn else dagt error ORCHID NO CONNECTION waitForClient client SE client available Read answer incl status code and message Store message value as long in variable ret else Last error Orchid 0RCHID NO ANSWER if client connected client stop return ret Listing 72 Erweiterung der Client Komponente Handbuch Zusatztools 9 Handbuch Zusatztools Dieser Abschnitt beschreibt die im ORCHID Toolkit enthaltenen Zusatztools ggen und dkgen Die notwendigen Systemvoraussetzungen f r den Betrieb dieser Tools entsprechen denen der Server Komponente vgl 7 1 und werden hier nicht gesondert erw hnt 9 1 ggen Das Tool ggen GUID Generator dient zur Erzeugung von GUIDs vgl 6 3 1 f r Clients Sensoren oder Aktoren Es handelt sich um ein Kommandozeilenprogramm auf eine grafische Benutzeroberfl che wurde bewusst verzichtet Um mit ggen eine GUID zu erzeugen reicht es das Programm ber die Kommandozeile aufzurufen wie in der folgende Abbildung zu sehen ist Abbildung 44 Ausgabe von ggen Bei jedem Aufruf des Tools wird eine neue GUID erzeugt Sollen mehrere GUIDs auf einmal erzeugt werden kann dies ber den Parameter c bzw count erreicht werden Dieser Parameter erwartet die Angabe der Anzahl der zu erzeugenden GUIDs wie Abbildung 45 zeigt
199. ionen der Client Bibliothek verzichtet auf die Angabe von Beteiligten da dies stets der ausf hrende Sketch die Arduino Ethernet Library vgl 21 und die Client Bibliothek sind vgl 5 1 2 FC10 ORCHID Client Instanz erzeugen Vorbedingung Arduino bereit Erfolgsfall Eine Instanz der Client Bibliothek ist bereit und initialisiert Fehlerfall Client kann nicht kommunizieren Beschreibung Eine Instanz des ORCHID Client wird erzeugt und initialisiert Ihr werden verschiedene Einstellungen mitgeteilt z B MAC Adresse IP Adresse Server Adresse ID des Clients etc Kategorie Musskriterium Tabelle 28 FC10 ORCHID Client Instanz erzeugen FC20 Sensorwert an ORCHID Server bermitteln Vorbedingung FC10 FC80 Erfolgsfall Sensorwert wurde an Server bermittelt und n der Datenbank gespeichert Fehlerfall Sensorwert kann nicht hochgeladen und oder nicht in der Datenbank gespeichert werden Beschreibung Die Client Bibliothek verf gt ber zahlreiche Methoden Daten an einen ORCHID Server zu bermitteln siehe Unterfunktionen dieser Funktion Eine Verbindung zum Server wird aufgebaut eine entsprechende HTTP Anfrage PUT Request gesendet und die Antwort ausgelesen Kategorie Musskriterium Tabelle 29 FC20 Sensorwert ORCHID Server bermitteln FC20a Sensorwert an ORCHID Server bermitteln Integer Vorbedinsung FCI10 Tabelle 30 FC20a Integer bermitteln FC20b Sensorwert an ORCHID Server
200. ivaten Einsatzbereich f r den das ORCHID Toolkit ausgelegt st da dort nicht mit einer gro en Anzahl von Clients gerechnet werden muss die gleichzeitig auf einen ORCHID Server zugreifen oder zeitkritische Operationen durchf hren wollen Anforderungsdefinition 4 Anforderungsdefinition Dieser Abschnitt beschreibt welche Ziele im Rahmen dieser Arbeit erreicht werden sollen zudem wird erl utert welche Anforderungen an die m Zuge dieser Arbeit entwickelte Software gestellt werden und was explizit n cht Bestandteil der Arbeit ist 4 1 Zielbestimmung Ziel dieser Arbeit ist die Entwicklung eines Toolkits auf dessen Grundlage Softwareentwickler die Lage versetzt werden nahezu beliebige Hardware w e bereits einleitend n Abschnitt erw hnt handelt es s ch hier um Hardware die an einen Arduino Microcontroller angeschlossen werden kann jegliche andere Hardware wird nicht betrachtet ber einen oder mehrere Arduino Microcontroller in ihre Softwareprojekte einzubinden Die Einbindung findet dabei ber das Internet oder das lokale Netzwerk statt Be der Entwicklung der Bestandteile des Toolkits wird besonders darauf geachtet dass sie einerseits einfach zu verwenden andererseits umfangreich und leicht erweiter und anpassbar sind Weiterhin wird darauf Wert gelegt dass das Toolkit als Einheit eine m glichst geringe Kopplung mit der Software eingeht in die Hardware eingebunden werden soll damit nderungen an einem Teil ein
201. iziert Ein Hardware Server ist ein gt ORCHID Server der Anfragen von gt ORCHID Clients entgegennimmt Kurzform der Bezeichnung f r Header Felder innerhalb eines gt HTTP Requests oder einer gt HTTP Response Ein von einem gt ORCHID Client gesendeter TRACE Request wird als Heartbeat bezeichnet und dient dazu einem 2 ORCHID Server die Bereitschaft des Clients anzuzeigen Hypertext Markup Language eine Auszeichnungssprache f r Text Wird haupts chlich im Internet zur Auszeichnung von Webseiten verwendet Hypertext Transfer Protocol ein in gt 2616 definierter Standard zur Kommunikation im Netzwerk Ein einer gt HTTP Response angegebener Code ber den auf Erfolg oder Misserfolg einer Operation geschlossen werden kann Die Methode eines gt HTTP Requests definiert die auszuf hrenden Aktionen wenn ein solcher Request auf einem Server eingeht Integrated Development Environment eine Software die zur Entwicklung von Software genutzt wird und neben zahlreichen Werkzeugen auch den Compiler komfortabel integriert Ein Dateiformat zur Speicherung von Schl ssel Wert Paaren optional aufgeteilt in Kategorien Inversion of Control IoC IP Spoofing 150 ISO OSI Referenzmodell JIT Compiler Komponente Lambda Expression Lambda Operator LAMPP LC Display IV Als Inversion of Control wird eine Technik der objektorientierten Programmierung beschrieb
202. kann nicht bearbeitet werden Beschreibung Geht eine Verbindung an dem Port ein an dem der Software Server auf eingehende Verbindungen wartet nimmt er diese entgegen und leitet sie an eine neu erzeugte Instanz eines Software Daemons weiter Beteiligte Orehne OT EWT OSC TVO Orchid Core Daemons OrchidSoftwareDaemon Kategorie Musskriterium Tabelle 11 FS70 Eingehende Drittsoftware Verbindung annehmen Anforderungsdefinition 580 Eingehende Anfrage auslesen Vorbedingung FS60 bzw FS70 Erfolgsfall Die eingehende HTTP Anfrage wurde vollst ndig ausgelesen und kann verwendet werden Fehlerfall Die eingehende HTTP Anfrage kann nicht verarbeitet werden Beschreibung Eine HTTP Anfrage liegt als Stream BufferedStream vor Dieser wird byteweise ausgelesen und die gelesenen Inhalte zwischengespeichert Datenstrukturen System IO BufferedStream Beteiligte Orchid Core Parsers OrchidHttpRequestParser Kategorie Musskriterium Tabelle 12 FS80 Eingehende Anfrage auslesen 590 Gelesene Anfrage transformieren Vorbedingung FS80 Erfolgsfall Die HTTP Anfrage wurde in eine spezielle Datenstruktur berf hrt Fehlerfall Die Anfrage kann nicht verarbeitet werden Beschreibung Nach dem Auslesen einer HTTP Anfrage liegen die darin enthaltenen Daten als Text vor Sie werden zur leichteren und Verwendung in eine spezielle Datenstruktur OrchidHttpReqguest berf hrt Datenstrukturen O
203. kenlights aerial view jpg 20 Attp tim pritlove org Anforderungsdefinition 4 3 Produktanforderungen Im Folgenden werden die Anforderungen Hard und Software beschrieben die das ORCHID Toolkit an ein ausf hrendes System stellt Diese gliedern s ch in Anforderungen an die Software eines Systems also u a an das verwendete Betriebssystem und in Anforderungen an die Hardware also beispielweise die Geschwindigkeit des Prozessors oder die Gr e des verf gbaren Arbeitsspeichers 4 3 1 Softwareanforderungen Die Softwareanforderungen f r das ORCHID Toolkit teilen sich auf in Anforderungen f r die Ausf hrung der Server Komponente und Anforderungen f r die Verwendung der Client Bibliothek 4 3 1 1 Anforderungen der Server Komponente Die Server Komponente kann plattform bergreifend unter Microsoft Windows empfohlen Windows 7 32 Bit Linux empfohlen Ubuntu 10 10 Maverick Meerkat 64 Bit und MacOS empfohlen MacOS X 10 6 Snow Leopard verwendet werden Voraussetzung f r die Ausf hrung des Servers ist ein installiertes Mono Framework Version 2 6 7 oder kompatibel sowie eine vom ausf hrenden Server erreichbare MySQL Instanz Version 5 5 8 oder kompatibel Zur Erweiterung des Servers um eigene Klassen ist ebenfalls ein installiertes Mono Framework Version 2 6 7 oder kompatibel und optional eine Entwicklungsumgebung MonoDevelop Version 2 4 2 1 oder kompatibel notwendig 4 3 1 2 Anforderungen der Client Biblio
204. ket heruntergeladen und an einem beliebigen Ort im Dateisystem z B home lt benutzername gt Downloads abgelegt werden Dieser Speicherort muss nun m Terminal der Kommandozeile ge ffnet werden Innerhalb des Verzeichnisses kann nun der Befehl zum Entpacken des heruntergeladenen Archivs ausgef hrt werden den die folgende Abbildung zeigt Abbildung 36 Installation von XAMPP for Linux Dieser Befehl extrahiert die Dateien in xampp linux 1 7 4 tar gz n das Verzeichnis opt aus diesem Grund m ssen Administratorrechte vorhanden sein weshalb der Befehl mittels sudo ausgef hrt werden muss Nachdem die Dateien extrahiert wurden ist XAMPP f r Linux installiert Die Datei xampp linux 1 7 4 tar gz kann gel scht werden Die Dateien von XAMPP befinden sich im Verzeichnis opt lampp 7 2 1 2 Installation unter Microsoft Windows 7 Die Installation von XAMPP unter Microsoft Windows 7 wird mittels eines Installationsprogramms durchgef hrt Es gen gt dieses Programm herunterzuladen auszuf hren und den Anweisungen auf dem Bildschirm zu folgen Nach der Installation befinden sich die Dateien von XAMPP im Verzeichnis xampp falls bei der Installation kein anderes Verzeichnis angegeben wurde 7 2 1 3 Import der Datenbankstruktur Die dieser Arbeit beiliegende DVD enth lt ein Verzeichnis namens Orchid Database Dieses Verzeichnis enth lt eine Datei mit dem Namen orchid sq1l Bei dieser Datei handelt es sich um die Da
205. kt nicht vorhanden Keines der n diesem Abschnitt geschriebenen Produkte gibt einem Anwender die vollst ndige Kontrolle ber Hard und Software oder kann alle gestellten Anforderungen erf llen Der Bedarf f r eine Werkzeugsammlung wie das ORCHID Toolkit kann also als gegeben betrachtet werden 3 2 Angestrebtes Ergebnis Im Zuge dieser Arbeit soll ein Toolkit entwickelt und implementiert werden das einerseits die Probleme und M ngel vorhandener L sungen nicht wiederholen andererseits auch neue Wege beschreiten soll Es soll umfangreiche Funktionen bieten um Arduino Clients leicht in eine Software einzubinden erfahrenen Entwicklern aber auch die M glichkeit geben es mit ihren eigenen Klassen zu erweitern und an ihre Bed rfnisse anzupassen vgl die Arduino Philosophie Abschnitt 2 1 2 4 3 2 1 Designkriterien Aufgrund der zahllosen M glichkeiten die sich aus der Kombination von Software und Hardware im Zusammenspiel ergeben ist es unm glich alle potentiellen Anwendungsf lle bereits im Vorfeld zu erkennen und n das ORCHID Toolkit zu integrieren Vielmehr muss darauf Wert gelegt werden dass das Toolkit leicht zu erweitern und zu ver ndern ist Es wird allen Phasen der Entwicklung darauf geachtet dass keine starren Strukturen entstehen die nicht m Nachhinein ver ndert und angepasst werden k nnen und dass alle zentralen Bestandteile des Toolkits flexibel gegen andere austauschbar sind Komplexe Vererbungshierarc
206. l Der Sensorwert der zu bertragen ist und dessen Datentyp jeweils als Zeichenkette Allgemeine Form 1 1 Board ID lt GUID gt Sensor ID lt GUID gt User Agent lt STRING gt Host lt IP gt lt PORT gt Authorization lt DEVELOPER KEY gt Data lt TYPE gt lt VALUE gt Connection close Beispiel 1 1 Board ID 9 476 50 4 3 11 0 8014 001492396635 Sensor ID 6 4 0 4 6 4 142 5 57 465 User Agent Orchid Arduino Toolkit Host 192 168 1 123 29100 Authorization cd0887447e04c15b5128629 04b53c4c4858bble8ff2e8b6bfcb32dc99fb4e7198d72ed2 Data INT 123 Connection close Tabelle 68 Protokoll Sensordaten hochladen Der in der obigen Tabelle gezeigte PUT Request l dt den Sensorwert 123 Integer gemessen durch den Sensor mit der GUID f6f9a4c0 dae6 4fcc ald2 5db57feac465 der den Client mit der GUID 9f476350 d4e3 11e0 801d 001d92396635 angeschlossen ist auf einen ORCHID Server der unter der IP Adresse 192 168 1 123 und Port 29100 erreichbar ist Das ORCHID Toolkit unterst tzt eine Vielzahl von Datentypen innerhalb eines PUT Requests bermittelt werden k nnen weitere Datentypen k nnen nach Bedarf zus tzlich implementiert werden Tabelle 69 bildet diese Datentypen in alphabetischer Reihenfolge ab Datentyp Code M gliche Werte BOOL Wahrheitswerte boolean BYTE Vorzeichenlose Ganzzahlen unsigned 8 bit Integer CHR Einzeln
207. l 2 1 2 4 popul res Beispiel daf r ist die Ethernet Library die zum Lieferumfang der Arduino IDE geh rt Diese Bibliothek erm glicht es einem Arduino der ber ein Ethernet Shield verf gt vgl 2 1 2 3 ber ein Netzwerkkabel mit einem Server zu kommunizieren Da f r dese Kommunikation Sockets von engl Steckdose Schnittstellen f r die Netzwerkkommunikation ben tigt werden und die Arduino Programmiersprache diese nicht kennt wird diese Funktionalit t durch die Ethernet Library bereitgestellt indem in einem in C geschriebenen Programm die ben tigten Sockets erzeugt und ber sie mit einem Server kommuniziert wird nttp www arduino cc en Reference Ethernet L sungsans tze 3 L sungsans tze An das im Verlauf dieser Arbeit entwickelte Toolkit werden verschiedene Anforderungen gestellt Neben den bereits in Abschnitt genannten M glichkeiten die es bieten soll handelt es sich dabei haupts chlich um gro e Flexibilit t im Einsatz die Offenheit des Quellcodes Open Source Software und die M glichkeit es im vollen Umfang kostenfrei einzusetzen In diesem Abschnitt wird beschrieben welche bereits vorhandenen L sungen es auf dem Markt gibt warum diese als n cht geeignet erscheinen die genannten Anforderungen zu erf llen und welche Besonderheiten das ORCHID Toolkit gegen ber existierenden Produkten bietet 3 1 Marktanalyse Im Folgenden werden Produkte gezeigt die eine hnliche Zielsetzung ha
208. l Instruktion wurde gespeichert und kann von einem Client abgerufen werden Fehlerfall Anfrage kann nicht bearbeitet werden Fehlermeldung an Verbindungspartner Instruktion wurde nicht gespeichert Beschreibung Ein CONNECT Request eines Clients wird durch eine Instanz der Klasse OrchidHardwareDaemon verarbeitet Aus der Anfrage werden die notwendigen Daten ausgelesen und eine neue Instruktion in der Datenbank gespeichert Datenstrukturen OTOCI Gore Orehwerletrporeaue en Orchid Core HttpRequestType Orchid Core Data Instruction Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orchid Core Data MySqlAdapter Kategorie Wunschkriterium Tabelle 26 FS220 Client Instruktion speichern Client FS230 Developer Key pr fen Erfolgsfall bertragener Developer Key kann mit dem auf dem Server gespeicherten Key verglichen werden Fehlerfall Developer Key kann nicht gepr ft werden Abbruch der Anfragebehandlung Beschreibung Ein Client oder eine Drittsoftware bermittelt in einer Anfrage den Server eine Zeichenkette die zur Identifizierung als erlaubter Kommunikationspartner gilt Datenstrukturen Orchid Core Requests OrchidHttpRequest Beteiligte Orchid Core Daemons OrchidHardwareDaemon oder Orchid Core Daemons O rchidSoftwareDaemon Kategorie Wunschkriterium Tabelle 27 FS230 Developer Key pr fen Anforderungsdefinition 4 4 2 Funktionen der Client Bibliothek Die folgende Beschreibung der Funkt
209. lative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt SoftwareServerClass genannt wird Handbuch Server Komponente 27 Einstellung Bedeutung FallBack Bestimmt ob zur Aufl sung einer Typbindung im Fehlerfall auch auf die ausf hrende Assembly zur ckgegriffen werden soll UseDefaultsOnError Bestimmt ob im Fehlerfall beim Laden eines Typs der fest kodierte Standardwert verwendet werden soll Tabelle 90 Einstellungskategorie 7 5 2 Kategorie Server Diese Kategorie enth lt Einstellungen die verschiedene Aspekte des Serververhaltens beeinflussen Einstellung Bedeutung HardwareServerPort Der Port an dem eine Hardware Server Instanz auf eingehende Verbindungen wartet HardwareServer Timeout Die Zeitspanne in Sekunden die eine Hardware Server Instanz abwartet bevor die Beantwortung einer Anfrage abgebrochen wird ParserTimeout Die Zeit in Sekunden die eine Parser Instanz zum Parsen einer Anfrage maximal brauchen darf SoftwareServerPort Der Port an dem eine Software Server Instanz auf eingehende Verbindungen wartet SoftwareServer Timeout Die Zeitspanne in Sekunden die eine Software Server Instanz abwartet bevor die Beantwortung einer Anfrage abgebrochen wird Tabelle 91 Einstellungskategorie Server 7 53 Kategorie Restrictions In dieser Kategorie sind Einstellungen enthalten die die Restriktionen Sicherheits und Stabilit
210. ler Klassen die n der Server Komponente dynamisch geladen werden erzeugt und berpr ft Http www nunit org Ergebnisse die aufgrund eines fehlerhaften Requests nicht h tten ermittelt werden d rfen Realisierung und Tests Das Typeloading System arbeitet fehlerfrei unzureichende oder fehlerhafte Angaben werden zuverl ssig durch voreingestellte Standardwerte ersetzt Der verwendete Mechanismus hat keine sp rbaren Auswirkungen auf die Ausf hrungsgeschwindigkeit der Server Komponente 6 4 1 5 Fabrik Tests Die Fabrikklassen m ssen Objekte zuverl ssig und vorhersagbar erzeugen Unerwartete nul1 Werte d rfen nicht auftreten Zwei erzeugte Objekte des gleichen Typs m ssen die gleichen Werte beinhalten F r desen Test werden alle ber Fabriken zu erzeugenden Klassen ber entsprechende Fabrik instanziiert und die Instanzen auf ihre G ltigkeit berpr ft Alle Fabrikklassen arbeiten fehlerfrei und erzeugen Objekte die den gestellten Erwartungen entsprechen 6 4 2 Unit Tests Client Bibliothek Die f r die Client Bibliothek implementierten Unit Tests liegen Form eines Test Sketchs vor der alle Methoden der Bibliothek aufruft und auf die Richtigkeit der zur ckgegebenen Werte pr ft Dieser Sketch unterscheidet ob f r einen laufenden ORCHID Server getestet werden soll oder ob nicht herstellbare Verbindungen der erwartete Fall sind Alle Methoden der Cl ent Bibliothek arbeiten wie erwartet und geben stets
211. lichen Situation angepasst werden In Zeile 16 wird die eigentliche Instanz des ORCHID Clients erzeugt Die Instanz ist jedoch noch nicht einsatzbereit da die Erzeugung die Ethernet Bibliothek nicht automatisch initialisiert Zu diesem Zweck stellt die Klasse Orchid die Methode reset bereit die die Initialisierung bernimmt Diese Methode muss vor der ersten Verwendung der Instanz aufgerufen werden der Code des Sketchs ver ndert sich also wie in Listing 61 zu sehen ORCHID sinelude lt Orchidz h gt lt OrchidInetuebisn h gt include lt Strings h gt byte 1 0x12 923 08x34 0 45 0 56 0x67 byte gateway 192 168 1 1 subnet 255 255 255 255 byte ip 192 168 1 150 byte server 192 168 1 140 char client 4e9abr 1L 2723 gt 4228 5459 b32154 778737 int port 29100 char dev key 8178b0492fad1e60f59706484146f17b4bflafeaba9c2b7dA3db102450cb6b9c18347806 Gateway Subnet 1 Server client 10 dev void setup orchid reset void loop Listing 61 Initialisierung eines Orchid Objekts Nach dem Aufruf von orchid reset kann die Instanz im weiteren Verlauf des Sketchs verwendet werden Die Verwendung wird den folgenden Beispielen demonstriert 8 4 2 Senden von Heartbeats F r dieses Beispiel gilt das folgende Szenario der Zustand eines Ard
212. liebige mit dem Mono Framework verwendbare Datenbanksystem ist also m glich und ebenfalls ein langfristiges Ziel der Entwicklung des Toolkits 51 Http www android com Http www apple com ios ORCHID Durch die M glichkeit auch andere Datenspeichersysteme verwenden zu k nnen z B Dateien wird es auch Entwicklern die nicht ber den Zugriff auf eine Datenbank verf gen erm glicht Projekte auf Basis des ORCHID Toolkits zu entwickeln 12 Anhang Literaturverzeichnis 1 Wikipedia 2011 Juli Wikipedia Die freie Enzyklop die Online http de wikipedia org wik Akronym 2 Wikipedia 2011 Juli Wikipedia Die freie Enzyklop die Online http de wikipedia org wi ki Backronym 3 Wikipedia 2011 Juli Wikipedia Die freie Enzyklop die Online http de wikipedia org w k Homophon 4 Arduino 2011 May Arduino Online http www arduino cc 5 Arduino 2011 Juli Hardware Online http arduino cc en Main Hardware 6 Manuel Odendahl Julian Finn and Alex Wenger Arduino Physical Computing f r Bastler Designer und Geeks 1 Auflage 2009 K ln O Reilly Verlag GmbH amp Co KG 2009 7 Arduino 2011 Januar Arduino Board Duemilanove Online http arduino cc en Main ArduinoBoardDuemilanove 8 Atmel Corporation 2011 Atmel AVR 8 and 32 bit megaAVR Online http www atmel com dyn products devices asp category_id 163 amp family_id 607 amp subfamily_id 760
213. m einen g ltigen PUT Request werden zun chst die ID des Clients und des Sensors aus der Anfrage ausgelesen Nur wenn beide IDs erfolgreich ermittelt werden k nnen wird die Verarbeitung fortgesetzt ansonsten wird sie an dieser Stelle abgebrochen und eine Fehlermeldung an den Client bermittelt HTTP Code 400 Bad Request EEE ORCHID Sind die IDs ermittelt worden wird die Integrit t der bermittelten Daten verifiziert dieses Verhalten kann ber die Konfiguration abgeschaltet werden K nnen die Daten nicht eindeutig einem Datentyp zugeordnet werden oder ist ein Wert f r den angegebenen Datentyp nicht g ltig z B bei bermittlung von ung ltig als Integer Wert wird eine entsprechende Meldung den Client gesendet Code 400 Bad Request und die Verarbeitung abgebrochen Die bisher aus dem PUT Request ermittelten Daten Arduino ID Sensor ID Datentyp und Wert werden nun an die Methode StoreSensorData Guid Guid string string der Klasse MySqglAdapter bergeben die zur Speicherung von Sensordaten der Datenbank verwendet wird Die Methode pr ft zun chst ob der bermittelte Sensor laut Datenbank an den angegebenen Client angeschlossen ist So soll sichergestellt werden dass keine Dateninkonsistenzen auftreten weil ein Client irrt mlich eine falsche ID f r einen Sensor bermittelt Ist diese Pr fung erfolgreich werden die bergebenen Daten in der Datenbank gespeichert ansonsten wird ei
214. mer als jeder durchschnittliche Computer vgl 2 1 2 1 und sind auch n anderen Bereichen z B Speicher vgl 2 1 2 2 einem Computer unterlegen Im Gegenzug sind sie aber f r den Einsatz als eingebettete Systeme ausgezeichnet geeignet da sie einerseits sehr klein sind andererseits sehr wenig Energie brauchen um zu funktionieren Die geringere Leistung gegen ber Computern ist durch die Spezialisierung auf die Verwendung als eingebettetes System n gr eren Ger ten und Maschinen nicht als Nachteil zu interpretieren da f r diese Aufgabe keine hohe Rechenleistung oder Speicherkapazi t t notwendig ist Maschinen und Ger te die diese Anforderungen haben z B Industrieroboter verf gen meist zus tzlich ber integrierte oder angeschlossene vollwertige Fachliches Umfeld Computer Microcontroller k nnen also effizient als Bauteile f r komplexe Ger te und Maschinen eingesetzt werden ohne diese negat v zu beeinflussen ein integrierter Computer dagegen verbraucht viel Energie und produziert eine gro e Menge an W rme die abgef hrt werden muss Microcontroller sind zudem sehr kosteneffizient Verbreitete Modelle k nnen auch in kleinen St ckzahlen zu Preisen von ca 1 20 EUR Einzelhandel erworben werden Der durchschnittliche Preis liegt dabei unter 10 EUR Die Preise die von Unternehmen Microcontroller f r die Entwicklung eigener Produkte einsetzen an Gro h ndler oder Hersteller gezahlt werden m ssen sind
215. misches Typeload ne EE 80 5 7 Klassen der Menge 61 e E e TEE 61 5 8 1 All Scenes ee 81 5 8 2 M gliche Antw rten eines 5 aaa a I 82 5 8 3 SEensordaten Hochladen ns ae 83 5 8 4 EE EE 94 5 8 5 84 5 8 6 re aere ET 87 3 8 7 Setisordaten abrufen ses sei 88 5 8 8 Chent Informahonen abrufen za 89 3 9 Verhaltens Eee 91 5 9 1 east 91 5392 Behandlung von Anfragen in der Server Komponente 93 310 HE 101 Realisteruns a Eee 106 6 1 SIE 106 6 1 1 Einr ck nsen und Klammerunsen io en ae aa 106 6 1 2 Sprache und Namenskonvenlisnen aa 107 6 2 Entwickl nssuimsebuns sense een 107 6 3 ee 108 6 3 1 Eindeutise sauer 108 6 3 2 Dynamisches Typeloading mit Nmiect 109 6 3 3 Sicherheilsaspekle EE 112 6 4 Testile EEN EE 114 6 4 1 Unit Tests Server Komponente una 114 6 4 2 Unit Lests CheneBibliotiek u 115 6 4 3 Kastanie 115 6 5 Probleme Wabrend der Entwickluns ses 115 6 6 EE EE 116 6 6 1 Eeer 116 6 6 2 a 118 6 6 3 Stabilit tsbedenken Ethernet Bibliothek eeeseeeeseesseseressssseseressessressseseessreseersees 118 6 6 4
216. mitgeteilt werden dass die neue Implementierung anstelle der existierenden verwendet werden soll und welcher Assembly die entsprechende Klasse zu finden ist Das folgende Beispiel zur Implementierung einer neuen Daemon Klasse verdeutlicht die og Schritte Zun chst wird eine neue Klasse namens CustomHardwareDaemon hinzugef gt die von der konkreten Implementierung OrchidHardwareDaemon abgeleitet wird Listing 46 zeigt das Grundger st dieser Klasse public class CustomHardwareDaemon OrchidHardwareDaemon Listing 46 Grundger st CustomHardwareDaemon Da die Klasse OrchidHardwareDaemon nur ber einen ffentlichen Konstruktor verf gt der mehrere Parameter erfordert muss auch der neuen Klasse ein solcher Konstruktor hinzugef gt werden Dieses Verfahren stellt sicher dass das dynamische Typeloading vgl 6 3 2 alle Abh ngiskeiten einer Instanz der Klasse korrekt aufl sen kann Der Konstruktor wird w e m folgenden Listing 47 gezeigt definiert Handbuch Server Komponente public CustomHardwareDaemon ADatabaseAdapter database AHardwareServer server ARTTPpRequestParser parser ABindingVerifier verifier AHttpResponder responder AHardwareFactory hardwareFfactory ADataFactory dataFactory base database server parser responder hardwareFactory dataracetory Listing 47 Konstruktor CustomHardwareDaemon Die neue Klasse st durch de Regeln der Objektor
217. n eines Clients entgegenzunehmen was eine Erweiterung der M glichkeiten der Server Komponente darstellt Aufgrund der L nge des m Rahmen dieses Abschnitts entwickelten Quellcodes werden stets nur Code Ausz ge gezeigt Der vollst ndige Code der Erweiterung befindet sich auf dem dieser Arbeit beiliegenden Datentr ger 7 7 1 Ver nderung Um eine neue Implementierung einer existierenden Klasse der Server Komponente zu entwickeln sind mehrere Schritte notwendig Zun chst muss ein Projekt erstellt werden das die neue Klasse bereitstellt Es ist zwar m glich die Klasse dem urspr nglichen Projekt der Server Komponente hinzuzuf gen es wird jedoch empfohlen sie ber eine eigene Assembly bereitzustellen Wie 7 3 beschrieben muss die Assembly 11 dem neuen Projekt hinzugef gt werden damit darin enthaltenen Klassen aus dem neuen Projekt heraus verwendet werden k nnen Ist Server Komponente referenziert muss die neu zu implementierende Klasse definiert und entweder von einer abstrakten Bas sklasse oder einer konkreten Implementierung abgeleitet werden Wird s e von einer abstrakten Klasse abgeleitet m ssen alle Methoden entsprechend selbst implementiert werden wird von einer konkreten Implementierung abgeleitet K nnen punktuelle nderungen vorgenommen werden und die brigen Abl ufe unver ndert bestehen bleiben Im letzten Schritt muss der Server Komponente ber die Konfigurationsdatei
218. n jedem Ort der Welt aus berpr ft werden In Kombination mit den im vorherigen Abschnitt beschriebenen M glichkeiten zur Automatisierung k nnen erkannte problematische Zust nde ebenfalls aus der Ferne behoben werden Ein Beispiel f r diesen Anwendungsfall ist die berwachung eines Gew chshauses Entsprechende Sensoren messen regelm igen Abst nden relevanten Werte Luftfeuchtigkeit und Temperatur und leiten diese an den Server weiter Von diesem kann eine entsprechende Drittsoftware die gemessenen Daten abrufen und der berwachenden Person aufbereitet darstellen Weichen die ermittelten Werte von den gew nschten ab k nnen ber Steuerelemente der Drittsoftware entsprechende Aktionen ausgel st werden um diese Diskrepanz zu beheben z B das Erh hen der Umgebungstemperatur 4 2 4 3 Aufgabenautomatisierung Die urspr ngliche Idee zu dieser Arbeit entstand weder durch das Bed rfnis nach Heimautomatisierung noch durch das nach berwachung von bestimmten Zust nden aus der Ferne sondern v elmehr durch den Wunsch eine Aufgabe Digitalisierung von Spielergebnissen vgl Abschnitt zu automatisieren ORCHID Die Idee eine elektronische Dartscheibe so zu modifizieren dass erzielte Treffer ohne weitere Aufw nde an einen Server bermittelt und von einer Drittsoftware grafisch und statistisch aufbereitet werden k nnen ist dabei nur eine der zahlreichen M glichkeiten zur Automatisierung einer solchen Aufg
219. n Arduino zur Entwicklung von Sketches wird dieser Nachteil jedoch relativiert 5 4 2 2 Kontrolle C und C erlauben es einem Programmierer die vollst ndige Kontrolle ber das ausf hrende System zu bernehmen So k nnen Hardwarefunktionen direkt angesprochen und Speicherbereiche exakt manipuliert werden Dies ist insbesondere f r die Programmierung eines Microcontrollers wichtig da es gerade Funktionen der Hardware sind die dabei von Interesse sind Auch die exakte Manipulation des Speichers kann hierbei als Vorteil angesehen werden da dieser begrenzt ist und effizient genutzt werden muss 40 Maschinenn he beschreibt den Grad der hnlichkeit einer Programmiersprache mit Maschinensprache Systementwurf Die vollst ndige Kontrolle ber ein System f hrt dazu dass ein Programmierer stets n der Verantwortung ist einmal reservierte Ressourcen z B Bereiche m Hauptspeicher nach deren Verwendung wieder freizugeben Dies kann bei unsachgem er Anwendung dazu f hren dass Programme bei l ngerer Laufzeit instabil werden oder sogar abst rzen Ein weiterer Nachteil der sich ebenfalls aus dem hohen Ma an Kontrolle ergibt ist die Gefahr das gesamte ausf hrende System in einen instabilen Zustand zu versetzen Dies kann u a bei schreibenden Speicherzugriffen geschehen die auf einem nicht daf r vorgesehenen Speicherbereich ausgef hrt werden 5 4 3 Arduino Microcontroller Plattform Es gibt viele verschiedene Microcont
220. n Fehlercode zur ckgegeben ein Wert vom Typ OrchidDataResult Ist die R ckgabe der Methode StoreSensorData Guid Guid string string gleich dem Wert OrchidDataResult Inserted wurden die bermittelten Daten erfolgreich gespeichert und es wird eine Erfolgsmeldung an den Client gesendet HTTP Code 200 OK Ansonsten trat ein Fehler auf der ebenfalls an den Client bermittelt wird der Code variiert je nach Fehler Abbildung 27 zeigt den geschilderten Programmablauf in einem UML Aktivit tsdiagramm ef Anfrage annehmen Verbindungspartner speichern gt lt EE Erfolg Fehler Request e Erfolg G ltigkeit pr fen Requesttyp bestimmen Ae Fehler Erfolg Fehler P Fehlermeldung senden User Agent pr fen gt Arduino ID bestimmen gt i IDs berpr fen Je Erfolg Sensor JD bestimmen Fehler Arduino aktualisierren Sensordaten 22 Fehler d Se Erfolgsmeldung senden Abbildung 27 Bearbeitung von Client PUT Requests 5 9 2 4 Client TRACE Requests TRACE Requests denen einem Client dazu dem Server mitzuteilen dass er bereit ist Sie werden im Umfeld dieser Arbeit auch als Heartbeat Requests deutsch Herzschlag Anfragen bzw lediglich als Heartbeats bezeichnet Zur Behandlung eines Heartbeat Requests wird die Methode HandleTRACERequest der Klasse OrchidHardwareDaemon aufge
221. n Kern der Client Bibliothek und stellt einem Entwickler Funktionen zur Verf gung um mit einem ORCHID Server zu kommunizieren OrchidInstruction kapselt Instruktionen die von einem Server f r den ausf hrenden ORCHID Client abgerufen wurden und stellt zus tzlich Hilfsmethoden bereit Die folgende Abbildung 22 zeigt die Klassen der Client Bibliothek in einem UML Klassendiagramm Orchid uint3_t um unt uint8_t int unt E char char Hesetl void pushichar int bool pushfchar float pushfchar double bool unsigned int bool OrchidInstructionichar int int char int a raa Kee char bool en N Pushichar up OD bool set ctionfint void pushichar long bool getValueTypel int unsigned long bool setValueTypefint void getNextInstructon char OrchidInstruchen getValuel int void voi int Beer eg 43 sEmptyi getTimeoutf unsigned int 6 setTimeoutfunsigned int void getLineLength unsigned int setLineLengthlunsigned int void getDeveloperkey char Abbildung 22 Klassen der Client Bibliothek Die n der obigen Abbildung gezeigte Abh ngigkeit f hrt dazu dass bei Einbindung der Klasse Orchidauch OrchidInstruction in einen Sketch eingebunden werden muss 5 8 Protokoll Die Kommunikation zwischen Server Komponen
222. n auch ein Abbild einer virtuellen Maschine VM f r die Virtualisierungssoftware Oracle VM VirtualBox VirtualBox kann kostenlos f r Windows Linux und MacOS von Herstellerwebsite bezogen werden und ist der Lage einen vollwertigen Computer zu virtualisieren so dass nahezu beliebige Betriebssysteme in einer virtuellen Umgebung ausgef hrt werden k nnen Auf der VM wurden im Vorfeld ein Linux System Linux Mint und alle weiteren Komponenten installiert die zum Betrieb eines ORCHID Servers und zur Entwicklung von Sketches mit der Client Bibliothek notwendig sind 10 2 Einrichtung der virtuellen Maschine Alle zum Import der virtuellen Maschine in VirtualBox notwendigen Dateien befinden auf der beigelegten DVD im Verzeichnis VM Nach dem Start von VirtualBox muss zun chst ber den Button Neu eine neue virtuelle Maschine hinzugef gt werden Der daraufhin erscheinende Assistent ist selbsterkl rend verlangt aber einige spezifische Einstellungen die der folgenden Tabelle entnommen werden k nnen Einstellung Wert Name Beliebig w hlbar Typ des Gastbetriebssystems Linux Version Ubuntu Gr e Hauptspeicher Mindestens 512 MB empfohlen 1024 MB oder mehr Tabelle 102 Einstellungen der virtuellen Maschine Im letzten Schritt des Assistenten wird nach den Einstellungen f r eine virtuelle Festplatte gefragt Ein entsprechendes Festplattenabbild liest der DVD unter dem Dateinamen OrchidVM vdi
223. n problemlos hinzugef gt werden ohne den Kern der Software ndern zu m ssen Fehler die durch einen Benutzer Entwickler der das Toolkit einsetzt gemacht werden werden nach M glichkeit abgefangen und korrigiert Fehlerhafte Benutzereingaben f hren nicht zu einem kritischen Programmzustand oder zu einem Absturz der Software falls nicht anders m glich wird die Software neu gestartet st rzt aber nicht ab Dieser Grundsatz wird auch auf alle anderen Fehler angewendet die m regul ren Betrieb auftreten k nnen Kommt es zur Laufzeit der Software dennoch zu einem unvorhergesehenen Fehler und f hrt dieser Fehler zur Beendigung der Software gehen dabei keine Daten verloren Ausnahme sind Daten die in dem Moment verarbeitet werden dem die Software zwangsweise beendet wird Ein Neustart der Anwendung versetzt sie in exakt den Zustand dem sie sich vor der Beendigung befand Eine Installation der Software ist nicht n tig Wechselwirkungen mit anderen auf einem ausf hrenden System laufenden Programmen und Systemen sind nicht zu erwarten und k nnen sollten sie dennoch auftreten ber die Konfiguration der Software behoben werden dies gilt haupts chlich f r die Server Komponente 4 7 2 Wirtschaftliche Qualit tsanforderungen Die entwickelte Software ist sehr flexibel und kann mit geringem Aufwand an g nzlich neue Aufgaben angepasst werden Durch die Verwendung von Entwurfsmustern objektorientierten Programmiertechniken
224. n verursachen k nnte Wahrscheinlich w rde der belegte Speicher nicht ordnungsgem freigegeben oder l ge einem Speicherbereich der nicht beschrieben werden d rfte Eine testweise Ausgabe belegte diesen Verdacht da anstatt der zu verwertenden Antwort des Servers lediglich Sonderzeichen ausgegeben wurden dies st h ufig der Fall wenn ein Speicherbereich der nicht daf r vorgesehen ist als Zeichen interpretiert wird Den Speicher nach der Verwendung wieder freizugeben l ste das Problem jedoch nicht Die Zeichenkettenverarbeitung in C unterscheidet sich erheblich von der moderneren Programmiersprachen Insbesondere muss ein Entwickler darauf achten dass eine Zeichenkette die er selbst aus einzelnen Zeichen zusammensetzt wie es der Client Bibliothek der Fall ist stets mit einem Null Byte endet Die Zeichenkettenfunktionen von C lesen eine Zeichenkette so lange bis ein solches Null Byte erreicht wird fehlt dieses Byte lesen die Funktionen so lange weiter bis ein Null Byte gefunden wird oder der entsprechende Puffer voll ist Dieses Verhalten kann auch dazu f hren dass Programme abst rzen Das Hinzuf gen eines Null Bytes am Ende des verwendeten Puffers konnte das Problem jedoch auch nicht beheben Letztendlich war die Ursache des Problems und auch dessen L sung sehr simpel Die Methode die eine Server Antwort auslesen und verarbeiten sollte reservierte 1024 Bytes f r den Puffer den die Antwort
225. ndeutig identifizieren zu k nnen werden deshalb sowohl in der Server Komponente als auch in der Client Bibliothek GUIDs Globally Unique Identifiers eingesetzt GUIDs dt etwa Weltweit eindeutige sind eine Implementierung des UUID Standards Universally Unique Identifier und werden h ufig in der verteilten Programmierung eingesetzt da ihre Eigenschaften s e daf r besonders geeignet erscheinen lassen Eine GUID bzw UUID besteht aus 16 Bytes 128 Bit und wird der Regel als Folge von 32 hexadezimalen Ziffern n f nf Gruppen zu je 8 4 4 4 und 12 Ziffern getrennt durch Bindestriche dargestellt insgesamt 36 Zeichen Eine typische GUID bzw UUID hat also die folgende Form 00000000 0000 0000 0000 000000000000 Aufgrund ihrer L nge von 128 Bits existieren 2129 3 403 x 103 oder mehr als 340 Sextillionen verschiedene GUIDs Diese Zahl ist so gro dass die Wahrscheinlichkeit dass zwei GUIDs bzw UUIDs gleich sind P A 50 gering ist dass dieses Ereignis als praktisch ausgeschlossen angesehen werden kann Das Mono Framework bietet mit System Guid eine stabile und n der Generierung ausreichend schnelle Implementierung des Standards Da GUIDs zentraler Bestandteil des ORCHID Toolkits sind wird mit ggen vgl 9 1 Programm zur Generierung solcher Kennungen bereitgestellt Auf Linux Systemen die ber das Programm apt get verf gen kann ber den folgenden
226. ndung MySql Data dll1 Schnittstelle zuMySQL Datenbanken Nini dll Konfigurationsframework Ninject dlil Dependency Injection Framework NLog dll Logging Framework Orchid Core dll Server Komponente des ORCHID Toolkits Tabelle 88 Bin rdateien der Server Komponente Die Server Komponente referenziert alle anderen Assemblies entsprechend m ssen sie f r ein Projekt das die Komponente einbindet auffindbar sein es ist ausreichend die im gleichen Verzeichnis abzulegen Http www go mono com mono downloads download html 119 ORCHID 7 2 1 Installation der MySQL Datenbank und des MySQL Servers F r den Betrieb der Server Komponente ist eine vom ausf hrenden System aus erreichbare Instanz eines MySQL Servers notwendig Die Installation eines solchen Servers ist von System zu System verschieden dieser Abschnitt geht auf die Installation unter Ubuntu Linux 10 10 und Microsoft Windows 7 ein 7 2 1 1 Installation unter Ubuntu Linux 10 10 Unter Ubuntu Linux stehen zwei M glichkeiten zur Installation zur Verf gung Entweder wird ein MySQL Server ber den Paketmanager des Systems oder das XAMPP Server Paket installiert Da das XAMPP Server Paket auch einen Apache Webserver beinhaltet der f r die Ausf hrung der Proof of Concept Software notwendig ist vgl Abschnitt 10 empfiehlt es sich dieses Paket zu installieren Die Installation wird im Folgenden beschrieben Zun chst muss das f r das jeweilige System passende Pa
227. nen ORCHID Server Abrufen von Informationen ber einen ORCHID Client von einem ORCHID Server Eine ebenfalls mit PHP entwickelte Website demonstriert mittels dieser Bibliothek die Funktionsweise des Toolkits und dient somit als Proof of Concept Die hier beschriebene Drittsoftware 151 kein Bestandteil des eigentlichen Toolkits sondern lediglich ein Machbarkeitsnachweis Ihre Anforderungen werden an dieser Stelle nur aus Gr nden der Vollst ndigkeit genannt 4 1 2 Wunschkriterien Die folgenden Kriterien sind nicht explizit Bestandteil dieser Arbeit und verstehen sich als optionale Wunschkriterien ihre Implementierung ist nicht verpflichtender Bestandteil des Toolkits M glichkeit einer sp teren Implementierung ist aber durch den Aufbau des Toolkits gegeben 4 1 2 1 4 1 2 3 4 1 3 Server Komponente Versenden von Nachrichten zwischen zwei ORCHID Clients ber einen ORCHID Server Verwaltung von Berechtigungen f r ORCHID Clients Speichern von durch einen ORCHID Client bertragenen Instruktionen f r einen anderen ORCHID Client S cherheitsfunktionen und Zugriffsregulierungen Client Bibliothek Hochladen von Nachrichten f r einen ORCHID Client auf einen ORCHID Server Abrufen von Nachrichten von einem ORCHID Server Hochladen von Instruktionen f r einen ORCHID Client auf einen ORCHID Server Drittsoftware Senden von Nachrichten f r einen ORCHID Client an einen ORCHID Server Abgrenzungskriterien Die m Fol
228. nen Request an einen Server zu senden muss zun chst eine Instanz der Klasse Client aus der Ethernet Library erzeugt werden ber diese Instanz werden nun die ben tigten Header Felder des Requests an den Server bermittelt ggf zus tzlich ein Message Body Da Server nicht immer ohne Zeitverz gerung eine Antwort senden kann wird nach dem Senden der Anfrage eine bestimmte Zeit gewartet Hat der Server auch nach dieser Zeit keine Antwort gesendet st ein Fehler aufgetreten der Server st nicht erreichbar oder antwortet nicht Treffen Daten ein k nnen s e Byte f r Byte aus der Antwort ausgelesen und interpretiert werden Das folgende Beispiel zeigt die Interpretation aufgrund hres Umfangs nicht sondern beschreibt lediglich welche Aktionen durchgef hrt werden m ssen Ist die Antwort vollst ndig ausgelesen und die darin enthaltenen Werte interpretiert worden wird die Client Instanz ber die Methode stop angehalten und der ermittelte Wert zur ckgegeben Das nachfolgende Listing 72 zeigt neue Methode ber die die Laufzeit eines ORCHID Servers in einem Sketch abgefragt werden kann ORCHID long requestServerRuntime dast error prohid 10RCHID OR long ret 1 KEE Server if client connect Gent printlint ER2R 1 L t client println User Agent Orchid Arduino Toolkit elient print Board Ib 7 client printin board client pr
229. nseitig d h Orchid Core kann auch ohne Orchid eingesetzt werden das Gegenteil ist nicht m glich Um durch die erh hte Anzahl von Klassen in der Assembly Orchid Core die bersicht dennoch nicht zu gef hrden wurden die Klassen in semantisch voneinander getrennte Namespaces aufgeteilt Die folgende Abbildung zeigt die wichtigsten dieser Namespaces in einem aus Gr nden der bersicht nicht vollst ndigen UML Paketdiagramm Systementwurf Orchid Core Orchid Core Respanders Orchid Core P rsers Orchid Data d Orchid Core Requests Abbildung 11 Namespaces in Orchid Core Aus der obigen Abbildung 11 wird bereits ohne weitere Erl uterung die Hierarchie innerhalb der Assembly deutlich Die Klassen in Orchid Core Daemons s nd die zentralen Klassen der Server Komponente Sie verwenden Klassen aus beinahe allen anderen Namespaces um die ihnen zugeteilten Aufgaben zu erledigen und werden ihrerseits von den Klassen in Orchid Core Servers verwendet Die einzelnen Namespaces aus Orchid Core auch diejenigen die nicht Abbildung 11 sichtbar sind werden im Folgenden alphabetisch sortiert beschrieben Eine detaillierte Beschreibung einzelner Klassen befindet sich im Abschnitt 5 6 5 1 1 1 Dieser Namespace der den gleichen Namen wie ihn enthaltende Assembly tr gt enth lt die Hauptklasse Bloom der Server Komponente die in Implementierungen eines ORCHID Servers genutzt werden kann sowie zus tzl
230. nsen u aa 48 4 1 2 Wirtschaftliche Oual tsantorderungen 48 4 7 3 Sollware Er2 ONONE 49 50 Si ei ae ee 50 5 1 1 Projektstruktur Server Kkomponente 50 5 152 Projektstrukt r Chient Bibli thek a 32 32 Hierarchiean der Server Komponenle a eegene ee 53 5 3 Eegeregie 54 5 3 1 Das Entwurfsmuster Abstrakte Fabrik 2 54 SR Das Sine Entwurfsmuster ss 56 5 3 3 Dr pendeney ban e e 58 5 Verwendete essen aa lau 61 5 4 1 Framework a 61 5 4 2 Arduino und C C A 66 5 4 3 Arduino Microcontroller Plattform 0000000000020222000 0000 n non nn ENEE 67 5 5 Frameworks und Tools na 67 5 5 1 Ra E e E E A E A T E A E 67 39 2 ele S 70 32552 12 5 5 4 EE 75 399 MIO Sty Copa 75 5 6 Klassen der Server Komponente ss a 5 6 1 Sener UN Daem S een 71 5 6 2 Parser und arena 78 5 6 3 Datenh ltunsskl ssen e 78 5 6 4 Ree E EE 79 5 6 5 Dyna
231. nstanzen von Daemons zu erzeugen Die Art des Daemons richtet sich dabei nach der Art des Servers ein Hardware Server erzeugt Hardware Daemons ein Software Server entsprechend Software Daemons Da beide Arten von Daemons von der gleichen abstrakten Bas sklasse AHardwareDaemon abgeleitet sind ASoftwareDaemon die abstrakte Basisklasse f r Software Daemons ist von AHardwareDaemon abgeleitet verhalten sie sich hnlich Beide Arten verwenden einen Datenbank Adapter um Daten zu speichern und zu lesen Ein Request Parser wird eingesetzt um eingehende Anfragen von Clients bzw Drittsoftware zu verarbeiten eine Responder Instanz wird zur Beantwortung eingehender Anfragen verwendet Um Server Komponente des ORCHID Toolkits in einer eigenen Implementierung eines ORCHID Servers zu nutzen muss lediglich eine Instanz der Klasse Bloom erzeugt in tialisiert und deren Methode Run aufgerufen werden ORCHID 5 3 Entwurfsmuster Im Zuge der Implementierung der Server Komponente kommen verschiedene Entwurfsmuster zum Einsatz Diese werden im Folgenden genannt und anhand der konkreten Stellen an denen sie im Code verwendet werden erl utert 5 3 1 Das Entwurfsmuster Abstrakte Fabrik Da das im Rahmen dieser Arbeit entwickelte Toolkit insbesondere darauf ausgelegt ist dass es von Dritten erweitert und ver ndert werden k nnen soll st es notwendig dass konkrete Klassenimplementierungen an m glichst wenigen Stellen im Code referen
232. nstelle von x eingesetzt und die Liste somit gefiltert Die hier beschriebene Funktionalit t kann nat rlich auch ohne Lambda Expressions implementiert werden dabei geht jedoch ein Gro teil der enormen Flexibilit t verloren die die gezeigte Vorgehensweise bietet M chte Entwickler zu einem sp teren Zeitpunkt nicht mehr nach Integer Werten filtern muss keine neue Methode geschrieben sondern lediglich die bergebene Lambda Expression ver ndert werden Auch g nzlich andere Arten der Filterung wesentlich komplexer sein k nnen k nnen ber das hier gezeigte Verfahren angewendet werden ohne die Filter Methode ver ndern zu m ssen Systementwurf 5 4 1 4 LINQ LINQ steht f r Language Integrated Query dt in die Sprache integrierte Abfrage und erlaubt es SQL hnliche Abfragen auf beliebige Objekte anzuwenden Diese Abfragen werden dabei nicht als Zeichenkette bergeben wie es z B bei Datenbanken der Fall ist sondern bestehen aus einer Reihenfolge von Schl sselw rtern und Ausdr cken so dass s e bereits durch den Compiler gepr ft werden k nnen was die Fehlersuche erheblich vereinfacht und Laufzeitfehler durch syntaktisch fehlerhafte Abfragen ausschlie t LINQ bietet eine Vielzahl von Anwendungsm glichkeiten deren Auflistung den Rahmen dieser Arbeit sprengen w rde Stattdessen soll auf die Verwendung von LINQ als Abfragesprache f r Listen eingegangen werden da das volle Potential des Sprac
233. nteren Schichten erfordern hingegen einen weitaus gr eren Aufwand um nderungen zu implementieren je niedriger die Nummer einer Schicht ist desto st rker ist ihr Bezug zu Hardware HTTP ist ein zustandsloses Protokoll d h zwischen je zwei bertragungen gibt es per Definition keine Zusammenh nge dies wird erst durch Erweiterungen des Protokolls auf Anwendungsebene m glich ist aber f r dese Arbeit nicht von Bedeutung Es werden zwei Arten von Nachrichten Messages unterschieden Anfragen Requests und Antworten Responses Aufgrund der Zustandslosigkeit des Protokolls muss ein Kommunikationspartner n der Lage sein eine Antwort einer Anfrage zuzuordnen und umgekehrt Eine HTTP Nachricht besteht immer aus einem Nachrichtenkopf Header und einem optionalen Nachrichtenk rper Body 2 2 2 Anfragen Requests Ein Kommunikationspartner der eine Anfrage stellt wird zu einem Client Der Partner der die Anfrage entgegennimmt wird entsprechend zu einem Server Der Client erzeugt eine Anfrage die nach einem bestimmten Schema aufgebaut ist das in Listing 1 gezeigt wird Pflichtangaben mit variablen Werten sind im Listing in spitze Klammern eingeschlossen optionale Angaben mit var ablen Werten eckige Klammern Angaben ohne Klammern s nd Pflichtangaben mit festem Wert CRLF steht f r Carriage Return Line Feed also einen Zeilenumbruch der aus den Steuerzeichen Carriage Return und Line Feed besteht die
234. ntwort zu senden falls dies technisch m glich ist 5 8 2 M gliche Antworten eines Servers Nachdem eine Instanz eines ORCHID Servers eine eingegangene HTTP Anfrage verarbeitet hat bzw wenn Verarbeitung einer Anfrage aufgrund eines Fehlers abgebrochen wurde sendet sie eine Antwort an den Kommunikationspartner der die Anfrage gestellt hat Diese Antwort enth lt einen Statuscode und eine Erfolgs oder Fehlermeldung falls keine Daten vom Server abgerufen werden sollten oder konnten oder die angeforderten Daten selbst Eine g ltige Anfrage eines Kommunikationspartners wird durch den Server stets mit HTTP Code 200 beantwortet Wurden keine Daten abgefragt besteht der Message Body aus einer kurzen Best tigungsnachricht ansonsten werden die angeforderten Daten bertragen Wurde eine ung ltige Anfrage an den Server gesendet also eine Anfrage der Server nicht verarbeiten kann oder die fehlerhafte Daten enth lt antwortet dieser mit HTTP Code 400 Request und einer kurzen Fehlermeldung im Message Body Kann sich ein Kommunikationspartner nicht ordnungsgem beim Server authentifizieren z B bei bertragung eines nicht akzeptierten Developer Keys vgl 6 3 3 2 wird als Antwort HTTP Code 401 Unauthorized gesendet und im Message Body eine kurze Fehlermeldung bertragen Tritt hingegen ein interner Fehler der durch den Server selbst verursacht wurde wird die Anfrage mit HTTP Code 500
235. o cc en Main ArduinoBoardEthernet Anforderungsdefinition 4 4 1 Funktionen der Server Komponente FS10 Serverkonfiguration einlesen Vorbedingung Konfigurationsdatei vorhanden und lesbar Erfolgsfall Serverweite Konfiguration verf gbar Server Instanzen k nnen nicht gestartet werden Abbruch und Neustart Fehlerfall der Server Komponente Beschreibung Die serverweite zentrale Konfigurationsdatei wird eingelesen Beteiligte Orehra Or O Kategorie Musskriterium Tabelle 5 FS10 Serverkonfiguration einlesen FS20 Hardware Server starten Erfolgsfall Hardware Server wartet auf eingehende Verbindungen an dem hm zugewiesenen Port Tabelle 6 FS20 Hardware Server starten 530 Software Server starten Erfolgsfall Software Server wartet auf eingehende Verbindungen an dem ihm zugewiesenen Port Tabelle 7 FS30 Software Server starten FS40 Auf eingehende Client Verbindung warten Vorbedingung FS20 Erfolgsfall Es wird auf eingehende Verbindungen eines ORCHID Client gewartet Fehlerfall Hardware Server kann nicht auf eingehende Verbindungen warten Abbruch und Neustart der Server Komponente Beschreibung Der Hardware Server wartet an dem hm zugewiesenen Port auf eingehende Verbindungen von ORCHID Clients Beteiligte Or chanel Server Kategorie Musskriterium Tabelle 8 FS40 Auf eingehende Client Verbindung warten Auf eingehende Drittsoftware Verbindung
236. o muss f r jeden eingehenden Request lediglich bestimmt werden welche Instanz diesen bearbeiten soll und ein Thread gestartet werden in dem die Bearbeitung abl uft 5 9 1 1 Threads in C Die Verwendung von Threads in C erfordert die Einbindung der Klasse Thread Diese Klasse stellt verschiedene Methoden zur Nutzung von Threads zur Verf gung an dieser Stelle soll jedoch nur die Methode Start betrachtet werden einen Thread startet nachdem dieser initialisiert wurde Bei der In tialisierung muss dem zu startenden Thread u a mitgeteilt werden welche Methode er w hrend seiner Laufzeit ausf hren soll Diese Methode wird ThreadStart Methode genannt und der Thread l uft so lange bis diese Methode beendet ist oder ein anderes Ereignis eintritt das zu dessen Beendigung f hrt z B ein Timeout oder ein Fehler Der Name der Methode basiert auf dem in der Klasse Thread enthaltenen Delegate dt Abgeordneter oder Beauftragter hier aber auch Mittelsmann vom Typ Threadstart Die bersetzung mit Mittelsmann erscheint deshalb sinnvoll da beim Aufruft von Thread Start auch die Methode aufgerufen wird auf die der Delegate verweist er also als Vermittler zwischen aufrufendem und neu gestartetem Thread auftritt Der Lebenszyklus eines Threads kann wie in der folgenden Grafik veranschaulicht werden Erzeugen eines Thread Objekts e Angabe der ThreadStart Methode e Weitere Initialisierungen s Aufru
237. o_id INT 11 Fremdschl ssel arduinos id Der Client an den dieser Sensor angeschlossen ist suid VARCHAR 36 Die GUID des Sensors name VARCHAR 200 Name des Sensors frei w hlbar description TEXT Die Beschreibung des Sensors frei w hlbar Tabelle 84 Datenbanktabelle sensors Systementwurf Tabelle sensor data Beschreibung Speichert gemessene Sensordaten Jede Zeile in dieser Tabelle steht f r einen gemessenen Sensorwert Datenfelder id un Prim rschl ssel sensor_id INT 11 Fremdschl ssel sensors id Der Datensatz des Sensors der den Sensorwert gemessen hat datatype a ER E Fremdschl ssel typemappings id Der Datentyp der Daten die dieser Sensorwert repr sentiert sensor_value TEXT Die eigentlichen Daten die der Sensor gemessen hat measure_time DATETIME Der Zeitpunkt zu dem dieser Sensorwert gemessen wurde Tabelle 85 Datenbanktabelle sensor_data typemappings Beschreibung Speichert Datentypen die bei der bertragung von Sensordaten und Instruktionen verwendet werden vgl 5 8 Datenfelder id INT 11 Prim rschl ssel type_code INT 4 Numerischer Schl ssel der f r den Datentyp steht type_name VARCHAR 50 Der Name des Datentyps type_description TEXT Eine kurze Beschreibung des Datentyps short_name VARCHAR 10 Kurzer Name des Datentyps Tabelle 86 Datenbanktabelle 106 ORCHID 6 Realisierung und Tests Dies
238. och keine Instanz von NonThreadSafeSingleton Nun greift Thread B auf Instance zu und arbeitet den Code bis zur R ckgabe ab In desem Moment existiert bereits eine Instanz von NonThreadSafeSingleton Nachdem Thread B die Kontrolle wieder abgegeben hat wird Thread A weiter ausgef hrt Die Pr fung ob instance verschieden von null ist wurde aus Sicht von Thread bereits abgearbeitet eine neue Instanz soll erzeugt werden Innerhalb von Thread A wird also eine neue Instanz der Klasse NonThreadSafeSingleton erzeugt und zur ckgegeben Es k nnten somit zu einem Zeitpunkt zwei verschiedene Instanzen von NonThreadSafeSingleton entstehen obwohl das Singleton Entwurfsmuster garantieren soll dass es zu jedem Zeitpunkt stets nur eine Instanz gibt Dies kann zu Problemen im Programmablauf bis hin zum Programmabsturz f hren insbesondere wenn die Erzeugung von Instanzen mit einer komplexen Initialisierung verbunden ist Um eine Singleton Klasse threadsicher zu machen muss ein sog Mutex Objekt eingef hrt werden Mutex steht f r mutual exclusion wechselseitiger Ausschluss Ein solches Objekt wird von allen Instanzen einer Klasse geteilt static und kann dazu verwendet werden das Szenario zu vermeiden vgl http msdn microsoft com en US library ms173178 v VS 80 aspx ORCHID In der verwendeten Programmiersprache CH gibt es zu diesem Zweck den 1 mit dem ein Objekt als Mutex verwendet werden kann
239. ocontroller kommen W hrend der Entwicklung zeigten s ch diese Probleme haupts chlich durch die in 6 5 bereits diskutierten Fehler in der Ausf hrung eines Sketchs Da aber nicht nur der Arbeitsspeicher eines Arduinos begrenzt ist sondern auch nur wenig Festspeicher zur Verf gung steht vgl 4 3 2 2 und 5 entstehen zus tzlich weitere Probleme Insbesondere bei der Verarbeitung von Antworten eines Servers w rde mehr belegbarer Speicher dazu f hren dass Fehlerbehandlungsroutinen und im Allgemeinen robusterer Code implementiert werden k nnten Da die Client Bibliothek des Toolkits jedoch nur einen m glichst kleinen Anteil an der Gesamtgr e eines Sketchs haben soll musste auf solche Routinen weitgehend verzichtet werden Entsprechend muss das in 5 8 beschriebene Protokoll strikt eingehalten werden damit die Kommunikation zwischen Client und Server reibungslos ablaufen kann Handbuch Server Komponente 7 Handbuch Server Komponente Dieser Abschnitt bildet das Benutzerhandbuch f r Server Komponente des ORCHID Toolkits Nachdem zun chst Voraussetzungen beschrieben werden die ein System auf dem die Server Komponente ausgef hrt werden soll erf llen muss wird die Installation Konfiguration und Verwendung der Komponente eingegangen Im Verlauf dieses Handbuchs wird dazu eine beispielhafte Referenzimplementierung f r einen ORCHID Server entwickelt Abschlie end wird gezeigt wie die Server Komponente erweitert bzw ve
240. oftware auf der virtuellen Maschine Die Software sendet HTTP Anfragen entsprechend den in 5 8 genannten Vorgaben an einen ORCHID Server und wertet dessen Antworten aus Die ermittelten Daten werden daraufhin aufbereitet und dargestellt ber die Adresse http localhost orchid wird die exemplarische Drittsoftware im Browser aufgerufen die Quelldateien befinden sich im Verzeichnis opt lampp htdocs orchid This demo connects to localhost 8181 with developer key 24 241780064 814 7 314 4 25181405785 307955723 4154 91 6048381187 324 CLIENT ID 435 48 11 0 93 080027 251 7 SENSOR ID 222420 54 11 0 887 ACTOR 1 1 2504 54 11 0 0860 Abbildung 64 Informationsbereich der Proof of Concept Drittsoftware Die obige Abbildung zeigt einen Ausschnitt aus der Drittsoftware Die dargestellten Parameter m ssen den in Server und Client verwendeten Parametern entsprechen damit die Software die M glichkeiten des ORCHID Toolkits demonstrieren kann und k nnen bei Bedarf in der Date opt lampp htdocs orchid demo demo php angepasst werden Im unteren Teil der Anwendung befinden sich drei Bereiche die im Folgenden erl utert werden 10 8 1 Sensordaten abrufen Der erste Bereich dient dem Abrufen von Sensordaten von einem ORCHID Server in der Voreinstellung localhost und verf gt ber die zwei in der folgenden Abbildung gezeigten Schaltfl chen Request last sensor data
241. oller der AVR Familie verf gen ber RISC Prozessoren Reduced Instruction Set Computer deutsch Rechner mit reduziertem Befehlssatz Die RISC Architektur bietet den Vorteil dass alle Befehle f r einen RISC Prozessor innerhalb eines Prozessortakts abgearbeitet werden k nnen was wiederum Geschwindiskeitsvorteile mit sich bringt Es gibt verschiedene Arduino V O Boards mit unterschiedlichen Atmel AVR Microcontrollern ausgestattet sind Eine detaillierte Liste kann der Herstellerseite entnommen werden siehe 5 F r diese Arbeit werden Arduino Microcontroller Boards des Typs Duemilanove verwendet Sie verf gen ber ATmegal68 Microcontroller es gibt auch Modelle in denen ein ATmega328 Microcontroller verbaut ist aus der Atmel AVR Familie und arbeiten mit einer Taktfrequenz von 16 MHz vgl 6 S 18 und 7 technische Details auf der Herstellerseite siehe 8 2 1 2 2 Speicher Arduino Duemilanove Boards verf gen ber 32 Kilobyte Flash Speicher f r Programme und 2 Kilobyte RAM vgl 7 Andere Arduino Boards verf gen ber mehr oder weniger Speicher vgl Italienisch f r zweitausendneun in diesem Jahr wurde der Duemilanove ver ffentlicht Fachliches Umfeld 5 was zu Einschr nkungen im Zusammenhang mit dem hier entwickelten Toolkit f hren kann vgl 6 6 4 2 1 2 3 Erweiterung mit Shields Eine der Besonderheiten von Arduino V O Boards die diese von anderen Microcontroller Plattformen unt
242. olocationClass genannt wird HardwareDaemonllass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Daemons AHardwareDaemon gebunden werden soll HardwareDaemonClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt HardwareDaemonCllass genannt wird HardwareFactoryClass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data AHardwareFactory gebunden werden soll HardwareFactoryClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die gt HardwareFactoryClass genannt wird 126 ORCHID Einstellung HardwareServerClass HardwareServerClassAssemblyFile InstructionClass InstructionClassAssemblyFile ParserClass ParserClassAssemblyFile 1 ResponderClassAssemblyFile SensorClass SensorClassAssemblyFile SensorDataClass SensorDataClassAssemblyFile SoftwareDaemonClass SoftwareDaemonClassAssemblyFile SoftwareServerClass SoftwareServerClassAssemblyFile Bedeutung Der volle Name der konkreten Implementierung der Klasse die an Orchid Core AHardwareServer gebunden werden soll Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt genannt wird gt HardwareServerClass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data Alnstruction gebunden werden soll Der
243. on ist eine Datenhaltungsklasse deren Instanzen jeweils eine Instruktion aufnehmen k nnen 5 1 2 3 Strings Die Verarbeitung von Zeichenketten in einer Bibliothek f r einen Arduino ist im Vergleich zu anderen Programmiersprachen aufw ndiger Entsprechende Funktionen wurden aus Gr nden der leichteren Wartbarkeit und der Erhaltung der bersichtlichkeit in die Bibliothek Strings ausgelagert Systementwurf 5 2 Hierarchie in der Server Komponente Die Server Komponente des ORCHID Toolkits verf gt ber eine besondere Hierarchie die an dieser Stelle verdeutlicht werden soll Datenbank Adapter Hardware Server Request Parser Daemon em Responder Datenbank Adapter Software Server Request Parser Daemon S Responder Abbildung 13 Hierarchie in der Server Komponente Die obige Abbildung 13 zeigt die Klassen Hierarchie die in der Server Komponente vorherrscht Eine Bloom dt Bl te eine Instanz der Klasse Orchid Core Bloom verf gt ber zwei separate Server einen Hardware Server und einen Software Server Diese Server warten auf eingehende Verbindungen an je einem Port Der Hardware Server nimmt Client Verbindungen w hrend der Software Server Verbindungen von Drittsoftware entgegennimmt Bloom bildet damit die oberste Ebene der dargestellten Hierarchie Jede Instanz eines Servers ist n der Lage I
244. one Orchid Core HtetCOoReguestType Beteiligte Orchid Core Daemons OrchidHardwareDaemon Orehid Core Data MySqlAdapter Kategorie Musskriterium Tabelle 15 FS110 Sensordaten speichern FS120 Sensordaten abrufen Vorbedingung FS100 Request Typ GET angenommen durch Software Server Erfolgsfall Sensordaten wurden abgerufen und an Drittsoftware bermittelt Fehlerfall Sensordaten k nnen nicht abgerufen werden Fehlermeldung an Drittsoftware Beschreibung Ein GET Request der von einer Drittsoftware bermittelt wurde wird von einer Instanz von OrchidSoftwareDaemon verarbeitet Aus dem Request wird ausgelesen welche Sensordaten und welcher Menge die Drittsoftware erhalten m chte diese Daten aus der Datenbank ausgelesen und an die Drittsoftware bermittelt Datenstrukturen core neaue Co Core Herpkrcegucesei ype Orchnd Core Daoca scnsorbDaca Beteiligte Orchid Core Daemons OrchidSoftwareDaemon Orchid Core Data MySqlAdapter Kategorie Musskriterium Tabelle 16 FS120 Sensordaten abrufen 5130 Heartbeat Request verarbeiten Vorbedingung FS100 Request Typ TRACE angenommen durch Hardware Server Erfolgsfall Heartbeat wurde verarbeitet Datensatz in der Datenbank aktualisiert Erfolgsmeldung an Client gesendet Fehlerfall Datensatz kann nicht aktualisiert werden Fehlermeldung an Client Beschreibung Ein T
245. oom Blossom Listing 43 Minimalprojekt ORCHID Server In Zeile 3 wird der Namespace Orchid Core Configuration eingebunden Die darin enthaltenen Klassen erm glichen es auf das Konfigurationssystem zugreifen zu k nnen In Zeile 16 wird das Konfigurationssystem mit der Konfigurationsdatei Settings Orchid ini initialisiert diese Datei muss vorhanden und lesbar sein und g ltige Konfigurationselemente enthalten vgl 7 5 Es ist m glich einen relativen wie im obigen Beispiel oder absoluten Pfad zu dieser Datei anzugeben Der einzige Konstruktor der Klasse Bloom erwartet als Parameter je eine Instanz einer Fabrikklasse f r Server und Daemons hier ServerFactory bzw DaemonFactory Ist eine neue Instanz erzeugt worden kann der ORCHID Server mit dem Aufruf der Methode Blossom dt erbl hen der Instanz gestartet werden Dieses Minimalprojekt gibt keine Meldungen auf die Standardausgabe oder eine Log Date aus ist aber dennoch ein vollwertiger ORCHID Server Im weiteren Verlauf wird ausgehend von dem in diesem Abschnitt gezeigten Beispiel die Weiterentwicklung des Minimalprojekts bis hin zur fertigen Referenzimplementierung beschrieben 125 ORCHID 7 5 Konfiguration Die Konfigurationsm glichkeiten die die Server Komponente einem Benutzer bietet sind sehr umfangreich und sollen in diesem Abschnitt erl utert werden Die Konfigurationsdatei Orchid ini f r Server Komponente befindet
246. othek erlaubt es einem Entwickler die MAC Adresse des Arduinos frei zu w hlen Der Konstruktor erwartet im entsprechenden Parameter ein Array von Bytes L nge 6 in hexadezimaler Notation Die Parameter routerip subnet und server m ssen mit Arrays von Bytes der L nge 4 in hexadezimaler Notation gef llt und entsprechend der vorhandenen Konfiguration gew hlt werden IP Adresse Subnetzmaske und Gateway m ssen den Anforderungen des vorhandenen Netzwerks entsprechen Das folgende Listing 60 zeigt die Initialisierung eines Objekts vom Typ Orchid mit allen notwendigen Werten Finelude lt Orchid2 ks fincludeae lt Orchidlnstruction hi gt include lt Strings h gt Example sketch byte 1 0x12 0x23 08234 0x45 0x56 0867 byte gateway 192 168 1 1 pyte subnet 255 223 255 435 E byte ell 192 168 1 150 byte server 192 168 1 140 char client id 4b9abr 42328 5459 7b221527 76 73 int port 22100 char dev key 8178b0492fad1e60f59706484146f17b4bflafeaba9c2b7dA3db102450cb6b9c18347806 gateway subnet Ip Port Server Client 10 dev key void setup void loop Listing 60 Erzeugung eines Orchid Objekts 2 Die im oben gezeigten Beispiel verwendeten Werte orientieren sich an m glichst h ufig verwendeten Werten einem lokalen Netzwerk m ssen aber ggf der tats ch
247. p boolean success Srch1lda push sensor analoegkeadl0 TPush 7 Serial println orchid getLastError result Srch1d executeNeztinstructiontled 14 Serial print Execute Serial printin orchid getLastError delay 2000 Listing 73 Beispielsketch Die im obigen Listing gezeigten GUIDs und der Developer Key m ssen dem verwendeten Server angepasst werden damit der Sketch verwendet werden kann Wird dieser Sketch auf einem Arduino ausgef hrt und ist der ORCHID Server f r den Client erreichbar erscheint auf dem seriellen Monitor der Arduino IDE eine Ausgabe die der in Abbildung 61 entspricht Endbenutzerhandbuch 05 0 Sensor Push 8 Execute 8 Sensor Push 8 Execute 8 Sensor Push 8 Execute 8 Sensor Push 8 Execute 8 Sensor Push 8 Execute 8 4 Sensor Push 8 Execute 8 9600 baud Abbildung 61 Fehlercodes im seriellen Monitor der Arduino IDE Beide ausgef hrten Operationen Hochladen von Sensordaten und direktes Ausf hren der n chsten vorliegenden Instruktion werden mit dem Fehlercode 8 vom Server zur ckgewiesen Es handelt s ch dabei nicht um einen Fehler sondern um das erwartete Verhalten Der Server verf gt bisher noch nicht ber einen Datenbankeintrag f r die Berechtigungen des neuen Clients Entsprechend werden alle Anfragen die dieser an den
248. pr fungen bereits durch den Compiler nicht erst zur Laufzeit durchgef hrt werden k nnten Systementwurf 5 5 4 Microsoft FxCop Microsoft FxCop Microsoft Framework ist ein kostenloses Tool das in der Lage ist CLI Assemblies zu analysieren und die Einhaltung bestimmter Regeln der sog Design Guidelines for 11 Class Library Developers kurz Design Guidelines durch den Entwickler der Assembly zu berpr fen Die Design Guidelines umfassen 196 Regeln aus den Bereichen Design Globalization Interoperability Mobility Naming Performance Portability Security und Usage wobei FxCop es erlaubt einzelne Regeln bei der Analyse einer Assembly nicht anzuwenden wenn dies gew nscht ist F r die Analyse der Server Komponente wurden 191 der 196 Regeln herangezogen Diejenigen Regeln die nicht betrachtet wurden werden im Folgenden kurz erl utert und der Grund f r ihre Entfernung genannt Nr Regel Grund f r Entfernung 1 Avoid namespaces with few types Eine saubere semantische Trennung wurde der Einhaltung der Regel vorgezogen 2 Do not catch general exception types Obwohl w hrend der Entwicklung besonderes Augenmerk auf die Fehlerbehandlung gesetzt wurde f ngt der Code si cherheitshalber auch allgemeine Exceptions ab um Programmabst rze zu vermeiden Identifiers should have correct suffix Die Einhaltung dieser Regel w rde zu Typnamen f hren die berfl ssige Namensbestandteile tragen Das Auslas
249. r ndert werden kann indem eine neue Klasse entwickelt wird die eine bereits vorhandene ersetzt Falls nicht anders angegeben befinden sich alle genannten Dateien und Verzeichnisse auf der DVD die dieser Arbeit beiliegt Details zum beiliegenden Datentr ger k nnen Abschnitt 17 entnommen werden 7 1 Systemvoraussetzungen Zur Ausf hrung wird ein installiertes Mono Framework Version 2 6 7 oder kompatibel ben tigt Installationsdateien f r Microsoft Windows Linux und Apple MacOS befinden s ch auf der beigelegten DVD Alternativ kann die f r das entsprechende System ben tigte Installationsdatei von der Herstellerseite heruntergeladen werden Zweite Voraussetzung ist eine erreichbare Instanz eines MySQL Servers d h eine Instanz auf die vom ausf hrenden System aus zugegriffen werden kann Weitere Anforderungen an Hard und Software des ausf hrenden Systems k nnen Abschnitt 4 3 1 1 bzw 4 3 2 1 entnommen werden 7 2 Installation Die Server Komponente erfordert keine gesonderte Installation Es ist ausreichend die Bin rdateien vom beiliegenden Datentr ger zu kopieren und an einem beliebigen Ort im Dateisystem abzulegen Die ausf hrbaren Dateien der Server Komponente und alle weiteren zur Ausf hrung ben tigten Bibliotheken befinden sich im Order Orchid Server bin lib auf der DVD Es 15 ausreichend den Ordner Orchid Server bin lib zu kopieren und m Dateisystem abzulegen Er enth lt die folgenden Dateien Datei Verwe
250. r Clients Jede Zeile dieser Tabelle steht f r eine Instruktion die von einem Client ausgef hrt werden soll oder bereits ausgef hrt wurde Datenfelder arduino_id INT 11 Fremdschl ssel arduinos id Der Client f r den die Instruktion bestimmt ist component_id INTE Fremdschl ssel actors id Der Aktor f r den die Instruktion bestimmt ist action INT 11 Fremdschl ssel actions id Die Aktion die der Aktor der durch component id identifiziert ist ausf hren soll oder ausgef hrt hat Der Wer der an den durch component id identifizierten Aktor bermittelt werden soll oder bermittelt wurde value_type INT 11 Fremdschl ssel typemappings id Der Typ des Werts der an den durch component id identifizierten Aktor bermittelt werden soll oder bermittelt wurde posted DATETIME Der Zeitpunkt zu dem die Instruktion gespeichert wurde INT 2 Der Arduino O P n auf den der Wert value geschrieben werden soll falls kein P n direkt genutzt werden soll wird der Wert 999 verwendet priority Eine Zahl zwischen und 9 die die Priorit t der Instruktion bestimmt ist dabei die h chste Priorit t 9 die niedrigste TINYINT 1 Gibt an ob die Instruktion bereits ausgef hrt wurde Tabelle 81 Datenbanktabelle instructions ORCHID known_hosts Beschreibung Beinhaltet alle dem ORCHID Server bekannten Hosts also IP Adressen von Clients und Drittsoftware Datenfelder id EE Prim r
251. r Compiler es speziell auf d e Architektur des bersetzenden Computers abgestimmt in Maschinensprache berf hrt Auch eine virtuelle Maschine bersetzt ein Programm in Maschinencode der vom ausf hrenden Computer verarbeitet werden kann dies geschieht jedoch ber einen Just In Time Compiler JIT Compiler der bereits n eine Zwischensprache hier CIL bersetzten Code zur Laufzeit des Programms n ausf hrbaren Maschinencode bersetzt So k nnen Bin rdateien verteilt und unter verschiedenen Betriebssystemen ausgef hrt werden ohne neu kompiliert werden zu m ssen 2 3 1 1 Solutions und Projekte Als plattformunabh ngige Portierung des NET Framework arbeitet auch Mono mit den daraus bekannten Solutions dt L sungen und Projekten Bei einem Projekt handelt es sich um eine Zusammenfassung von Quellcodedateien Ressourcen und Referenzen auf Bibliotheken zusammen ein Programm oder eine Bibliothek bilden Eine Solution ist eine Sammlung von Projekten Es ist nicht erforderlich dass alle Projekte innerhalb einer Solution vom gleichen Typ sind es st auch m glich Projekte n verschiedenen Sprachen zu 8 http www mono project com 9 http www novell com 20 Http www microsoft com 21 http www microsoft com net Fachliches Umfeld entwickeln und sie in einer Solution zu verwalten solange die verwendeten Sprachen von Mono unterst tzt werden 2 3 1 2 Assemblies Eine Assembly dt etwa Gruppe oder V
252. r ORCHID Server konfiguriert werden kann Die enthaltenen Einstellungen entsprechen den 7 5 beschriebenen und sind auf die Verwendung mit der virtuellen Maschine ausgelegt Der ORCHID Server kann entweder direkt ber Kommandozeile oder ber das Shellscript start orchid sh dem Desktop gestartet werden Der Start ber das Shellscript wird empfohlen da dieses bei Bedarf auch den MySQL Server startet und der Referenzimplementierung des ORCHID Servers den Pfad zur Konfigurationsdatei mitteilt Starting LAMPP sudo password for orchid Starting XAMPP for Linux 1 7 4 XAMPP XAMPP Apache is already running XAMPP XAMPP MySQL is already running XAMPP XAMPP ProFTPD is already running XAMPP for Linux started Starting Orchid Reference Server Welcome to the Orchid Development Server Orchid Server 09 2011 19 45 nfo Database connection established root localhost orchid 08 09 2011 19 45 288 Info Database connection established root localhost orchid 09 2011 19 45 308 Info Webserver is running 192 168 1 117 8181 09 2011 19 45 nfo Server is running 192 168 1 117 29100 LTL 11 ESCH A 1 A hh d s na EN soe Dafsranvzcarrarg lt gt lt gt ORCHID Abbildung 58 zeigt den erfolgreichen Start eines ORCHID Servers der auf den Ports 29100 und 8181 auf eingehende Verbindungen wa
253. r Wahrscheinlichkeit nicht erraten werden zu k nnen Abbildung 34 Ausgabe von dkgen Die obige Abbildung 34 zeigt beispielhaft die Ausgabe von dkgen Ein auf diese Weise erzeugter Developer Key besteht aus 72 hexadezimalen Zeichen Es st nahezu unm glich einen solchen Schl ssel zu erraten um so Daten von einem ORCHID Server zu beziehen oder Daten auf einen ORCHID Server zu laden ein mit dkgen erzeugter Developer Key bietet also ein gewisses Mindestma an Sicherheit kann jedoch auch nicht vollst ndig vor unbefugten Zugriffen sch tzen vgl 6 6 1 6 3 3 3 Known IPs Als dritte und letzte S cherheitsma nahme kann ein ORCHID Server so konfiguriert werden dass ausschlie lich Verbindungen von bekannten IP Adressen engl known IP addresses oder kurz known IPs angenommen werden Jegliche Anfrage die nicht von einer dem ORCHID Server bekannten IP Adresse gesendet wurde wird diesem Fall mit einer Fehlermeldung HTTP Code 401 Unauthorized abgelehnt Auch die Verwendung dieser Ma nahme kann nicht vollst ndig vor unbefugten Zugriffen auf einen ORCHID Server sch tzen da IP Adressen vorget uscht werden k nnen Details werden in 6 6 1 beschrieben 0 3 3 4 Fazit Die drei diesem Abschnitt geschilderten Sicherheitsma nahmen Credentials Developer Keys und Known IPs ergeben ein Mindestma an Sicherheit k nnen jedoch einen unbefugten Zugriff auf einen ORCHID Server n cht vollst ndig ausschlie
254. r die Ausgabe auf der Kommandozeile Verbosity Einstellungen bez glich der Menge an Ausgaben auf der Kommandozeile Debug Einstellungen die bei der Fehlersuche und behebung n tzlich sind Tabelle 89 Einstellungskategorien Im Folgenden werden die einzelnen Einstellungen der Kategorien detailliert erl utert da sie f r den Einsatz des ORCHID Toolkits unverzichtbar sind Zus tzlich liegt der begleitenden DVD siehe Abschnitt 17 eine Konfigurationsdatei bei die mit zahlreichen Kommentaren ausgestattet ist Die Einstellungen sind dabei nach Zusammengeh riskeit und danach alphabetisch geordnet 7 5 1 Kategorie Dependencies Die Einstellungen dieser Kategorie erm glichen es die gesamte Struktur der Server Komponente zu ver ndern indem Typ Bindungen ausgetauscht werden k nnen ohne den Quellcode neu kompilieren zu m ssen Einstellung Bedeutung ActorClass Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data AActor gebunden werden soll ActorClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt ActorClass genannt wird ArduinoClass Der volle Name der konkreten Implementierung der Handbuch Server Komponente 75 Einstellung Bedeutung Klasse die an Orchid Core Data AArduino gebunden werden soll ArduinoClassAssemblyFile Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt ArduinoCl
255. r lesbar Fehler durch falsche Klammerung sind weniger wahrscheinlich da durch die Verwendung von Properties Menge an notwendigen Klammern erheblich reduziert wird Dar ber hinaus kann die Operation im Gegensatz zum in Listing 13 gezeigten Code sofort als Zuweisung interpretiert werden Properties erlauben es zus tzlich unterschiedliche Modifizierer f r den Zugriff zu verwenden die im folgenden Listing dargestellt werden public class GetterAndSetter private int theAnswer 42 public int TheAnswer get 1 return this theAnswer protected internal set 1 this tTheanswer valne Listing 16 Beispielklasse mit unterschiedlichen Zugriffsmodifizierern Der lesende Zugriff auf die private Variable theAnswer ist nach wie vor ffentlich schreibende Zugriffe werden nur Klassen erlaubt die von der Klasse GetterAndSetter abgeleitet werden oder sich in derselben Assembly befinden protected internal Systementwurf 5 4 1 2 Extension Methods Eine Extension Method Erweiterungsmethode erlaubt es einem Entwickler einer bestehenden Klasse beliebige Funktionen hinzuzuf gen ohne die Klasse selbst ver ndern zu m ssen Extension Methods werden als statische Methoden in einer statischen Klasse definiert aber wie Instanzmethoden der Objekte der von ihnen erweiterten Klasse aufgerufen Obwohl die urspr ngliche Klasse also nicht ver ndert wurde bieten ihre Instanzen nach der Erweiterung ne
256. r zu ver ndern ohne zwingend an Programmiersprache gebunden zu sein andere Plattformen und Programmiersprachen erlauben ein so hohes Ma an Flexibilit t nicht Um die Kompatibilit t mit m glichst v elen CIL Sprachen zu gew hrleisten muss entsprechender Code bestimmte Regeln befolgen Diese Regeln und deren Umsetzung werden in 5 5 4 und 5 5 5 detailliert beschrieben Ein zweiter Aspekt der zur Auswahl von Mono und C f hrte ist die Sicherheit Insbesondere Server Software die ffentlich ber das Internet erreichbar ist kann schnell zu Sicherheitsproblemen f hren wenn Schwachstellen im Code unerkannt bleiben Solche Schwachstellen k nnen durch den Einsatz einer modernen Programmiersprache und einer virtuellen Maschine vermieden werden indem sog managed code deutsch etwa verwalteter Code erzeugt wird Diese Art von Code wird w hrend der Ausf hrung berwacht Der Programmierer kann auf Verwendung von schwachen Datenstrukturen schwach Bezug auf deren Sicherheitsaspekte wie Zeiger verzichten weiterhin wird Speicher dynamisch verwaltet so dass Puffer berl ufe Buffer Overflows vgl 17 S 7 8 und damit zusammenh ngende Schwachstellen nicht auftreten k nnen Der verwaltete Code ist entsprechend von au en weitaus weniger angreifbar als es z B Code einer nicht verwalteten Programmiersprache wie C ist Ein weiterer Vorteil der Wahl von Mono als Entwicklungsplattform f r Ser
257. rbeit wird ein Toolkit entwickelt das speziell auf die Arduino Microcontroller Plattform ausgerichtet ist deren technische Besonderheiten den folgenden Abschnitten erl utert werden Zun chst soll jedoch beschrieben werden wobei es sich bei der Arduino Microcontroller Plattform handelt Die Arduino Plattform besteht aus zwei Teilen dem eigentlichen Microcontroller Board also einer Platine die neben dem Microcontroller auch weitere Bauteile w e Eingangs und Ausgangs Pins Status LEDs Peripherie Anschl sse etc tr gt h ufig als V O Board oder einfach Arduino bezeichnet und einer Entwicklungsumgebung IDE die ebenfalls den Namen Arduino tr gt Die Entwicklungsumgebung und die zugeh rige Programmiersprache auch diese tr gt den Namen Arduino werden in 2 3 2 beschrieben gt Stand 10 09 2011 20 00 Uhr Es handelt sich nicht um eine Auflistung aller Anbieter http www conrad de 7 http de rs online com 8 http www reichelt de ORCHID Es gibt zahlreiche verschiedene Arduino Microcontroller Boards mit unterschiedlichen Spezifikationen Details sind Abschnitt 2 1 2 1 zu entnehmen der Fokus dieser Arbeit liegt auf dem Arduino Duemilanove der in der folgenden Abbildung dargestellt ist MADE IN ITALY RE DER en g su Duemilanove ve CR m 51 x e Abbildung 1 Arduino Duemilanove Eine besonder
258. rchid Core Requests OrchidHttpRequest Beteiligte Orchid Core Parsers OrchidHttpRequestParser Kategorie Musskriterium Tabelle 13 FS90 Gelesene Anfrage transformieren FS100 Request Typ bestimmen Vorbedingung 590 Erfolgsfall Der Typ der eingehenden Anfrage wurde bestimmt Fehlerfall Die Anfrage kann nicht verarbeitet werden Fehlermeldung an Verbindungspartner Client oder Drittsoftware Beschreibung Der Typ eines Requests wird ber die verwendete HTTP Methode vgl 2 2 bestimmt Nur wenn die Methode bestimmt werden kann und bekannt ist kann eine Anfrage verarbeitet werden ansonsten wird eine Fehlermeldung bermittelt Datenstrukturen Orchid Core Reguests OrchiaHt tC oReguest Onchid Core Hrcpkrequeseiype Beteiligte Orchid Core Daemons OrchidHardwareDaemon oder Orchid Core Daemons OrchidSoftwareDaemon Kategorie Musskriterium Tabelle 14 FS100 Request Typ bestimmen ORCHID FS110 Sensordaten speichern Vorbedingung FS100 Request Typ PUT angenommen durch Hardware Server Erfolgsfall Sensordaten wurden gespeichert Erfolgsmeldung an Client bermittelt Fehlerfall Sensordaten k nnen nicht gespeichert werden Fehlermeldung an Client Beschreibung Sendet ein Client einen PUT Request wird dieser entgegengenommen und von einer Instanz von OrchidHardwareDaemon verarbeitet Die bermittelten Sensordaten werden ausgelesen und gespeichert Datenstrukturen ame
259. rden k nnen Auch der Einsatz Verbindung mit einer Drittsoftware wird an dieser Stelle er rtert und entsprechende Codebeispiele werden gegeben Abschnitt 9 zeigt wie die im Verlauf dieser Arbeit entstandenen Zusatztools die f r Verwendung des Toolkits n tzlich sind verwendet werden k nnen Abschnitt 10 befasst ach mit der Verwendung des Toolkits und stellt entsprechend das Endbenutzerhandbuch dar Abschlie end fasst Abschnitt 11 die Ergebnisse dieser Arbeit r ckblickend zusammen und gibt dar ber hinaus einen Ausblick auf potentielle Weiterentwicklungen und Einsatzszenarien des entwickelten Toolkits 1 2 Dokumentkonventionen Dieses Dokument verwendet die folgenden Schriftarten und Schriftstile berschrift der 1 Ebene berschrift der 2 Ebene berschrift der 3 Ebene berschrift der 4 Ebene Beschriftung Normaler Text Erl uterungen Eigennamen und englische Begriffe Klassennamen Assemblies Namespaces und Dateinamen im Text Quellcode Codewort Klassenname String Literal Kommentar Einleitung 1 3 Englische Begriffe und Namen Aufgrund der technischen Natur dieser Arbeit werden im Text h ufig englische Begriffe verwendet Falls m glich werden diesen Begriffen d e passenden deutschen Artikel vorangestellt um den Textfluss nicht zu beintr chtigen Englische Begriffe werden sollte dies notwendig sein bei ihrem ersten Auftreten bersetzt Ist ein englischer Begriff im fachlichen Umfeld der Arbeit
260. rdner namens libraries Ist dieser zweite Ordner nicht vorhanden muss er erzeugt werden D Unter Linux befindet sich das Verzeichnis libraries im Ordner sketchbook im Home Verzeichnis des angemeldeten Benutzers Ist es nicht vorhanden muss es erzeugt werden Das folgende Listing zeigt w e das Verzeichnis unter Linux unabh ngig vom Benutzernamen gefunden werden kann sketchbook Listing 55 Pfad zum Sketch Verzeichnis unter Linux Die dieser Arbeit beiliegende DVD beinhaltet die Client Bibliothek im Ordner Orchid Client lib Dieser Ordner enth lt einen weiteren Ordner namens Orchid der in das jeweilige libraries Verzeichnis kopiert werden muss um die Client Bibliothek in eigenen Sketches nutzen zu k nnen Der Erfolg der Installation der Client Bibliothek kann ber die Arduino IDE gepr ft werden ber das Men Sketch gt Import Library k nnen in der IDE externe Bibliotheken eingebunden werden Erscheint die Bibliothek Orchid in der Liste der verf gbaren Bibliotheken war die Installation erfolgreich Abbildung 43 zeigt das entsprechende Men nach erfolgreicher Installation sketch_aug27b Arduino 0022 File Edit Tools Help D Verify Compile Strg R Stop Show Sketch Folder Strg K Import Library gt ArduinoTestSuite Add File EEPROM Ethernet Firmata LiquidCrystal Matrix 50 Servo Software erial SPI Sprite Stepper Wire Contributed 4 Orchid
261. reServer OrchidSoftwareServer OrchidSoftwareDaemon m JE Abbildung 16 Vererbungshierarchie von Servern und Daemons Wie die obige Abbildung darstellt werden Server stets von der abstrakten Bas sklasse AHardwareServer abgeleitet und enthalten immer einen hnen zugeordneten Daemon jeder Daemon leitet von der abstrakten Basisklasse AHardwareDaemon ab und ist immer genau einem Server zugeordnet Obwohl es sich bei den Klassen AHardwareServer und ASoftwareServer bzw AHardwareDaemon und ASoftwareDaemon jeweils effektiv um die gleiche Klasse handelt ASoftwareServer und ASoftwareDaemon enthalten keine Methoden oder Eigenschaften die ihre jeweilige Bas sklasse nicht enth lt wurde die Trennung in je eine eigene Klasse vorgenommen um sp tere Ver nderungen und Erweiterungen feingranular zu erm glichen Als zentrale Bestandteile der Server Komponente nutzen Daemon Klassen zahlreiche weitere Klassen um die ihnen zugewiesenen Aufgaben zu erledigen Jede Instanz eines Daemons verf gt ber eine Liste von Client Berechtigungen Credentials eine verifizierende Instanz Verifier die zur Validierung eingehender Anfragen genutzt wird Fabriken zur Erzeugung von Datenhaltungsobjekten DataFactory und HardwareFactory eine Responder Instanz Responder sowie eine Parser Instanz Parser und eine Instanz eines Datenbankadapters Database Die nachfolgende Abbildung 17 zeigt die Beziehungen einer Daemon Klasse anhand der abstrakten Bas sklasse
262. relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die gt InstructionClass genannt wird Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Parsers AHttpRequestParser gebunden werden soll Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt ParserClass genannt wird Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Responders AHttpResponder gebunden werden soll Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt gt ResponderClass genannt wird Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data ASensor gebunden werden soll Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt SensorClass genannt wird Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Data ASensorData gebunden werden soll Der relative oder absolute Pfad zu der Assemblydatei die die Klasse enth lt die in gt SensorDataClass genannt wird Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Daemons ASoftwareDaemon gebunden werden soll Der relative oder absolute Pfad zu der Assemblydatei die Klasse enth lt gt SoftwareDaemonllass genannt wird Der volle Name der konkreten Implementierung der Klasse die an Orchid Core Servers ASoftwareServer gebunden werden soll Der re
263. rengen Die folgende Tabelle enth lt daher ausgesuchte Header Felder und gibt deren Verwendungszweck an Header Feld Verwendungszweck Content Length Gibt die L nge in Bytes der Nachricht bzw bertragenen Daten im Message Body an Host Gibt den Server an von dem eine Ressource abgerufen werden soll Referer Wenn ein Host einen Client auf eine Ressource auf einem anderen Server weiterleitet wird der weiterleitende Host in diesem Header Feld benannt User Agent Ein Client bermittelt einem Server ber dieses Header Feld seine eigene Identifikation aus der der Server Schl sse ziehen kann z B bei der Auslieferung von Websites Tabelle 3 Ausgew hlte Header Felder Es ist m glich Header Felder zu bertragen die nicht Teil des Standards sind In diesem Fall m ssen sich Client und Server jedoch auf ein gemeinsames Protokoll einigen das auf HTTP aufbaut da ansonsten Header die einem Server unbekannt sind von diesem ignoriert werden 2 2 4 HTTP Status Codes Der HTTP Standard unterscheidet f nf Kategorien von Status Codes auch Response Codes genannt die n der folgenden Tabelle dargestellt sind Jeder Status Code wird durch eine dreistellige Zahl repr sentiert 17 http www useragentstring com Fachliches Umfeld Kategorie Bedeutung Informational Wird f r provisorische Antworten verwendet z B wenn die eigentliche Antwort noch nicht bereit ist Successful Wenn eine Client Anfrage erfolgreich
264. roller auf dem Markt deren Einsatz jeweils eigene Vor und Nachteile mit sich bringt Im Folgenden wird erl utert warum die Wahl f r diese Arbeit auf die Verwendung der Arduino Microcontroller Plattform fiel Hard und Software der Plattform s nd quelloffen Das bedeutet dass neben dem Quellcode der Entwicklungsumgebung und des Compilers auch die f r die Herstellung von Arduino Microcontroller Boards notwendigen Schaltpl ne frei verf gbar sind Durch diese Offenheit sind verschiedene Nachbauten entstanden die die Einsatzm glichkeiten des Originals zum Teil erheblich erweitern z B das SS Arduino VO Boards sind und voll kompatibel zu regul ren Da die Hardware quelloffen ist m ssen Arduino I O Boards nicht zwingend vom Hersteller bezogen werden da auch die eigene Herstellung mit im Elektronik Fachhandel g nstig zu beziehenden Komponenten m glich ist Dies ist insbesondere dann von Vorteil wenn eine Schaltung die ber einen Arduino Microcontroller gesteuert wird fest verbaut werden soll da in diesem Fall alle zum Betrieb notwendigen Komponenten direkt in die entsprechende Schaltung integriert werden k nnen Die niedrige Einstiegsh rde der Arduino Plattform die u a auf der vereinfachten Programmierung beruht der geringe Kostenfaktor f r die ben tigte Hardware und die Verf gbarkeit der Entwicklungsumgebung f r Windows Linux und MacOS macht die Arduino Microcontroller Plattform sehr beliebt
265. rtet Zum Start des MySQL Servers s nd Administratorrechte notwendig weshalb das Script zur Passworteingabe auffordert 10 7 Einbindung eines ORCHID Clients Ist der ORCHID Server einsatzbereit und ist ihm die GUID des neuen Clients bekannt kann dieser eingebunden d h mittels der Client Bibliothek mit dem Server verbunden werden Zun chst muss dazu eine Schaltung aufgebaut werden die Komponenten Sensoren und oder Aktoren enth lt die in Verbindung mit dem ORCHID Toolkit verwendet werden sollen F r das im Folgenden erarbeitete Beispiel wird angenommen dass diese Schaltung der in Abbildung 59 gezeigten entspricht ndug 3ojeuy AS m CD 5 Arduino Ethernet Shield1 Digital Input Output ki ei LED eg Green 565nm R3 1500 5 Abbildung 59 Schaltplan der Beispielschaltung Die obige Abbildung zeigt einen Photowiderstand Lichtsensor R7 der an Analog InputO des Arduino V O Boards angeschlossen ist Eine gr ne LED ist mit Digital Input Output 8 des Boards verbunden Die Werte der Widerst nde R2 und je nach verwendetem Bauteil Der Lichtsensor wird genutzt um den Status einer Lampe zu beobachten Ist die Lampe eingeschaltet f llt also viel Licht auf den Sensor verringert sich dessen Widerstand die gemessenen Sensorwerte tendieren gegen 0 Ist die Lampe hingegen ausgeschaltet und f llt wenig Licht auf den Sensor erh ht sich der Widerstand und die
266. rufen In ihr wird zun chst die ID des Clients ausgelesen der den Systementwurf Heartbeat bermittelt hat Ist ID ung ltig oder wurde keine ID angegeben wird eine Fehlermeldung an den Client gesendet HTTP Code 400 Bad Request und die Verarbeitung der Anfrage abgebrochen Liegen alle notwendigen Daten vor und sind diese verifiziert wird die Methode TouchArduino AArduino string aus der Klasse MySglAdapter aufgerufen Diese Methode aktualisiert den Datensatz eines Arduinos in der Datenbank mit einem aktuellen Zeitstempel und der bergebenen IP Adresse Ist die Aktualisierung erfolgreich wird eine Best tigungsmeldung an den Client gesendet Code 200 ansonsten eine Fehlermeldung HTTP Code 400 Bad Request oder HTTP Code 500 Internal Server Error Abbildung 28 zeigt den geschilderten Programmablauf in einem UML Aktivit tsdiagramm Anfrage annehmen gt Verbindungspartner speichern Fehler S Erfolg Fehler Request parsen u zl EN E Erfolg G ltigkeit pr fen Je Requesttyp bestimmen Erfolg Fehler ung ltig Fehlermeldung senden Arduino aktualisieren Erfolgsmeldung senden Abbildung 28 Bearbeitung von Client TRACE Requests 5 9 2 5 Drittsoftware GET Requests GET Requests werden von einer Software eingesetzt um auf dem Server vorhandene Sensordaten abzurufen Diese Art von Anfragen wird von der Methode
267. rung OtherConcreteType an die Schnittstelle InterfaceClass 9 http www ninject org ORCHID Wird ein Ninject Kernel mit dem in Listing 27 gezeigten Ninject Modul CustomModule konfiguriert sind ihm Bindungen f r AbstractClass und InterfaceClass bekannt var modules new INinjectModule new CustomModule StandardKernel kernel new StandardKernel modules Listing 28 Erzeugung eines Ninject Kernels Listing 28 zeigt die Erzeugung eines Ninject Kernels StandardKernel mit dem in Listing 27 dargestellten Modul CustomModule Diesem Kernel sind die Bindungen f r AbstractClass und InterfaceClass bekannt eine Erzeugung von Objekten ist deshalb nun m glich public void TestNinject StandardKernel kernel AbstractClass instancel kernel Get lt AbstractClass gt InterfaceClass instance2 kernel Get lt InterfaceClass gt Listing 29 Objekterzeugung mit Ninject Durch die Listing 27 definierten Bindungen werden im obigen Listing Instanzen der konkreten Implementierungen von AbstractClass und InterfaceClass also diesem Fall ConcreteClass und OtherConcreteClass erzeugt 5 5 2 2 Vorteile Besonders hervorzuheben ist an dieser Stelle die Einfachheit mit der Ninject konfiguriert und verwendet werden kann Andere Dependency Injection Frameworks erfordern zu diesem Zweck einen weitaus gr eren Konfigurationsaufwand und sind z T auch in der Anwendung wesentlich komplexer Ebenso wich
268. s auch Werte anderer Datentypen als Integer wie im obigen Beispiel hochgeladen werden k nnen Wie auch im vorherigen Beispiel wird nach dem Hochladen der Sensordaten zehn Sekunden gewartet bevor loop Methode erneut ausgef hrt wird Als Ergebnis wird der aktuelle Sensorwert alle zehn Sekunden auf den Server geladen die entsprechende Gr e z B Luftfeuchtigkeit oder Raumtemperatur kann in regelm igen Abst nden berwacht werden 8 4 4 Abrufen von Instruktionen In diesem Beispiel wird davon ausgegangen dass ein Entwickler ber eine Software ein Ger t steuern m chte das mit dem Arduino verbunden ist der den in diesem Beispiel gezeigten Sketch ausf hrt Um diese Aufgabe zu bew ltigen muss der Entwickler eine entsprechende Instruktion auf dem ORCHID Server hinterlegen mit dem sich der Client verbindet Der Client ruft diese Instruktion ab und der Entwickler kann im Code des Sketchs darauf reagieren ORCHID Zus tzlich zu dem 8 4 1 gezeigten Initialisierungscode ist f r dieses Beispiel zus tzlich die Definition einer GUID f r den Aktor f r den die Instruktion bestimmt ist notwendig Der Initialisierungs Code ver ndert sich also entsprechend Listing 64 include lt Orchid2 h gt include lt gt include lt Strings h gt byte 0x12 23 934 0445 56 0x67 ks byte gateway 192 168 1 1 subnet A 252 253 255 233 45 byte 192 168 1 1
269. s das ORCHID Toolkit genauer die Client Bibliothek des ORCHID Toolkits vgl 4 1 einsetzt Eine Drittsoftware ist eine beliebige Software die nicht Bestandteil des ORCHID Toolkits ist es aber D einsetzt um Hardware einzubinden synonym wird anstelle von Drittsoftware auch der Begriff Software verwendet wenn der Kontext dies zul sst Innerhalb eines ORCHID Servers existieren Instanzen von Server Klassen die Anfragen von ORCHID Clients bzw von Drittsoftware entgegennehmen Zum besseren Verst ndnis werden diese Instanzen als Hardware Server Server Instanz die mit ORCHID Clients kommuniziert bzw Software Server bezeichnet Server Instanz die mit Drittsoftware kommuniziert Eine Server Instanz also ein Hardware oder ein Software Server nimmt lediglich HTTP Anfragen entgegen die eigentliche Verarbeitung der Anfragen geschieht in einer entsprechenden Instanz eines Daemons also eines Hardware Daemons bzw eines Software Daemons Ein Aktor ist im Gegensatz zu einem Sensor ein Bauteil das eine Aktion ausf hren kann z B eine LED Light Emitting Diode deutsch etwa Licht aussendende Diode oder ein Relais Ein Apronym ist eine Sonderform des Akronyms bei dem das Akronym ein bereits existierendes Wort einer nat rlichen Sprache bildet vgl 1 t Die Bezeichnung Daemon wurde aus dem Umfeld von UNIX entliehen dort werden Hintergrundprozesse als Daemon bezeichnet ORCHID
270. schl ssel host_name VARCHAR 100 Name des Hosts frei w hlbar host_ip VARCHAR 36 dem ORCHID Server bekannte IP Adresse des Hosts Tabelle 82 Datenbanktabelle known_hosts messages Beschreibung Speichert Nachrichten die zwischen zwei Clients versendet werden Jede Zeile dieser Tabelle steht f r eine Nachricht zwischen zwei Clients Datenfelder id Ey 11 Prim rschl ssel sender_id INT 11 Fremdschl ssel arduinos id Der Client der die Nachricht gesendet hat recipient_id 11 Fremdschl ssel arduinos id Der Client f r den die Nachricht bestimmt ist posted EE Der Zeitpunkt zu dem die Nachricht gespeichert wurde received TINYINT 1 Gibt an ob die Nachricht empfangen wurde 0 bedeutet dass sie noch nicht empfangen wurde 1 bedeutet dass sie bereits von einem Client abgerufen wurde priority EE Eine Zahl zwischen 0 und 9 die die Priorit t der Nachricht bestimmt 0 ist dabei die h chste Priorit t 9 die niedrigste Anmerkungen Die Tabelle messages wird noch nicht verwendet Nachrichten zwischen Clients sind im Rahmen dieser Arbeit als optionales Kriterium zu verstehen Tabelle 83 Datenbanktabelle messages sensors Beschreibung Speichert Grundinformationen ber Sensoren die dem ORCHID Server bekannt sind Jede Zeile in dieser Tabelle steht f r einen an einen Client angeschlossenen Sensor Datenfelder id Prim rschl ssel arduin
271. schlichen Hand Abbildung 6 digitalSTROM Chip Der gezeigte Chip kann wahlweise direkt vom Hersteller w hrend des Produktionsprozesses in ein elektrisches Ger t eingebaut oder ber spezielle Klemmen ein Kabel integriert werden ber das ein Ger t Strom bezieht Spezielle Bauteile erm glichen es zus tzlich ein digitalSTROM Netz an das Internet anzubinden und damit Verbrauchswerte zu ermitteln oder Ger te zu schalten dar ber hinaus kann in Kooperation mit Stromproduzenten ermittelt werden zu welchem Zeitpunkt der Strom g nstig st und der Verbrauch entsprechend geregelt werden Damit deckt die Technologie die von digitalSTROM org vertrieben wird zun chst einen Gro teil der Anforderungen ab die auch das ORCHID Toolkit abdeckt Der Schwerpunkt in der Ausrichtung dieses Konkurrenzprodukts liegt jedoch eher in der Heimautomatisierung und der Einsparung von Energie als darin Hardware mit Software zu verbinden Sensoren k nnen zwar genutzt werden wenn 20 Http www digitalstrom org L sungsans tze s e Teil eines elektrischen Ger ts sind das ber einen digitalSTROM Chip verf gt k nnen aber nicht wie gefordert direkt mit einem Server verbunden werden Somit st beispielsweise die einleitend beschriebene Anbindung einer elektronischen Dartscheibe an einen Server im Netzwerk oder Internet mit dieser Technologie nicht m glich Die Technologie ist propriet r und wird nur von wenigen H ndlern n Deuts
272. sen der Regel f hrt nicht zu Kompatibilit tsproblemen Identifiers should not contain type W rde die Regel eingehalten m ssten zahlreiche names Methoden deren Namen die Methode selbsterkl rend machen n einer Art umbenannt werden die einen Entwickler eher verwirren w rde Das Auslassen dieser Regel f hrt nicht zu Kompatibilit tsproblemen Do not call overridable methods in Die Klassen der Server Komponente bestehen zum constructors gr ten Teil aus berschreibbaren oder virtuellen Methoden Die Einhaltung dieser Regel w rde zu zahlreichen Code Dopplungen f hren die die Wartbarkeit des Codes stark einschr nken w rden Tabelle 66 Nicht verwendete FxCop Regeln 5 5 5 Microsoft StyleCop Das von Microsoft als Open Source Projekt ver ffentlichte Tool StyleCop dient der statischen Codeanalyse von Code f r das NET Framework mit dem auch Code f r die Plattform Mono analysiert werden kann hnlich wie das im vorherigen Abschnitt beschriebene FxCop pr ft auch StyleCop die Einhaltung zahlreicher Regeln StyleCop umfasst 139 Regeln aus den Bereichen Documentation Layout 7 http msdn microsoft com en us library bb429476 v vs 80 aspx t http msdn microsoft com de de library czefa0ke v vs 71 aspx gt gt http stylecop codeplex com ORCHID Maintainability Naming Ordering Readability und Spacing Schon aus den Namen der Kategorien geht deutlich hervor dass Einhaltung der von StyleCop berpr f
273. sen zur Kapselung eingehender Anfragen Requests 5 1 1 8 Orchid Core Servers Der Namespace Orchid Core Servers enth lt die abstrakten Basisklassen und konkreten Implementierungen f r die zwei Arten von Server Instanzen die innerhalb eines ORCHID Servers existieren Zus tzlich sind auch abstrakte und konkrete Fabrikklassen f r Instanzen dieser Server in diesem Namespace enthalten 5 1 1 9 Orchid Core Typeloading Dieser Namespace enth lt alle Klassen die f r das dynamische Typeloading vgl 6 3 2 notwendig sind 5 1 2 Projektstruktur Client Bibliothek Die Client Bibliothek des ORCHID Toolkits besteht aus drei Teilen Kern ist die eigentliche Bibliothek namens Orchid die wiederum die beiden anderen Teile OrchidInstruction und Strings verwendet wie in der folgenden Abbildung 12 dargestellt ist OrchidInstruction Abbildung 12 Projektstruktur der Client Bibliothek Die einzelnen Bestandteile der Client Bibliothek werden im Folgenden erl utert 5 1 2 1 Orchid Hierbei handelt es sich um die eigentliche Bibliothek die es einem Client Arduino erm glicht mit einem ORCHID Server zu kommunizieren Sie stellt alle dazu notwendigen Funktionen bereit und kann in eigenen Sketches verwendet werden 5 1 2 2 OrchidInstruction Um auch der Client Bibliothek einen m glichst objektorientierten Ansatz zu verwenden wurden Instruktionen die ein Server an einen Client senden kann in eine eigene Klasse gekapselt OrchidInstructi
274. sgetauschten Daten mitlesen darunter auch den Developer Key Die folgende Abbildung zeigt ein Bildschirmfoto der Netzwerk Analysesoftware Wireshark eth0 Wireshark File Edit View Go Capture Analyze Statistics Telephony Tools Help Ei o ei ei Ek NR Ge Filter tcp port 29100 Expression Clear No Time Source Destination Protoco Info 8 861 3 732113 192 168 1 145 192 168 1 141 dmdocbroker gt 291 862 3 732809 192 168 1 141 192 168 1 145 29100 gt dmdocbrok 863 3 733135 864 3 733167 192 168 1 141 192 168 1 145 29100 gt dmdocbrok DEE I eck Kn ann 760 ren AmdAdnchenkne 0000 00 1d 92 39 66 35 00 35 92 1d 66 35 08 00 45 00 9 5 5 5 0010 00 70 47 1 40 00 80 06 2e fd cO a8 01 91 cO ap 0020 01 8d 05 41 71 5a Of 10 60 74 35 31 a7 50 18 8 A 0030 08 00 3f 00 00 61 32 64 61 32 34 66 38 62 30 2 da24f8b0 0040 36 34 61 66 38 66 64 62 61 37 65 33 31 64 61 34 4 8 7 1 4 0050 65 32 35 31 38 66 34 62 35 37 38 35 65 33 30 37 _ e2518f4b 5785 307 0060 39 35 35 37 32 33 61 64 66 35 64 61 39 66 61 36 955723ad f5da9fa6 0070 30 34 38 33 38 66 31 38 37 63 61 33 32 34 04838118 7 324 File tmp wiresharkXXXXAcTIX1 Packets 1118 D Profile Default Abbildung 35 Bildschirmfoto Wireshark Klar zu erkennen ist der in der Abbildung gelb h
275. sich im Verzeichnis Settings im Ordner Orchid Server bin auf der DVD Diese Date st die einzige Konfigurationsdatei keine andere Date wird verwendet D Wie der Name der Datei bereits zeigt handelt es sich bei Orchid ini um eine sog INI Datei Eine solche Date enth lt eine Sammlung von Schl ssel Wert Paaren Key Value Pairs d e n Kategorien unterteilt sind eine Kategorie wird definiert indem ihr Name eckigen Klammern angegeben wird Eine INL Date bietet sich f r die Konfiguration einer Server Software an da sie im Gegensatz zu z B XML Dateien leicht von Menschen und Computern gelesen und editiert werden kann Server Betriebssysteme verzichten meist auf eine grafische Benutzeroberfl che ihre Administration geschieht fast ausschlie lich auf der Kommandozeile Dies gilt auch f r das Bearbeiten von Konfigurationsdateien Eine INI Datei l sst sich auf der Kommandozeile weitaus leichter bearbeiten als dies bei einer XML Datei der Fall st Tabelle 89 listet die Kategorien in der Datei Orchid ini auf und zeigt welche Art von Einstellungen sich in der jeweiligen Kategorie befindet Kategorie Art und Verwendung der enthaltenen Einstellungen Dependencies Einstellungen f r das dynamische Typeloading Server Einstellungen f r den Serverteil der mit Clients kommuniziert Restrictions Sicherheitseinstellungen Logging Logging Einstellungen Database Datenbankeinstellungen Locale Umgebunsseinstellungen f
276. software SEARCH Request ber einen SEARCH Request an den Server kann eine Software Informationen ber einen Client und die an diesen Client angeschlossenen Komponenten abrufen SEARCH Requests werden von der Methode HandleSEARCHRequest der Klasse OrchidSoftwareDaemon behandelt Wie bei allen anderen Request Arten auch wird zun chst die G ltigkeit der Anfrage berpr ft und falls sie nicht g ltig ist oder ein Fehler bei der Verarbeitung auftritt eine Fehlermeldung an den Verbindungspartner gesendet HTTP Code 400 Bad Request Ein g ltiger SEARCH Request enth lt mindestens die GUID des Clients ber den Informationen abgerufen werden sollen Diese ID w rd nach der G ltigkeitspr fung aus der Anfrage ermittelt und verifiziert Handelt es sich um eine g ltige ID wird Methode GetArduinoInfo der Klasse MySoLAdapter aufgerufen um die geforderten Informationen aus der Datenbank auszulesen Diese Methode versucht zun chst den angegebenen Client in der Datenbank zu finden Schl gt dieser Versuch fehl wird die Verarbeitung der Anfrage mit einer Fehlermeldung an den Verbindungspartner abgebrochen HTTP Code 404 Not Found Befindet sich der gesuchte Arduino in der Datenbank werden zun chst dessen Daten gelesen und zwischengespeichert Danach wird versucht auch die an den Arduino angeschlossenen Sensoren und Aktoren n der Datenbank zu finden und deren GUIDs auszulesen Werden keine Daten gefunden f hrt di
277. sorwerts Server Antwort Das Feld sensor enth lt die GUID des betroffenen Sensors type gibt an welche Art von Daten ermittelt wurden value repr sentiert den eigentlichen Wert dieser Daten und stamp steht f r den Zeitpunkt zu dem die Daten gespeichert wurden Fragt ein Verbindungspartner mehr als einen Sensorwert ab ver ndert sich die Antwort entsprechend zur Verbesserung der Lesbarkeit wurden Zeilenumbr che hinzugef gt sensor 531la3bbe 2bec 4A4bff a4Ac3 c60645943f6d amp type INT INT INT amp value 123 862 863 gstamp 3 28 21 PM 8 21 2011 3 12 08 PM 8 21 2011 3 12 06 8 21 2011 Listing 38 bermittlung mehrerer Sensorwerte Server Antwort Diese Antwort enth lt die gleichen Felder wie die vorherige die bermittelten Werte f r diese Felder bestehen nun jedoch aus einer Liste von Werten Eine Software die einen GET Request an einen ORCHID Server stellt muss diese Antwort entsprechend verarbeiten k nnen Die folgende Abbildung 29 zeigt den geschilderten Programmablauf in einem UML Aktivit tsdiagramm Fehler Anfrage annehmen Verbindungspartner speichern ern Request parsen O Erfolg G ltigkeit pr fen u 5 g ltig Fehler Arduino ID bestimmen Erfolg Sensor ID bestimmen 1 e Za User Agent pr fen Requesttyp bestimmen 3 Fehlermeldung senden nicht gefunden gefunden Letzten Datensatz auslesen A Datens tze auslesen
278. t der Datenbanktabelle sensor data Tabelle 54 DS60 Sensordaten Inhalt Inhalt Anforderungsdefinition Instruktionen Numerische Datenbank ID Eindeutige ID GUID des Arduinos der die Instruktion ausf hren soll Eindeutige ID GUID des Aktors f r den die Instruktion bestimmt ist Numerischer Wert der durchzuf hrenden Aktion vgl 8 4 4 Wert f r die Aktion Zeitpunkt zu dem die Instruktion erzeugt wurde Bearbeitungsstand offen erledigt Numerischer Wert der den Typ des Werts der Aktion anzeigt Index des Arduino V O Pins an dem die Aktion auszuf hren ist Priorit tswert Eindeutige ID GUID des Absenders Eindeutige ID GUID des Empf ngers Nachrichtentext Zeitpunkt zu dem die Nachricht erzeugt wurde Bearbeitungsstand new empfangen Priorit tswert Anmerkungen Gespeichert 1 der Datenbanktabelle messages 4 5 2 Client Bibliothek Tabelle 56 0880 Nachrichten Die Client Bibliothek ist nicht der Lage Daten dauerhaft zu speichern dies ist auch nicht notwendig Alle hier genannten Daten sind also fl chtig und existieren nur zur Laufzeit Inhalt Anmerkungen Instruktionen Eindeutige ID GUID des Aktors Numerischer Wert f r die durchzuf hrende Aktion Numerischer Wert f r den Datentyp des Werts Wert der Aktion LUC Pm an dem die Aktion durchgef hrt werden soll Numerische Werte s nd als Konstanten definiert und k nnen entsprechend leicht verwendet w
279. t kann eine frei w hlbare IP Adresse eingegeben werden da diese bei der ersten Verbindung des neuen Clients mit dessen aktueller IP Adresse berschrieben wird Endbenutzerhandbuch mandozeile 0 E a amenan har Aa Kam r nzuluvren nom Um einen neuen Client ber die Kommandozeile hinzuzuf gen kann das Shellscript home orchid scripts add client sh oder das Kommandozeilenwerkzeugt mysql verwendet werden Die folgende Abbildung zeigt die Verwendung des Scripts mit optionalen Parametern Wird es ohne Parameter aufgerufen werden alle Felder mit Standardwerten gef llt orchid orchidvm Beschreibung Starting XAMPP for Linux 1 7 XAMPP XAMPP Apache is already running y running XAMPP XAMPP ProFTPD is already running XAMPP for Linux started Client added GUID a435ffee da48 11e0 ad93 080027c251f7 Name Neuer Client Description Beschreibung Lat Lon 0 0 First seen 2011 09 08 20 30 34 2011 09 08 20 30 34 Model Unknown Arduino orchid orchidvm Abbildung 5 H nzufugen eines neuen IR CHID C IENIS LDNELISCEIDL 4 LUS Die gezeigte GUID 435 48 11 0 93 080027 251 7 wird im weiteren Verlauf dieses Handbuchs als ID verwendet und muss entsprechend angepasst werden ververs AJUE VUR VK 10 6 Konfiguration und Start des ORCHI eg Das Verzeichnis home orchid orchid server bin Settings enth lt die Konfigurationsdatei Orchid ini ber die de
280. t zur Verf gung die als Parameter den Namen des Konfigurationselements erwarten das gelesen werden soll 5 5 3 2 Vorteile Der Hauptvorteil den Nini einem Entwickler bietet ist meiner Meinung nach die Simplizit t mit der das Framework verwendet werden kann Anstatt ein eigenes Konfigurationssystem implementieren zu m ssen kann Entwickler innerhalb weniger Codezeilen eine Konfigurationsdatei einlesen und die dar n enthaltenen Elemente zur Konfiguration einer Software nutzen Durch die verschiedenen Methoden die eine Konfigurations Sektion anbietet um Daten aus einer Konfigurationsdatei zu lesen werden grobe Konfigurationsfehler vermieden da es zu einer Fehlermeldung kommt wenn ein auszulesender Wert nicht in den Typ umgewandelt werden kann der von der entsprechenden Methode erwartet wird im Beispiel Listing 32 w re dies z B der Fall wenn f r Entry2 ein Wert angegeben worden w re der nicht in einen Integer Wert umgewandelt werden kann 5 5 3 3 Nachteile Die Verwendung von Nini hat keinen negativen Einfluss auf die Entwicklung oder das Verhalten der Software f r deren Konfiguration es eingesetzt wird Im Gegensatz zu den einleitend erw hnten Konfigurationsm glichkeiten die Microsoft Visual Studio einem Entwickler bietet verf gt Nini aber nicht ber die M glichkeit vorhandene Einstellungs Elemente als typsichere Eigenschaften einer global verf gbaren zentralen Klasse bereitzustellen wodurch Typ
281. t Flie kommazahlen auf mindestens 2 Stellen nach dem Komma genau Bemerkung Werden Daten angeliefert die weniger genau als beschrieben sind werden diese nicht ver ndert Tabelle 64 LC20 Datengenauigkeit ORCHID ILC30 Robustheit Beschreibung Die Client Bibliothek st rzt im regul ren Betrieb nicht ab und verursacht auch keine Abst rze des sie verwendenden Sketches siehe dazu auch 6 6 Metrik Bemerkung Die Unterbrechung der Stromversorgung der Netzwerkverbindung oder eines Schaltkreises werden nicht als regul rer Betrieb betrachtet Tabelle 65 LC30 Robustheit 47 Qualit tsanforderungen In diesem Abschnitt der Arbeit werden technische wirtschaftliche und ergonomische Anforderungen an die Softwarequalit t des Toolkits beschrieben Falls nicht anders angegeben beziehen sich die hier geschilderten Anforderungen sowohl auf die Server Komponente als auch auf die Cl ent Bibliothek Ist in diesem Abschnitt von Software die Rede bezieht sich diese Aussage auf die im Rahmen dieser Arbeit entwickelte Software nicht auf Drittsoftware die das ORCHID Toolkit verwendet 4 7 1 Technische Qualit tsanforderungen Durch den konsequenten Einsatz von objektorientierten Programmiertechniken und Entwurfsmustern haupts chlich in der Server Komponente entsteht eine hoch funktionale leicht wart und anpassbare Software die dar ber hinaus auch von Dritten leicht erfasst und eingesetzt werden kann Neue Funktionen k nne
282. t auffindbar sein Solution De vi Solution OrchidReferencesServer 1 entry F oOrchidReferenceServer 2 Edit References E Delete Display Options Abbildung 39 Referenzierung der Server Komponente Die obige Abbildung zeigt wie einem Projekt der Entwicklungsumgebung MonoDevelop eine Referenz hinzugef gt werden kann In anderen Entwicklungsumgebungen ist der Ablauf analog 121 ORCHID Im folgenden Dialog muss zu der Assemblydatei Orchid Core d1i1 navigiert und diese als neue Referenz f r das Projekt ausgew hlt werden wie in Abbildung 40 dargestellt ist Packages Projects Net Assembly A lt Projects OrchidReferenceServer OrchidReferenceServer Add Places Name v Size Modified Q Search bin Recently Used EL zu steps D Desktop File System Orchid gt Storage Add Remove Assemblies v Selected references Reference Type Location System Version 2 0 0 Package System Version 2 0 0 0 Culture neutral Public m Oorchid Core dl Assembly home steps Masterarbeit dvd Orchid Server lt Cancel OK Abbildung 40 Referenzierungsdialog von MonoDevelop Nachdem der Dialog best tigt wurde ist Orchid Core d1i1 als Referenz hinzugef gt worden und kann entsprechend verwendet werden Solution vi Solution OrchidReferenceserver 1 entry F OrchidReferenceServer References System
283. t dem Server verbunden hat name VARCHAR 200 Der Name des Clients frei w hlbar description TEXT Die Beschreibung des Clients frei w hlbar lat VARCHAR 20 Der Breitengrad an dem sich der Client befindet lon 20 Der L ngengrad dem sich der Client befindet first_seen DATETIME Der Zeitpunkt zu dem der Client zuerst gesehen wurde last_seen DATETIME Der Zeitpunkt zu dem der Client zuletzt gesehen wurde model VARCHAR 200 Das Modell des Arduinos z B Duemilanove Tabelle 79 Datenbanktabelle arduinos Systementwurf credentials Beschreibung Speichert die Berechtigungen die ein Client auf dem ORCHID Server hat Jede Zeile in dieser Tabelle steht f r die Berechtigungen eines einzelnen Clients Datenfelder id Ne Prim rschl ssel arduino_id INT 11 Fremdschl ssel arduinos id Der Client dessen Berechtigungen dieser Zeile abgebildet s nd send_messages CTNS ANE Bestimmt ob der Client Nachrichten senden darf receive_messages TINYINT 1 Bestimmt ob der Client Nachrichten empfangen darf upload_sensor_data TINYINT 1 Bestimmt ob der Client Sensordaten hochladen darf request_instructions TINYINT 1 Bestimmt ob der Client Instruktionen abfragen darf can_instruct_others TINYINT 1 Bestimmt ob der Client andere Clients instruieren darf Tabelle 80 Datenbanktabelle credentials Tabelle instructions Beschreibung Speichert Instruktionen f
284. t eingesetzt wurden zeichnen sich durch hre Einfachheit aus sind aber gleichzeitig robust und flexibel so dass sie auch n einer professionellen Umgebung problemlos eingesetzt werden k nnen Durch den Verzicht von Java als Programmiersprache und Entwicklungsplattform sind Entwickler die das entstandene Toolkit erweitern oder ver ndern wollen nicht an eine einzige Programmiersprache gebunden sondern k nnen dies in allen Sprachen tun die von Mono unterst tzt werden darunter SC auch Java Diese Eigenschaft der Mono Plattform best tigt deren Auswahl als Entwicklungsplattform zus tzlich Die Wahl der Technologien mit denen die Client Komponente entwickelt werden sollte konnte nicht frei getroffen werden da eine Bibliothek f r einen Arduino Microcontroller unter Verwendung von C C entwickelt werden muss Daraus ergaben sich einige Probleme w hrend der Entwicklung m Verlauf der Arbeit ebenfalls erl utert wurden Ma geblich f r die Vielfalt der Einsatzm glichkeiten die die entstandene Werkzeugsammlung bietet ist Entscheidung die Kommunikation zwischen Verbindungspartnern ber HTTP und damit ber das Netzwerk oder das Internet zu erm glichen Jede moderne etablierte Programmiersprache verf gt ber entsprechende Schnittstellen und kann in Verbindung mit dem ORCHID Toolkit eingesetzt werden weshalb diese Wahl als richtig anzusehen ist P http www mono project com Languages 80 Attp www mono project
285. tabe ist Die folgende Tabelle 87 zeigt die Namenskonventionen die im Quellcode verwendet werden Element Schreibweise Beispiel Abstrakte Klasse PascalCase Assembly PascalCase Orchid Core Enumeration PascalCase HtlpkequestIype Klasse PascalCase MySqlAdapter Klasseneigenschaft PascalCase POLE Methode PascalCase Methodenvariable CamelCase Private Variable _CamelCase _ index Private Variable statisch _CamelCase Schnittstelle PascalCase IGuid Tabelle 87 Namenskonventionen 6 2 Entwicklungsumgebung Als Entwicklungssystem kommt ein Einzelplatzrechner mit den folgenden Eigenschaften zum Einsatz e Prozessor Intel Core 2 Quad 06700 2 66 GHz e Arbeitsspeicher 8 GB e Betriebssystem Linux Ubuntu 10 10 Maverick Meerkat 64 Bit Da das ORCHID Toolkit auch unter Microsoft Windows lauff hig sein soll wird zeitgleich auf einer virtuellen Maschine realisiert mit Oracle VM VirtualBox 4 1 2 mit den folgenden Eigenschaften entwickelt e Prozessor Intel Core 2 Quad 06700 2 66 GHz virtuell e Arbeitsspeicher 3 GB virtuell e Betriebssystem Microsoft Windows 7 Professional 32 Bit Unter Linux wird als Entwicklungsumgebung MonoDevelop 2 4 Mono 2 6 7 unter Windows Microsoft Visual Studio 2010 Ultimate NET Framework 3 5 eingesetzt F r die Entwicklung der Client Bibliothek wird die Arduino IDE Version 0022 eingesetzt die f r Windows und Linux verf gbar ist
286. te Client Bibliothek und Drittsoftware geschieht ber HTTP Nachrichten die zwischen den einzelnen Kommunikationsteilnehmern versendet werden Da mehrere verschiedene Technologien zum Einsatz kommen um Anfragen zu versenden zu verarbeiten und zu beantworten ist es besonders wichtig dass sich alle beteiligten Stellen auf ein gemeinsames Protokoll einigen von dessen Einhaltung jeder Kommunikationsteilnehmer ausgehen kann Das vom ORCHID Toolkit verwendete Protokoll basiert auf HTTP in der Version 1 1 und muss strikt eingehalten werden damit das Toolkit w e n dieser Arbeit beschrieben funktionieren kann und Fehler vermieden werden k nnen 5 8 1 Allgemeines HTTP nutzt wie 2 2 bereits erw hnt zur Daten bertragung sowohl Header Felder als auch den Message Body also eine Zeichenkette die auf die Header Felder folgt Das vom ORCHID Toolkit verwendete Protokoll setzt f r Anfragen an einen ORCHID Server verst rkt auf den Einsatz der Header Felder in Antworten des Servers wird aber zus tzlich der Message Body verwendet da hier auch gr ere Datenmengen untergebracht werden k nnen 5 Mindestens CH Mono und C optional weitere ORCHID Header Felder werden untereinander durch die Zeichen r n Carriage Return gefolgt von Newline voneinander getrennt Die Trennung von Message Body und Header Feldern erfolgt ebenfalls durch kein Ein ORCHID Server ist durch das Protokoll dazu verpflichtet auf eine Anfrage eine A
287. te verh lt sich dem definierten Protokoll entsprechend Fehlerhafte oder unvollst ndige Anfragen f hren nicht zu unvorhergesehenen Konsequenzen oder falsch positiven Ergebnissen Programmabst rze treten nicht auf 6 4 1 2 Parser Tests Die zentral an der Bearbeitung eingehender Anfragen beteiligte Parser Klasse muss eingehende Datenstr me fehlerfrei auslesen und Request Objekte berf hren Um dies zu testen werden laut Protokoll vgl 5 8 g ltige und ung ltige sowie zuf llig generierte Anfragen an die Klasse bermittelt und die von dieser erzeugten Request Objekte auf deren G ltigkeit hin berpr ft Die Parser Klasse arbeitet fehlerfrei Auch unvollst ndige oder fehlerhafte Anfragen werden erwartungsgem n Request Objekte berf hrt 6 4 1 3 Konfigurationstests Die Funktionsf higkeit der Server Komponente h ngt direkt mit der Konfiguration zusammen Diese muss entsprechend fehlerfrei arbeiten F r diesen Test werden alle n der Standard Konfigurationsdatei vorhandenen Werte ausgelesen und berpr ft Das Konfigurationssystem arbeitet fehlerfrei fehlende Einstellungen werden durch voreingestellte Werte ersetzt 6 4 1 4 Typeloading Tests Die Server Komponente erzeugt Instanzen ber das integrierte dynamische Typeloading System Dieses muss in der Lage sein Types aus Assemblies zu laden und fehlerhafte oder fehlende Angaben ggf durch Standardwerte zu ersetzen Um das Typeloading zu testen werden Instanzen al
288. tehen f r Programmierung von Microcontrollern nicht zur Verf gung Speicher muss vom Programmierer selbst verwaltet werden dies betrifft insbesondere die Zuweisung und die Freigabe von Speicherbereichen im Hauptspeicher Die erste Version der Client Bibliothek funktionierte zun chst fehlerfrei war aber nicht der Lage die Antwort eines Servers zu lesen und zu interpretieren diese Funktion wurde nachtr glich l Attp tiswww case edu php chet bash bashtop html 115 ORCHID implementiert Erste Tests zeigten dass die Kommunikation zwischen Client und Server reibungslos abl ef Nach der Implementierung der Funktion Instruktionen von einem ORCHID Server abzurufen verhielt sich der ausf hrende Arduino jedoch nicht mehr wie vorgesehen Die Hauptmethode des Sketchs der zum Testen geschrieben wurde konnte nicht mehr 615 zum Ende ausgef hrt und dann wiederholt werden Stattdessen brach die 2 Methode immer wieder ab und die setup Methode die per Definition nur einmal zu Beginn der Ausf hrung aufgerufen wird und auch nicht manuell aufgerufen werden kann wurde ausgef hrt Statt also lediglich Methode zu wiederholen f hrte der Arduino beide Methoden 1 jedem Durchlauf aus Eine ausgiebige Fehleranalyse identifizierte das Auslesen und Verwerten der Server Antwort als Problem Der Verdacht lag nah dass die Allokation von Speicherbereichen f r Datenpuffer das vom Standard abweichende Verhalte
289. ten Regeln zu sauberem Code f hrt der von anderen leicht verstanden und eingesetzt werden kann Insbesondere die Kategorie Documentation sei an dieser Stelle erw hnt da die ihr enthaltenen Regeln dazu f hren dass der entsprechende Code l ckenlos dokumentiert ist Diese Kategorie enth lt 45 Regeln zur Dokumentation von Code mittels XML Kommentaren Angefangen bei groben Verst en z B wenn eine Methode g nzlich undokumentiert ist Regel 5 600 Elements Must Be 9 bis hin zu feingranularen Regelbr chen Regel 541629 Documentation Text Must End With A Period wird die umfangreiche Dokumentation von Code durch StyleCop forciert Werden alle Dokumentationsregeln ordnungsgem eingehalten kann ber entsprechende Werkzeuge eine umfangreiche Programm Dokumentation erzeugt werden die jeden Aspekt des Programms dokumentiert Wie auch FxCop erlaubt StyleCop einzelne Regeln auszublenden F r die Analyse wurden 137 der 139 Regeln angewendet und eingehalten Die zwei nicht verwendeten Regeln und der Grund f r ihre Auslassung werden in Tabelle 67 gezeigt Grund f r die Auslassung SA1309 Field names must not contain Die Kennzeichnung privater Klassenvariablen mit einem underscores einleitenden Unterstrich f hrt zu einer besseren optischen Trennung zwischen Klassenvariablen und lokalen Variablen z B in einer Methode Die Auslassung dieser Regel f hrt nicht zu Kompatibilit tsproblemen SA1200
290. tenbankstruktur und die notwendigen Mindestdaten die zum Betrieb eines ORCHID Servers notwendig sind vgl 5 10 Der Import der Datenbank die auf dem eigenen System installierte MySQL Instanz wird mit dem Kommandozeilenprogramm opt lampp bin mysql C xampp mysql bin mysql exe unter Windows durchgef hrt der Pfad zum Programm kann je nach den bei der Installation von XAMPP gemachten Angaben variieren Die folgenden Abbildungen zeigen den Prozess des Imports 7 http www apachefriends org http www apachefriends org de xampp html Handbuch Server Komponente 2000 2010 Oracle and or i registered trademark en names Abbildung 37 Erzeugung der MySQL Datenbank Die obige Abbildung 37 zeigt wie mittels des Programms mysql Datenbank namens orchid auf dem lokalen System erzeugt wird ber das gleiche Programm kann die Datei orchid sq1 von der DVD in die lokale MySQL Instanz importiert werden Abbildung 38 Import der Datenbankstruktur Nachdem dieser Befehl ausgef hrt wurde kann die lokale MySQL Instanz als Datenbank f r die Server Komponente verwendet werden 7 3 Referenzierung Um Server Komponente in einem Softwareprojekt nutzen zu k nnen muss die Assemblydate 11 durch das Projekt referenziert werden Wie bereits erl utert m ssen auch die brigen Assemblydateien aus dem bin Verzeichnis der Server Komponente f r das referenzierende Projek
291. thek Auch die Client Bibliothek kann plattform bergreifend unter Microsoft Windows Linux und MacOS verwendet werden Einzige Voraussetzung f r de Verwendung ist eine installierte Arduino IDE Version 0018 oder kompatibel ben tigt Java 4 3 2 Hardwareanforderungen Server Komponente und Client Bibliothek stellen unterschiedliche Anforderungen an die zur Ausf hrung ben tigte Hardware die m Folgenden erl utert werden Die hier geschilderten Anforderungen wurden unter der Pr misse ermittelt dass sowohl die Server Komponente als auch die Client Bibliothek fl ssig und stabil ausgef hrt werden k nnen 4 3 2 1 Anforderungen der Server Komponente Um die Server Komponente ausf hren zu k nnen muss ein entsprechendes System ber einen Zugang zum Netzwerk bzw zum Internet verf gen Ein schneller Mehrkernprozessor erh ht die Ausf hrungsgeschwindigkeit die Server Komponente kann aber auch auf Systemen mit Einzelkernprozessor ausgef hrt werden Nahezu jedes Computersystem auf dem ein zur Ausf hrung notwendiges Betriebssystem wie in 4 3 1 1 beschrieben lauff hig st kann auch die Server Komponente problemlos ausf hren Als Mindestanforderung f r Verwendung der Server Komponente gelten e Prozessor 1 GHz Pentium oder kompatibel e Arbeitsspeicher 1 Gigabyte e Festplattenspeicher 1 Gigabyte freier Speicherplatz Empfohlen wird eine Umgebung die mindestens die folgenden Leistungsmerkmale aufweist e Prozessor 1 8 GHz
292. tig wie die Einfachheit ist die Robustheit die Ninject durch den verwendeten Konfigurationsansatz mit sich bringt der gesamte Konfigurationsprozess kann von einem Debugger berwacht werden Konfigurationsfehler sind nahezu ausgeschlossen Trotz der Leichtgewichtigkeit des Frameworks bietet Ninject alle Vorteile eines Dependency Injection Frameworks wobei insbesondere die Entkopplung von Klassen innerhalb eines Softwareprojekts an dieser Stelle genannt werden soll 5 5 3 Nini Es war von Beginn der Entwicklung ein Entwurfskriterium dass die Server Komponente frei ber eine einzelne Datei konfigurierbar sein sollte Zu diesem Zweck musste ein Framework oder eine Bibliothek gefunden werden die einerseits flexibel genug f r die Anforderungen ist die Server Komponente an Konfigurierbarkeit stellt andererseits aber m glichst wenig Overhead 1 den Code der Komponente einbringt Eine eigene Implementierung erschien nicht sinnvoll da es bereits zahlreiche vorhandene Konfigurations Bibliotheken auf dem Markt gibt und eine weitere m glicherweise weitaus weniger robuste Implementierung dem Anti Pattern Reinventing the Wheel entsprochen h tte Da die Server Komponente plattform bergreifend eingesetzt werden k nnen soll konnte auch nicht auf die M glichkeiten zur ckgegriffen werden die Entwicklungsumgebungen wie Microsoft Visual 59 Das Rad neu erfinden ein Anti Pattern das eine eigene oft ineffiziente Impl
293. tion 1666 amp valuetype 1114s amp value LOW amp pin 3 Listing 34 bermittlung einer Instruktion Server Antwort Die Instruktion wird als Reihung von Schl ssel Wert Paaren jeweils durch amp getrennt bertragen ORCHID Auf Seite des Clients muss diese Art der bertragung bekannt sein damit die Instruktion verwertet werden kann Reihenfolge und Schreibweise sind der aktuellen Version der Client Bibliothek unbedingt einzuhalten vgl 6 6 2 Die durchzuf hrende Aktion und der Typ des in der Instruktion enthaltenen Werts Felder action und valuetype sind als Ganzzahlen kodiert Die Client Bibliothek kennt die in den folgenden Tabellen beschriebenen Aktionen und Datentypen Code Aktion 1666 Digital Write 2666 Digital Read 3666 Analog Write 4666 Analog Read 5666 Keine Aktion 6666 Andere unbekannte Aktion Tabelle 72 Codes f r auszuf hrende Aktionen Jeder Code steht f r eine gleichnamige Operation die ein Arduino Microcontroller auf einem analogen oder digitalen O Pin ausf hren kann digitales bzw analoges Lesen oder Schreiben oder dient als Platzhalter Code Datentyp K rzel 1111 Integer INT 1113 Boolean BOOL 1114 HIGH LOW HILO 1115 Unsigned Character UCHAR 1116 Unsigned Integer UINT 1117 Long LONG 1118 Unsigned Long ULONG 1119 Float FLOAT 1120 Double DOUBLE 1121 String STRING 1122 Byte BYTE 9999 Unbekannt Kein Typ Tabelle 73 Codes f r Datentypen
294. tionen werden auch in dieser Antwort als Schl ssel Wert Paare bermittelt die eine Drittsoftware entsprechend verarbeiten k nnen muss F r jeden Sensor und Aktor der an den Client angeschlossen ist wird die GUID bertragen mit dieser Information kann eine Drittsoftware weitere Informationen abrufen oder Instruktionen hochladen wenn dies gew nscht ist Alle weiteren Datenfelder entsprechen im Wesentlichen der Struktur der Datenbanktabelle in der Informationen ber Clients gespeichert werden vgl 5 10 Systementwurf 5 9 Abl ufe und Verhaltensweisen In diesem Abschnitt werden ausgew hlte Programmabl ufe und Verhaltensweisen der Server Komponente im Bezug auf die Behandlung und Beantwortung von HTTP Anfragen durch Clients und Drittsoftware beschrieben Es handelt sich dabei ausdr cklich nicht um eine vollst ndige Beschreibung aller Programmabl ufe innerhalb der Server Komponente 5 9 1 Multithreading Die Server Komponente des Toolkits ist darauf ausgelegt Requests von Clients m glichst schnell zu behandeln so dass weitere eingehende Anfragen nicht abgelehnt werden m ssen bzw der Server weiterhin erreichbar bleibt Dadurch allein kann jedoch nicht garantiert werden dass weitere Anfragen nicht dennoch erst nach einer Wartezeit bearbeitet oder sogar abgelehnt werden Um dieses Problem zu beseitigen nutzt die Server Komponente Threads F den in denen die einzelnen Anfragen von Clients abgearbeitet werden S
295. tpRequestType Put this HandlePUTRequest break case HttpRequestType Trace this HandleTRACERequest break case HttpRequestType Head this HandleHEADRequest break default this HandleUnknownRequestType break protected internal new void HandleHEADRequest New handling goes in here Listing 51 Ver nderung der Methode zur Anfragebehandlung Die Art der Behandlung neuer Request Arten ist vom Entwickler der neuen Klasse frei definierbar muss sich aber an die Regeln des in 5 8 festgelegten Protokolls halten damit es nicht zu Problemen mit anderen Bestandteilen des ORCHID Toolkits kommt Ein Beispiel f r eine nicht protokollkonforme Behandlung von HEAD Requests kann Listing 52 entnommen werden protected internal new void HandleHEADRequest using FileStream fs new FileStream out txt FileMode OpenOrCreate FileAccess Write using StreamWriter sw new StreamWriter fs sw WriteLine Head request received Listing 52 Ung ltige Methode zur Behandlung von HEAD Requests 155 ORCHID Die Verarbeitung des HEAD Requests ist deshalb ung ltig weil die in Listing 52 gezeigte Methode die Anfrage nicht wie im Protokoll festgelegt beantwortet Wird eine Beantwortung der Anfrage hinzugef gt ist die Verarbeitung gem Protokoll g ltig Listing 53 zeigt abschlie end die g ltige Methode protected internal new void HandleHEADRequest lon
296. tribution NonCommercial ShareAlike 3 0 Unported CC BY NC SA 3 0 Online http creativecommons org licenses by nc sa 3 0 21 Arduino 2009 Februar Arduino Ethernet Online http www arduino cc en Reference Ethernet 22 Jon Erickson Hacking Die Kunst des Exploits Heidelberg Deutschland dpunkt verlag GmbH 2009 23 Judith Bishop C 3 0 Design Patterns 1 Edition O Reilly Media Inc Ausgabe USA 2008 24 Erich Gamma Richard Helm Ralf Johnson and John Vlissides Entwurfsmuster 5 Korrigierter Nachdruck Addison Wesley Publishing Company Ausgabe Deutschland 2001 25 The Internet Society 1998 April RFC 2324 Hyper Text Coffee Pot Control Protocol HTCPCP 1 0 Online http tools ietf org html rfc2324 26 Klaus Schmeh Kryptografie 3 berarbeitete und erweiterte Auflage 2007 Heidelberg Deutschland dpunkt verlag GmbH 2007 27 Jonathan 2010 Arduino Shield List Online http www shieldlist org 28 Adafruit Industries Adafruit GPS logger shield kit v1 1 Online http www adafruit com products 98 29 Microsoft Corporation Design Guidelines for Class Library Developers Online http msdn microsoft com de de library czefa0ke v vs 71 aspx 30 Arduino 2010 September Arduino Getting Started Online http arduino cc en Guide HomePage 31 Microsoft Corporation Threading C Online http msdn microsoft com en US library ms173178 v VS
297. ts wartet diese bei Eingang entgegennimmt verarbeitet und eine Antwort sendet Ein Shield ist eine aufsteckbare Erweiterungsplatine f r einen Arduino Microcontroller Programme f r einen Arduino Microcontroller werden als Sketches bezeichnet Ein Software Daemon ist gt ORCHID Daemon der mit gt Drittsoftware kommuniziert Ein Software Server ist ein gt ORCHID Server der Anfragen von gt Drittsoftware entgegennimmt Structured Query Language eine weit verbreitete Abfragesprachen f r Datenbanksysteme Subnetzmaske TCP TEA Toolkit TWAIN URI URL User Agent UUID VM XAMPP XML Die Subnetzmaske gibt f r ein Netzwerk an welche IP Adressen f r dieses Netz verf gbar sind Transmission Control Protocol ein gt 793 definiertes Protokoll f r die paketbas erte Netzwerkkommunikation gilt als Bas s des Internets Tiny Encryption Algorithm ein sehr kompakter Verschl sselungs algor thmus der nicht mehr als sicher gilt Als Toolkit wird eine Werkzeugsammlung bezeichnet also eine Reihe von Programmen oder anderen Werkzeugen die zusammen eine bestimmte Aufgabe erf llen k nnen Technology Without Interesting Name ein Standard zum Datenaustausch zwischen bildgebenden Ger ten z B Scannern und Computern Uniform Resource Identifier eine Zeichenfolge die eine bestimmte Ressource eindeutig identifiziert Uniform Resource Locator
298. twa R ckruf Methoden der Programmierung grafischer Benutzeroberfl chen Eine Callback Methode auch Callback genannt wird einem Ereignis eines Steuerelements auf der Benutzeroberfl che zugewiesen z B dem Anklicken eines bestimmten Buttons also bei einer zentralen Stelle registriert Wann mmer das Ereignis des Steuerelements eintritt w rd registrierte Callback Methode durch die zentrale Stelle aufgerufen der eigentliche Hauptabschnitt des Codes ist daf r n cht l nger zust ndig Das Prinzip der Inversion of Control wird im Dependency Injection Entwurfsmuster lediglich zur Erzeugung von Objekten und deren Abh ngigkeiten verwendet Dependency Injection kann also als weitere Abstrahierung des Abstract Factory Pattern gesehen werden das bereits in 5 3 1 beschrieben wurde In der klassischen objektorientierten Programmierung ist jedes Objekt selbst daf r zust ndig seine Abh ngigkeiten zu initialisieren sei es ber Konstruktor Parameter Initialisierungsmethoden oder 66 andere Vorgehensweisen oft als manuelle Dependency Injection bezeichnet Dependency Injection greift ma geblich diesen Prozess ein indem es nicht nur die Erzeugung von einzelnen Objekten sondern auch die Initialisierung ihrer Abh ngigkeiten externalisiert Anstatt den Erzeugungscode f r ein bestimmtes Objekt immer dann auszuf hren wenn eine neue Instanz eines solchen Objekts ben tigt wird bei einer zentralen Stelle Dep
299. tware die Lage versetzt miteinander kommunizieren und aufeinander reagieren zu k nnen 4 1 1 Musskriterien Die im Folgenden beschriebenen Produktfunktionen verstehen sich als Musskriterien sind also zwingend Teil des Funktionsumfangs des Toolkits Sie sind aufgeteilt in Musskriterien f r die Server Komponente und Musskriterien f r die Cl ient Bibliothek Zus tzlich werden Musskriterien f r eine beispielhafte Drittsoftware genannt die nicht direkt Bestandteil dieser Arbeit ist sondern als Machbarkeitsnachweis Proof of Concept entwickelt wird 4 1 1 1 8 Das Toolkit muss es einem Softwareentwickler erm glichen m glichst einfach einen voll funktionsf higen Server im lokalen Netzwerk oder Internet aufsetzen zu k nnen der als Vermittler in der Kommunikation zwischen Clients und einer Software auftritt Zu diesem Zweck muss die Server http httpd apache org ORCHID Komponente zahlreiche Funktionen anbieten die an dieser Stelle stichpunktartig genannt und im weiteren Verlauf der Arbeit detailliert erl utert werden Warten auf Verbindungen durch Clients Warten auf Verbindungen durch Drittsoftware Akzeptieren von Client Verbindungen Akzeptieren von Drittsoftware Verbindungen Auslesen und Transformieren Parsen von HTTP Anfragen HTTP Requests von Clients Auslesen und Transformieren Parsen von HTTP Anfragen HTTP Requests von Drittsoftware Erkennen und Untersch
300. ue Methoden genau so als w ren diese Methoden bereits als Instanzmethoden der urspr nglichen Klasse definiert worden Insbesondere im Hinblick auf die nachtr gliche Erweiterung und Anpassung der Server Komponente sind Extension Methods sehr n tzlich M chte ein Entwickler einer bestehenden Klasse eine Methode hinzuf gen kann er dies tun ohne den urspr nglichen Code zu ver ndern Das folgende Listing zeigt ein Beispiel f r eine Extension Method die die Klasse AHardwareServer also die grundlegende Klasse f r alle ORCHID Server erweitert public static class ServerExtension public static TimeSpan GetCurrentRuntime this AHardwareServer server return DateTime Now Subtract server Started Listing 17 Beispielhafte Extension Method Die oben gezeigte Methode GetCurrentRuntime erwartet einen Parameter vom Typ AHardwareServer Das Schl sselwort this ist hier notwendig da es sich um eine Extension Method handelt Fehlt es wird die Methode als normale statische Methode betrachtet und kann nicht ber Instanzen von Klassen die von AHardwareServer abgeleitet wurden aufgerufen werden GetCurrentRuntime AHardwareServer berechnet aktuelle Laufzeit eines Servers indem dessen Startzeitpunkt von der aktuellen Zeit subtrahiert wird Ein Aufruf der Methode im Code geschieht w e m folgenden Listing gezeigt private void ShowServerRuntime AHardwareServer hardwareServer TimeSpan ts hardwareS
301. uinos soll aus der Ferne berwacht werden Dabei ist lediglich wichtig dass der Microcontroller mit Strom versorgt und mit dem Internet verbunden ist Zu diesem Zweck kann der Arduino ber eine Cl ent Instanz einen Heartbeat an einen ORCHID Server senden wie im folgenden Listing gezeigt wird void loop orchid heartbeat delay 10000 Listing 62 Senden eines Heartbeats Wird der m obigen Listing gezeigte Sketch zusammen mit dem 8 4 1 behandelten Initialisierungscode von einem Arduino ausgef hrt sendet dieser alle zehn Sekunden einen Heartbeat an den angegebenen ORCHID Server Dieses Beispiel zeigt deutlich dass die Client Bibliothek es einem Entwickler sehr leicht macht innerhalb eines Sketches mit einem ORCHID Server zu kommunizieren f r die einfachste Form der Kommunikation ist lediglich eine einzige Zeile Code notwendig 8 4 3 Hochladen von Sensordaten M chte ein Entwickler in einer Software regelm ig Sensordaten abrufen die von einem an einen Arduino angeschlossenen Sensor gemessen werden m ssen diese auf einen ORCHID Server hochgeladen werden Die Client Bibliothek erm glicht das Hochladen von Werten verschiedenster Datentypen dieses Beispiel zeigt wie ein Integer Wert der von einem Sensor gemessen wurde hochgeladen wird Handbuch Client Bibliothek Zus tzlich zu den 8 4 1 gezeigten Initialisierungsdaten muss f r dieses Beispiel auch eine eindeutige ID f r den Sensor f r
302. uktion wird zur ckgegeben oder null falls keine solche Instruktion gefunden wurde Wurde keine Instruktion gefunden wird dem Client eine entsprechende Antwort gesendet HTTP Code 404 Not found und die Verarbeitung des GET Requests beendet Liegt eine Instruktion vor wird sie f r eine Antwort an den Client aufbereitet und dann an diesen gesendet HTTP Code 200 und die Verarbeitung der Anfrage beendet Abbildung 26 zeigt den geschilderten Programmablauf in einem UML Aktivit tsdiagramm Fehler Anfrage annehmen Verbindungspartner speichern Erfolg G ltigkeit pr fen ec Requesttyp bestimmen Fehler UserAgent pr fen Erfolg Request Fehler Fehlermeldung senden e Erfolg Arduino ID bestimmen Actor ID bestimmen Fehler IDs berpr fen Instruktion abrufen Antwort senden BW Fehler Instruktion bermitteln Abbildung 26 Bearbeitung von Client GET Requests 5 9 2 3 Client PUT Requests Ein PUT Request der von einer Instanz von OrchidHardwareServer entgegengenommen und von einer Instanz von OrchidHardwareDaemon verarbeitet wird steht f r eine Anfrage eines Clients Sensordaten auf dem Server zu speichern Die Verarbeitung eines solchen Requests geschieht in der Methode HandlePUTReqguest der Klasse OrchidHardwareDaemon Handelt es sich u
303. ung Tabelle 59 LS20 Betriebsdauer LS30 Belastbarkeit Beschreibung Obwohl das ORCHID Toolkit nicht f r Szenarien mit hoher Belastungsdichte ausgelegt ist ist die Server Komponente dennoch in der Lage auch bei erh htem Datenaufkommen ihre Leistungsf higkeit aufrecht zu erhalten Metrik Die Server Komponente muss im Durchschnitt mindestens 5 Anfragen pro Sekunde verarbeiten und beantworten k nnen Bemerkung Da die bertragungsgeschwindigkeit von Anfragen und Antworten direkt mit der Geschwindigkeit des Netzwerks abh ngt gilt die f r LS30 angegebene Metrik f r das Szenario dass sich der Server und die Clients im gleichen lokalen Netzwerk befinden und die verwendete Hardware mindestens der des Entwicklungssystems entspricht vgl 6 2 Ausgenommen von der Mindestanzahl sind Anfragen die zum Abruf von Sensordaten f hren da diese in verschieden langen Antwortzeiten resultieren k nnen je nachdem wie viele Datens tze abgerufen werden sollen Tabelle 60 LS30 Belastbarkeit Anforderungsdefinition LS40 Datengenauigkeit Beschreibung Die Server Komponente darf die Genauigkeit ein oder ausgehender Daten nicht ver ndern Metrik Ganzzahlen werden auf 1 genau berechnet Flie kommazahlen auf mindestens 2 Stellen nach dem Komma genau Datums und Zeitangaben werden auf die Sekunde genau berechnet Bemerkung Werden Daten angeliefert die weniger genau als beschrieben sind werden diese nicht ver ndert ist eine V
304. urationsdatei ver ndert werden Tritt w hrend der Verarbeitung eines g ltigen Requests ein Fehler auf wird die Verarbeitung abgebrochen und dem Verbindungspartner eine Fehlermeldung bermittelt HTTP Code 500 Internal Server Error Anfrage entgegennehmen Anfrage Request verarbeiten Fehler melden Antwort senden Abbildung 25 Allgemeine Bearbeitung von Requests Die obige Abbildung 25 zeigt in einem UML Aktivit tsdiagramm auszugsweise wie die Server Komponente Anfragen allgemein bearbeitet Grunds tzlich ist der Ablauf f r jede Art von Request der gleiche Zun chst wird der Verbindungspartner im Diagramm Client gespeichert daraufhin die Anfrage geparst und ihr Typ bestimmt Ist dieser bekannt wird sie an der entsprechenden Stelle verarbeitet und beantwortet die Antwort variiert je nach Anfrage und Bearbeitungserfolg Die in diesem Abschnitt enthaltenen Abbildungen zeigen die Schritte zur Authentifizierung und Berechtigungspr fung nicht vgl 6 3 3 2 Diese Pr fungen werden in allen Methoden durchgef hrt die eine Anfrage behandeln wurden jedoch aus Gr nden der bersichtlichkeit in den Diagrammen ausgespart 5 9 2 2 Client GET Requests Ein GET Request der von einer Instanz von OrchidHardwareServer entgegengenommen und von einer Instanz von OrchidHardwareDaemon verarbeitet wird steht f r eine Anfrage eines Clients ob Instruktionen f r eine an diesen Client angesc
305. ver Komponente des Toolkits ist die Plattformunabh ngiskeit Mono ist f r alle verbreiteten Betriebssysteme Microsoft Windows Linux und MacOS verf gbar die Server Komponente kann also auf Windows Linux und MacOS Servern verwendet werden Auf die Verwendung von Java als Entwicklungsplattform und Programmiersprache wurde aus Performance und Effizienzgr nden verzichtet In einer direkten auf Lasttests basierenden Gegen berstellung vgl 18 erscheinen Programme die Java geschrieben und mit der Java Laufzeitumgebung ausgef hrt werden zwar zun chst als berlegen der Geschwindigkeit der Ausf hrung es st jedoch klar zu erkennen dass in C geschriebene und mit Mono ausgef hrte Programme durchschnittlich nicht nur weniger Hauptspeicher verbrauchen im Durchschnitt weniger als d e H lfte sondern auch weniger Code ben tigen im Durchschnitt nur 80 der n Java notwendigen Zeilen um die Lastest Berechnungen durchzuf hren http www java com en ORCHID Die Verwendung von Mono und C f hrt also zu kompakteren Programmen wodurch die Effizienz sowohl n der Entwicklung als auch n der Erweiterung und Wartung der Programme erh ht wird Der Geschwindigkeitsvorteil den die Verwendung von Java f r die Server Komponente eingebracht h tte wird durch den zum Teil enorm hohen Speicherbedarf der Java Programme relativiert Zus tzlich sind die von C unter Mono erreichten Geschwindigkeiten ausreichend f r den pr
306. vorher definierter Zeitraum berschritten wurde Timeout Datenstrukturen Kategorie Musskriterium Tabelle 44 FC70 Auf eingehende Server Antwort warten 80 Eingehende Server Antwort auslesen Erfolgsfall Eine Antwort die ein ORCHID Server auf eine ausgehende HTTP Anfrage gegeben hat wird ausgelesen und kann verwendet werden Fehlerfall Die eingehende Antwort kann nicht gelesen und daher auch nicht analysiert bzw weiter verwendet werden Beschreibung Eine eingehende Antwort eines Servers liegt als Strom von Bytes vor die nach und nach ausgelesen und zu einer Nachricht zusammengesetzt werden Aus den so ermittelten Daten k nnen Informationen ber den Erfolg oder Misserfolg der Anfrage die die Antwort des Servers ausgel st hat entnommen werden Datenstrukturen Kategorie Musskriterium Tabelle 45 FC80 Eingehende Server Antwort auslesen 90 Nachricht auf ORCHID Server hochladen Vorbedingung FC60 Erfolgsfall Die Nachricht f r einen anderen ORCHID Client wurde auf den Server geladen und kann abgerufen werden Fehlerfall Die Nachricht kann nicht auf den Server geladen werden Beschreibung Ein ORCHID Client sendet eine Nachricht ber einen POST Request an einen ORCHID Server Datenstrukturen E Kategorie Wunschkriterium Tabelle 46 FC90 Nachricht auf ORCHID Server hochladen Anforderungsdefinition 100 Nachricht von ORCHID Server abrufen Vorbedingung F
307. ziert werden Im Idealfall werden nur abstrakte Klassen eingesetzt wodurch die konkreten Implementierungen jederzeit ausgetauscht werden k nnen ohne die sie verwendenden Klassen ver ndern zu m ssen Um diese Vorgabe zu erf llen muss der Erzeugungsprozess von Objekten abstrahiert werden so dass die Konstruktoren der zu erzeugenden Klassen nicht mehr von den sie aufrufenden Klassen verwendet werden nur so kann sp ter eine konkrete Klasse gegen eine andere ausgetauscht werden ohne auch die aufrufende Klasse ver ndern zu m ssen Zu diesem Zweck wird das Entwurfsmuster Abstrakte Fabrik engl Abstract Factory Pattern eingesetzt Es abstrahiert den Erzeugungsprozess von Objekten indem diese nicht mehr direkt erzeugt werden k nnen sondern daf r eine dritte Klasse die sog Fabrik engl Factory zum Einsatz kommen muss Eine Fabrik erm glicht es einem Objekt andere Objekte zu erzeugen ohne die konkrete Implementierung eines solchen Objekts kennen zu m ssen Der Erzeuger des Objekts kennt nur eine abstrakte Basisklasse des zu erzeugenden Objekts oder eine Schnittstelle und arbeitet auch nur mit deren Methoden Producef AProduct AProduct _ Product lt lt create gt gt Producef AProduct Abbildung 14 Entwurfsmuster Abstrakte Fabrik Die Abstrakte Fabrik unterscheidet verschiedene Rollen die Abbildung 14 zu sehen sind Klienten Client k nnen eine Fabrik Factory verwenden um Obj
308. zu lassen k nnen die Erzeugung der Instanz der Klasse Bloom und der Aufruf der Methode Blossom in eine endlose while Schleife integriert werden Das folgende Listing zeigt die og Verbesserungen an einem Beispiel Das ver nderte Programm erzeugt im Fehlerfall immer wieder eine neue Instanz der Klasse Bloom und startet mit dem Aufruf von Blossom die Server Instanzen neu namespace OrchidReferenceServer public static class MainClass public static void Main string arga string cfgkile Serftings Orchi1d inT Initialize configuration system Config Instance Initialize new Filelnfo cfgFile while true try Create a new bloom Bloom bloom new Bloom new ServerFactory new DaemonFactory Run the server s bloom Blossom catch OrchidMySqlException oEx Output error message catch OrchidException Output error message catch Exception ex Output error message Listing 45 Verbessertes Minimalprojekt ORCHID Server ORCHID 7 7 Ver nderung und Erweiterung der Server Komponente Im Folgenden wird detailliert beschrieben wie Server Komponente ver ndert und erweitert werden kann Zu diesem Zweck wird als Ver nderung eine Daemon Klasse entwickelt die TRACE Anfragen eines ORCHID Clients anders behandelt als dies der Standardklasse OrchidHardwareDaemon der Fall ist Zus tzlich ist die neue Klasse in der Lage HEAD Anfrage
309. zun chst eingelesen werden sollte Im Normalfall ist die Reservierung dieser Menge Speicher auch problemlos m glich ein Arduino Microcontroller Modell Duemilanove verf gt jedoch ber lediglich 2048 Bytes an Arbeitsspeicher Methode reservierte also die H lfte des berhaupt verf gbaren Speichers Andere Programmteile und Daten belegen weitere Bereiche so dass letztendlich mehr Speicher reserviert werden sollte als berhaupt verf gbar war Entsprechend st rzte der Sketch an dieser Stelle ab und der Arduino setzte sich zur ck was zum Abbruch der Methode und zum Aufruf von setup f hrte Die Speicherreservierung f r den Datenpuffer wurde verkleinert und das Problem damit behoben In der aktuellen Version reserviert die Methode 128 Bytes 6 6 Offene Probleme Im Folgenden werden Probleme beschrieben die sich w hrend der Entwicklung des Toolkits ergeben haben und im Rahmen dieser Arbeit nicht gel st werden konnten Kritische Probleme einen Misserfolg der Arbeit zur Folge h tten sind nicht aufgetreten 6 6 1 Sicherheitsbedenken Sicherheitsfunktionen wie die Verschl sselung des Datenverkehrs sind nicht Bestandteil dieser Arbeit Die Daten die zwischen einem ORCHID Client und einem ORCHID Server ausgetauscht werden werden also m Klartext bermittelt Realisierung und Tests Jeder der sich im gleichen Netzwerk befindet in dem Client und Server miteinander kommunizieren kann die au

Download Pdf Manuals

image

Related Search

Related Contents

Hoover Encore Canisfer Cleaner with Power Nozzle User's Manual  InLine 36021 hardware cooling accessory  graphic  AsciiDoc Syntax Quick Reference  V7 CAT5e Cable RJ45 STP Shielded Black 15 m  Route66 STD - PLAY iT! Amusements    Note : - Welltech  Manual del Usuario - Aire Y Agua Inicio  Audiovox LCDM40A Warranty Card  

Copyright © All rights reserved.
Failed to retrieve file