Search code examples
pythonbluetoothdbusbluez

Write data to Bluetooth device with DBus and Bluez


I'm need write data to Bluetooth device with DBus and Bluez using Python dbus library.

But only know how to connect and disconnect device:

import dbus

system_bus = dbus.SystemBus()
device = system_bus.get_object('org.bluez','/org/bluez/hci0/dev_FF_FF_99_96_64_60')
object = dbus.Interface(device, dbus_interface='org.bluez.Device1')
object.Connect()

object.Disconnect()

That's method description from DFeet app:

<method name="WriteValue">
    <arg name="value" type="ay" direction="in"/>
    <arg name="options" type="a{sv}" direction="in"/>
</method>

UPDATE: Added code which write converted bytes

import dbus
import binascii

system_bus = dbus.SystemBus()
device = system_bus.get_object('org.bluez','/org/bluez/hci0/dev_FF_FF_99_96_64_60')
object = dbus.Interface(device, dbus_interface='org.bluez.Device1')
object.Connect()

device_2 = system_bus.get_object('org.bluez','/org/bluez/hci0/dev_FF_FF_99_96_64_60/service000c/char000d')
object_2 = dbus.Interface(device_2, dbus_interface='org.bluez.GattCharacteristic1')

#bytes = dbus.ByteArray(binascii.unhexlify("025a06000000"))
bytes = binascii.unhexlify("025a06000000")

object_2.WriteValue(bytes,{})

object.Disconnect()

Solution

  • After some tests with BtleJuice Framework can confirm this is enough for bytes sending:

    bytes = binascii.unhexlify("025a06000000")
    object_2.WriteValue(bytes,{})
    

    In methods described like this:

    <method name="WriteValue">
        <arg name="value" type="ay" direction="in"/>
        <arg name="options" type="a{sv}" direction="in"/>
    </method>
    

    At least it work in my case.