Как разбудить по Bluetooth устройство в режиме ожидания Bluetooth (например, AVR Sony STR-DN1080) - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь понять, как мой AVR STR-DN1080 можно разбудить по Bluetooth с помощью Raspberry Pi вместо моего телефона Android. Позволь мне объяснить: - Мой AVR Sony STR-DN1080 может перейти в режим ожидания Bluetooth. В таком случае я могу использовать свой телефон Android, искать среди сопряженных устройств, найти мое устройство "STR DN1080 XXXX", просто нажать на него, и телефон начнет что-то делать, и через несколько секунд мой AVR проснется и включится. - поэтому я подумал, что смогу использовать Raspberry PI 3B +, чтобы использовать его Bluetooth, и при необходимости дистанционно активировать AVR. - мой PI работает под управлением Stretch, и его bluetooth работает нормально (см. ниже). Но как только я переведу свой AVR в режим ожидания, я не смогу использовать команды PI для подключения к устройству (оно не видит устройство). Я также заметил, что когда AVR находится в режиме ожидания, мой телефон не видит его среди активных устройств, поэтому он должен использовать информацию из «сопряженного устройства».

Так что я верю, что есть кое-что, чего я не понимаю, о том, как работает пробуждение по Bluetooth ..

На моем Raspberry PI, я могу сделать и проверить следующее, когда AVR включен и активен:

(я использую sudo, потому что на моем Stretch только sudo делает работу bluetoothctl, в противном случае я получаю сообщение об ошибке типа «Нет доступного контроллера по умолчанию». Я изменил MAC-адреса для конфиденциальности.)

sudo bluetoothctl
[bluetooth]# pair AA:BB:CC:DD:EE:FF
Attempting to pair with AA:BB:CC:DD:EE:FF
[CHG] Device AA:BB:CC:DD:EE:FF Connected: yes
[CHG] Device AA:BB:CC:DD:EE:FF Modalias: bluetooth:v0046p0802d0903
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110a-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110b-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110c-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110e-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 00001200-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 00001800-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF ServicesResolved: yes
[CHG] Device AA:BB:CC:DD:EE:FF Paired: yes
Pairing successful
Так что, кажется, работает и в паре. Но как только я переведу его в режим ожидания, команда «scan on» не показывает мой AVR, и следующие команды не работают:

[bluetooth]# connect AA:BB:CC:DD:EE:FF
Attempting to connect to AA:BB:CC:DD:EE:FF
Failed to connect: org.bluez.Error.Failed
[bluetooth]# pair AA:BB:CC:DD:EE:FF
Attempting to pair with AA:BB:CC:DD:EE:FF
Failed to pair: org.bluez.Error.AlreadyExists
Параллельно, на моем телефоне Android, AVR не указан в активных Bluetooth-устройствах телефона, но если я нажму на запомненное «спаренное устройство» моего AVR, то оно будет правильно разбудить его.

Так что мне было бы интересно понять, как это работает по Bluetooth. Есть ли другие команды, которые нужно запустить (например, механизмы WOL?)? Как я могу сделать это на малиновом PI?

Большое спасибо, Ricorico94

1 Ответ

0 голосов
/ 19 февраля 2019

Чтобы активировать устройство через Bluetooth, я просто подключаюсь к порту 2 RFCOMM, и устройство активируется. Пример кода, написанного на Python (просто измените хост на адрес устройства вашего устройства):

import bluetooth

name = "STR-DN 1080 EU"
host = "AA:BB:CC:DD:EE:FF"
port = 2

print(f"connecting to \"{name}\" on {host}")

sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((host, port))
sock.close()

У меня истекает время соединения, но устройство просыпается:

bluetooth.btcommon.BluetoothError: (110, 'Connection timed out')

или отказано в соединении, если устройство уже активировано:

bluetooth.btcommon.BluetoothError: (111, 'Connection refused')
...