Sorry, rather late to this discussion so apologies if my interruption is a distraction rather than helping.
I've been doing a fair bit of work with BlueZ on Raspberry Pi of late so I want to help if I can.
Most of my efforts have been with connecting the RPi and the BBC micro:bit which uses Bluetooth Low Energy (BLE). BLE is > 4.1 of the Bluetooth spec where the discussion above is mainly talking about using what is referred to as Bluetooth Classic (~2.1 of the spec) so my experience may not be directly relevant.
I did also want to echo what @Douglas6 said about the DBus API in BlueZ changing significantly between 4 & 5. Indeed, even between versions of 5 there are some some big changes in the API. This results in lots of out of date information on the web when you do a search. This also means when you look at the online docs and examples you need to look for the version of BlueZ you are running.
By default on the RPi it is 5.23 so look at this version of the
http://git.kernel.org/cgit/bluetooth/bl ... txt?h=5.23
http://git.kernel.org/cgit/bluetooth/bl ... est?h=5.23
From version 5.43 the DBus API seems to have become stable and that is the version which is in Debian Stretch.
It would be good to know what hardware you plan to have at the other end of Bluetooth link. I saw at one point that it was a button. For things like buttons you may find using BLE far easier than having a serial connection if you have that option.
You can get help directly from BlueZ developers and there are various ways to contact them. They can be helpful if you ask specific questions. More information at:
I've also found it helpful when working with Bluetooth to treat the scan and connecting to devices as separate from exchanging data with them when starting out. When I'm starting off I use 'bluetoothctl' on the command line to check that I can scan and connect to the device. I then write the code for exchanging data. Then got back and code the scanning and connecting piece.
If you can connect to the remote hardware with bluetoothctl then you should be able to (with Bluetooth classic) use python sockets or evdev libraries to exchange data. Again, it would be good to know what is the other end of the Bluetooth link as BLE may be an easier option.
I did a talk at CamJam recently about controlling objects over BLE with Python which may offer some useful background information: https://youtu.be/x9Zdz57h3kc