Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/emlid/bluetool

Bluetooth manager for Linux.
https://github.com/emlid/bluetool

Last synced: 20 days ago
JSON representation

Bluetooth manager for Linux.

Awesome Lists containing this project

README

        

### Bluetool

A simple Python API for Bluetooth D-Bus calls. Allows easy pairing, connecting and scanning.
Also provides a TCP-to-RFCOMM socket bridge for data transfer.

#### Dependencies

- `python-dbus`
- `tcpbridge`

The package was tested with **Python 2.7**

#### Installation

`pip install bluetool`

or clone and run `make install`

#### Usage

- Bluetooth:

list: `[{"name": Name, "mac_address": MAC-address}, ... ]`

Methods of class Bluetooth:
- `start_scanning(timeout)`: `scan` in background
- `scan(timeout)`
- `get_devices_to_pair()`, returns list
- `get_available_devices()`, returns list
- `get_paired_devices()`, returns list
- `get_connected_devices()`, returns list
- `make_discoverable()`, returns bool
- `start_pairing(address)`: `pair` in background
- `pair(address)`, returns bool
- `connect(address)`, returns bool
- `disconnect(address)`, returns bool
- `trust(address)`, returns bool
- `remove(address)`, returns bool
- `set_adapter_property(prop, value)`, returns bool
- `get_adapter_property(prop)`
- `set_device_property(address, prop, value)`, returns bool
- `get_device_property(address, prop)`

- BluetoothServer:

- Step1: Use `run()` to create SPP
- Step2: Connect the bluetooth device
- Step3: TCPServer is available for connection

Use `shutdown()` to shutdown server.

##### Examples

- Scanning
```python
from bluetool import Bluetooth

bluetooth = Bluetooth()
bluetooth.scan()
devices = bluetooth.get_available_devices()
print(devices)
```
- Using the RFCOMM-TCP Bridge
```python
import signal
from bluetool import BluetoothServer

def handler(signum, frame):
server.shutdown()

tcp_port = 8100
server = BluetoothServer(tcp_port)

signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)

server.run()
```
- Using the Bluetooth Agent
```python
import signal
from bluetool.agent import Client, AgentSvr

class MyClient(Client):

def request_pin_code(self, dev_info):
print(dev_info)
return raw_input("Input pin code:")

def request_passkey(self, dev_info):
print(dev_info)
return raw_input("Input passkey:")

def request_confirmation(self, dev_info, *args):
print(dev_info, args)
return raw_input("Input 'yes' to accept request:") == "yes"

def request_authorization(self, dev_info):
print(dev_info)
return raw_input("Input 'yes' to accept request:") == "yes"

def handler(signum, frame):
svr.shutdown()

svr = AgentSvr(client_class=MyClient)

signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)

svr.run()
```

### About the project

This package was written by [Aleksandr Aleksandrov](https://github.com/AD-Aleksandrov) working at [Emlid](https://emlid.com/).

The bluetool was originally written for the [Emlid Reach RTK receiver](https://emlid.com/reach/), but we decided to open source it, as there is no easy Python API for BT pairing/connecting. Feel free to add issues and submit pull requests.