Re: Python reading Eddystone beacons

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Barry,

On Wed, Oct 21, 2015 at 1:26 AM, Barry Byford <31baz66@xxxxxxxxx> wrote:
> Hello,
>
> I’m looking to use a Raspberry Pi running the latest Raspbian Jessie operation
> system with Bluez 5.23.
>
> I’m trying to create a workshop for schools to interact with Eddystone
> BLE beacons.
> The workshop will show students the basics of reading the beacon data
> and then it will
> be up to the students to build applications from this using the Python
> programming language.
> The Raspberry Pi allows us to use them as the development platform and
> to run the
> final application also.
> Python is the chosen language as this is what schools seem to be using the most.
>
> The way that I’m currently doing the scanning for the beacon data is
> with this bash
> script:
> #!/bin/bash
> sudo hcitool lescan --duplicates 1>/dev/null &
> trap "sudo kill $!" EXIT
> sudo hcidump --raw
>
> The output is then be parsed with a Python library that would be what
> the students
> called to get the data.
>
> While I’m making some progress with the above shell script it doesn’t seem very
> elegant. It looks like there should be a better way using the D-Bus API.
> I’ve been looking in
> https://git.kernel.org/cgit/bluetooth/bluez.git/tree/test?id=5.23
> for inspiration but don’t seem to have anything that is showing me the beacon
> advertisement.
>
> Should I be able to get the Eddystone beacon payload using Python with
> the D-Bus API
> in Bluez 5.23?
> Is there a good tutorial/example that I could look at?

bluetoothctl does actually print the advertising data:

[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[CHG] Device XX:XX:XX:XX:XX:XX RSSI: -34
[CHG] Device XX:XX:XX:XX:XX:XX Name: Test beacon
[CHG] Device XX:XX:XX:XX:XX:XX Alias: Test beacon
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Key: fed8
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Value: 0x00
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Value: 0x20
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Value: 0x02
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Value: 0x30
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Value: 0x31
[CHG] Device XX:XX:XX:XX:XX:XX ServiceData Value: 0x08

It is basically using the properties ServiceData and ManufacturerData:

https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt

With this all you need to do is to listen for PropertiesChanged and
decode the values, it would probably be good idea to have a python
sample of decoding eddystone beacons, or beacons in general.


-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux