레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

2015년 8월 29일 토요일

BLE Beacon의 Connectable과 Non-Connectable 모드

오랜만에 블로그에 글을 올립니다. 아마도 8월달의 마지막 포스팅이 될 것 같네요.

비콘의 하드웨어에 대해서 관심 있으신 분들이나 직접 구매하여 비콘 설정에 대해 자세하게 확인하신 분들은 아마도 Connectable Mode와 Non-Connectable Mode에 대해서 들어보셨을거라 생각됩니다.  하지만 일반 App 개발자들은 이 두가지 모드에 대해서 아예 들어보지 못하셨거나 차이를 정확히 알지 못하신 분들이 대다수일 것입니다.
아마도 국내에서 판매하는 BLE Beacon의 대부분은 Connectable Mode만 지원하고 있기 때문일수도 있습니다.

우선 간단하게 Connectable Mode와 Non-Connectable Mode를 정의하자면 아래와 같습니다.

Connectable Beacon은 Peripheral Mode의 BLE 디바이스를 이야기하며 데이터를 송신할 뿐만 아니라 받을 수도 있습니다.  다시말하면,  스마트폰과 같은 Central 디바이스와 Scan_Request와 Scan-Response을 String Data로 주고 받을 수 있으며 이를 통해 OTA(Over the Air)로 Beacon 기기의 설정 값들을 변경할 수 있습니다.  즉 우리가 비콘의 ID, 송출 주기, Tx Power와 같은 설정값을 바꾸기 위해서는 비콘은 항상 Connectable Mode여야만 가능합니다.

그 와는 반대로 Non-Connectable Beacon은 Advertising Mode의 BLE 디바이스로 단순히 정의되어 있는 데이터를 송신하기만 하며 Advertising 데이터 전송 이후는 바로 Sleep 모드로 들어가고 다시 깨어나 송출하기 반복하기 때문에 전력을 최소한으로 사용할 수 있게 됩니다. 때문에 어떠한 Bluetooth 기기와도 Data를 주고 받으 수 없으며 UART, SPI, USB와 같은 물리적인 연결을 통해서만 가능합니다.  Non-Connectable Beacon의 최대 장점은 최소한의 전류 소모량을 통해 배터리 수명을 최대화 시키는 것입니다.

일반적인 Bluetooth 기기는 Central Mode 나 Peripheral Mode 혹은 두 가지 모두를 전부 지원하게 되며 Paring을 위해서 Peripheral만 지원되는 즉 다른 기기가 자신을 검색할 수 있는 기기일 경우 기기들은 모두 Connectable-Mode라고 보시면 됩니다. 하지만 비콘은 Paring이 아닌 이미 저장되어 있는 특정 Data Packet을 단 방향으로 Advertising 하는 기기이기 때문에 Non-Connectable Mode도 가능하게 됩니다.

iBeacon 발표 이후 초기에 출시된 비콘들은 대부분 Connectable Mode만을 지원하였고 실제 필드에서 몇 가지 문제점이 도출 되기도 하였습니다. 비콘의 신호를 검색하는 Central Mode의 기기들이 많아지게 되거나 동시에 여러개가 Scan을 위해 Scan_Request를 보내에 되면 Connectable Mode의 비콘들은 이에 대해 Response를 해야 하고 그에 따라 전류 소모가 많아지며 때에 따라서는 수신율도 떨어지게 됩니다.  또한 안드로이드 모델 및 버전별로 Connectable Mode와 Non-Connectable Mode의 비콘에 따라 스캔 시 Callback Event를 통한 수신 빈도도 달라지는 것이 확인 되기도 하였습니다.
이는 몇 개의 비콘을 스캔하여 서비스하는 것은 문제가 없지만 다수의 비콘을 지속적으로 스캔하는 서비스에서는 스마트 폰별로 서로 다른 수신율을 보일 수 있어 서비스의 퀄러티에 영향을 미칠 수 있다는 의미 입니다.

