2017-02-09 16 views
19

Chcę używać dowolnego telefonu komórkowego do łączenia się z urządzeniem IoT przez Bluetooth Classic z protokołem portu szeregowego (SPP). Urządzenie IoT nie ma ekranu ani klawiatury i ma automatycznie akceptować połączenia, o ile telefon łączący zna tajny kod PIN (tzn. Nie chcę być zmuszany do korzystania z ssh w urządzeniu IoT, aby skonfigurować parowanie za każdym razem nowy telefon komórkowy próbuje się połączyć).Ustawianie automatycznego parowania Bluetooth w systemie Linux

Są to polecenia, które Zabrakło mi do tej pory na urządzeniu IoT:

# Make the device discoverable: 
hciconfig hci0 piscan 

# Register SPP: 
sdptool add --channel=22 SP 

# Start rfcomm: 
rfcomm -r watch /dev/rfcomm0 22 

Niestety, nie mogłem znaleźć żadnego sposobu, aby skonfigurować kod PIN, a parowanie nie powiedzie się, gdy próbuję się połączyć z telefonem komórkowym. Ponadto urządzenie można wykryć tylko w krótkich odstępach czasu.

Jak skonfigurować stos Bluetooth urządzenia IoT (działającego w ostatnim Bluezie) do automatycznego parowania z dowolnym telefonem, który zna dany kod PIN, i jak mogę uczynić okres odkrywania na wieczność?

+0

Można skorzystać z "bluetoothctl" użyteczności którym statki z bluez biblioteki . Musisz włączyć agenta w celu uwierzytelnienia. Ponieważ twój system jest bezgłowy, użyj go "NoInputNoOutput". Pozwala to uniknąć interakcji hasła do uwierzytelniania (bluetoothctl agen NoInputNoOutput). Ale jeśli chcesz zaakceptować całe połączenie, użyj interfejsu Dbus "org.bluez.AgentManager1", aby zarejestrować własnego agenta z minimalną metodą "RequestAuthorization" zaimplementowaną w "org.bluez.Agent1" –

+0

Ale jeśli uruchomię bluetoothctl i ustawię " agent NoInputNoOutput ", nadal będzie mnie pytać, czy zaakceptować połączenie. Czy mówisz mi, że ma inne zachowanie, jeśli jest ustawione w trybie wsadowym? Jeśli chodzi o tworzenie własnych implementacji AgentManager1, wydaje się, że to ponowne wynalezienie koła. Czy Blues nie był wysyłany z menedżerem agenta? –

+0

Tak, wciąż prosi o potwierdzenie (tak/nie). Ale możesz odpowiedzieć na "Tak", pisząc swój własny prosty agent przy użyciu interfejsu Agent1. Tak, BlueZ udostępnia menedżerom agentów funkcje "DisplayOnly", "DisplayYesNo", "KeyboardOnly", "NoInputNoOutput" i "KeyboardDisplay". Ponieważ potrzebujesz specjalnej sprawy do zaakceptowania bez interwencji, możesz to osiągnąć za pomocą własnego Agenta1 wysyłającego "Tak" –

Odpowiedz

0

Możesz uruchomić aplikację, która implementuje interfejs API BlueZ DBus. Polecam BlueZ> = 5,42. Użyj interfejsu agenta i implementuj swój własny kod PIN. Po zarejestrowaniu swojego agenta, bluez automatycznie wywoła i użyje twojego własnego agenta, gdy zostanie zapytany o parowanie.

Co więcej, można ustawić DiscoverableTimeout na wartość od 0 do DBus z interfejsem org.bluez.Adapter1.

"Wartość zerowa oznacza, że ​​limit czasu jest wyłączony i pozostanie na zawsze w trybie wykrywalnym/ograniczonym na zawsze."

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt (dbus obiekt adapter doc) https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/agent-api.txt (dbus obiekt agenta doc) https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/5.44/test/simple-agent (próbka) http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/ (czytaj na dole)

Powiązane problemy