Studienarbeit - Universität Passau

Transcription

Studienarbeit - Universität Passau
Technische Universität München
Fachgebiet
Verteilte Multimodale Informationsverarbeitung
Prof. Dr. Matthias Kranz
Studienarbeit
Benutzerlokalisierung und Statusabfragen für
Intelligentes Wohnen in Zusammenarbeit mit Skype
Autor:
Simon Koros
Matrikelnummer: —
Anschrift:
—
—
Betreuer:
Dipl.-Ing. Luis Roalter
Beginn:
2010-05-24
Abgabe:
2010-11-24
Kurzfassung
In der nachfolgenden Arbeit werden die Grundlagen, Möglichkeiten und Ergebnisse der
Benutzerlokalisierung und Statusabfragen im Rahmen des Forschungsgebiets Intelligentes
Wohnen mit Schwerpunkt auf die cross-plattform VoIP Anwendung Skype behandelt.
Ziel ist es akkurate und aktuelle Informationen unabhängig vom Aufenthaltsort oder Lage
eines Teilnehmers in ein bestehendes System zu integrieren und für weitere Anwendungen,
wie Location-Based-Services, als Dienste zur Verfügung zu stellen.
Um einen Teilnehmer zu lokalisieren und gezielt dessen Status-Informationen abzufragen,
werden Informationen vom clientseitigen Betriebssystem und ggf. weiteren peripheren
Systemen gesammelt und von einem zentralen Server-System aufbereitet. Dafür wurde im
Zuge dieser Arbeit die verfügbare Skype API analysiert und der Ap2Ap-Kanal von Skype
verwendet, welcher die gesicherte Datenübertragung via Skype ermöglicht.
Ferner wurde die Middleware Sky2ROS entwickelt, welche in Form einer Server- und einer
Client-Applikation über Skype verbunden ist und ohne Interaktion durch den Teilnehmer
kommuniziert. Diese wurde in der Skriptsprache Python geschrieben und kann über die
von Arkadiusz Wahlig bereitgestellten Skype4Py Bibliotheken mit Skype interagieren.
Zur anschließenden Verarbeitung und Integration in das bestehende System, wird auf einer Unix Server-Plattform das Open-Source Robot-Operating-System (ROS) verwendet,
welches die übertragenen Daten ausliest und als Services bzw. Topics bereitstellt.
2
Inhaltsverzeichnis
Inhaltsverzeichnis
3
1 Einleitung
1.1 Motivation und Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Intelligentes Wohnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Überblick und Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5
6
6
2 Benutzerlokalisierung
2.1 Technische Realisierungen . . . . . . . . . . . .
2.1.1 Globales-Positionierungs-System . . . . .
2.1.2 Funkzellen- und Accesspoint-Ortung . .
2.2 Geotargeting-Verfahren . . . . . . . . . . . . . .
2.2.1 Internet Protokoll IPv4 . . . . . . . . . .
2.2.2 Positionsbestimmung . . . . . . . . . . .
2.2.3 Testergebnisse der IPInfoDB Datenbank
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
8
9
11
11
13
14
3 Einführung und Analyse der Skype API
3.1 Über Skype . . . . . . . . . . . . . . . .
3.1.1 Einführung in Skype . . . . . . .
3.1.2 Aspekte des Einsatzes von Skype
3.2 Analyse der Skype API . . . . . . . . . .
3.2.1 Aufbau und Konzept . . . . . . .
3.2.2 Befehls-Protokoll-Ebene . . . . .
3.2.3 Datenübertragung mittels Ap2Ap
3.2.4 Vergleich der API Wrapper . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
15
16
18
18
18
21
22
.
.
.
.
.
.
.
.
24
24
25
26
26
29
32
34
37
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Entwicklung und Interaktion mit Sky2ROS
4.1 Einführung in ROS . . . . . . . . . . . . . . . .
4.2 ROS Kommunikations-Prozesse . . . . . . . . .
4.3 Entwicklung und Funktionsweise von Sky2ROS
4.3.1 Aufbau und Konzept . . . . . . . . . . .
4.3.2 Skype-Abfrage mit Ap2Ap . . . . . . . .
4.3.3 XML-Abfrage und Parsing . . . . . . . .
4.3.4 Publishing in ROS . . . . . . . . . . . .
4.3.5 Use-Cases . . . . . . . . . . . . . . . . .
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
INHALTSVERZEICHNIS
5 Problembehandlung und Historie
5.1 Skype API Bibliotheken . . . . . . . . . . .
5.2 Zeichenkodierung . . . . . . . . . . . . . . .
5.3 Testergebnisse, Performance und Ressourcen
5.4 Lösung des Deadlock-Problems . . . . . . .
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
39
40
41
43
6 Zusammenfassung und Ausblick
44
A Gesprächs-Protokoll
46
Abbildungsverzeichnis
47
Tabellenverzeichnis
48
Literaturverzeichnis
49
Kapitel 1
Einleitung
1.1 Motivation und Ziel
Diese Arbeit konzentriert sich auf die Kommunikation zwischen externen Teilnehmern und
einem zentralen Server über IP-basierte Dienste. Dabei liegt der Schwerpunkt auf der
populären Voice-Over-IP Anwendung Skype, welche sich für den praktischen Einsatz aufgrund der weltweiten Verbreitung auf Personal Computers, mobilen Endgeräten sowie internetfähigen Multimedia-Geräten, gut eignet.
Ziel ist es, verfügbare und sicherheitsrelevante Informationen eines Benutzers aus der Ferne
zu erfassen oder mittels geeigneter Verfahren wie in Kapitel 2 beschrieben zu ermitteln.
Verfügbare Informationen beinhalten unter anderem:
• Mood – Festgelegte Text-Meldung durch den Benutzer
• Status – Erreichbarkeit manuell oder cognitiv bestimmt
• Personalien – Optionale Informationen zur Person
Sicherheitsrelevante Informationen, welche aus der Ferne nicht verfügbar, oder dem Benutzer nicht unmittelbar bekannt sind, müssen entsprechend ermittelt werden:
• IP-Adresse/Port – Abfrage des Accesspoints
• Standort – Lokalisierungsverfahren
Die gesammelten Informationen sollen mit Hilfe der entwickelten Middleware Sky2ROS
über das Skype-Netzwerk gesichert übertragen werden und anschließend in einem zentralen
Server zur weiteren Verwendung aufbereitet werden. Somit können diese auch weiteren
Diensten wie z.B. für Location-Based-Services (LBS) zur Verfügung gestellt werden. LBS
sind nach Zhang u. a. [14] ortsabhängige Dienste für mobile Anwendungen, welche sich in
die Kategorien Information, Unterhaltung, Not- und Werbe-Dienste aufteilen lassen.
5
Kapitel 1 Einleitung
6
1.2 Intelligentes Wohnen
Intelligentes Wohnen respektive Ambient Assisted Living bezeichnet ein breitgefächertes Forschungsgebiet, welches nach Kumar [7] eine Integration elektrischer Geräte
aller Art, in einer automatisierten und vernetzten Umgebung für den alltäglichen Gebrauch
zum Ziel hat.
Diese müssen den Anforderungen an eine intelligente Umgebung gerecht werden:
• Eingebettet: Vernetzte Geräte integriert in der Umgebung
• Kontext bewusst: Fähigkeit Person im Kontext zu seiner Situation zu erkennen
• Personalisiert: Anpassbar an individuelle Bedürfnisse
• Adaptiv: Vollständig an den Benutzer anpassbar
• Antizipativ: Fähigkeit Bedürfnisse vorherzusehen
1.3 Überblick und Aufbau
Der erste Teil dieser Arbeit erörtert die unterschiedlichen Möglichkeiten zur Benutzerlokalisierung und geht dabei gezielt auf das Geotargeting-Verfahren ein, welches Bestandteil
der entwickelten Applikation Sky2ROS ist.
Im zweiten Teil wird die Voice-Over-IP Anwendung Skype vorgestellt, welche sich innerhalb
der letzten Dekade zu einem der populärsten VoIP Clienten weltweit entwickelt hat. In
diesem Zusammenhang liegt der Schwerpunkt aber nicht auf der auditiven oder visuellen
Kommunikation sondern auf der, für den Benutzer unsichtbaren, Datenabfrage über einen
zentralen Server, welche mittels der Skype API realisiert wurde.
Kapitel 1 Einleitung
7
Dafür wurde der Aufbau und die Funktionsweise der Skype API analysiert und geeignete
Methoden für die Datenübertragung bestimmt.
Im dritten Teil wird die Funktionsweise und der Einsatz des Robot-Operating-System
(ROS) sowie Aufbau und Entwicklung der Applikation Sky2ROS erläutert. Diese wurde
im praktischen Teil dieser Arbeit in der Skriptsprache Python entwickelt und mit Hilfe
verfügbarer Python Bibliotheken der Skype API zugänglich gemacht.
Im letzten Abschnitt werden Problemfälle erörtert, welche während der Entwicklung gelöst
wurden, sowie Schwachstellen und Potentiale der Anwendung anhand protokollierter Testergebnisse untersucht. Anschließend werden in einer Zusammenfassung die wichtigsten
Punkte der behandelten Thematiken zusammengefasst und ein Ausblick auf eine zukünftige
Entwicklung gegeben.
Kapitel 2
Benutzerlokalisierung
2.1 Technische Realisierungen
Sinn und Zweck der Benutzerlokalisierung ist es, zu jeder Zeit den Aufenthaltsort einer
Person über ein mitgeführtes Gerät, welches sich in unmittelbarer Nähe befindet, mit und
ohne Kenntnis des Benutzers möglichst genau zu bestimmen.
Prinzipiell gibt es drei gebräuchliche Ansätze zur Benutzerlokalisierung mit unterschiedlichen Genauigkeiten:
• Das Satellitengestützte Globale-Positionierungs-System: 100 − 101 Meter
• Lokalisierung des Mobilfunkgeräts oder Accesspoints: 101 − 102 Meter
• Lokalisierung der IP-Adresse mittels Geotargeting-Verfahren: 103 Meter
2.1.1 Globales-Positionierungs-System
Die genaueste Ortsbestimmung lässt sich über das Globale-Positionierungs-System (GPS)
nach Köhne u. Wößner [6] bestimmen. Dabei ist die Auflösung der momentan frei verwendbaren GPS Satelliten durch deren Betreiber (Vereinigte Staaten von Amerika) auf ca.
1-10 Meter Genauigkeit begrenzt. Technisch möglich ist abhängig von Empfang und Güte
des GPS Chipsatzes eine Zentimeter genaue Ortsbestimmung. Das Prinzip der Lokalisierung mittels GPS basiert auf der Laufzeitmessung zwischen einem GPS-Gerät (Empfänger)
und mehreren Satelliten (Sendern).
Die Satelliten senden laufend ein Zeitsignal, welches nach Köhne u. Wößner [6] mit einer
Datenrate von 50 Bit/Sekunde und einer Periode von 30 Sekunden parallel mittels SpreadSpectrum Verfahren auf zwei Frequenzen ausgesendet wird. Das GPS-Gerät empfängt die
unterschiedlichen Zeitsignale und errechnet die Distanz zu den Satelliten durch Messung
der Laufzeit des Signals – genauer gesagt durch Vergleich der Uhrzeiten.
8
Kapitel 2 Benutzerlokalisierung
9
Theoretisch würde der Schnittpunkt der Kreisbahnen von drei Satelliten ausreichen um
die Position zu bestimmen, wie in Abbildung 2.1 gezeigt. Allerdings verfügen die GPSGeräte nicht über die zeitliche Genauigkeit, sodass die korrekte Position interpoliert werden
muss. Im praktischen Einsatz werden oftmals vier oder mehr Satelliten benötigt um eine
zuverlässige Positionsbestimmung zu erhalten.
Abbildung 2.1: Positionsermittlung durch Schnittpunkt aus drei bekannten Entfernungen
nach Köhne u. Wößner [6]. Dabei ergeben sich die Punkte B aufgrund von
Ungenauigkeiten der Uhr im GPS-Empfänger. Diese werden zwischen den
Punkten B interpoliert bis sich Punkt A als korrekte Position ergibt.
2.1.2 Funkzellen- und Accesspoint-Ortung
Die Ortung eines Mobilfunktelefons ist technisch gesehen durch Bestimmung der eingewählten Funkzelle und im genaueren Bereich durch Abstandsmessung zwischen benachbarten Zell-Stationen problemlos möglich. In der Praxis ist dies aber nur in Zustimmung
mit dem Eigentümer der SIM-Karte (Subscriber Identity Module) oder auf juristischem
Wege möglich und wird daher nur in Notfällen oder ähnlichen angewandt. Verfügt das
Mobilfunkgerät über keinen GPS-Chipsatz, wird für eine genauere Bestimmung mit folgenden Verfahren gearbeitet, welche analog zum GPS auf der Abstandsbestimmung durch
Messung der Signallaufzeiten beruhen:
• Timing Advance nach Wang u. a. [13]: Bei diesem Verfahren wird die Position
über den Abstand zur Funkzelle anhand des Zeitversatzes zwischen gesendeten und
empfangenen Daten ermittelt.
Kapitel 2 Benutzerlokalisierung
10
• Uplink Time Difference of Arrival nach Lopes u. a. [8]: Bei diesem Verfahren
wird die Position anhand der Laufzeiten der Signale des Endgerätes zu sogenannten
Location-Measurement-Units ermittelt, welche an der Funkzelle nachgerüstet werden
müssen.
• Enhanced Observed Time Difference nach Jonsson u. Olavesen [5]: Hier werden
Signale gemessen, welche nicht GSM bzw. UMTS typisch sind und vom Mobilfunkgerät zusätzlich zu den üblichen Kanälen unterstützt werden müssen.
Abbidung 2.2 zeigt eine Vorschau von Google Maps Mobile Version 5, welche im Dezember 2010 auf der Dive into Mobile Konferenz vorgestellt wurde und die Ortung via GPS
und Funkzelle vereint. Somit kann auch bei schwachem oder fehlendem GPS-Signal der
Standort in abgeschätzter Genauigkeit bestimmt werden.
Abbildung 2.2: Der Screenshot nach Mills [9] von Google Maps Mobile 5 zeigt eine Positionsermittlung auf Basis von Funkzellenortung und gibt die erzielte Genauigkeit an.
Eine dritte Möglichkeit ist die Wireless Accesspoint Localization, welche vor allem im
Innen-Bereich immer mehr Anwendung findest, wo oft schwache bis keine Signal-Stärken
von Mobilfunk-Zellen oder Satelliten herrschen. Begünstigt durch die zunehmend entwickelte Infrastruktur privater und öffentlicher Gebäude mit drahtlosen Zugangspunkten,
bedarf es lediglich geeigneter Algorithmen zur Positionsbestimmung eines verbundenen
Teilnehmers. Ein Algorithmus nach Wan [12] analysiert die eindeutigen Fingerprints der
verschiedenen Accesspoints eines WLAN Netzes und bestimmt mit Kombination der unterschiedlichen Fingerprints die Position des Teilnehmers im Bezug zu den installierten
Accesspoints.
Kapitel 2 Benutzerlokalisierung
11
2.2 Geotargeting-Verfahren
In dieser Arbeit ist die IP-basierte Lokalisierung von besonderem Interesse, da diese von
jedem internetfähigen Gerät aus ohne zusätzliche Ausstattung bestimmt werden kann. Im
Gegensatz zu den vorgestellten Möglichkeiten mittels GPS oder GSM ist die Genauigkeit
des Geotargeting-Verfahrens sehr gering und weist, wie in Kapitel 2.2.3 gemessen, eine
hohe Varianz auf. Weitere Voraussetzungen sind eine akkurate Datenbank sowie keine
absichtlichen Verzerrungen durch Virtual-Private-Networks (VPN) oder Proxy-Netze.
Bei dieser Art der Lokalisierung gibt es prinzipiell zwei Verfahren: Zum einem können
bekannte Accesspoints direkt identifiziert und mit Hilfe von AP-Datenbanken lokalisiert
werden. Dafür kann auf die Dienste von bspw. Skyhook oder der Wireless-GeographicLogging-Engine (WiGLE) zurückgegriffen werden, welche Datenbanken weltweiter Accesspoints bereit halten. Alternativ kann auch ohne Wissen über den Accesspoint, lediglich
anhand der IP-Adresse der Standort, des zum Endgerät verbundenen Zugangspunkts lokalisiert werden. Da dieses Verfahren bereits länger etabliert ist und unterschiedliche Datenbanken frei zur Verfügung stehen, wurde diese Variante in Sky2ROS implementiert. Die
Funktionsweise wird in Kapitel 4.3.3 näher erläutert.
2.2.1 Internet Protokoll IPv4
Jeder Internet-Teilnehmer hat eine eineindeutige IP-Adresse. Momentan ist die 4. Version
IPv4 etabliert, welche eine 32 Bit Adresse in vier Blöcken zu je 8 Bit vorsieht.
Die Größenordnung und Verteilung von IP-Adressen weltweit veranschaulicht IPligence [4]
mit Grafik 2.3. Daraus wird schnell ersichtlich, dass die vollständige Erfassung aller IP
Adressen in einem beschränkten Zeitraum mit der aktuellen Technologie nicht möglich ist.
Abbildung 2.3: Verteilung in 2007 erfasster IP-Adressen weltweit nach IPligence [4].
Kapitel 2 Benutzerlokalisierung
12
Zahlreiche Netze untergliedern sich in weitere Subnetze. Abbildung 2.4 zeigt ein Beispiel
einer möglichen Netz-Hierarchie mit verschiedenen Knoten (Teilnehmer) mit inkrementeller
Adress-Zuordnung.
Abbildung 2.4: Untergliederung der Netz-Knoten in Subnetze.
Damit soll deutlich werden, dass größere Addressräume wie bspw. das wissenschaftliche
Leibnitz-Rechen-Zentrum München (LRZ) existieren, welche eine Vielzahl von Knoten
vereinen. Diese Knoten teilen sich gemäß dem Geotargeting-Verfahren denselben Standort
des LRZ Servers in Garching.
Daraus wird schnell ersichtlich, dass die Präzision beim Geotargeting stark variiert und sich
kaum bestimmen lässt. Dennoch stellt Geotargeting ein einfaches und schnelles Verfahren
mit sehr niedrigem Aufwand dar, welches für eine erste Abschätzung ausreicht und sich
auch mit anderen Lokalisierungs-Verfahren gut kombinieren lässt.
Kapitel 2 Benutzerlokalisierung
13
2.2.2 Positionsbestimmung
Über verschiedene kommerzielle und freie Datenbanken, können die Werte von IP-Adressen
regionalen Standorten nach Ländern, Bundesländern und Städten zugeordnet werden. Diese Datenbanken müssen empirisch aufgebaut und aktualisiert werden. Die limitierenden Faktoren sind die Vollständigkeit und die Genauigkeit der Daten, sowie die Leistungsfähigkeit der Server und dem notwendigen Aufwand zur Pflege.
Die unternommenen Anstrengungen werden aber zunehmend größer, da große InternetUnternehmen wie Google gezielt kommerzielle Vermarktung mittels online Dienste wie
Google AdWords anbietet, indem Werbung auch nach regionalen Kriterien gezielt geschaltet werden kann.
Für diese Arbeit wurde die frei verfügbare IP Location API von IPInfoDB verwendet. Der
Anbieter stellt auf seiner Website Abfrage APIs zur Verfügung, welche über ein HTMLFormular oder durch Übergabe der IP-Adresse in der URL angefordert werden können.
Wird auf diese Weise eine Anfrage übermittelt, fragt ein quelloffenes PHP-Skript die
MySQL Datenbank des Anbieters ab, welche Informationen über zugehörige Länder, Städte
und Zeitzonen gespeichert hat. Die APIs sowie eine regelmäßig aktualisierte MySQL Datenbank stehen in den Sprachen Javascript, Ruby, ASP, Python und PHP frei zur Verfügung.
Um nun eine IP-Adresse den Geoinformationen der Datenbank zuzuordnen, wird diese
mit der folgenden Formel in eine ganzzahlige Dezimalzahl konvertiert. Angenommen die
IP-Adresse setzt sich aus A.B.C.D zusammen. Die Formel lautet dann:
IP = ((A · 256 + B) · 256 + C) · 256 + D.
Für die IP 74.125.45.100 (Google.com) ergibt sich damit zum Beispiel folgender Wert:
IP = ((74 · 256 + 125) · 256 + 45) · 256 + 100 = 1249717604.
Die resultierende Antwort der Abfrage würde wie folgt aussehen:
1249717604kU SkU nitedStatesk06kCalif orniakM ountainV iewk94043k37.4192.
Dieser Standort entspricht einem Google Server in Mountain View, Kalifornien.
Kapitel 2 Benutzerlokalisierung
14
2.2.3 Testergebnisse der IPInfoDB Datenbank
Um die Genauigkeit und die Varianz der Ergebnisse des Geotargeting-Verfahrens abzuschätzen, wurden verschiedene Abfragen der IPinfoDB Datenbank durchgeführt. Dabei
wurden von unterschiedlichen Standorten aus diverse Zugänge getestet und die resultierende Abweichung der Entfernung zum tatsächlichen Standort in Luftlinie berechnet.
Hard- oder Software Parameter haben auf die Ergebnisse keinen Einfluss und werden daher
nicht explizit erwähnt. Anzumerken ist, dass die Dauer einer Abfrage im Mikro-Sekunden
Bereich liegt.
TestNummer
#1
#2
#3
#4
Tatsächlicher Ort
Lokalisierter Ort
Accesspoint
Dez. Koordinaten
IP-Adresse
Host-Adresse
München/Sendling
Deutschland/München
Arcor DSL Anschluss
N 48.7 E 13.4667
188.104.102.190
188.104.102.190
München/Sendling
Deutschland/Garching
VPN-Verbindung über LRZ
N 48.25 E 11.65
129.187.173.194
h194.tum.vpn.lrz.de
München/Maxvorstadt
Deutschland/München
TU München LAN
N 48.15 E 11.5833
138.246.2.180
host180-2.natpool.mwn.de
München/Maxvorstadt
Deutschland/Garching
VPN-Verbindung über LRZ
N 48.25 E 11.65
129.187.173.42
h042.tum.vpn.lrz.de
EntfernungsAbweichung
157, 43 · 103 m
17, 66 · 103 m
1, 1 · 103 m
12, 82 · 103 m
Tabelle 2.1: Testergebnisse.
In diesem Testlauf wurde bei Test Nummer 1 fälschlicherweise der Ort München im niederbayerischen Landkreis Passau ermittelt, vermutlich aufgrund fehlender weiterer Differenzierung, womit sich eine Abweichung von über 150 Kilometern ergab. Dafür ergab Test
Nummer 3 eine Abweichung von lediglich einem Kilometer.
Daraus werden zwei Hauptmerkmale des Geotargeting deutlich: Zum einen zeigt die
Übereinstimmung von IP-Adresse und Host ob es sich um einen einzelnen oder einen
größeren Anschluss handelt, wie dies beim VPN-Zugang über das öffentliche LeibnizRechenzentrum der Fall ist. Zum anderen ist die Varianz der Entfernungs-Abweichung
schon bei einer sehr geringen Anzahl von Tests sehr hoch. Trotz der hohen Varianz und
der Ungewissheit über die Genauigkeit der Ergebnisse, kommt dem Geotargeting aufgrund
der schnellen Auswertung und des geringen Aufwands an Hardware und Software für eine
erste Einschätzung eine große praktische Bedeutung zu.
Kapitel 3
Einführung und Analyse der Skype API
3.1 Über Skype
3.1.1 Einführung in Skype
Skype ist eine etablierte Voice-Over-IP Anwendung, welche es verschiedenen Anwendern
ermöglicht über kostenlose Sprach- und Videoanrufe oder Instant-Messaging zu kommunizieren, sowie weitere Datenpakete zu übertragen. Ferner können auch kostenpflichtige
Sprach- und Videoanrufe in das weltweite Fest- und Mobilnetz getätigt werden, welche für
diese Arbeit allerdings nicht von Interesse sind.
Im Jahr 2003 gründeten nach Skype [11] die schwedischen Unternehmer Niklas Zennström
und Janus Friis das Unternehmen Skype und ließen das gleichnamige Programm unter der
Leitung der estländischen Entwickler Ahti Heinla, Priit Kasesalu und Jaan Tallinn entwerfen. Diese schrieben als erste Skype-Core-Entwickler den, bis heute nicht offengelegten
Quellcode.
Skype verwendet eigene proprietäre Protokolle sowie hochqualitative Audio- und Videocodecs, welche die dezentrale Kommunikation zwischen den Clients ohne einen speziellen
Server ermöglichen. Daher rührt angeblich auch der Name Skype von Sky Peer-to-Peer.
Zusätzlich gibt es eine zentrale Datenbank welche alle registrierten Skype-Benutzer enthält,
die Zugriff auf die kostenlosen und kostenpflichtigen Dienste von Skype haben.
Skype ist auf vielen gängigen Plattformen und Betriebssystem wie Microsoft Windows,
Mac OS, Linux sowie für Mobilfunkgeräte unter Windows Mobile, Android, Symbian, iOS
etc. verfügbar und zählt laut eigenen Angaben mehr als 20 Millionen registrierte Benutzer.
Das Programm wird in regelmäßigen Zyklen gewartet bzw. weiterentwickelt und ist auf
einer zunehmenden Anzahl an Endgeräten verfügbar. Zu den neusten Entwicklung zählt
neben einer mobilen Version von Skype für Smartphones auch eine embedded Version auf
aktuellen Televisionsgeräten von Samsung Technologies.
15
Kapitel 3 Einführung und Analyse der Skype API
16
3.1.2 Aspekte des Einsatzes von Skype
Für die technische Entwicklung mit Skype ergeben sich einige Vor- und Nachteile, von
denen die entscheidenden Aspekte im folgenden Abschnitt kurz erläutert werden sollen.
Der Hauptkritikpunkt an Skype ist die Ablehnung der Hersteller zur Offenlegung des
Quellcodes sowie der verwendeten Protokolle und Codecs. Dies war lange Zeit Gründe
für Großunternehmen wie der Siemens AG auf den Einsatz und das Einsparpotential aus
Sicherheitsgründen gänzlich zu verzichten. Erst durch die starke Verbreitung und die
fortgeschrittene technische Ausgereiftheit wurde Skype wegen seiner Kostenfreiheit und
dominierender Übertragungsqualität sowie Kompatibilität, von Privatanwender und Unternehmen gleichermaßen genutzt.
Der proprietäre Quellcode und die darauf beanspruchten Urheberrechte machen eine Weiterentwicklung bzw. Modifikation von Skype für die Öffentlichkeit oder für eigene Zwecke
prinzipiell unmöglich. Auch die starke Popularisierung der Open-Source Bewegung machen
proprietäre Programme aus technischer und ethnischer Sicht bei Anwendern und Entwicklern unbeliebter.
Aus diesem Grund ist die, im folgenden Kapitel 3.2 vorgestellte Skype API, die einzige
Möglichkeit auf die Funktionen von Skype zuzugreifen und für die eigenen Zwecke anzupassen. Für extern entwickelte Skype-Plugins gab es zu einem früheren Zeitpunkt einen
offiziellen Markt, welcher aber wieder von Skype geschlossen wurde. Dies sind die Hauptgründe welche aus Entwicklersicht gegen den Einsatz von Skype sprechen.
Auf der anderen Seite bestehen folgende entscheidende Vorteile, welche nach Cao u. a. [3]
für die Verwendung von Skype als Middleware sprechen:
• Alle End-to-End Datenströme sind durch eigene Verschlüsselungs-Algorithmen
gesichert sowie jeder User mit einem eindeutigen digitalen Zertifikat versehen.
• Skype ist in der Lage problemlos Network-Address-Translation (NAT) und
Firewalls zu passieren.
• Skype routet die Datenströme intelligent und dynamisch um geringe Latenzzeiten
zu erreichen. Auch während einer aktiven Verbindung kann neu geroutet werden.
• Skype stellt seine Entwicklungs API frei zur Verfügung, die es jedem erlaubt Plugins zu entwickeln, die auf alle Funktionen Zugriff haben.
Aufgrund des fortgeschrittenen Reifegrades und der professionell betriebene Entwicklung,
ist Skype zu einem der qualitativ hochwertigsten kostenlosen VoIP Programmen herangereift. Zudem ist Skype die weit verbreiteste Software seiner Art und ist damit für den
breiten Einsatz in vielen Anwendungsgebieten für unterschiedliche Zielgruppen gut geeignet.
Kapitel 3 Einführung und Analyse der Skype API
17
Abbildung 3.1 zeigt eine Einschätzung der Brockmann & Company Analyse- und Unternehmensberatung aus Boston über die Entwicklung der Benutzerzahlen von 2007 bis 2010.
Abbildung 3.1: Abschätzung der Skype User Entwicklung von 2007 bis 2010 nach Brockmann&Company [2].
Dank der rasant wachsenden Entwicklung und der genannten technischen Vorteile ist
Skype für den Einsatz im Anwender Bereich multimodaler Informationssysteme besonders geeignet. Die verwendeten Routing-Algorithmen ermöglichen eine IP-gestützte
Paketübertragung ohne, dass zusätzliche Anwendungen entwickelt und verteilt werden
müssen.
Dies hat einen großen Vorteil, da sich neue Anwendungen am Consumer-Markt meist nur
langsam etablieren und bei mangelnder Distribution oft unter Versions-Konflikten leiden.
Somit ist Skype als ausgereifte, leicht verfügbare und etablierte Anwendung die optimale
Grundlage für die Zwecke dieser Arbeit.
Kapitel 3 Einführung und Analyse der Skype API
18
3.2 Analyse der Skype API
3.2.1 Aufbau und Konzept
Die Skype API wird direkt vom Hersteller herausgegeben und ist unter der Entwickler
Rubrik der Website frei einsehbar. Prinzipiell gibt es zwei Ebenen auf denen externe
Programme mit Skype kommunizieren:
• Die Befehls-Protokoll-Ebene ist ein text-basierter Sprach Paradigma, auf dessen Grundlage eine externe Anwendung mit Skype kommunizieren kann, nachdem
ein Kommunikationskanal auf der Kommunikations-Ebene hergestellt wurde. Diese
Sprache ist plattformunabhängig und enthält alle Befehle, welche Skype bereithält.
• Die Kommunikations-Ebene ist eine Sammlung von Objekten für externe Anwendungen um eine Verbindung mit dem Skype Client herzustellen und mit diesem
zu kommunizieren. Diese baut auf der Befehls-Protokoll-Ebene auf und ist Plattform abhängig, d.h. sie unterscheidet sich in der Implementierung auf verschiedenen
Betriebssystemen.
Die zugrunde liegende Befehls-Protokoll-Ebene basiert auf asynchronen Sprach-Befehlen,
welche mit Skype ausgetauscht werden und für alle Betriebssysteme gleich sind. Die darauf aufbauende Kommunikations-Ebene besteht aus einem sogenannter Wrapper, der
in verschiedenen Sprachen die Skype API als Objekte mit Eigenschaften und Methoden
implementiert. Dies erlaubt die Bedienung aller Funktionen auf höherer Ebene in Form
diverser Bibliotheken, welche im Abschnitt 3.2.4 vorgestellt werden.
3.2.2 Befehls-Protokoll-Ebene
Im folgenden Abschnitt wird die Befehls-Protkoll-Ebene anschaulich erläutert, auf welcher
später die Skype API Wrapper aus Kapitel 3.2.4 basieren. Die Kommunikation auf dieser
Ebene findet stets sequentiell statt. Das bedeutet, dass ein neuer Befehl erst gesendet wird,
wenn die Antwort des vorherigen vorliegt.
Die allgemeine Befehls-Syntax ist folgendermaßen aufgebaut:
<BEFEHL>[*<Argument>][<BEFEHL>][<Argument>]
Die Antwort von Skype besteht, abhängig vom gesendeten Befehl, aus optionalen Parametern zur Bestätigung in folgender Form:
[<BEFEHL ANTWORT>][*<Argument>][<BEFEHL>][<Argument>]
Kapitel 3 Einführung und Analyse der Skype API
19
Ein einfacher Befehl auf Befehls-Protokoll-Ebene lautet zum Beispiel:
GET USER echo123 ONLINESTATUS
Dieser Befehl liest die angegebene Eigenschaft eines Users aus der Skype Datenbank aus.
Die Antwort von Skype besteht aus dem gesendeten Befehl und einem Rückgabewert. Die
Antwort bezieht sich damit direkt auf den zuvor gesendet Befehl:
USER echo123 ONLINESTATUS ONLINE
Die häufigsten Befehlsarten sind in Tabelle 3.1 mit Syntax und Beispiel aufgeführt.
Befehl /
Beispiel
Einzelbefehl
<BEFEHL>
MINIMIZE
Falscher Befehl <KEIN BEFEHL>
ASDF
GET-Befehl
GET <VARIABLE>
GET USERSTATUS
SET-Befehl
SET <OBJEKT><ID>
<PARAMETER><WERT>
SET SMS 123 BODY Hallo!
ALTER- Befehl ALTER <OBJEKT><ID>
<PARAMETER>
ALTER SMS 123 SEND
Antwort /
Beispiel
<ANTWORT>
WINDOWSTATE MINIMIZED
ERROR <NUMMER><MELDUNG>
ERROR 2 Unknown command
<VARIABLE><ANTWORT>
USERSTATUS ONLINE
<OBJEKT><ID>
<PARAMETER><WERT>
SMS 123 BODY Hallo!
ALTER <OBJEKT><ID>
<PARAMETER>
ALTER SMS 123 SEND
Tabelle 3.1: Skype API Syntax Tabelle
Bei längeren Befehlsketten wie z.B. einem Sprachanruf findet die Kommunikation asynchron statt d.h. es folgen auf einem Befehl mehrere Antworten von Skype. Ein kurzes
Beispiel soll den Ablauf einer typischen Befehlskette auf Befehls-Protokoll-Ebene veranschaulichen.
Kapitel 3 Einführung und Analyse der Skype API
20
In diesem vereinfachten Beispiel wird ein Sprachanruf zum Konfigurations-account Echo123
getätigt und nach erfolgreicher Verbindung wieder beendet. Die eingerückten Codeblöcke
sind die Befehls-Antworten, welche von Skype empfangen wurden.
// Audio - Verbindung mit dem Skype User echo123
-> CALL echo123
// Anruf mit der ID 14662 ist eingegangen
<- CALL 14662 STATUS UNPLACED
// Anruf wird zum Ziel - User durchgestellt
<- CALL 14662 STATUS ROUTING
// Verbindung hergestellt
<- CALL 14662 STATUS RINGING
// Ziel - User antwortet
<- CALL 14662 STATUS INPROGRESS
//
<<<-
Bestehende
CALL 14662
CALL 14662
CALL 14662
Verbindung
DURATION 1
DURATION 2
DURATION 3
// Verbindung abgebaut
<- CALL 14662 STATUS FINISHED
Quellcode 3.1: Aufzeichnung des Befehls-Protokoll bei einem Sprachanruf.
Im Anhang A befindet sich das vollständige Protokoll, welches mit dem Programm
Tracer.exe durchgeführt und aufgezeichnet wurde.
Kapitel 3 Einführung und Analyse der Skype API
21
3.2.3 Datenübertragung mittels Ap2Ap
Das Application-to-Application Feature von Skype kurz Ap2Ap genannt, ermöglicht es unsichtbar für den Benutzer, Informationen zwischen Skype Instanzen auszutauschen. Dafür
muss auf jedem System der betreffenden Instanz eine entsprechende Plugin-Anwendung
mit identischen Namen (maximal 32 Bytes) gestartet und mit Skype verbunden sein.
Die Informationen werden über einzelne Streams paketweise zwischen den Instanzen ausgetauscht und können bis zu 64 KB pro Stream betragen. Ein Stream kann Text-Daten und
Datagramme enthalten. Datagramme werden allerdings von Skype als unsichere Pakete
eingestuft und haben eine geringere Sicherheit korrekt versendet zu werden. Da alle Daten
in UTF-8 kodiert werden, müssen binäre Daten vor der Übertragung in UTF-8 Strings
konvertiert werden.
Um Informationen über einen Stream zu übertragen, muss nach erfolgreicher Verbindung
der Plugin-Anwendung zu Skype über ATTACH zunächst mit dem Befehl:
CREATE APPLICATION <appname>
eine Applikation mit identischem Namen auf beiden Skype-Instanzen erstellt werden. Anschließend wird auf der Server-Instanz durch den Befehl:
ALTER APPLICATION <appname> CONNECT <skypename>
eine Verbindung zu einer Client-Instanz mit einem eindeutigen Usernamen hergestellt. Um Daten in einen Stream zu schreiben wird über den Befehl:
ALTER APPLICATION <appname> WRITE <skypename>: <id><text>
beliebige Text-Daten mit einer eindeutigen ID gesendet, die sich aus dem Usernamen der Client-Instanz und einer inkrementellen ID zusammensetzt.
Wenn die Verbindung beendet wird bevor der Empfänger die Nachricht empfangen hat,
oder es nach 8 Minuten zu einem Timeout durch Skype kommt, gehen die gesendeten
Daten verloren. Das Problem tritt bspw. dann auf wenn der Sender die Verbindung
schließt ohne auf die Rückmeldung des Empfängers zu warten. Daher muss in einer Ap2Ap
Implementierung stets eine kontrollierte Datenübertragung sichergestellt werden.
Kapitel 3 Einführung und Analyse der Skype API
22
3.2.4 Vergleich der API Wrapper
Um nun auf der Kommunikations-Ebene aus Kapitel 3.2 eine Verbindung zu Skype herzustellen und auf dieser mit Skype zu kommunizieren, werden für die Entwicklung von
Plugin-Applikationen sogenannte Wrapper verwendet, welche Klassen mit Methoden und
Eigenschaften sowie Events in verschiedenen Sprachen bereitstellen. Damit können Entwickler auf alle Funktionen von Skype zugreifen ohne die Regeln der Befehls-Ebene beachten zu müssen.
Momentan gibt es drei etablierte Wrapper: Skype4COM, Skype4Java und Skype4Py.
Diese werden im folgenden Teil kurz vorgestellt und sind in Tabelle 3.2 zusammengefasst.
Skype4COM ist ein offizieller von Skype veröffentlichter Wrapper, welcher als ActiveX
Component-Object-Model (COM) nur für Windows Betriebssystem bereitsteht. Über das
Skype4COM Interface können alle COM-fähigen Sprachen wie Visual Studio oder Delphi
auf Skype zugreifen.
Skype4Java wird von der Skype Community als open-source Wrapper unter der Apache
2.0 Lizenz entwickelt und offiziell von Skype unterstützt. Die Java Bibliotheken können via
Java-Virtual-Machine (JVM) crossplattform auf Windows, Linux und Mac OS Systemen
verwendet werden. Allerdings ist dieser seit mehreren Jahren nicht mehr geupdatet worden
und aufgrund zahlreicher unbehobener Bugs im Ap2Ap Bereich für diese Arbeit nicht
brauchbar.
Skype4Py wird ebenfalls von der Skype Community als open-source Wrapper unter der
Berkeley-Software-Distribution Lizenz (BSD) bereitgestellt. Die Python Bibliotheken sind
ebenso crossplattform fähig und bauen direkt auf dem objektorientierten Skype4COM
Interface auf. Skype4Py ist der am meisten gewartete Wrapper und wurde in dieser Arbeit
auch aufgrund der Kompatibilität zum Robot-Operating-System verwendet.
Kapitel 3 Einführung und Analyse der Skype API
Skype4Py
Windows
Linux
Mac OS
Lizenz
Proprietär
Berkeley Software
Distribution
Herausgeber
Skype
Community
Community
Sprache
COM
Java
Python
API Version
3.2
2.5
3.6
Letzte Version / 1.0.33 am
1.0 am
1.0.32.0 am
Release
29.10.2009
30.09.2006
26.09.2009
Besondere
Offizieller Wrapper.
Keine neuen Updates. Häufigste Updates.
Merkmale
Bereits in Installation Enthält nicht
enthalten.
behobene Bugs.
Plattformen
Skype4COM
Windows
Skype4Java
Windows
Linux
Mac OS
Apache 2.0
23
Tabelle 3.2: Übersicht Skype Wrapper
Kapitel 4
Entwicklung und Interaktion mit
Sky2ROS
4.1 Einführung in ROS
Das Robot-Operating-System ist kein eigenständiges Betriebssystem wie der Name vermuten lässt, sondern ein open-source Meta-Framework, welches auf Basis eines zugrunde liegenden Betriebssystemen wie bspw. Linux implementiert ist. Das System wurde
ursprünglich 2007 von den Stanford-Artifical-Intelligence-Laboratories entwickelt und ein
Jahr später vom Willow-Garage Labor für Robotik in gemeinschaftlicher Entwicklung mit
verschiedenen Einrichtungen weiterentwickelt. Moore [10] zitiert die Beschreibung der
ROS-Core Entwickler über das System:
“ROS is an open-source, meta-operating system for your robot. It provides the services
you would expect from an operating system, including hardware abstraction, low-level device control, implementation of commonly-used func- tionality, message-passing between
processes, and package management.”
Das Zusammenspiel verschiedener Applikationen in ROS beruht auf einer GraphArchitektur wie in Abbildung 4.1 zu sehen ist. Dabei stellen Nodes die Prozesse als
Knoten dar, welche Daten als Topics in Form von Services oder Messages über ihre
Kanten austauschen. Das System selbst besteht aus einem festen Kern (ROS-Core) und
einer Sammlung zusätzlicher Benutzer-spezifischer Funktionen Packages genannt, welche
in C++ oder Python geschrieben sind.
Der große Vorteil von ROS für die Entwicklung im Kontext mit verteilten externen Anwendungen wie Skype ist, dass die Datenströme zwischen den Prozessen (Nodes) besonders
leicht ersichtlich und beeinflussbar sind. Dafür dienen eingebettete GUIs wie der rxgraph
aus Abbildung 4.1 oder direkte Manipulation in Echtzeit. Die zur internen Kommunikation
benötigten Topics, Messages und Services werden im folgenden Kapitel kurz erläutert.
24
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
25
Abbildung 4.1: Darstellung von Nodes und Topics in der ROS GUI rxgraph.
4.2 ROS Kommunikations-Prozesse
Die zwei Ansätze zur internen Kommunikation in ROS sind:
• Subscriber-Publisher Kommunikation via Messages
• Service-Client Kommunikation via Services
Beide enthalten eine Ansammlung grundlegender Datentypen wie Ganzzahlen, Gleitkommazahlen, Zeichenketten und weitere:
• int8, int16, int32, int64
• float32, float64
• string
• time, duration
• andere Messages
• header Daten
• array[ ] mit variabler Länge und array[C] mit fixer Länge
Der Nachrichtenaustausch über eine Subscriber-Publisher Semantik läuft wie folgt
ab: Ein Prozess (Node), welcher Informationen benötigt, abonniert (Subscriber) ein
gewünschtes Thema (Topic) oder veröffentlicht (Publisher) Informationen in diesem. Dabei sind die Themen völlig unabhängig von Art oder Anzahl der beteiligten Prozesse.
Bei einer Services-Client Kommunikation ruft der abfragende Prozess (Client) mit seinen
Input-Parametern den betreffenden Prozess (Server) auf und liest die Antwort direkt aus.
Der klare Vorteil dieser Abläufe liegt darin, dass Daten entkoppelt von deren Prozessen
gelesen und geschrieben werden können. So tritt kein Fehler auf wenn ein abzufragender
Prozess beendet wird, da das zugehörige Thema autark ist und weiterhin existiert.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
26
Ein Beispiel für eine einfache Message könnte folgendermaßen aussehen:
Header
string
string
string
header
user
status
mood
Diese Message enthält die Variable header vom Typ Header und enthält Metainformationen
über den aktuellen Status der Nachricht wie z.B. eine Timestamp. Des weiteren werden
drei Werte user, status und mood vom Typ String bereitgestellt. Ein Beispiel für einen
Service könnte folgendermaßen aussehen:
Header
string
--Header
string
header_request
request
header_response
response
Dieser Service enthält die Variablen header request und header response vom Typ Header
sowie request und response vom Typ String. Dabei sind der Input (oben) und der Output
(unten) durch drei Bindestriche getrennt.
4.3 Entwicklung und Funktionsweise von Sky2ROS
4.3.1 Aufbau und Konzept
Die im Zuge dieser Arbeit entwickelte Middleware Sky2ROS besteht aus mehreren Python
Modulen, welche zwei zentrale Aufgaben erfüllen:
• Kommunikation zwischen zwei Skype Instanzen
• Bereitstellung der Informationen über zentralen ROS-Core
Die grundlegende Funktionsweise ist in Abbildung 4.2 abgebildet und läuft wie folgt ab:
Im Serverseitigen Betriebssystem wird entweder direkt über die Standard-Eingabe durch
Aufruf des Python Skripts test.py(user,infos) oder durch eine der ROS-Nodes die Abfrage
nach Informationen über einen externen User an Sky2ROS gestartet:
• info talker.py – Publisher-Node
• info server.py – Server-Node
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
27
Das gesamte Package besteht aus Services, Messages sowie mehreren Python Modulen inklusive der Skype4Py Bibliothek, welche im folgenden Abschnitt genauer erläutert werden.
Sky2ROS überprüft zunächst ob der angegebene Skype User in der Kontaktliste des Servers existiert. Ist dies nicht der Fall gibt Sky2ROS eine entsprechende Fehlermeldung und
die verfügbaren User zurück. Ist der User verfügbar, versucht Sky2ROS die gewünschten
Informationen auf zwei Wegen abzurufen. Zuerst werden die Informationen abgerufen,
welche direkt über Skype verfügbar sind wie bspw. Status, Mood, City. Für diese Abfrage
benötigt der Client keine Plugin-Applikation und kann sogar offline sein, da diese Informationen in der User-Datenbank von Skype gemäß der letzten Aktualisierung gespeichert
sind.
Anschließend versucht Sky2ROS eine Verbindung über den Skype Ap2Ap-Kanal mit dem
angegeben User herzustellen. Voraussetzung dafür ist, dass der User online ist und die
clientseitige Ap2Ap-Anwendung getInfo.py mit dessen Skype-Instanz verbunden ist. Ist
auch diese Voraussetzung erfüllt, liest der Ap2Ap-Client den String der Anfrage aus und
ermittelt die angefragten Informationen aus zwei verschiedenen Quellen. Zuerst werden
Informationen aus den Umgebungsvariablen wie die lokale Uhrzeit, Prozessor, RechnerArchitektur etc. vom Betriebssystem abgefragt. Anschließend werden externe Informationen aus dem Internet abgerufen. Dabei werden unter anderem die IP-Adresse und die
zugehörigen Geoinformationen über die online API von IPInfoDB abgerufen, welche über
das Geotargeting-Verfahren aus Kapitel 2.2 ermittelt werden. Dazu zählen Angaben über
den Staat, Bundesland, Stadt, Zeitzone, etc. in der sich der Benutzer befindet.
An dieser Stelle sollte in zukünftigen Versionen auch die Erfassung von Geoinformationen
über GPS-Empfänger, Mobilfunktelefone oder Wireless Accesspoint Localization, wie in
Kapitel 2 beschrieben, herangezogen werden und durch entsprechende Implementierung
in ROS als eigene ROS-Nodes integriert werden. Auch die Kombination aus mehreren
Quellen ist sinnvoll. Somit können Teilnehmer im Innen- und Außenbereich redudant
geortet werden. Anzumerken ist, dass diese Verfahren technisch bereits möglich, aber aus
rechtlicher Sicht und Gründen der Privatsphäre noch nicht etabliert sind.
Sind alle externen Daten gesammelt, werden diese als String an die Server Applikation
zurückgegeben. Anschließend fügt das Server-Skript die lokalen und externen Informationen zusammen und gibt diese entweder direkt über stdout (Monitor-Terminal) aus oder
stellt diese in ROS als Messages oder Services zur Verfügung.
Bei diesem Prozess wird der deutliche Vorteil von Skype ersichtlich. Bei der Entwicklung
mussten weder Kriterien für die Verbindungs-Herstellung noch das Routing der Pakete
berücksichtigt werden, da diese durch die Skype Verbindung bereits sichergestellt sind.
Abbildung 4.2 veranschaulicht den Intra- bzw. Inter-Informationsfluss zwischen Server
und Client.
Es können mittels Ap2Ap auch User abgefragt werden, welche sich nicht in der Kontaktliste
der Server Skype-Instanz befinden, aber online mit dem Skype-Netzwerk verbunden sind.
Dies wurde in diesem Fall aber vorausgesetzt und somit sichergestellt, dass das notwendige
Kriterium für eine erfolgreiche Abfrage gegeben ist.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
28
Das serverseitige Package Sky2ROS/nodes beinhaltet die Module:
• info server.py – Server
• info client.py – Client
• info talker.py – Publisher
• info listener.py – Subscriber
Diese Module stellen die abgerufenen Informationen als Services bzw. Messages in ROS
zur Verfügung. Für die Abfrage der Daten beziehungsweise die Kommunikation zwischen
den Skype-Instanzen dienen die Bibliotheken von Skype4Py sowie die Module:
• getParams.py – Abfrage der verfügbaren Parameter
• getInfo.py – Abfrage von Informationen über einen User
Im clientseitigen Package Sky2ROS/client befinden sich die Module:
• getInfo.py – Abfrage des Betriebssystems sowie Internet-Diensten
• getGeo.py – XML-Abfrage von Geoinformationen
Diese verwenden wiederum die XML-Bibliothek SAX sowie den Skype4Py Wrapper.
Abbildung 4.2: Schichtenmodell Sky2ROS Client und Server. Die Skype Instanzen kommunizieren über den Ap2Ap-Kanal, welcher von Skype geroutet wird. Über
die Skype4Py Bibliotheken steuert Sky2ROS die eigene Skype Instanz und
stellt die abgefragen Informationen in ROS zur Verfügung.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
29
4.3.2 Skype-Abfrage mit Ap2Ap
Der erste Schwerpunkt des praktischen Teils dieser Arbeit liegt auf der Übertragung
von Meta-Daten über Skype nach ROS. Im folgenden Abschnitt wird der Ablauf einer
vollständigen Abfrage anhand von relevanten Code-Ausschnitten der beteiligten Module
vorgestellt. Anschließend wird näher auf die Verarbeitung und Aufbereitung von Geoinformationen über eine XML-Abfrage eingegangen.
Dies ermöglichen die gleichnamigen Module getInfo.py von Server und Client. Zuerst
stellt der Server die Verbindung zwischen der eigenen und der externen Skype Instanz her.
Dabei wird dem Skype Objekt der Event-Handler SkypeEvents() übergeben, welcher die
notwendigen Events für die Ap2Ap-Übertragung auslöst.
# instatinate Skype object and set our event handlers
global skype
skype = Skype4Py . Skype ( Events = SkypeEvents ())
skype . On At ta ch me nt St at us = OnAttach
Danach wird geprüft ob der übergebene User existiert und im negativen Fall eine entsprechende Rückmeldung mit Vorschlägen ausgegeben. Existiert der User in der Kontaktliste, werden zunächst die lokalen Parameter von dessen Skype Konto ausgelesen und in
der Variable local gespeichert.
# get skype information without ap2ap
local = getLocalInfo ( reqUser , params )
In der Funktion getLocalInfo(reqUser,params) wird zunächst der Suchstring aufbereitet
und anschließend nach Schlüsselwörter für die einzelnen Parameter durchsucht.
# ## SKYPE INFORMATION ###
if not req . find ( " status " )== -1 or all :
result += uprofile . OnlineStatus
if not req . find ( " mood " )== -1 or all :
result += uprofile . MoodText
if not req . find ( " fullname " )== -1 or all :
result += uprofile . FullName
if not req . find ( " country " )== -1 or all :
result += uprofile . Country
if not req . find ( " timezone " )== -1 or all :
result += str ( uprofile . Timezone )
[...]
return result
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
30
Dabei wird weder die Groß- und Kleinschreibung noch die Reihenfolge oder Abgrenzung
der Schlüsselwörter berücksichtigt. Dies vereinfacht die generische und manuelle Eingabe
erheblich. Der Suchstring status+mood+fullname liefert z.B. das gleiche Ergebnis wie
StatusMoodFullname.
Anschließend werden die externen Parameter über den Ap2Ap-Kanal abgerufen. Dafür
wird zunächst die Verbindung zur externen Skype-Instanz hergestellt und anschließend
eine Wartezeit über event.wait(5) eingelegt, welche mit Antwort des Clients endet oder
nach 5 Sekunden abgebrochen wird. Im Falle eines Abbruchs wird am Ende des Skripts
eine Fehlermeldung generiert und mit der lokalen Antwort zurückgegeben.
# obtain reference to Application object
app = skype . Application ( ’ SKY2ROS ’)
# create application
app . Create ()
# connect application to user
app . Connect ( reqUser )
# wait until event handlers do the job
event . wait (5)
Ist die Verbindung erfolgreich hergestellt wird das Event ApplicationStreams durch den
Event-Handler ausgelöst. Die Funktion prüft ob der obligatorische Stream vorhanden ist
und übermitteln dann über den Befehl streams[x].Write eine Nachricht vom Typ String
über den Stream.
# Send and recieve data
class SkypeEvents :
def Ap pl ic ati on St re am s ( self , app , streams ):
if streams :
streams [0]. Write ( " SKY2ROS_REQUEST : " + params )
Das Auslesen des Suchstrings und die Verkettung der Daten zu einem Antwortstring
verläuft auf dem clientseitigen Skript analog zur oben beschriebenen getLocalInfo(infos)
Funktion. Sobald eine Antwort-Nachricht vom Client über den Stream empfangen wird,
liest die Funktion ApplicationReceiving den Stream aus und beendet die Wartezeit über
event.set().
# Incoming Answer
def A p p l i c a t i o n R e c e i v i n g ( self , app , streams ):
for s in streams :
global answer
answer = s . Read ()
event . set ()
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
31
Abschließend werden die lokale und die externe Antwort aneinandergefügt und als UTF-8
kodierter String, wie in Kapitel 5.2 beschrieben, zurückgegeben.
# return stream from local and ap2ap
local += answer
local = local . encode ( ’utf -8 ’)
[...]
return temp
Die beschriebenen Funktionen beschränken sich auf die reine unidirektionale Übertragung
von Meta-Daten. Damit sind die Möglichkeiten aber noch lange nicht ausgeschöpft, welche
Sky2ROS mit Hilfe des Ap2Ap-Kanal bieten kann. Die Übertragung von beliebigen Nutzdaten (Payload), bspw. zur Synchronisation von Datenbanken oder für Backup-Lösungen,
könnten bestehende Anwendungen oder Protokolle wie Microsoft Exchange ergänzen oder
sogar ersetzen.
Eine weitere Möglichkeit wäre eine Remote-Code-Execution, bei der zum Beispiel PythonModule auf Client-Systeme übertragen und ausgeführt werden können. Hier wird die
Bedeutung des untersuchten Ap2Ap-Kanals ersichtlich, welcher auf Basis der im Zuge
dieser Arbeit implementierten Statusabfragen, auch auf viele weitere Anwendungen und
Dienste erweiterbar ist.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
32
4.3.3 XML-Abfrage und Parsing
Der zweite Schwerpunkt dieser Arbeit liegt auf der Benutzerlokalisierung. Diese wird wie
in Kapitel 2.2 beschrieben, über das Geotargeting-Verfahren mit Hilfe der Geolocation API
des Anbieters IPInfoDB ermöglicht. Dafür sind zwei Prozesse von besonderem Interesse.
Zuerst ruft ein Skript die Geolocation API auf und gibt die Daten im XML-Format
zurück. Diese werden im Modul getGeo.py ausgelesen und entsprechend aufbereitet, wie
in Tabelle 4.1 zu sehen ist. Die Funktion geoDict() erstellt zuerst ein Objekt der Klasse
geoHandler, welche die nötigen Methoden zur Verarbeitung (Parser) einer XML-Datei der
SAX-Bibliothek bereitstellt.
Anschließend liest der XML-Parser den Dateinamen ein – in diesem Fall die URL der
IPInfoDB http://ipinfodb.com/ip query.php – und wandelt die XML-Einträge in Datenpaare vom Typ Dictionary um. Der Eintrag Status der XML-Vorlage wird vor der
Rückgabe wieder entfernt, da dieser in Konflikt mit dem Status-Parameter von Skype ist.
def getDict ( dateiname ):
handler = geoHandler ()
parser = sax . make_parser ()
parser . se tConte ntHand ler ( handler )
parser . parse ( dateiname )
# Parameter conflict with skype status
del handler . ergebnis [ " Status " ]
return handler . ergebnis
Die beschriebene Funktion getDict() wird über das Modul getInfo aufgerufen, in welcher
das zurückgegebene Objekt vom Typ Dictionary dem Ergebnis-Array hinzugefügt wird.
# ## GEO INFORMATION ###
# Returns dictionary with geo information
geoDict = getGeo . getDict ( dateiname =[...])
# Adds matching parameters to result
for key in geoDict :
if not req . find ( key . lower ())== -1 or all :
result . append ( geoDict [ key ])
Tabelle 4.1 zeigt die Daten im XML-Format und als geparstes Dictionary Objekt.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
XML Ausgabe von IPInfoDB
<? xml version=“1.0” encoding=“UTF-8” ?>
<Response>
<Ip>129.187.205.238</Ip>
<Status>OK</Status>
<CountryCode>DE</CountryCode>
<CountryName>Germany</CountryName>
<RegionCode>02</RegionCode>
<RegionName>Bayern</RegionName>
<City>München</City>
<ZipPostalCode />
<Latitude>48.7</Latitude>
<Longitude>13.4667</Longitude>
<Timezone>0</Timezone>
<Gmtoffset>0</Gmtoffset>
<Dstoffset>0</Dstoffset>
</Response>
33
Dictionary Objekt nach Parsing
{
Ip‘:‘129.187.205.238‘ ,
’
Status‘:‘OK‘ ,
’
CountryCode‘:‘DE‘,
’
CountryName‘:‘Germany‘ ,
’
RegionCode‘:‘02‘ ,
’
RegionName‘:’Bayern’ ,
’
‘City’:‘München’ ,
‘ZipPostalCode’ : ‘’,
Latitude‘:’48.7‘ ,
’
Longitude‘:’13.4667‘ ,
’
Timezone‘:0 ,
’
‘Gmtoffset’:0 ,
‘Dstoffset’:0
}
Tabelle 4.1: Meta-Daten vor und nach XML-Parsing.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
34
4.3.4 Publishing in ROS
Um nun die gewünschten Informationen in ROS zu kommunizieren, welche in den Kapiteln 4.3.2 und 4.3.3 vom Server abgefragt wurden, finden die Module info server.py als
Service oder info talker.py Modul als Publisher Verwendung. Im folgenden Abschnitt
wird das Publisher-Modul info talker.py genauer erläutert, welches den Vorteil bietet alle Informations-Parameter eines Skype Users als separate Topics bereitzustellen, wie in
Abbildung 4.3 gezeigt.
Abbildung 4.3: ROS Graph mit Informations-Topics der einzelnen User. Jeder Parameter wird für jeden User als eigenes Topic angelegt und kann von einem
Subscriber oder Publisher abbonniert bzw. beschrieben werden.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
35
Zunächst soll die Message infos.msg betrachtet werden, die als Klasse für Topics dient,
welche vom Modul info talker.py veröffentlicht werden. Die Message enthält ein header
Objekt, in dem Headerdaten wie eine Timestamp gespeichert sind sowie alle Parameter,
die über Sky2ROS abgerufen werden können.
Header
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
header
status
mood
fullname
country
timezone
datetime
architecture
network_name
processor
os
geoip
geostatus
geocountrycode
geocountryname
georegioncode
georegionname
geocity
geozippostalcod
geolatitude
geolongitude
geotimezone
geogmtoffset
geodstoffset
Zuerst erstellt das Modul info talker.py einen Node in ROS mit der Bezeichnung skype.
Anschließend wird versucht ein Objekt der getData Klasse – welche im folgenden Abschnitt
genauer erläutert wird – zu instanziieren und dessen Funktion Loop() aufzurufen, welche
solange existiert wie der zuvor erstellte Node.
if __name__ == ’ __main__ ’:
rospy . init_node ( ’ skype ’)
try :
data = getData ()
data . Loop ()
except rospy . R O S I n t e r r u p t E x c e p t i o n : pass
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
36
Die Klasse getData legt bei Instanziierung die folgenden Objekte an:
• msg: Objekt vom Typ info(), welche alle Parameter der infos.msg enthält.
• pub: Dient als Array für alle Topics und User welche iterativ veröffentlicht werden.
• dat,upd : Dienen als Array für alle Informationen der zugehörigen Topics.
from skypeApp . msg import info
class getData ():
def __init__ ( self ):
self . msg = info ()
self . pub = [ ]
self . dat = [ ]
self . upd = [ ]
# Get parameter array
self . params = getParams . Gparams ()
Die oben genannte Funktion Loop(), welche kontinuierlich aktiv ist solange das Skript in
ROS existiert, läuft wie folgt ab: Zuerst werden die verfügbaren User mit Hilfe des Moduls
getAvUsers.py in ein Array geladen. Anschließend werden in einer Schleife, welche durch
die geladenen User iteriert, alle verfügbaren Informationen der User abgefragt.
Dafür werden zunächst die Sonderzeichen Punkt, Komma und Bindestrich – welche zwar in
einem Skype-Namen erlaubt sind aber nicht von ROS als Topic-Namen akzeptiert werden
– eliminiert und durch Platzhalter substituiert. Ist dies geschehen, wird ein neuer Topic
update für jeden User erstellt. Dieser hat die Aufgabe bei Aufruf (eigentlich durch Beschreiben mit dem Boolean-Wert True) die Daten aller Topics eines Users zu aktualisieren,
sprich neu zu veröffentlichen.
# Eliminates , . name = name . replace ( " ," ," CC " )
name = name . replace ( " . " ," PP " )
name = name . replace ( " -" ," MM " )
# Updatelistener
self . update = rospy . Subscriber ([...])
Danach werden alle verfügbaren Informationen pro User über das Modul getInfo.py abgerufen und als Array gespeichert. Die Informationen werden nun einzeln extrahiert und
zusammen mit deren Bezeichnung in der, im Array params festgelegten Reihenfolge, in
einem neuen Topic veröffentlicht.
Der Name des Topics setzt sich dabei aus (skype/user/<user >/<info >) zusammen und
wird als Message vom Typ info gespeichert. Dabei werden die Marker LOCAL RESPONSE
und EXTERN RESPONSE an den Positionen 0, 6, 7 und 26 des Info Arrays übersprungen,
da diese der Konvention des Protokolls geschuldet sind und keine Informationen beinhalten.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
37
Zuletzt werden die gesammelten Informationen aller User, welche das Array dat beinhaltet
in das Array upd kopiert, damit die letzten Informationen auch während eines erneuten
Abrufes bereitstehen und nach erfolgreicher Abfrage neu übernommen werden. Auf diese
Weise wird sichergestellt, dass stets die aktuellste Informationen bereitstehen und keine
Lücken bzw. veraltete Datensätze entstehen.
def _Update ( self , data ):
print data
for i in range (0 , len ( self . upd )):
self . pub [ i ]. publish ( self . upd [ i ])
rospy . sleep (3.0)
4.3.5 Use-Cases
Mittels dem Skript test.py können alle Informationen auch ohne ROS manuell abgerufen
werden und die Zugriffszeiten optional gemessen werden. Um die internen Abläufe besser
zu verstehen und die Datenübertragung gezielt zu testen wird in diesem Abschnitt die
manuelle Bedienung und die möglichen Zustände beschrieben.
Um eine manuelle Abfrage zu starten muss über die Konsole der Python Interpreter das
Skript test.py mit den Parametern User und Infos starten. Das Skript liest die übergebenen
Argumente aus und ruft die Funktion getUserInfo im Modul getInfo auf. Anschließend wird
die Rückgabe direkt in der Konsole ausgegeben.
Tabelle 4.2 zeigt alle möglichen Fälle, welche bei einem Aufruf der getUserInfo(user,info)
Funktion, auftreten können.
Kapitel 4 Entwicklung und Interaktion mit Sky2ROS
Eingabe (User,Infos)
User = {}
Infos = {}
38
Ausgabe
*Sky2ROS* Please
enter two arguments:
Username, Parameter
Negativ-Bedingung
Keine
*Sky2ROS* Skype
is not running.
Please start client.
*Sky2ROS* Requested
user doesn’t exist.
Please check spelling
of user name.
Availables users are:
<list of users>
*Sky2ROS*
No valid local
parameters.
*Sky2ROS*
No valid extern
parameters.
*Sky2ROS*
No Sky2ROS
Client found.
LOCAL RESPONSE
[. . . ]
Skype Instanz ist
nicht gestartet
User = beliebig
Infos = {}
User = {}
Infos = beliebig
User = beliebig
Infos = beliebig
User = U
Infos = I
User = U
Infos = I
User = U
Infos = I
User = U
Infos = I
User = U
Infos = I
User U
existiert nicht
I enthält keine
gültigen lokalen
Parameter
I enthält keine
gültigen externen
Parameter
Keine Verbindung
zum externen
Sky2ROS Client
Tabelle 4.2: Eingabe/Ausgabe Tabelle.
Kapitel 5
Problembehandlung und Historie
5.1 Skype API Bibliotheken
In der erste Version von Sky2ROS wurde die Sprache Java gewählt und mit den verfügbaren
Bibliotheken des Skype4Java Wrapper implementiert. Java ist als objektorientierte Sprache auf vielen Plattformen etabliert und findet auf zahlreichen Multimedia-Endgeräten
Verwendung. Die Entwicklung auf Grundlage von Java wurde aber aus zwei Gründen
wieder eingestellt.
Zum einen aus mangelnder Kompatibilität von Java zu ROS. Die ermittelten Informationen hätten zwar von Java in Python via temporären Dateien, Datenbank, oder ähnlichen
übertragen werden können, was aber zu negativen Auswirkungen auf die Performance und
die Möglichkeit einheitlich zu Debuggen geführt hätte. Zum anderen konnte folgendes gravierendes Problem bei der Datenübertragung nicht gelöst werden, welches vermutlich auf
einen ungelösten Fehler des veralteten Skype4Java Wrapper zurückzuführen ist:
Nachdem eine Verbindung zwischen zwei Instanzen hergestellt wurde, schlug der erste Versuch einen Stream herzustellen nach jedem Neustart fehl. Dieses Problem wurde auch im offiziellen Forum der Skype Community gemeldet und blieb bis Dato ohne Lösungsvorschlag.
Ein User schrieb folgenden Beitrag in der Skype Developer Community [1]:
“Thanks for the suggustion, i just succeeded in sending datagram messages with app2app
using the Skype4COM library and .net framework 4.0 after discovering that it rarely
connects on the first try. it took two tries to get a stream to send by and after the stream
was setup, it just worked. for future reference to anyone else who has had this problem, the
Skype4Java api seems to be a bit out of date in the App2App section.”
In der zweiten Version wurde Sky2ROS komplett in Python reimplementiert und konnte
mit dem Skype4Py Wrapper problemlos eine Verbindung zwischen zwei Skype Instanzen
herstellen. Leider enthielt die aktuelle Skype4Py Version 1.0.32.0 API auch einen Fehler der
es nicht erlaubte das notwendige skype Objekt mit einem Eventhandler zu instanziieren.
39
Kapitel 5 Problembehandlung und Historie
40
# instatinate Skype object and set our event handlers
global skype
skype = Skype4Py . Skype ( Events = SkypeEvents ())
Der Grund – in der skype Klasse ist das SkypeEvents() Argument nicht korrekt vorgesehen,
sodass der Python-Interpreter die folgende Fehlermeldung zurückgab:
Traceback ( most recent call last ):
File " [...]/ app2app_server . py " ,
[...]
self . _S e t Ev e n t Ha n d le r O bj ( Events )
AttributeError : ’ Skype ’ object has
no attribute ’ _S e t Ev e n tH a n dl e r O bj ’
Da dieser Fehler bereits gemeldet, aber noch nicht behoben worden ist, wurde für die Entwicklung die funktionsfähige Vorgänger-Version 1.0.31.0 verwendet, welche für die Ap2Ap
Funktion einwandfrei funktioniert.
5.2 Zeichenkodierung
Ein weiteres Problem, welches zu lösen galt, war die diverse Zeichenkodierungen. Python speichert die Einträge in Listen literal als ASCII-Zeichen ab. z.B. wird folgendes
Array [0 ä0 ,0 ö0 ,0 ü0 ] als [\x84, \x94, \x81] gespeichert. Skype auf der anderen Seite kodiert
nach Kapitel 3.2.3 alle auf dem Ap2Ap-Kanal übertragenen Daten in UTF-8.
Um die Kompatibilität beim Datenaustausch zwischen Python, Skype und ROS sicherzustellen und alle in UTF-8 möglichen Zeichen korrekt übertragen zu können, wurden
zur Übertragung alle Arrays in Python in Zeilenweise separierte Strings umgewandelt und
als unicode dekodiert. Anschließend können die Strings durch die Methode split() ohne
Informationsverlust in Arrays zurückgewandelt und wieder in UTF-8 rekodiert werden.
# Convert UTF -8 array into unicode string
for i in range (0 , len ( result )):
[...]
uni += ’ NA \ n ’
else :
uni += result [ i ] + ’\ n ’
[...]
return temp . decode ( ’utf -8 ’)
Kapitel 5 Problembehandlung und Historie
41
5.3 Testergebnisse, Performance und Ressourcen
Im folgenden Abschnitt wird in Kürze auf die relevanten Ressourcen Zeit- und Speicherkapazität von Sky2ROS und deren Anwendungen eingegangen.
Das Skript wird von einem Python Interpreter ausgeführt und wird für die
Ausführungsdauer als eigener Prozess gestartet. Dafür werden für Server und Client Skript unterschiedlich viel Kapazitäten benötigt. Python allokiert zwischen 4 bis 7
Megabyte Arbeitsspeicher und ist damit auf aktuellen Desktop PCs vernachlässigbar.
Die ebenfalls geringe CPU-Auslastung hat sich bei der Ausführung des Skripts nicht
signifikant verändert (δ ≤ 5%).
In Tabelle 5.2 und 5.3 befinden sich die gemessenen Werte für die CPU-Auslastung und
die Dauer der Skripte mit folgender Hardwarekonfiguration:
Architektur
Arbeitsspeicher
Prozessoren
Betriebssystem
Kernel
x86
3,0 GB
2 x Intel Pentium 4 3,00 GHz
Ubuntu 10.04
Linux 2.6.3.2-65
Tabelle 5.1: Hardwarekonfigurations.
Die benötigte Dauer für eine Sky2ROS Abfrage wurde über eine Erweiterung des test.py
Skripts gemessen und ausgewertet. Über eine repräsentative Anzahl an Versuchen wurden
dabei die Maxima, Minima, Arithmetisches Mittel und Schwankungen der Prozessdauer
bestimmt. Dabei wurden auch die Kompatibilität zwischen verschiedenen Betriebssystemen getestet und keinerlei Probleme oder Abweichungen festgestellt.
Server
Client
HDD-Speicher 1,72 MiB 1,32 MiB
RAM-Speicher 2,8 MiB 3,3 MiB
Tabelle 5.2: Messwerte Speicher-Bedarf.
Vor allem die Dauer, welche für die Anwendung besondere Relevanz hat, verhält sich nicht
konstant. Bei den Messungen wurden Schwankungen um bis zu 400% festgestellt.
Dabei war hingegen der ersten Annahme die Art oder Anzahl der Informationen statistisch
unabhängig von der Dauer. Das lässt darauf schließen, dass diese hauptsächlich von der
Paketübertragungsdauer abhängt und nicht vom lokalen System. Bei einer Abfrage ohne
externen Sky2ROS Client wird stets bis zum Timeout von 5 Sekunden gewartet. Hier sind
Peaks kaum noch sichtbar, da aus der Messung mit verbundenem Client die mittlere Dauer
unter 5 Sekunden liegt.
Kapitel 5 Problembehandlung und Historie
Mit Client
Anzahl der Abfragen 1 K
Arithmetisches Mittel 0,82 s
Maximum
7,20 s
Minimum
0,10 s
Schwankung
400%
42
Ohne Client
1K
5,14 s
5,20 s
5,11 s
1%
Tabelle 5.3: Messwerte Zeitwerte.
Mögliche erste Lösungsansätze für dieses Deadlock-Problem werden im folgenden Kapitel
5.4 vorgestellt. Dank der geringen Speicher-Anforderung und CPU-Auslastung, genügen
die ausgeführten Python-Skripte auch geringen Hardware Ausstattungen von mobilen Endgeräten. Inwiefern diese zukünftig von Werk aus Python-Dienste unterstützen ist noch
nicht absehbar. Da aber mobile Betriebssysteme wie Android oder iOS auf Linux basieren,
ist die Grundlage für eine Python Unterstützung durchaus gegeben. Dennoch wären auch
zweit Implementierungen in Java oder ActiveX für Microsoft Systeme interessant.
Kapitel 5 Problembehandlung und Historie
43
5.4 Lösung des Deadlock-Problems
Aus den bekannten und gemessenen Werten wird der limitierende Zeit-Faktor besonders
ersichtlich. Die feste Timeout-Dauer von 5 Sekunden bei Skype Instanzen ohne Sky2ROS
ist in der momentanen Implementierung die einfachste Lösung, würde aber ein erhebliches
Problem für die Performance darstellen.
Dies bedeutet, dass bei einer größeren Anzahl von Abfragen wie bspw.
in der
3
Größenordnung von 10 , folglich 5000 Sekunden, d.h. über 80 Minuten vergehen können.
Unter der Annahme, dass ein gewöhnlicher User volatile Informationen wie Status, Mood
oder Location in einem Intervall von 30 Minuten ändert, wären damit die Informationen
um bis zu einer Stunde veraltet. Um dieses Deadlock-Problem zu lösen wurden zwei
theoretische Ansätze entwickelt.
Ein erster praktikabler Lösungsansatz sieht vor, dass jeder bekannte Teilnehmer in ROS
ein Prüf-Bit setzt ob dieser Sky2ROS verwendet oder nicht. Ist dies nicht der Fall, kann
der Timer sofort zurückgesetzt und die Abfrage vorzeitig beendet werden. Damit ist sichergestellt, dass der Abfrage-Prozess nicht unnötig blockiert wird.
Eine zweite Möglichkeit wäre es an Stelle der permanent-statischen Abfrage aller Daten
in einer festen Reihenfolge, diese dynamisch abzufragen. Sprich Informationen einzeln
und nur nach einer Änderung gezielt zu aktualisieren. Die in der Skype API vorgesehen
Events könnten so verwendet werden, dass sie den Server darüber informieren sobald der
Benutzer seine Daten seit dem letzten Aufruf geändert hat. Zum Beispiel beim Wechsel des
Status oder des Aufenthaltsort. Dafür müsste das bestehende System so erweitert werden,
dass gemäß dem vereinbarten Protokoll definierte Events in ROS durch den Teilnehmer
ausgelöst werden.
Eine weitere Alternative könnte eine multi-tasking Abfrage sein. Inwiefern Skype und
der Ap2Ap-Kanal diese unterstützen ist nicht bekannt und müsste durch Versuchsweise
Implementierung auf Durchführbarkeit, Performance und Stabilität getestet werden.
Kapitel 6
Zusammenfassung und Ausblick
In dieser Arbeit wurden die Grundlagen und Möglichkeiten für die Datenübertragung mittels Skype untersucht und in einem ersten Ansatz erfolgreich implementiert. Mit Hilfe der
entwickelten Middleware Sky2ROS, welche eine dezentrale End-to-End Übertragung zweier
Skype Instanzen über den Ap2Ap-Kanal ermöglicht, können beliebige Daten transferiert
werden ohne sich mit den Problematiken wie Verbindungaufbau, Kanalzugriff, Routing
etc. konfrontieren zu müssen.
Neben den Informationen, welche Skype oder das lokale Betriebssystem über einen Teilnehmer bereitstellen, können auch Sensor-Daten einer intelligenten Umgebung wie bspw. einem Wohnraum, Büro oder Auto über Skype übertragen und in ROS integriert werden. Eine weitere Möglichkeit wäre es den bisherigen Kanal bidirektional zu nutzen, sodass Server
und Teilnehmer über die reine Status-Abfrage hinaus, in der Lage sind intelligent miteinander zu kommunizieren. In diesem Fall könnten weitere Dienste wie Daten-Synchronisation
oder Backup-Lösungen zusätzlich angeboten werden.
Von besonderem Interesse sind auch die unterschiedlichen Möglichkeiten der Benutzerlokalisierung. Satelliten-gestütztes GPS, Wireless Accesspoint Localization sowie das verwendete Geotargeting-Verfahren können in Kombination eine zuverlässige und präzise Ortung
für weiterführende Dienste wie bspw. Location-Based-Services gewährleisten. Hier knüpft
diese Arbeit direkt an den zunehmenden Trend mobiler Geo-Anwendungen an, die auf aktuellen mobilen Endgeräten mittels GPS-Chipsatz, Hochgeschwindigkeits-Datenverbindung
und einer verbesserten Infrastruktur ermöglicht werden.
Das Hauptkriterium der bisherigen Anwendung ist die Dauer der Abfrage eines beliebigen
Teilnehmers. Würde diese den gemessenen worst-case Wert von 5 Sekunden pro Abfrage
annehmen, wäre eine größere Anzahl an Clients nicht mehr praktikabel zu verwalten. Für
dieses Deadlock-Problem wurden zwei Lösungsansätze theoretisch aufgestellt, die auf einer intelligenten Interaktion der Clients beruhen. Diese Ansätze sind zwar zum jetzigen
Zeitpunkt realisierbar, beschränken sich allerdings auf die von Skype vorhergesehen Methoden und Events. Je nach Anwendung könnte Sky2ROS insofern erweitert werden, dass
Änderungen und Aktionen des Benutzers wie z.B. ein Ortswechsel erkannt und gezielt
abgefragt werden können.
44
Kapitel 6 Zusammenfassung und Ausblick
45
Die hier behandelten Thematiken sind also nur der Ausgang für weitere Forschungen und
Entwicklungen, und schaffen in praktikabler Art und Weise die Grundlagen für neue Anwendungen mit immer größeren Nutzen im alltäglichen Leben.
Anhang A
Gesprächs-Protokoll
Auszug des Gespräch-Protokolls, welches beim Anruf des Skype Test-Dienstes Echo123 mit
der Anwendung Tracer.exe protokolliert wurde.
CONNSTATUS ONLINE
CUR RENTUS ERHAND LE es - key -02
USERSTATUS ONLINE
CALL echo123
CALL 1165 STATUS UNPLACED
CALL 1165 STATUS UNPLACED
GROUP 330 NROFUSERS 0
CALL 1165 STATUS ROUTING
GROUP 298 NROFUSERS 1
CALL 1165 STATUS RINGING
CALL 1165 STATUS INPROGRESS
[...]
CALL 1165 DURATION 1
CALL 1165 DURATION 2
[...]
CALL 1165 DURATION 9
CALL 1165 DURATION 10
CALL 1165 VIDEO - SEND - STATUS NOT - AVAILABLE
CALL 1165 VIDEO - STATUS VIDEO - SEND - ENABLED
CALL 1165 DURATION 11
CALL 1165 DURATION 12
[...]
CALL 1165 DURATION 56
CALL 1165 DURATION 57
CALL 1165 FAILUREREASON 14
CALL 1165 DURATION 58
CALL 1165 STATUS FINISHED
Quellcode A.1: Aufzeichnung des gesamten Befehls-Protokoll eines Sprachanrufs.
46
Abbildungsverzeichnis
2.1
2.2
2.3
2.4
3.1
4.1
4.2
4.3
Positionsermittlung durch Schnittpunkt aus drei bekannten Entfernungen
nach Köhne u. Wößner [6]. Dabei ergeben sich die Punkte B aufgrund von
Ungenauigkeiten der Uhr im GPS-Empfänger. Diese werden zwischen den
Punkten B interpoliert bis sich Punkt A als korrekte Position ergibt. . . .
Der Screenshot nach Mills [9] von Google Maps Mobile 5 zeigt eine Positionsermittlung auf Basis von Funkzellenortung und gibt die erzielte Genauigkeit
an. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verteilung in 2007 erfasster IP-Adressen weltweit nach IPligence [4]. . . . .
Untergliederung der Netz-Knoten in Subnetze. . . . . . . . . . . . . . . . .
10
11
12
Abschätzung der Skype User Entwicklung von 2007 bis 2010 nach Brockmann&Company [2]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Darstellung von Nodes und Topics in der ROS GUI rxgraph. . . . . . . . .
Schichtenmodell Sky2ROS Client und Server. Die Skype Instanzen kommunizieren über den Ap2Ap-Kanal, welcher von Skype geroutet wird. Über die
Skype4Py Bibliotheken steuert Sky2ROS die eigene Skype Instanz und stellt
die abgefragen Informationen in ROS zur Verfügung. . . . . . . . . . . . .
ROS Graph mit Informations-Topics der einzelnen User. Jeder Parameter
wird für jeden User als eigenes Topic angelegt und kann von einem Subscriber
oder Publisher abbonniert bzw. beschrieben werden. . . . . . . . . . . . . .
47
9
25
28
34
Tabellenverzeichnis
2.1
Testergebnisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.1
3.2
Skype API Syntax Tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . .
Übersicht Skype Wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
23
4.1
4.2
Meta-Daten vor und nach XML-Parsing. . . . . . . . . . . . . . . . . . . .
Eingabe/Ausgabe Tabelle. . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
38
5.1
5.2
5.3
Hardwarekonfigurations. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Messwerte Speicher-Bedarf. . . . . . . . . . . . . . . . . . . . . . . . . . .
Messwerte Zeitwerte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
42
48
Literaturverzeichnis
[1] Anonym: Skype4Java Ap2Ap problems. http://forum.skype.com/index.php?
showtopic=688593, August 2010
[2] Brockmann&Company: Skype Statistics 1H 2010. http://www.brockmann.com/
communications/voip/2112-skype-statistics-1h2010, August 2010
[3] Cao, Shoufeng ; He, Longtao ; Li, Zhongxian ; Yang, Yixian: SkyF2F: Censorship Resistant via Skype Overlay Network. In: WASE International Conference on
Information Engineering (2009), Juli
[4] IPligence: Internet World Map 2007. http://www.ipligence.com/worldmap, Oktober 2007
[5] Jonsson, Dan K. ; Olavesen, J.: Estimated accuracy of location in mobile networks
using E-OTD. http://student.grm.hia.no/master/ikt02/ikt6400/g17/report/
report_eotd.pdf, 2002
[6] Köhne, A. ; Wößner, M.: Bestimmung der Position beim GPS-System - Laufzeitmessung. http://www.kowoma.de/gps/Positionsbestimmung.htm, November 2007
[7] Kumar, Nipun: Intelligent Spaces. In: DM Lecture Series (2009), S. 4
[8] Lopes, L. ; Viller, E. ; Ludden, B.: GSM standards activity on location. In: Novel
Methods of Location and Tracking of Cellular Mobiles and Their System Applications
(1999)
[9] Mills, Elinor: Google Maps for Mobile adds ’My Location’ feature. http://news.
cnet.com/8301-10784_3-9824546-7.html, November 2007
[10] Moore, Christian: Toward a Decentralized approach. http://www.seas.upenn.edu/
~cpm2/cm_qual.pdf, Juni 2010
[11] Skype:
2010
About Skype: Janus Friis. http://about.skype.com/janusfriis.html,
[12] Wan, Zhiqing: Localization Using Wireless Access Points. 2010
[13] Wang, Chuen-Ching ; Liang, Ming-Cheng ; Hwang, Nann-Luh ; Tai, Shen-Chuan:
Mobile location by time advance for GSM. In: Microwave Conference, 2001. APMC
2001. 2001 Asia-Pacific (2001), Dezember
49
LITERATURVERZEICHNIS
50
[14] Zhang, Wenyan ; Cui, Ximing ; Li, Dengfeng ; Yuan, Debao ; Wang, Mengru:
The Location Privacy Protection Research in Location-Based Service. In: Geoinformatics, 2010 18th International Conference on Geoinformatics for GIScience (2010),
September