최근에 출시되는 해외의 비콘들은 대부분 두 가지 모두를 함께 사용할 수 있도록 합니다. 비콘의 설정 값들을 변경하기 위해서 Connectable Mode가 반드시 필요하지만 서비스를 위해 부착 또는 고정한 이후에는 Non-Connectable Mode가 전류소모 및 수신율에도 장점을 갖게 됩니다.  때문에 비콘은 두 가지 모드를 스위칭 하기 위해 몇 가지 방법을 사용하게 됩니다.
예를 들면, 전원 연결 이후 처음에는 Connectable Mode로 유지되다가 일정 시간(30초 or 1분) 이후 Non-Connectable Mode로 자동 전환되는 비콘이 있습니다.  혹은, 어떤 모델은 케이스를 분리하면 PCB 상에 작은 스위치가 있어 이를 눌러 Connectable 모드로 바꿔주어야 하기도 합니다.  이러한 비콘들은 설정값을 변경하려면 매번 배터리를 탈부착 시켜 재부팅을 해거나 케이스를 분리해야 하는 번거로움이 있습니다. 또한 배터리 교체가 불가능하거나 방수형 비콘으로 케이스 분리가 안되는 모델들은 적용이 불가능합니다.
그래서 비콘에 센서를 내장하여 외부의 물리적인 변경을 통해 Connectable Mode로의 전환을 하기도 합니다.   예를 들면 움직임 감지 센서를 통해 비콘을 두번 노크(Knock)를 하거나 흔들어서 외부 이벤트를 발생시키기도 하고 기울기 센서를 통해 비콘을 뒤집거나 새로로 굴리는 행위로 모드 전환을 하기도 합니다.
물론 센서가 이러한 이벤트를 감지하기 위해서 최소한의 전력소모가 발행하기도 함으로 어느 방법이 더 효율적인지는 제조사에서 판단하기에 따라 다를 것입니다.  기구 디자인 상으로 크게 문제가 되지 않는다면 외부에서 누를 수 있는 리셋 버튼 같은 것을 두는 것도 하나의 방법이겠죠.

앞에서도 이야기 했지만 이는 단지 비콘 디바이스의 전류 소모만을 고려하기 위한 Mode 변경의 문제가 아니라 실제 스마트 폰에서의 수신율도 달라질 수 있습니다. 비콘이 Connectable 모드로 동작될 때 수 많은 사람들이 주위에서 스마트폰으로 스캔을 하게 되면 비콘은 Scan_Request가 올 때마다 이에 대한 Scan_Response를 보내야 하기 때문에 실제 Advertising Packet과 Scan_Response를 동시에 보내야 하기 때문에 실제 모든 스캔 디바이스가 이를 받을 수 없는 경우가 생길 수도 있습니다.
또한 안드로이드에서 테스트 한 결과 서로다른 모델과 비콘의 모드에 따라 스캔 결과가 다르게 나온다는 실험 결과를 본 적이 있습니다.  제가 직접 테스트를 한 것은 아니지만 이 글에 따르면 Android 4.3이 탑재된 Nexus4 단말에서 Connectable 모드는 한 번의 스캔 사이클에서 한번의 Callback만 호출되는 반면 Non-Connectable 모드일 경우에는 여러번의 Callback을 받을 수 있다고 합니다.  이러한 Scan 결과는 폰의 모델이나 OS별로 상이하며 때문에 다양한 스캔 방법이 적용되어야 합니다.  Android 5.0이 탑재된 Nexus5에서 지원하는 Scanning 관련 API를 활용하면 동일한 비콘의 다른 Mode라 하더라도 동일하게 다수의 Callback을 받을 수 있습니다. 하지만 Nexus4에 Android 5.0을 업그레이드 하더라도 Connectable 모두에서는 한 사이클에서 한번의 Callback만 받을 수 있다고 하니 꼭 OS 버전의 문제만도 아닌 것 같습니다.
하지만, 아이폰의 경우  CBCentralManagerScanOptionAllowDuplicatesKey 라는 Flag를 스캔 함수에 전달하여 선택이 가능합니다.
이처럼 비콘을 이용하는 서비스를 개발하는 개발자의 경우 비콘의 모드에 따라 각 모델별 확인 및 테스트가 필요해 보입니다.


헬로팩토리 비콘 테스트랩에서는  40여종 이상의 다양한 비콘 제품들을 구비해서 직접 보거나 테스트 할 수 있는 공간을 마련해 놓았습니다.   제 개인적으로 시간을 할애해야 하기 때문에 한 번에 많은 분들을 응대할 수는 없지만 예약하시고 방문해 주시면 성심성의껏 대응해 드리도록 할 예정입니다.

Book an appointment with (주)헬로팩토리(HelloFactory) using SetMore

