Skip to content

Instantly share code, notes, and snippets.

@bisko
Created August 15, 2016 14:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bisko/fa4ba41d9826fa411da55304f3fbf6d2 to your computer and use it in GitHub Desktop.
Save bisko/fa4ba41d9826fa411da55304f3fbf6d2 to your computer and use it in GitHub Desktop.
Python scan and autoconnect to devices
import dbus
import bluetooth
import sys
import subprocess
# Hardcoded devices, order is the priority
devices = ["C8:85:50:88:30:ED", "FC:64:BA:0E:C0:10"]
has_connected = False
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()
for path in objects.keys():
# print("[ %s ]" % (path))
interfaces = objects[path]
for interface in interfaces.keys():
if interface != "org.bluez.Device1":
continue
properties = interfaces[interface]
for key in properties.keys():
#print(" %s = %s" % (key, properties[key]))
if key == "Connected" and properties[key] == 1:
print("DEVICE IS CONNECTED: %s" % properties["Address"])
has_connected = True
if has_connected == True:
print("Device already connected")
sys.exit()
try:
nearby = bluetooth.discover_devices(duration=5, lookup_names=False)
found_devices = []
if len(nearby) > 0:
for addr in nearby:
found_devices.append(addr)
if len(found_devices) > 0:
for dev in devices:
if dev in found_devices:
print("Found device: %s\n" % dev)
device_connect = bus.get_object('org.bluez', '/org/bluez/hci0/dev_%s' % dev.replace(':', '_'))
interface = dbus.Interface(device_connect, 'org.bluez.Device1')
interface.Connect()
break;
except:
print("Got an exception, restarting bluetooth subsystem")
systemd1 = bus.get_object('org.freedesktop.systemd1', '/org/freedesktop/systemd1')
manager = dbus.Interface(systemd1, 'org.freedesktop.systemd1.Manager')
job = manager.RestartUnit('bluetooth.service', 'fail')
subprocess.call(['hciconfig', 'hci0', 'down'])
subprocess.call(['hciconfig', 'hci0', 'up'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment