ansible/pis/start_bt_discoverable.py

51 lines
1.5 KiB
Python

#!/usr/bin/python3
import dbus
import sys
def mac_address_to_dbus_path(bus):
manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()
result = {}
for path, interfaces in objects.items():
for interface, properties in interfaces.items():
if not interface == 'org.bluez.Adapter1':
continue
result[str(properties['Address'])] = str(path)
return result
def start_discovery(bus, dbus_path):
# Make sure the device is powered on
adapter = dbus.Interface(bus.get_object("org.bluez", dbus_path), "org.freedesktop.DBus.Properties")
adapter.Set("org.bluez.Adapter1", "Powered", dbus.Boolean(1))
# Get the adapter interface for discovery
dbus.Interface(bus.get_object("org.bluez", dbus_path), "org.bluez.Adapter1").StartDiscovery()
def set_alias(bus, dbus_path, new_alias):
adapter = dbus.Interface(bus.get_object("org.bluez", dbus_path), "org.freedesktop.DBus.Properties")
adapter.Set("org.bluez.Adapter1", "Alias", dbus.String(new_alias))
def main():
mac_address = sys.argv[1]
device_name = sys.argv[2]
bus = dbus.SystemBus()
mapping = mac_address_to_dbus_path(bus)
try:
dbus_path = mapping[mac_address]
except KeyError:
print("No Device with this MAC address found")
exit(1)
set_alias(bus, dbus_path, device_name)
start_discovery(bus, dbus_path)
if __name__ == '__main__':
main()