2015년 7월 19일 일요일

Google의 Beacon 플랫폼 'Eddystone - 에디스톤' 들여다 보기(2)

1편에이어 Google의 Eddystone Beacon 플랫폼에 대해 알아보겠습니다.
구글은 비콘 플랫폼을 제공하기 위해 Nearby API와 Proximity Beacon API를 지원하고 있습니다.

Nearby API는 Nearby Message API와 Nearby Connections API로 나눠지는데 이중에 Beacon의 Advertising Data를 전달받기 위해서 Nearby Message API를 사용하게 되며 해당 규격은 아직 오픈되지 않았습니다.  해당 API를 지원하는 Android 상의 기능은 Play Store service가 7.8로 업데이트 되어야 가능하다고 합니다.  하지만 이는 새롭게 출시되는 단말기부터 지원하는 것이 아니라 기존의 Android 버전에서도 해당 모듈만 업데이트되면 가능함으로 오픈 이후 빠른 시간내에 적용 모델이 늘어날 것으로 예상됩니다.
Nearby connections API는 주로 같은 로컬 네트워크 상의 디바이스들과 연결하여 Multi Gaming과 같은 기능을 제공하기 위해 사용됩니다.

Proximity Beacon API는 Eddystone 플랫폼의 일부로 비콘을 등록하고 관리하고 업데이트 하기 위한 기능들을 제공하며 REST(Representational State Transfer) interface를 사용합니다.
Proximity Beacon API를 이용하여 등록된 비콘의 정보는 Cloud에 저장되며 아래와 같은 meta data를 포함하게 됩니다.
  • Advertised ID (required).
  • Status.
  • Expected stability.
  • Latitude and longitude coordinates.
  • Indoor floor level.
  • Google Places API Place ID.
  • Freeform text description.
또한 Proximity Beacon API를 이용하여 1024 byte 까지의 data를 첨부시키거나 기존에 첨부된 data를 불러올 수도 있습니다.

마지막으로 Eddystone - TLM 를 통해 기록된 아래 정보들을 활용해
  • Battery level.
  • Count of frames that the beacon has transmitted.
  • Amount of time the beacon has been active.
  • Beacon temperature.
비콘의 상태를 모니터링 하고 아래와 같은 상황을 알려주기도 합니다.
  • Predicted battery death
  • Beacons that have moved away from their expected location
  • Unusually low detection rates.

이런 Proximity Beacon API를 사용하기 위해서는 Google 계정이 있거나 새로 가입해야 합니다.  구글 개발자 Console에서 프로젝트를 새로 가입하거나 해당 API를 활성화 시켜야 합니다. 
그 이후 새로운 Application Key를 생성해서 사용하시면 됩니다.

한마디로 Google의 Proximity Beacon API를 사용하면 별도의 Beacon 모니터링 솔루션을 개발하실 필요가 없어지게 됩니다. 
이번에 자세하게 언급되지 못한 Nearby Message API에 대해서는 공개되는대로 다시 포스트 하도록 하겠습니다.


현재 20여종 이상의 다양한 비콘 제품들을 구비해서 직접 보거나 테스트 할 수 있는 공간을 마련해 놓았습니다.   제 개인적으로 시간을 할애해야 하기 때문에 한 번에 많은 분들을 응대할 수는 없지만 예약하시고 방문해 주시면 성심성의껏 대응해 드리도록 할 예정입니다.

http://hellofactory.setmore.com 또는
Book an appointment with (주)헬로팩토리(HelloFactory) using SetMore

Google의 Beacon 플랫폼 'Eddystone - 에디스톤' 들여다 보기(1)

안녕하세요.  주말에 예정에 없던 글을 하나 올리려고 합니다.
5일전에 구글에서 자체 비콘 플랫폼인 Eddystone(에디스톤)을 발표했습니다.


궁금해 하실 분들이 계실 것 같아 간단하게 정리해 보려 합니다.

Google의  Eddystone은 크게 하드웨어 데이터 규격과  구글에서 제공하는 Beacon Server-side 플랫폼 두가지로 구분할 수 있습니다.

먼저 하드웨에 대해 알아보겠습니다.  기존의 iBeacon과 비교하여 말씀드리면 iBeacon은 공식적으로 iOS 에서 지원하는 Beacon의 Advertising Data 규격입니다.  하지만 Eddystone은 Android와 iOS를 모두 지원하는 Open Protocol입니다. 또한 3가지의 Data Packet을 지원하고 있습니다. 

