-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.html
3478 lines (3153 loc) · 107 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Heimautomatisierung mit iBeacons</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bower_components/normalize-css/normalize.css">
<link rel="stylesheet" href="style.css">
<script src="bower_components/jquery/jquery.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div id="front">
<p>
ZHAW Zürcher Hochschule für Angewandte Wissenschaften<br/>
Bachelorstudium Informatik<br/>
Semesterarbeit
</p>
<h1>Heimautomatisierung mit iBeacons</h1>
<p class="logo">
<img src="images/logo.png" width="500" height="500" alt="" />
</p>
<p>
Autor: Fabian Vogler, <a href="mailto:[email protected]">[email protected]</a><br/>
Betreuungsperson: Peter Egli<br/>
<span class="version">16. Mai 2014, Version 1.1 HEAD</span>
</p>
</div>
<div class="impress chapter">
<p>
Diese Arbeit entstand im Rahmen einer Semesterarbeit an der Zürcher Hochschule
für Angewandte Wissenschaften (ZHAW) in Zürich. Der Quelltext dieser Arbeit ist
online unter
<a href="https://github.com/fabian/home-automation">https://github.com/fabian/home-automation</a>
aufrufbar.
</p>
<p>
Dieses Dokument wurde in HTML geschrieben und mit Hilfe von
<a href="http://www.princexml.com/">Prince XML</a> in ein PDF-Dokument
umgewandelt. Die verwendete Schriftart ist <em>Helvetica Neue</em>, entwickelt
von D. Stempel AG und basierend auf <em>Helvetica</em> von Max
Miedinger.
</p>
<p>
Sämtliche Quellen sind nummeriert [<em>n</em>] und befinden sich im Anhang im
Quellenverzeichnis. Die Arbeit setzt Fachwissen in der Informatik voraus.
Ein Glossar mit Erklärungen zu den wichtigsten Begriffen und Abkürzungen befindet
sich im ebenfalls Anhang.
</p>
</div>
<div class="chapter">
<h2 class="nonr">Abstract</h2>
<p>
Die Grundidee der Arbeit ist eine automatisierte Steuerung der Wohnungsbeleuchtung
aufgrund der Position des Bewohners innerhalb der Wohnräume.
iBeacon ist eine auf Bluetooth basierende und von Apple entwickelte Technologie
zur Lokalisierung innerhalb von Gebäuden. Die offizielle Dokumentation von
iBeacon ist nur zertifizierten Partnern zugänglich.
Der technische Aufbau von iBeacon wurde während des Projekts analysiert und auf
seine mögliche Verwendung in der Heimautomatisierung hin überprüft.
In einer Anforderungs­analyse wurden die benötigen Funktionen für eine
automatisierte Steuerung der Wohnungsbeleuchtung mit iBeacons dokumentiert.
Zur Überprüfung der Alltagstauglichkeit wurde eine den Anforderungen
entsprechende Softwarelösung umgesetzt und mit Estimote Beacons getestet.
Die optimale Sendestärke der Beacons wurde durch eine Rastermessung der
Signalstärke in der Wohnung ermittelt.
Die Softwarelösung besteht aus einer iPhone-App sowie einer Web-Applikation und
steuert spezifische LED-Lampen vom Produkt Philips hue.
</p>
</div>
<div class="chapter">
<h2 class="nonr">Inhaltsverzeichnis</h2>
<ol id="toc"></ol>
</div>
<div class="chapter">
<h2>Einleitung</h2>
<h3>Ausgangslage</h3>
<p>
Heimautomatisierung (engl. Home Automation) bezeichnet die intelligente
Verknüpfung von Sensoren und anderen technischen Geräten innerhalb der eigenen
Wohnräume zur Steigerung des Wohnkomforts. Effizientere Technik und
verbraucherorientierte Produkte haben dies in den letzten Jahren auch für
normale Konsumenten realisierbar gemacht.
</p>
<p>
Apple hat in der neusten Version seines mobilen Betriebssystems, iOS 7, eine
neue Möglichkeit zur Lokalisierung des Benutzers in geschlossenen Räumen
hinzugefügt. Die Technik basiert auf Bluetooth Low Energy, trägt den Namen
iBeacon und kann verwendet werden, um das Betreten oder Verlassen eines Raums
zu registrieren. Eine Dokumentation des Protokolls wurde von Apple angekündigt,
war jedoch zu Beginn des Projekts noch nicht veröffentlicht. Am Ende des
Projekts existierte zwar eine Dokumentation zum iBeacon-Format, diese war aber
nur zertifizierten Herstellern zugänglich.
</p>
<p>
Die Verwendung von bestehenden Geräten, wie Smartphones, ist für die
Heim­automatisierung interessant, da diese vielfältige Möglichkeiten bieten und
nicht separat angeschafft werden müssen. Eine optimale Ergänzung dazu stellt
die Philips hue dar. Es handelt sich dabei um eine LED-Lampe in Form einer Glühbirne,
welche über eine REST-API verfügt und so gezielt gesteuert werden kann. Zu dieser
LED-Lampe existiert auch eine offizielle iPhone-App, welche eine
Steuerung der Beleuchtung über die Positions­bestimmung mittels GPS anbietet. Die Anwendung
im Alltag zeigte jedoch, dass diese Umsetzung schlecht funktioniert, da die Ortung per GPS
besonders in Gebäuden nicht zuverlässig ist (Lichter gehen aus und
an während sich die Person am gleichen Ort aufhält).
</p>
<p>
Schlechte Erfahrungen wurden auch mit anderen Lokalisierungsgeräten gemacht.
<a href="#ref-chipolo" class="ref">Chipolo</a> ist ein
Bluetooth-Schlüsselanhänger, der einen Alarm auslöst, sobald
man sich von seinem iPhone entfernt. Bei dessen Benutzung wurde jedoch beobachtet, dass
dies nur unzuverlässig funktioniert. Ohne eine detaillierte Analyse oder
Kenntnisse über die genaue Funktionsweise, ist es aber schwierig zu beurteilen,
wo die Ursache des Problems liegt. Es führte jedoch zur Vermutung, dass die Ortung mit
iBeacons zu ungenau für die Steuerung der Beleuchtung von Räumen ist.
</p>
<h3>Ziele der Arbeit</h3>
<p>
Im Rahmen dieser Semesterarbeit soll analysiert werden, wie die neuen
Funktionen von iOS 7 optimal verwendet werden können, um eine einfache
Heimautomatisierung zusammen mit der Philips hue zu ermöglichen. Es soll eine
zentrale Web-Applikation entwickelt werden, welche die Bewegungen eines
Benutzers innerhalb der eigenen Wohnräume speichert und die Beleuchtung der
Räume entsprechend steuert. Der Standort des Benutzers wird dabei von einer
iPhone-App ermittelt und an die Web-Applikation gemeldet.
</p>
<h3>Aufgabenstellung</h3>
<p>
Im Rahmen dieser Semesterarbeit werden vom Studenten folgende Aufgaben ausgeführt:
</p>
<ol>
<li>Analyse der Funktionalitäten von iBeacon.</li>
<li>Untersuchung des auf Bluetooth Low Energy basierenden Protokolls von iBeacon.</li>
<li>Anforderungsdokumentation für die Automatisierung der Beleuchtung einer Wohnung.</li>
<li>Konzeption und Design des Software-Prototyps zur Umsetzung der dokumentierten Anforderungen.</li>
<li>Implementation eines Prototyps bestehend aus einer iPhone-App zur Lokalisierung des Benutzers und einer Web-Applikation zur Überwachung und Steuerung der Beleuchtung.</li>
<li>Verifikation des Software-Prototyps in einem Feldversuch und Analyse der Ergebnisse.</li>
<li>Demonstration des Software-Prototyps.</li>
</ol>
<h3 class="break">Projektablauf</h3>
<p>
Das folgende Gantt-Diagramm gibt einen Überblick über den effektiven Ablauf des
Projekts und die wichtigsten Meilensteine.
</p>
<figure class="table">
<table>
<colgroup>
<col width="160" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
<col width="25" />
</colgroup>
<thead>
<tr>
<th> </th>
<th colspan="3">November</th>
<th colspan="3">Dezember</th>
<th colspan="3">Januar</th>
<th colspan="3">Februar</th>
<th colspan="3">März</th>
<th colspan="3">April</th>
<th colspan="3">Mai</th>
</tr>
</thead>
<tbody>
<tr>
<td>Kick-Off</td>
<td> </td>
<td colspan="4" style="border-left: 0;">◆ 13.11.13</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Analyse iBeacon</td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="4" style="background-color: #e8f0f8;"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Design Review</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="4" style="border-left: 0;">◆ 22.01.14</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Konzeption Software</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="7" style="background-color: #e8f0f8;"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Umsetzung Software</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="6" style="background-color: #e8f0f8;"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Feldversuch</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="8" style="background-color: #e8f0f8;"> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Dokumentation</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="5" style="background-color: #e8f0f8;"> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Messung RSSI</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="1" style="background-color: #e8f0f8;"> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Abgabe Dokumentation</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="4" style="border-left: 0;">16.05.13 ◆</td>
</tr>
</tbody>
</table>
<figcaption>Projektablauf</figcaption>
</figure>
<p>
Laut dem Reglement für Semesterarbeiten sollte der Aufwand 120 Stunden betragen.
Entsprechend wurde die Planung darauf ausgelegt. Die genauen technischen
Anforderungen wurden allerdings erst während dem Projekt klar und führten zu
einer iterativen Softwareentwicklung, wodurch mehr Zeit für die
Konzeptions- und Umsetzungsphasen gebraucht wurde.
</p>
<figure class="table">
<table class="inline">
<colgroup>
<col width="200" />
<col width="50" />
<col width="50" />
</colgroup>
<thead>
<tr>
<th>Beschreibung</th>
<th>Soll</th>
<th>Ist</th>
</tr>
</thead>
<tbody>
<tr>
<td>Analyse iBeacon</td>
<td>10 h</td>
<td>6 h</td>
</tr>
<tr>
<td>Konzeption Software</td>
<td>10 h</td>
<td>14 h</td>
</tr>
<tr>
<td>Umsetzung Web-Applikation</td>
<td>25 h</td>
<td>19 h</td>
</tr>
<tr>
<td>Umsetzung automatisierte Steuerung</td>
<td>15 h</td>
<td>35 h</td>
</tr>
<tr>
<td>Umsetzung App</td>
<td>25 h</td>
<td>12 h</td>
</tr>
<tr>
<td>Messung RSSI</td>
<td>-</td>
<td>11 h</td>
</tr>
<tr>
<td>Dokumentation schreiben</td>
<td>35 h</td>
<td>39 h</td>
</tr>
<tr class="total">
<td>Total</td>
<td>120 h</td>
<td>136 h</td>
</tr>
</tbody>
</table>
<figcaption>Soll / Ist Vergleich Aufwand</figcaption>
</figure>
</div>
<div class="chapter">
<h2>Analyse iBeacon</h2>
<h3>Beschreibung</h3>
<p>
Bei iBeacon handelt es sich um eine von Apple eingetragene Marke. Sie beschreibt
eine proprietäre Technologie für die Lokalisierung eines iPhones mithilfe
von Bluetooth Low Energy (BLE). iBeacon setzt das Betriebssystem iOS 7 oder neuer,
sowie ein iPhone mit Bluetooth 4.0 voraus. Das Wort Beacon wird zur Beschreibung
eines Geräts mit eigener Stromversorgung verwendet, welches einen Standort markiert.
</p>
<figure>
<img src="images/ibeacon.png" class="inline">
<figcaption><a href="#ref-estimote-beacons" class="ref">iBeacon Logo</a></figcaption>
</figure>
<p>
Kommt ein iPhone in die Nähe eines Beacons, wird eine auf dem iPhone laufende App
vom Betriebssystem benachrichtigt. Die App kann dann zusätzlich die Distanz zum
Beacon abfragen und eigene Aktionen ausführen.
Vgl. <a href="#ref-understading-ibeacon" class="ref">iOS: Understanding iBeacon</a>.
</p>
<h3>Bluetooth Low Energy</h3>
<figure>
<img src="images/bluetooth-smart.png" class="inline">
<figcaption><a href="#ref-bluetooth-smart" class="ref">Logo Bluetooth Smart</a></figcaption>
</figure>
<p>
Bluetooth Low Energy (BLE) ist ein Funkprotokoll und Teil der
Bluetooth 4.0-Spezifikation. Vermarktet wird BLE auch als Bluetooth Smart.
Es wurde speziell für kleine Geräte mit limitierten Akkukapazitäten entwickelt und
kommt deshalb oft auf Smartphones zum Einsatz.
Vgl. <a href="#ref-bluetooth-smart" class="ref">Bluetooth SIG, Inc. (2013)</a>.
</p>
<p>
BLE-Geräte nutzen das Generic Attribute Profile (GATT), um die zur Verfügung gestellte
Funktionalität zu beschreiben. GATT sieht Services und Characteristics vor, welche
ein Gerät im Rahmen einen Bluetooth-Profils anbieten kann. Dabei besteht eine
hierarchische Beziehung zwischen Services und Characteristics. Services können
zudem auf andere Services referenzieren (<em>Include</em>), um deren Characteristics zu erben.
Profile dienen bei GATT zur formellen Gruppierung von mehreren Services.
</p>
<figure>
<img src="images/gatt-profile-hierarchy.png" width="400" class="inline">
<figcaption><a href="#ref-bluetooth-spec" class="ref">GATT Profilhierarchie, Bluetooth-Spezifikation, Seite 532</a></figcaption>
</figure>
<h3 class="break">Core Bluetooth</h3>
<p>
Apple bietet mit <a href="#ref-bluetooth-programming-guide" class="ref">Core Bluetooth</a>
eine vereinfachte Schnittstelle zur Verwendung von BLE an. Diese Bibliothek ist
im Betriebssystem iOS integriert und abstrahiert die BLE-Protokolle.
</p>
<figure>
<img src="images/core-bluetooth-stack.png" width="160" class="inline">
<figcaption><a href="#ref-bluetooth-programming-guide" class="ref">Aufbau Core Bluetooth, Programming Guide, Seite 5</a></figcaption>
</figure>
<p>Dabei wird bei der Programmierung zwischen zwei Rollen, welche nach dem
Client-Server-Prinzip aufgebaut sind, unterschieden: Central und Peripheral.
Ein <em>Peripheral</em> (Server) stellt dabei Daten zur Verfügung und kann sich selbst über
das regelmässige Aussenden von Informationen auffindbar machen (<em>Advertising</em>).
Ein <em>Central</em> (Client) hingegen sucht nach Peripherals, und verarbeitet
dessen Informationen in weiteren Aktionen. Zum Beispiel kann ein digitaler
Pulsmesser (Peripheral) mit BLE die aktuelle Herzfrequenz an eine iOS-App (Central)
übermitteln und die iOS-App zeigt dann die Herzfrequenz dem Benutzer an.
</p>
<figure>
<img src="images/ble-roles.png" width="350" class="inline">
<figcaption><a href="#ref-bluetooth-programming-guide" class="ref">Rollen in Bluetooth Low Energy, Programming Guide, Seite 9</a></figcaption>
</figure>
<h3>Analyse Aufbau</h3>
<p>
Um die technischen Limitierungen und allfällige Signalprobleme zu verstehen, ist
es für das Projekt von Vorteil, das Protokoll von iBeacon genau zu verstehen.
Zudem besteht der Hintergedanke evtl. eine eigene Implementierung eines iBeacon
mit bestehenden Komponenten wie einem GNU/Linux-Computer zu programmieren.
</p>
<p>
Es wurde mit der Einarbeitung in die Grundtechnologie von iBeacon begonnen,
um der Funktionsweise von iBeacon auf die Spur zu kommen. Mit dem
indirekten Ziel, einen Computer als iBeacon zu nutzen, wurde mit der Analyse
auf einem Mac begonnen. Dazu wurde die bereits beschriebene Bibliothek <em>Core Bluetooth</em> verwendet,
welche seit Version 10.9 von Mac OS X nicht nur auf iOS sondern auch in OS X zur Verfügung steht.
Damit sollte ein einfaches BLE-Profil veröffentlicht werden.
</p>
<p>
Anhand des Kapitels «Performing Common Peripheral Role Tasks» (Seite 16)
aus der von Apple zur Verfügung gestellten Dokumentation
<em><a href="#ref-bluetooth-programming-guide" class="ref">Core Bluetooth Programming Guide</a></em>
wurde ein minimales Programm mithilfe der Programmierumgebung Xcode erstellt,
welches eigene BLE-Dienste anbietet.
</p>
<figure>
<pre><code>// create manager
CBPeripheralManager *manager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
// initialize UUIDs
CBUUID *characteristicUUID = [CBUUID UUIDWithString: @"2A38"];
CBUUID *serviceUUID = [CBUUID UUIDWithString: @"180D"];
// create value object
int heartRate = 42;
NSData *value = [NSData dataWithBytes: &heartRate length: sizeof(heartRate)];
// create service with characteristic
CBMutableCharacteristic *characteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyRead value:value permissions:CBAttributePermissionsReadable];
CBMutableService *service = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
service.characteristics = @[characteristic];
// add service and advertise
[manager addService:service];
[manager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey : @[serviceUUID] }];
</code></pre>
<figcaption>Beispielanwendung von Core Bluetooth</figcaption>
</figure>
<p>
Konkret wurde mit der Beispiel-Anwendung ein Bluetooth-Profil mit einem
Service für Herzfrequenzen mit der UUID <em>180D</em> und einer
Charakteristik für die Position des Sensors am
Körper mit der UUID <em>2A38</em> umgesetzt.
</p>
<p>
Die iPhone-App <a href="#ref-lightblue" class="ref">LightBlue</a>
bietet die Möglichkeit, eine Verbindung zu beliebigen BLE-Geräte aufzubauen und
die von den Geräten angebotenen Dienste abzurufen. Die App zeigt zudem die vom
Gerät versendeten Advertising-Daten an. Die App wurde erfolgreich dazu verwendet,
die von der Mac-Anwendung publizierten Services und Characteristics zu bestätigen.
</p>
<figure>
<img src="images/screenshot-ble-test-ios.png" class="inline">
<figcaption>
Screenshot <a href="#ref-lightblue" class="ref">LightBlue</a>
</figcaption>
</figure>
<p>
Wie im Kapitel «<a href="https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html#//apple_ref/doc/uid/TP40009497-CH9-SW12">Turn Your iOS Device Into a Beacon</a>»
der <a href="#ref-location-programming-guide" class="ref">Dokumentation zu iBeacon</a> beschrieben, wurde dann eine einfach iPhone-App
erstellt, welche die Signale eines iBeacons vom iPhone aussendet. Dazu benötigt
werden die beiden Bibliotheken <em>CoreBluetooth.framework</em> und <em>CoreLocation.framwork</em>.
</p>
<p>
Jedes Beacon braucht eine UUID, sowie einen Major- und einen
Minor-Wert, anhand welcher das Beacon eindeutig identifiziert wird.
Um die Analyse des Protokols zu vereinfachen und die ID einfach auffindbar zu machen,
wurde die UUID <code>FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF</code> definiert. Als Major
wurde der Wert <code>00</code> (0) verwendet und als Minor der Wert <code>FF</code> (65535).
</p>
<figure>
<pre><code>NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:@"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"];
// Create the beacon region.
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID major:0 minor:65535 identifier:@"ch.zhaw.voglefab.debug"];
// Create a dictionary of advertisement data.
NSDictionary *beaconPeripheralData = [beaconRegion peripheralDataWithMeasuredPower:nil];
// Start advertising your beacon's data.
[self.peripheralManager startAdvertising:beaconPeripheralData];
</code></pre>
<figcaption>
Beispielanwendung von Core Bluetooth
</figcaption>
</figure>
<p>
Diese App wurde auf einem zweiten iPhone installiert und gestartet. Verbindet man
sich jedoch nun mit LightBlue auf dem ersten iPhone mit dem zweiten iPhone, werden
in LightBlue nur die Services <em>Battery Service</em> und <em>Current Time Service</em>
angezeigt - iBeacon ist also kein Service im GATT-Protokoll. Auch bei den
Advertisement-Informationen ist das iBeacon in LightBlue
nicht sichtbar. Trotz der neuen Erkenntnisse stellt sich dieser Lösungsansatz
somit aber als Sackgasse heraus.
</p>
<figure>
<img src="images/screenshot-ble-test-ios-fail.png" width="200" class="inline">
<figcaption>
Screenshot <a href="#ref-lightblue" class="ref">LightBlue</a> ohne iBeacon
</figcaption>
</figure>
<p>
In einem weitern Schritt wurde auch nach Analyse-Tools auf dem Mac gesucht.
Schliesslich wurde das Software-Packet
<em><a href="#ref-hardware-io-tools" class="ref">Hardware IO Tools for Xcode</a></em> gefunden,
welches von Apple für Entwickler gratis zum Download bereitgestellt wird.
Dieses enthält unter anderem die Tools <em>PacketLogger</em> und
<em>Bluetooth Explorer</em>, welche für die weitere Analyse von iBeacon
verwendet wurden.
</p>
<figure>
<img src="images/screenshot-ble-explorer-1.png" class="inline">
<figcaption>
Screenshot <a href="#ref-hardware-io-tools" class="ref">Bluetooth Explorer</a>
</figcaption>
</figure>
<p>
Das neue Ziel war nun, die Signale eines iBeacons auf dem Mac zu analysieren. Die
Software PacketLogger bietet dazu eine Möglichkeit, die vom Computer
empfangenen BLE-Packete zu analysieren. Führt man im Bluetooth Explorer einen Scan
nach BLE-Geräten durch, werden im PacketLogger die empfangenen BLE Advertisements angezeigt.
</p>
<figure>
<img src="images/screenshot-packetlogger.png" class="inline">
<figcaption>
Screenshot <a href="#ref-hardware-io-tools" class="ref">PacketLogger</a>
</figcaption>
</figure>
<p>
Dadurch wurde schlussendlich das Advertisement mit den iBeacon-Daten gefunden.
Erkannt wurde das Advertisement anhand der UUID <code>FF FF FF FF…</code>.
Verwendet wird hier die hexadezimale Schreibweise von Octet, zwei Hexzahlen
entsprechen also einem Byte resp. 8 Bits.
</p>
<figure>
<pre><code>02 01 1A 1A FF 4C 00 02 15 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 FF FF C5
</code></pre>
<figcaption>
Advertisement Daten iBeacon
</figcaption>
</figure>
<p>
Der Aufbau des BLE-Advertisements wird auf Kapitel «11 Advertising
and Scan Response data format» im Volume 3 der
<a href="#ref-bluetooth-spec" class="ref">Bluetooth-Spezifikation</a>
erklärt. Ein Advertisement besteht aus mehreren Elementen, welche eine variable Länge haben.
Am Anfang jedes Elements steht seine eigene Länge gefolgt vom Typ des Elements.
</p>
<figure>
<img src="images/structure-advertising-data.png" class="inline">
<figcaption><a href="#ref-bluetooth-spec" class="ref">Struktur Advertising and Scan Response, Bluetooth Specification, Seite 375</a></figcaption>
</figure>
<p>
Angewendet auf das empfangene Advertisement ergibt sich folgendes Format für ein
iBeacon. Gemäss Spezifikation enthalten die ersten zwei Octets der <em>Manufacturer
Specific Data</em> den <em>Company Identifier Code</em>, welcher auf
<a href="#ref-company-identifiers" class="ref">der Website der Bluetooth SIG</a>
dokumentiert ist.
</p>
<figure class="table">
<table class="table-extended inline" width="100%">
<tr><th>Byte</th><th>Beschreibung</th><th>Wert</th></tr>
<tr class="even"><td><code>02</code></td><td>Length</td><td>2</td></tr>
<tr class="even"><td><code>01</code></td><td>AD Type</td><td>Flags</td></tr>
<tr class="even"><td><code>1A</code></td><td>Flags</td><td>LE General Discoverable Mode<br/>Simultaneous LE and BR/EDR (Controller)<br/>Simultaneous LE and BR/EDR (Host)</td></tr>
<tr class="odd"><td><code>1A</code></td><td>Length</td><td>26</td></tr>
<tr class="odd"><td><code>FF</code></td><td>AD Type</td><td>Manufacturer Specific Data</td></tr>
<tr class="odd"><td><code>4C</code></td><td rowspan="2">Company Identifier Code</td><td rowspan="2">Apple, Inc.</td></tr>
<tr class="odd"><td><code>00</code></td></tr>
<tr class="odd"><td><code>02</code></td><td rowspan="2">Fixer Wert</td><td rowspan="2">iBeacon Identifier</td></tr>
<tr class="odd"><td><code>15</code></td></tr>
<tr class="odd"><td><code>FF</code></td><td rowspan="16">iBeacon UUID</td><td rowspan="16">FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF</td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>00</code></td><td rowspan="2">iBeacon Major</td><td rowspan="2">0</td></tr>
<tr class="odd"><td><code>00</code></td></tr>
<tr class="odd"><td><code>FF</code></td><td rowspan="2">iBeacon Minor</td><td rowspan="2">65535</td></tr>
<tr class="odd"><td><code>FF</code></td></tr>
<tr class="odd"><td><code>C5</code></td><td>Fixer Wert</td><td>Measured power</td></tr>
</table>
<figcaption>
Bluetooth Advertisement iBeacon
</figcaption>
</figure>
<p>
Das iBeacon-Format ist also innerhalb der <em>Manufacturer Specific Data</em> im
BLE-Protokoll gekapselt. Dies konnte auch mit dem Bluetooth Explorer
verifiziert werden, der ebenfalls die Manufacturer Data anzeigt. Um ein iBeacon zu
erkennen oder zu simulieren, braucht man also lediglich ein Advertisement mit
den entsprechenden Manufacturer Specific Data zu senden/empfangen.
</p>
<figure>
<img src="images/screenshot-ble-explorer-2.png" class="inline">
<figcaption>
Screenshot <a href="#ref-hardware-io-tools" class="ref">Bluetooth Explorer</a> nach Scan
</figcaption>
</figure>
<p>
Für das Projekt ist positiv, dass iBeacon als zustandsloses Protokoll aufgebaut
ist. Es reduziert die Gefahr von Verbindungsabbrüchen und minimiert den
Batterieverbrauch, da keine synchrone Kommunikation notwendig ist. Dadurch
kann auch die Überwachung auf Beacons im Hintergrund öfters durchgeführt werden.
</p>
</div>
<div class="chapter">
<h2>Anforderungsanalyse</h2>
<h3>Einleitung</h3>
<p>
Das manuelle Bedienen von Lichtern in einer Wohnung ist oft mühsam und
ineffizient. Die Lichtschalter sind an ungünstigen Orten angebracht oder das
Licht wird beim Verlassen der Wohnung vergessen auszuschalten.
</p>
<p>
Es soll deshalb eine Softwarelösung entwickelt werden, welche die Lichter in
einem Haus automatisiert steuert. Betritt der Bewohner einen Raum, sollen die
Lichter im Raum angehen - beim Verlassen des Raums sollen die Lichter wieder
automatisch ausgehen. Dies spart Strom und erleichtert den Alltag.
</p>
<p>
Für die Steuerung soll ein Beacon mehreren Lichtern und ein Licht mehreren
Beacons zugewiesen werden können.
Die Lichter sollen leuchten, solange sich der Benutzer in der Nähe des Beacon
befindet. Eine Wohnung kann sich, wie im folgenden Schema beispielhaft dargestellt,
aus mehreren sich überschneidenden Lichtern und Beacons zusammensetzen.
</p>
<figure>
<img src="images/Lights.png" class="inline">
<figcaption>Beispiel Wohnung mit Beacons</figcaption>
</figure>
<h3 class="break">Stakeholder</h3>
<p>
Die folgenden Stakeholder wurden mit der Beobachtungstechnik
sowie aus der Dokumentation der eingesetzten Komponenten ermittelt. Sie haben
einen direkten oder indirekten Einfluss auf die Anforderungen. Diese Stakeholder
finden sich ebenfalls im nachfolgenden Kontextdiagramm.
</p>
<figure class="table">
<table class="inline" width="100%">
<colgroup>
<col width="30%" />
<col width="70%" />
</colgroup>
<tbody>
<tr>
<th>Stakeholder</th>
<th>Beschreibung</th>
</tr>
<tr>
<td>Bewohner</td>
<td>Der Bewohner der Wohnung ist der Hauptbenutzer. Die Anwendung soll sein Leben vereinfachen, die funktionalen Anforderungen sind deshalb auf ihn ausgelegt.</td>
</tr>
<tr>
<td>Besucher</td>
<td>Besucher der Wohnung wissen im Normalfall nichts über die im Hintergrund laufende Anwendung und müssen vor Überraschungen geschützt werden.</td>
</tr>
<tr>
<td>Beacon-Hersteller</td>
<td>Der Beacon-Hersteller entwickelt und liefert die nötige Hardware in Form der Beacons für die Anwendung. Er hat einen Einfluss auf die technischen Anforderungen.</td>
</tr>
<tr>
<td>Lampen-Hersteller</td>
<td>Der Lampen-Hersteller entwickelt und produziert die steuerbaren Lampen. Er definiert die technischen Möglichkeiten der Beleuchtung.</td>
</tr>
<tr>
<td>Apple</td>
<td>Apple als Entwickler des iBeacon-Formats definiert die technischen Vorgaben und nimmt evtl. in Zukunft Änderungen am Format vor.</td>
</tr>
</tbody>
</table>
<figcaption>Stakeholder</figcaption>
</figure>
<h3 class="break">Systemkontext</h3>
<p>
Die Kontextabgrenzung dient zur Definition der Elemente und Stakeholder, welche einen Einfluss
auf das System haben. Das System selbst, die automatisierte Steuerung, wird durch
den Bewohner und die Beacons beeinflusst und steuert das Licht. Besucher kommen
innerhalb der Systemgrenze ebenfalls vor, haben aber keinen direkten Einfluss
auf das System. Hersteller der Komponenten liegen ausserhalb der Systemgrenze
und haben keinen direkten Einfluss auf die Anforderungen. Die Funktionen ihrer
Produkte haben jedoch einen Einfluss auf die technischen Möglichkeiten.
</p>
<figure>
<img src="images/Kontextdiagramm.png" class="inline">
<figcaption>
Kontextdiagramm
</figcaption>
</figure>
<h3 class="break">Funktionale Anforderungen</h3>
<p>
Die funktionalen Anforderungen wurden mit der Beobachtungstechnik und anhand
der eigenen Erfahrungen definiert und als Anwendungsfälle festgehalten.
</p>
<p>
Das folgende Anwendungsfalldiagramm gibt einen Überblick über die erfassten
Anwendungsfälle. Es gibt zwei Aktoren, den Benutzer sowie die automatisierte
Steuerung.
</p>
<figure>
<img src="images/Anwendungsfalldiagramm.png" class="inline">
<figcaption>
Anwendungsfalldiagramm
</figcaption>
</figure>
<p class="break">
Die Anwendungsfälle wurden mit den Attributen erfasst, welche im folgenden
Schema definiert sind. Die Anwendungsfälle sollen in absteigender Priorität
umgesetzt werden. Anwendungsfälle mit tiefer und mittlerer Priorität werden
nicht zwingend benötigt oder können Anfangs noch manuell direkt in der
Datenbank vorgenommen werden.
</p>
<figure class="table">
<table class="inline" width="100%">
<colgroup>
<col width="20%" />
<col width="80%" />
</colgroup>
<tbody>
<tr>
<th>Attribut</th>
<th>Beschreibung</th>
</tr>
<tr>
<td>Identifier</td>
<td>Eindeutige Nummer des Anwendungsfalls.</td>
<tr>
<td>Name</td>
<td>Kurzname des Anwendungsfalls.</td>
</tr>
<tr>
<td>Priorität</td>
<td>Dringlichkeit des Anwendungsfalls mit dem Wertebereich tief, mittel und hoch.</td>
</tr>
<tr>
<td>Auslöser</td>
<td>Beschreibung des Ereignisses, welches diesen Anwendungsfall relevant macht.</td>
</tr>
<tr>
<td>Beschreibung</td>
<td>Kurze Zusammenfassung des Anwendungsfalls.</td>
</tr>
<tr>
<td>Vorbedingungen</td>
<td>Voraussetzungen welche für die Ausführung dieses Anwendungsfalls erfüllt sein müssen.</td>
</tr>
<tr>
<td>Standardablauf</td>
<td>Schritte zur erfolgreichen Ausführung des Anwendungsfalls.</td>
</tr>
<tr>
<td>Ergebnis</td>
<td>Das Resultat nach der erfolgreichen Ausführung des Standardablaufs.</td>
</tr>
<tr>
<td>Ausnahmen</td>
<td>Eventuell auftretende Ausnahmesituationen sowie deren Konsequenzen.</td>
</tr>
</tbody>
</table>
<figcaption>Attribute Anwendungsfall</figcaption>
</figure>
<h4>Anwendungsfälle</h4>
<figure class="table">
<table class="inline" width="100%">
<colgroup>
<col width="30%" />
<col width="70%" />
</colgroup>
<tbody>
<tr>
<th>Identifier</th>
<td>UC01</td>
</tr>
<tr>
<th>Name</th>
<td>Neues Beacon erfassen</td>
</tr>
<tr>
<th>Priorität</th>
<td>mittel</td>
</tr>
<tr>
<th>Auslöser</th>
<td>Der Benutzer konfiguriert das System zum ersten Mal oder ist in Besitz eines neuen Beacons gekommen.</td>
</tr>
<tr>
<th>Beschreibung</th>
<td>Der Benutzer erfasst ein neues Beacon mit einem eigenen Namen.</td>
</tr>
<tr>