PyBeac  n

Eddystone Protocol implementation in Python

- Prabhanshu Attri

Agenda

  • What are Beacons?
  • Eddystone Protocol: What's the fuss all about?
  • Making Beacons Useful and demo
  • PyBeacons
  • Demo of PyBeacons

artstation.com

What is a beacon?

  • A beacon is a small Bluetooth radio transmitter. It's kind of like a lighthouse: it repeatedly transmits a single signal that other devices can see.

Giphy.com

https://www.youtube.com/user/GoogleDevelopers

  • An open beacon format developed by Google
  • Can be detected by both Android and iOS devices
  • Available Frame formats
    • Eddystone-UID: A unique, static ID 
    • Eddystone-URL: A compressed URL
    • Eddystone-TLM: Beacon status data 
    • Eddystone-EID: A time-varying beacon

URL

https://xprss.org/starwars

URL

Kitkat and up
iOS 8 and up (With chrome or app)
version 49+
Bluetooth enabled device preferred Bluetooth 4.0 and up
Open Source Proprietary
All four frame types work with iOS and Android. Official only works with iOS
Transmits: Eddystone-URL, Eddystone-UID, Eddystone-EID and Eddystone-TLM Transmits: UUID, Major (4 digits) and Minor (4 digits)
Eddystone URL doesn't require app Requires app
EID changes frequently which can be decoded by authorized clients EID isn't supported
APIs released by Google: ​Nearby API and Proximity Beacon API No specific APIs
Flexible but requires more complicated programming Simple to implement

URL

Byte offset Field Description
0 Frame Type Value = 0x10
1 TX Power Calibrated Tx power at 0 m
2 URL Scheme Encoded Scheme Prefix
3+ Encoded URL Length 1-17

Frame Specification

URL Scheme Prefix

Decimal Hex Expansion
0 0x00 http://www.
1 0x01 https://www.
2 0x02 http://
3 0x03 https://
Expansion .com/ .org/ .edu/ .net/ .info/ .biz/ .gov/
Hex 0x0 0x01 0x02 0x03 0x04 0x05 0x06
Expansion .com .org .edu .net .info .biz .gov
Hex 0x07 0x08 0x09 0x10 0x11 0x12 0x13
Decimal Hex Expansion
0 0x00 .com/
1 0x01 .org/
2 0x02 .edu/
3 0x03 .net/
4 0x04 .info/
5 0x05 .biz/
6 0x06 .gov/
7 0x07 .com
8 0x08 .org
9 0x09 .edu
10 0x01 .net
11 0x0b .info
12 0x0c .biz
13 0x0d .gov
14..32 0x0e..0x20 Reserved for Future Use
127..255 0x7F..0xFF Reserved for Future Use

Eddystone-URL HTTP URL encoding

Alphabet Hex
a 61
b 62
c 63
d 64
e 65
f 66
g 67
h 68
i 69
j 6A
k 6B
l 6C
m 6D
n 6E
o 6F
p 70
q 71
Alphabet Hex
r 72
s 73
t 74
u 75
v 76
w 77
x 78
y 79
z 7A

https://www.raspberrypi.org

Expansion Hex
https://www. 01

https://www.raspberrypi.org

Expansion Hex
https://www. 01
r 72
a 61
s 73
p 70
b 62
e 65
r 72
r 72
y 79
p 70
i 69

https://www.raspberrypi.org

Expansion Hex
https://www. 01
r 72
a 61
s 73
p 70
b 62
e 65
r 72
r 72
y 79
p 70
i 69
.org 08

https://eddyst.one

PyBeac  n

  • Python package for scanning and advertising Eddystone-URL and Eddystone-UID.
  • Dependencies:
    • Bluez
    • Python3

PyBeac  n

  • Installation: 
    sudo pip install PyBeacon
  • Upgrade:
    sudo pip install PyBeacon --upgrade
  • Usage:
     
PyBeacon [-h] [-u [URL]] [-s] [-t] [-o] [-v] [-V]

optional arguments:
	-h, --help            show this help message and exit
	-u [URL], --url [URL] URL to advertise.
	-i [UID], --uid [UID] UID to advertise.
	-s, --scan            Scan for URLs.
	-t, --terminate       Stop advertising URL.
	-o, --one             Scan one URL only.
	-v, --version         Version of PyBeacon.
	-V, --Verbose         Print lots of debug output.

PyBeac  n

Demo

https://xprss.org/pybeacon

PyBeac  n

Implementations based on

  • PyBTSteward
    • Repo: https://github.com/wolfspyre/PyBTSteward
  • Pikiosk
    • Repo: https://hayvalley.io/chromium-kiosk/
    • Blog: https://github.com/chriso0710/pikiosk

PyBeac  n

Blogs about

  • https://www.schlafhacking.de/wiki/index.php/BLE-Indoor-Navigation
  • http://mabushiisign.hatenablog.jp/entry/2016/09/17/100446
  • https://bbs.nextthing.co/t/how-to-create-a-eddystone-beacon-with-your-chip/5141/10
  • https://www.linkedin.com/pulse/turn-raspberrypi-3-bluetooth-beacon-john-paavo-tengström/
  • https://medium.com/@urish/exploring-the-physical-web-without-buying-beacons-efae51e36c2e
  • https://blog-giwisoft.rhcloud.com/beacons-android-ubuntu/
  • https://www.mybridge.co/view/124318

Thank you

PyBeacon Repo: https://xprss.org/pybeacon

Eddystone Repo: https://xprss.org/eddystone

@PrabhanshuAttri

prabhanshu.com

@PrabhanshuAttri

PyBeacon: Eddystone Protocol implementation in Python

By Prabhanshu Attri

PyBeacon: Eddystone Protocol implementation in Python

PyBeacon is an Eddystone implementation in Python for Linux systems. Using this, Linux systems can be used as a beacon or a beacon scanner. https://xprss.org/pycon2017

  • 3,429