물론 기존에도 몇몇 제조사는  iBeacon 과 AltBeacon의 두 가지 규격 중 선택하여 지원하는 제품을 이미 출시한 바 있습니다. (iBeacon, AltBeacon, UriBeacon 규격은 전에 올린 글을 참조하세요.)

Beacon for Eddystone은 iBeacon이나 AltBeacon과  비슷하게 비콘 ID를 기반으로 한 Eddystone-UID와 UriBeacon과 유사한 URL을  Advertising하여 Physical Web으로 기존의 Contents를 바로 볼수 있도록 URL을 내보내는  Eddystone-URL과 비콘의 센서와 배터리, 송신 상태 등을 모니터링 할 수 있게 데이터 값을 실어보내는 Eddystone-TLM(Telemetry) 모드를 지원합니다.

각 모두의 특징을 알아보겠습니다.

Eddystone - UID  (Frame Type 0x00)
iBeacon의 ID 영역은 총  20 bytes( UUID 16 bytes, Major, Minor ID 각 2 bytes)로 되어 있지만 Eddystone의 UID는 총 16 bytes이며 두 영역으로 나눠져 있습니다. Namespace는 UUID와 비슷하며 10 bytes로 구성되어 있으며 기존의 UUID를 활용하여 사용가능합니다.  UUID의 총 16 bytes에서 가운데 6 bytes를 제외하고 앞과 뒷부분을 붙여주어 사용합니다.

예) UUID : 8B0CA750-E7A7-4E14-BD99-095477CB3E77 중 가운데 3영역 E7A7-4E14-BD99를 제외하면 8B0CA750095477CB3E77 가 됩니다.

나머지 6  bytes는 Instance로 iBeacon의 Major와 Minor ID처럼 비콘을 구별하는데 사용됩니다.
사용 가능한 수는 2^48 로 사용하기엔 충분한 갯수죠.

Eddystone - URL
iBeacon은 비콘의 ID를 활용하여 필요한 컨텐츠를 이미 설치되어 있는 스마트폰의 App을 통해 전달하도록 되어 있는 반면 UriBeacon은 이미 만들어진 Web Page의 URL을 그대로 전달하여 웹브라우저를 통해 추가적인 App 설치 없이 정보를 볼수 있게 하는 장점이 있습니다.  이러한 URL을 브로드케스팅 할 수 있게 Eddystone에서도 URL 형식을 지원합니다.  UriBeacon처럼 ID대신 URL scheme과 17 bytes의 압축된 URL을 전달하게 됩니다.

UID와 URL 모드에서 공통적으로 RSSI를 통한 거리측정의 기준이 되는 측정된 Tx값을 보내게 되는데 iBeacon은 1m에서 측정된 RSSI 값을 보내게 되지만 Eddystone은 0m에서 측정한 값을 보냅니다.  

Eddystond - TLM
기존의 다른 비콘 모드와는 달리 TLM 모드는 실제 데이터를 실어 보내게 됩니다. 현재 규정된 Data 필드는 배터리의 Voltage와 비콘의 온도, 비콘의 동작(리셋)이후  Packet이 전송되는 횟수, 비콘의 동작(리셋)이후 0.1초 단위의 시간이 있습니다. 
시간과 packet 수는 비콘이 정상적으로 동작하는지를 모니터링하기 위한 것으로 생각됩니다.

이렇게 Eddystond을 지원하는 비콘은 해외의 6개의 제조사에서 지원하고 있으며 새롭게 구입하시거나 Estimote 사의 비콘의 경우 펌웨어를 3.1.1로 업그레이드 하시면 Eddystone을 지원하게 됩니다.

2편에 계속 이어집니다.


현재 20여종 이상의 다양한 비콘 제품들을 구비해서 직접 보거나 테스트 할 수 있는 공간을 마련해 놓았습니다.   제 개인적으로 시간을 할애해야 하기 때문에 한 번에 많은 분들을 응대할 수는 없지만 예약하시고 방문해 주시면 성심성의껏 대응해 드리도록 할 예정입니다.

http://hellofactory.setmore.com 또는
Book an appointment with (주)헬로팩토리(HelloFactory) using SetMore