Posted on Sep 21, 2017 | 0 comments

Mi-am cumpărat un bec cu Bluetooth de pe Aliexpress. Cu ajutorul unei aplicații Android îi poți schimba culoarea, intensitatea luminii, îi poți parsa melodii (că are și difuzor) și face alte chestii cu el. Dar eu vreau să fac chestiile astea din Linux, nu din Android. Așa că dacă tot m-am trezit la 5 dimineața azi, m-am documentat puțin și avem așa:

  1. instalezi bluez:

sudo apt-get install bluez bluez-tools

2. hciconfig îmi returnează numele dispozitivului:

hci0: Type: BR/EDR Bus: USB
BD Address: C8:FF:28:1A:43:F6 ACL MTU: 1024:8 SCO MTU: 50:8
UP RUNNING
RX bytes:1368 acl:7 sco:0 events:93 errors:0
TX bytes:3291 acl:13 sco:0 commands:67 errors:0

3. Acum știm că hci0 e becul cu bluetooth și că e activ. Scanăm după adresă:

sudo hcitool lescan
LE Scan ...
AF:D0:19:65:D5:FA (unknown)
AF:D0:19:65:D5:FA ilink app

ilink app e numele becului iar AF:D0:19:65:D5:FA e adresa care ne interesează.

4. Intrăm în promptul gatttool:

sudo gatttool -I

5. Ne conectăm la bec:

[LE]> connect AF:D0:19:65:D5:FA
Attempting to connect to AF:D0:19:65:D5:FA
Connection successful

6. Să vedem ce funcții bluetooth are, acum că ne-am conectat:

[AF:D0:19:65:D5:FA][LE]> primary
attr handle: 0x0001, end grp handle: 0x0003 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0004, end grp handle: 0x0006 uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0007, end grp handle: 0x000e uuid: 0000a032-0000-1000-8000-00805f9b34fb

Din lista serviciilor GATT aflăm că 1800 e ”Generic Access” iar 1801 e ”Generic Attribute”. a032 nu-l găsesc în listă. Am să presupun că 1801 e fie funcția care permite schimbarea culorilor, fie cea care permite parsarea de MP3-uri difuzorului.

Mai rămâne să văd cum pot schimba culoarea sau cum îi pot livra melodii din CLI și-apoi fac un script care să automatizeze tot. Observ că pot folosi și bluetoothctl pentru a intra într-un prompt de unde pot da comenzi pentru a obține UUID-ul și lega dispozitivele unul de celălalt (printre altele).

Mai experimentez eu și updatez postul.

/Later edit: Am dat pairing dar uitasem să conectez dispozitivele între ele. Not enough coffee.
După cum suspectam, 1801 de mai sus e într-adevăr atribut:

/Later edit:

Facem progrese. Am instalat Blueman și vede becul din prima. E un applet care stă în systray-ul din MATE. Ba i-am dat să facă pairing audio și s-a conectat cu un ”cling” venit din difuzorul becului. Suntem pe calea cea bună.

/Later edit: Evrika! Am setat la Sound Preferences ca hardware și output device becul care apărea în listă ca ”ilink”. Am testat difuzoarele și se pare că-l vede doar pe cel din stânga (probabil becul e mono; habar n-am).

Setat balansul difuzoarelor left/right spre left, până la capăt.

Pornit muzica și-acum îmi sună military pop din tavan. Vecinul de deasupra o să se bucure.

Rămâne să văd cum reușesc să accesez funcțiile de luminozitate/culoare.


Mai am și două prize smart plug cu WiFi, mă joc cu ele zilele astea. Ce pot face e un script; ca atunci când temperatura procesorului trece de 49 de grade vara să se deschidă aerul condiționat. Lol. Ceva gen (rapid, on top of my head) un cronjob care să ruleze

sensors | grep "+[5-9]" > .arde

iar dacă fișierul .arde e mai mare de 0 bytes atunci accesează wifi-ul cu adresa MAC/SSID-ul cutare

if [[ $(find /home/cypress/.arde -type f -size +1c 2>/dev/null) ]]; then
  comandă-power-on-priză-prin-wifi-blabla
fi

Fișierul .arde are fix 229 de bytes când prinde output de la comanda de mai sus. S-ar putea face un script care să detecteze și dimensiunea fixă: if-229-then.
/Later edit: citesc că pot instala un firmware custom pe priză dar pentru asta trebuie să am un convertor FTDI. Văd că e de vânzare la $1,93 pe Aliexpress (FTDI FT232RL USB To TTL de 3,3V). Bought, împreună cu cabluri female-to-female la vreo 70 de cenți. Iar aștept 3 săptămâni până se mișcă Poșta Română…