如何通过蓝牙唤醒处于待机状态的设备(例如AVR索尼STR-DN1080)

时间:2019-01-12 18:51:13

标签: android bluetooth raspberry-pi avr sony

我试图了解如何使用树莓派而不是Android手机通过蓝牙唤醒AVR STR-DN1080。 让我解释: -我的AVR Sony STR-DN1080可以进入蓝牙待机模式。在这种情况下,我可以使用Android手机,在配对的设备中搜索,找到我的“ STR DN1080 XXXX”设备,只需单击它,手机就会开始执行操作,几秒钟后,我的AVR就会唤醒并打开。 -所以我想我可以使用Raspberry PI 3B +来使用其蓝牙,并在需要时远程唤醒AVR。 -我的PI正在运行Stretch,其蓝牙似乎正常工作(请参见下文)。但是,一旦将我的AVR置于备用状态,就无法使用PI命令连接到设备(它看不到设备)。 我还注意到,当AVR待命时,我的手机在活动设备中看不到它,因此它必须使用“配对设备”中的信息。

因此,我相信蓝牙唤醒的工作方式我不了解。

在我的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,但是如果我单击AVR的存储的“配对设备”,它将正确唤醒。

因此,我想了解一下蓝牙如何唤醒它。还有其他命令要运行吗(例如WOL机制?)?我如何在树莓派PI上做到这一点?

非常感谢, Ricorico94

1 个答案:

答案 0 :(得分:0)

要通过蓝牙唤醒设备,我只需连接到“ RFCOMM”端口2,设备即可唤醒。 用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')