iBeacon to technologia lokalizacji za pomocą Bluetooth low energy (BLE) udostępniona przez Apple wraz z iOS 7.0 (7.1). Obyło się to bez wielkiego rozgłosu lecz teraz pojawia się cały wysyp urządzeń i zastosowań (nawet Samsung próbuje skopiować tę technologię o czym wspominaliśmy w czwartym Pear 2 Pear).

Doszło do tego, że zostałem „importerem” i sprowadziłem sobie kilka iBeaconów aby samamu zgłębić tajniki tej technologii „od środka” dzięki czemu mogę podzielić się z Wami zdobytą już wiedzą.

NFC przeżyło ale iBeacon górą!

Już kiedyś pisałem o iBeacon. Wieszczyłem w tym wpisie kres NFC choć nie we wszystkich zastosowaniach: „NFC oczywiście nie zaginie całkiem bo świetnie nadaje się zamiast np. kodów kreskowych, w magazynach, sklepach. Może się okazać, że naprowadzeni na promocję w sklepie za pomocą iBeacons za towary z koszyka zaskandowane w kasie przez czytnik NFC zapłacimy przez iBeacons. Generalnie to wiele się nie pomyliłem. Co prawda Apple zastosował technologię NFC w płatnościach w najnowszych iPhone 6(+) i zapowiadanym „zegarku” ale to dla iBeacon’a zarezerwowane zostały „ambitniejsze” funkcje.

Wracając do tematu

iBeacon zostało opracowane jako technologia lokalizacji na małe odległości głównie (ale nie tylko) w pomieszczeniach. Taki był pierwotny pomysł. Działa ona w oparciu o malutkie urządzenia Bluetooth LE rozgłaszające swoją obecność drogą radiową na odległość maks. do 30 m. Zazwyczaj są one zasilane baterią (jedna „pastylka” wystarcza na rok działania) ale są też wersje zasilane ogniwami słonecznymi czy nawet pobierające energię z otoczenia zaśmieconego falami radiowymi. Każde z urządzeń ma nadany iBeacon UUID (nie mylić z UUID Bluetooth, które w iBeaconach się zmienia [!]) oraz dwa parametry: Major i Minor.

Apple zamierza ułatwić i rozpowszechnić używanie tej technologii do nawigacji w pomieszczeniach wprowadzając serwis (na razie tylko w USA): Maps Indoor (Maps Connect).

Jak to działa od strony aplikacji?

Za obsługę iBeacon w iOS odpowiada CoreLocation (to samo API, które jest odpowiedzialne za lokalizację GPS itp.). W aplikacji ustawiamy „region” na jaki ma nasz program reagować. Reagować może na wejście w region, wyjście z niego i dodatkowo gdy znajdujemy się w regionie, na zmianę odległości od jego centrum (urządzenia iBeacon). Region definiujemy za pomocą iBeacon UUID (zaprogramowany w naszych iBeaconach), który możemy dodatkowo uściślić używając parametrów Major i Minor. Przykładowo UUID określa sieć sklepów, Major miasta, a Minor określony sklep. Czyli możemy ustawić aplikację tak aby reagowała na pojawienie się w pobliżu dowolnego sklepu danej sieci w określony sposób ale już w inny gdy znajdujemy się w konkretnym sklepie (np. informacja o lokalnej wyprzedaży). Oczywiście to tylko przykład bo już teraz pojawiło się dużo całkiem odmiennych zastosowań iBeacon. Do jednych z ciekawszych należy lokalizacja przedmiotów, które często gubimy, za pomocą przyczepionych do nich „iBeaconów”. W takiej sytuacji „regiony” są mobilne! Jeszcze ciekawsze jest to, że każde z iUrządzeń wyposażonych w Bluetooth 4.0 i iOS 7.1 może samo stać się iBeaconem i być „namierzane” (oczywiście gdy uruchomimy na nim odpowiednią aplikację i jest ona aktywna) przez inne. Widziałem też iBeacony do nadzoru (zabezpieczenia) przedmiotów, dzieci czy zwierząt. Jeżeli się one oddalą od naszego iPhone to wywołany zostanie „alarm” opuszczenia regionu.

Więcej możliwości

