Скрипт Expect - ожидание двух условий и извлечение MAC-адреса из bluetoothctl - PullRequest
0 голосов
/ 22 марта 2019

Я работаю с Raspberry Pi Zero W с Bluetooth на борту.В настоящее время я могу использовать bluetoothctl, чтобы вручную делать то, что я хочу, но я пытаюсь автоматизировать это, чтобы rpi можно было оставить в покое, чтобы выполнять эту задачу неделями.

Цель состоит в том, чтобы rpi был обнаружен в Bluetooth и позволял кому-то подключаться к нему автоматически без пароля.Как только соединение установлено, я хочу отправить команду info на этот сопряженный mac-адрес, чтобы получить дополнительную информацию об устройстве.В конце концов я хотел бы добавить функциональность, чтобы иметь возможность отправлять текстовые файлы на устройство (ноутбук, телефон с Android и т. Д.), Но это может произойти позже.В конечном итоге я хочу записать информацию (Mac и результаты информации с отметкой времени) в отдельный файл.

Позвольте мне заявить, что у меня есть очень ограниченные знания в этом, но я пытаюсь сделать это.Если у вас есть какие-либо идеи о том, как поступить, возможно, мне будет легче.В настоящее время я разрабатываю сценарий для этой работы.Пока у меня есть это:

#!/usr/bin/expect -f

set prompt "#"
log_user 1
set timeout -1
send_user "Please enter bluetooth signal name: "
expect_user -re "(.*)\n"
set btname $expect_out(1,string)
send_user "BT signal will be $btname\n"

send_user "\nEnter Log Name: "
expect_user -re "(.*)\n"
set logname $expect_out(1,string)
send_user "You entered $logname\n"
log_file -a $logname

sleep 2

spawn sudo bluetoothctl
sleep 2
expect -re $prompt
send "system-alias $btname\r"
sleep 2
expect -re $prompt
send "scan on\r"
sleep 8
expect -re $prompt
send "discoverable on\r"
sleep 2
expect 

Итак, моя проблема в том, что когда устройство сопрягается, вот что сигнализирует следующее:

[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller B8:27:EB:03:68:F1 Discoverable: yes
[NEW] Device F8:F1:B6:E2:BB:06 DROID RAZR M
[CHG] Device F8:F1:B6:E2:BB:06 Modalias: bluetooth:v0008pB02Dd0000
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001103-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001106-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 0000112d-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 453994d5-d58b-96f9-6616-b37f586ba2ec
[CHG] Device F8:F1:B6:E2:BB:06 UUIDs: 936da01f-9abd-4d9d-80c7-02af85c822a8
[CHG] Device F8:F1:B6:E2:BB:06 ServicesResolved: yes
[CHG] Device F8:F1:B6:E2:BB:06 Paired: yes
[CHG] Device F8:F1:B6:E2:BB:06 ServicesResolved: no
[CHG] Device F8:F1:B6:E2:BB:06 Connected: no
[bluetooth]# info F8:F1:B6:E2:BB:06 
Device F8:F1:B6:E2:BB:06
    Name: DROID RAZR M
    Alias: DROID RAZR M
    Class: 0x5a020c
    Icon: phone
    Paired: yes
    Trusted: no
    Blocked: no
    Connected: no
    LegacyPairing: no
    UUID: Dialup Networking         (00001103-0000-1000-8000-00805f9b34fb)
    UUID: OBEX Object Push          (00001105-0000-1000-8000-00805f9b34fb)
    UUID: OBEX File Transfer        (00001106-0000-1000-8000-00805f9b34fb)
    UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
    UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
    UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
    UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
    UUID: NAP                       (00001116-0000-1000-8000-00805f9b34fb)
    UUID: Handsfree Audio Gateway   (0000111f-0000-1000-8000-00805f9b34fb)
    UUID: SIM Access                (0000112d-0000-1000-8000-00805f9b34fb)
    UUID: Phonebook Access Server   (0000112f-0000-1000-8000-00805f9b34fb)
    UUID: Message Access Server     (00001132-0000-1000-8000-00805f9b34fb)
    UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
    UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
    UUID: Vendor specific           (453994d5-d58b-96f9-6616-b37f586ba2ec)
    UUID: Vendor specific           (936da01f-9abd-4d9d-80c7-02af85c822a8)
    Modalias: bluetooth:v0008pB02Dd0000

Итак, мой вопрос - как я могу сделать«Ожидайте», который либо проверит регулярное выражение действительного MAC-адреса и строку «Paired: yes», и извлечет этот MAC-адрес из буфера.Могу ли я рассчитывать на «ожидаемо (regex && string" Paired: yes ") {do}"?Я немного растерялся, как сделать это и вытащить фактический MAC-адрес, чтобы сохранить его в переменной и использовать в следующей информационной команде.Я предполагаю, что он манипулирует wait_out (буфером), но это намного выше моего набора навыков.

...