Hi !
I done this at least, 4 different times, and I never wrote it down. So, here it is.
import json
from bluepy.btle import Scanner
try:
# based on http://ianharvey.github.io/bluepy-doc/scanner.html#sample-code
scanner = Scanner()
devices = scanner.scan(10.0)
devices_m = []
for dev in devices:
name = ""
power = ""
for (adtype, desc, value) in dev.getScanData():
if (desc == "Complete Local Name"):
name = str(value)
elif (desc == "Tx Power"):
power = str(value)
# add device addr, addType and rssi to devices_m
devices_m.append({'addr': dev.addr, 'addType': dev.addrType, 'rssi': dev.rssi, 'name': name, 'power': power})
json_devices = json.dumps(devices_m)
print(json_devices)
except Exception as ex:
print ( "Unexpected error in BLE Scanner BLUEPY: %s" % ex )
The output is similar to this one. You can see that my standing desk is listed here. If you are nearby, you can hack and move my desk up or down !

Important: The output JSON is using some tricks to make it readable in the console.
This is the code with the JSON formatted.
import json
import sys
from bluepy.btle import Scanner, DefaultDelegate
from pygments import highlight, lexers, formatters
try:
# based on http://ianharvey.github.io/bluepy-doc/scanner.html#sample-code
scanner = Scanner()
devices = scanner.scan(10.0)
devices_m = []
for dev in devices:
name = ""
power = ""
for (adtype, desc, value) in dev.getScanData():
if (desc == "Complete Local Name"):
name = str(value)
elif (desc == "Tx Power"):
power = str(value)
# add device addr, addType and rssi to devices_m
devices_m.append({'addr': dev.addr, 'addType': dev.addrType, 'rssi': dev.rssi, 'name': name, 'power': power})
# standard print
# json_devices = json.dumps(devices_m)
# print(json_devices)
# colored print
formatted_json = json.dumps(devices_m, indent=4)
colorful_json = highlight(formatted_json, lexers.JsonLexer(), formatters.TerminalFormatter())
print(colorful_json)
except Exception as ex:
print ( "Unexpected error in BLE Scanner BLUEPY: %s" % ex )
¿Con ganas de ponerte al día?
En Lemoncode te ofrecemos formación online impartida por profesionales que se baten el cobre en consultoría:
- Si tienes ganas de ponerte al día con Front End (ES6, Typescript, React, Angular, Vuejs…) te recomendamos nuestros Máster Front End: https://lemoncode.net/master-frontend#inicio-banner
- Si te quieres poner al día en Backend (stacks .net y nodejs), te aconsejamos nuestro Bootcamp Backend: https://lemoncode.net/bootcamp-backend#bootcamp-backend/banner
- Y si tienes ganas de meterte con Docker, Kubernetes, CI/CD…, tenemos nuestro Bootcamp Devops: https://lemoncode.net/bootcamp-devops#bootcamp-devops/inicio