A to nie koniec ciekawostek związanych z iBeacon. Aby regiony były wykrywane przez nasze iPhony (czy iPady) aplikacja je obsługująca wcale nie musi być aktywna! Ba! Lepiej… może być „ubita” przez nas lub przez system (i nie występuje na liście aplikacji po dwukrotnym naciśnięciu klawisza Home) lecz nadal może obsługiwać regiony iBeacon! Po prostu gdy przy uruchomieniu, program ustawi odpowiednie regiony (iBeacon UIDD plus ew. Major, Minor) system przejmuje ich namierzanie i potrafi ożywić (w tle) aplikację gdy stwierdzi wejście, opuszczenie regionu lub zmianę odległości (zależnie na co reakcję w programie ustawimy - nie musi obsługiwać wszystkich tych zdarzeń). Oczywiście reakcja na zdarzenia „iBeaconowe” gdy aplikacja jest w tle lub „ubita” są znacznie rzadsze i Apple narzuca pewne ograniczenia na procesy jakie „wskrzeszona” aplikacja może wykonać po otrzymaniu powiadomienia z systemu. Tak czy siak widać jak bardzo Applowi zależy na tym aby lokalizacja za pomocą iBeacon działała zawsze.

Można to wyłączyć

Jeżeli bardzo nie chcemy aby nasze iUstrojstwo coś namierzało (np. z powodu „spamowania” nas powiadomieniami przez źle zaprojektowaną aplikację lub zbyt nachalny dział marketingu danej firmy) to mamy kilka możliwości: odinstalować program, wyłączyć w Ustawienia => Ogólne => Odświeżanie w tle (program) lub Ustawienia => Prywatność => Usługi lokalizacji (program) a w ostateczności wyłączyć Bluetooth całkiem (nie polecam).

Apple zadbało również aby nie można było zbyt łatwo podszyć się pod obce iBeacony. W iOS nie jesteśmy w stanie odczytać iBeacon UUID (jedynie UUID Bluetoot’a). Czyli możemy zrobić lub pobrać (jest ich trochę) aplikację do skanowania otoczenia na wypadek występowanie urządzeń BLE ale nie poznamy iBeacon UUID. A samo API iBeaconowe (to systemowe działające w tle) aby „namierzać” urządzenia i regiony wymaga podania iBeacon UUID. Ograniczenie dotyczy tylko iOS więc nie jest zbyt skuteczne. Jak się uprzemy do możemy naszym Maczkiem z BLE odczytać te identyfikatory. Czyli można sprawdzić jakie UUID w sowich iBeaconach stosuje firma X i namierzać je we własnym celu, we własnej aplikacji.

iBeacon Bluetooth LE Jeden z moich modułów zakupionych na testy „od Chińczyka”

Sprzęt

Same urządzenia iBeacon są zazwyczaj przez producenta zabezpieczane hasłem przed zmianą parametrów. Koszt urządzenia zależy od producenta i ew. dołączonego rozwiązania programowego (system do ustawiania parametrów i zarządzania iBeaconami + ew. dedykowana aplikacja dla użytkowników). Najtańsze moduły bez specjalnego oprogramowania kosztują „u Chińczyka” (zależnie od ilości, wykonania, zasilania) od kilku do kilkudziesięciu dolarów).

Podsumowując:

  • API iBeacon działa nawet jak aplikacja, która ustawiła parametry regionu nie jest uruchomiona. Lepiej! Działa nawet po restarcie czy włączeniu systemu!
  • Można włączyć reakcję na wejście w region, wyjście z niego i zmianę odległości (trzy strefy: bezpośrednie [poniżej 1 m], blisko [1-3 m], daleko [ponad 3 m], nieznana [coś tam łapie ale za słabo aby określić odległość]. Urządzenia można kalibrować aby precyzyjniej określać odległość lecz przeszkody mają duży wpływ na pomiar.
  • iUrządzenia też mogą być iBeaconami ale tylko jak aplikacja „propagująca” jest aktywna.
  • Urządzenia iBeacon nie mogą zbierać informacji o namierzających je iPhonach (tak jak w GPS - satelity nas nie namierzają tylko my satelity).
  • Bluetooth UUID urządzeń iBeacon się zmienia co sesję i nie może służyć do ich identyfikacji przez zwykłe API Bluetooth.

Już znane lub wymyślone na szybko zastosowania:

  • Nawigacja w pomieszczeniach.
  • Obsługa ekspozycji np. w muzeach. Zbliżamy się do eksponatu, a aplikacja wyświetla lub wygłasza informacje o nim.
  • To samo w otwartym terenie… zbliżamy się do „pomnika przyrody” i program wyświetla nam informacje o nim.
  • Odnajdowanie zagubionych przedmiotów z przytwierdzonym iBeaconem.
  • Pilnowanie aby coś się od nas nie oddaliło np. plecak czy dziecko.
  • Odszukiwanie się w tłumie np. aplikacja na iPhone, która rozgłasza naszą obecność i/lub nasłuchuje innych poszukiwanych osób.

A to tylko tak na szybko. Macie jakiś pomysł? Dajcie znać… może coś razem zrobimy! Mam jeszcze kilka iBeaconów na testy i już zaczęte prototypowe aplikacje ;-)