Alternatif untuk rfcomm biner yang sekarang sudah tidak digunakan lagi dalam bluez

10

Sejak bluez 5.44, binari rfcomm yang terkandung dalam bluez-utils (antara lain seperti hcitool) dianggap usang dan mulai sekarang hanya termasuk dalam paket compat bluez-utils-compat yang disediakan oleh AUR.

Apakah ada aplikasi command-line yang serupa untuk mengikat perangkat bluetooth ke port serial menggunakan modul rfcomm kernel atau apakah saya harus menggunakan PyBluez atau lib serupa mulai sekarang?

Jika yang terakhir terjadi demikian, perpustakaan Python 3 mana yang akan Anda rekomendasikan?

Dan jika seseorang tahu, tolong katakan padaku mengapa begitu banyak bluez-utils yang dianggap usang tiba-tiba. Saya tidak dapat menemukan apa pun tentang itu.

The ArchWiki merekomendasikan melaksanakan fungsi rfcomm menggunakan baru D-Bus Profil 1 API .

Eike
sumber

Jawaban:

2

Saya baru-baru ini menemukan proyek bluez-tools , yang bertujuan untuk mengimplementasikan fungsionalitas yang hilang menggunakan Bluez D-Bus api saat ini.

Bluez-tools tersedia di ArchLinux dari repositori komunitas. Saya belum menguji ini dan halaman github menyatakan, bahwa itu masih dalam versi beta. Tetapi menurut dokumentasi, bt-serial harus dapat menggantikan bluez rfcomm dan bt-adapter + bt-agent + bt-device yang memiliki fungsi hcitool.

Sunting: Saat melihat daftar masalah dan komitmen terakhir, bluez-tools sepertinya tidak dipelihara secara aktif lagi.

Eike
sumber
1

Saya telah menemukan solusi lain yang mungkin. Saya menemukan ini dengan menggali melalui repo hub git seseorang. Ini menggunakan modul soket built-in python3.

Prasyarat:

  1. Anda memiliki adaptor yang berfungsi di alamat <alamat adaptor>.
  2. Anda memiliki perangkat Bluetooth target Anda di <alamat perangkat>.
  3. Perangkat disematkan.

Artinya, titik yang sama dengan rfcomm dapat digunakan.


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()
Gault Drakkor
sumber
Sangat menyenangkan mengetahui bahwa Python secara alami mendukung komunikasi serial Bluetooth. Terima kasih telah menjawab pertanyaan yang relatif lama ini.
eike
0

saya ingin mencatat tentang masalah ini:

  1. bahwa proyek github ini mengandung beberapa fungsi rfcomm. (berdasarkan file tes bluez).
  2. bluez project sendiri masih berisi file rfcomm.c, yang dapat dengan mudah dikompilasi dengan:

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... hanya satu file, tidak perlu mengkompilasi seluruh proyek bluez. di mana xyz adalah versi kode sumber bluez tar.xz yang diunduh (5.46 sekarang). sebelum mengunduh, orang harus terlebih dahulu memeriksa sendiri bluetoothd -vdan mengunduh sumber yang cocok. bluez-libs hanya ketergantungan untuk keberhasilan kompilasi.

Saya membutuhkan rfcomm untuk armv7 (raspberry 2) dan tidak ada paket aur untuk rfcomm, dan ini hanya cara, tetapi berfungsi dengan baik.

Masih tidak yakin mengapa rfcomm sudah usang, tanpa alternatif yang baik, dan bagaimana berbicara dengan bluetooth seperti port serial dengan cara lain. Karena bahkan Anda adalah ahli python ditambah ahli DBUS ... (seperti pemilik proyek yang disebutkan di atas mungkin adalah) ... masih hanya fifo yang disediakan dengan cara ini, bukan perangkat karakter nyata di / dev / ... bahwa semua program lain (seperti arduino ) dapat melihat dan bekerja dengannya.

Asain Kujovic
sumber
2
1. Halaman proyek menyatakan "Hanya untuk menghindari penerapan kembali beberapa kode lama yang menggunakan alat-alat ini", yang berarti penulis akan menyarankan mengikuti pendekatan yang berbeda ketika menggunakan bluez untuk proyek-proyek baru. 2. Ada banyak cara untuk mengkompilasi rfcomm sendiri, apa yang saya cari adalah alasan penghentian dan alternatif yang didukung.
eike