Proyek ini menyediakan pemutar media (komponen khusus) untuk asisten rumah yang memainkan TTS (teks-ke-speech) melalui speaker Bluetooth.
Jika Anda menggunakan pelacak perangkat Bluetooth HA (untuk deteksi keberadaan), proyek ini juga menyediakan pelacak bluetooth pengganti yang memungkinkan kedua komponen untuk dimainkan dengan baik bersama.
Karena pelacak Bluetooth terus -menerus memindai perangkat, pemutaran audio pada speaker Bluetooth dapat terganggu / menjadi berombak saat memindai. Komponen khusus ini bekerja bersama untuk memastikan hanya salah satunya mengakses Bluetooth pada waktu tertentu.
Alirannya seperti ini:
sudo apt-get install pulseaudio pulseaudio-module-bluetooth bluez mplayer sox libsox-fmt-mp3
sudo adduser pi pulse-access
sudo adduser homeassistant pulse-access
Di /etc/pulse/system.pa , tambahkan yang berikut ke bagian bawah file:
### Bluetooth Support
.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
#set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink
Bagian terakhir adalah bertahan pengaturan untuk A2DP, jika Bluetooth Anda tampaknya default ke profil yang berbeda. Saya telah mengomentarinya karena sepertinya serpihan.
Anda mungkin ingin melepaskan baris ini jika audio Anda terputus:
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
Buat file /etc/systemd/system/pulseaudio.service dan tambahkan yang berikut ini:
[Unit]
Description=Pulse Audio
[Service]
Type=simple
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/system_bus_socket
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm --exit-idle-time=-1
[Install]
WantedBy=multi-user.target
Aktifkan layanan untuk memulai pada waktu boot.
sudo systemctl daemon-reload
sudo systemctl enable pulseaudio.service
Berikan akses pengguna pulsa ke antarmuka Bluetooth
edit /etc/dbus-1/system.d/bluetooth.conf
Tambahkan baris berikut:
<policy user="pulse">
<allow send_destination="org.bluez"/>
<allow send_interface="org.bluez.MediaEndpoint1"/>
</policy>
sudo bluetoothctl
scan on
pair 00:2F:AD:12:0D:42
trust 00:2F:AD:12:0D:42
connect 00:2F:AD:12:0D:42
quit
Buat file [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh dan tambahkan yang berikut ini. Pastikan untuk mengganti alamat Bluetooth dengan speaker Bluetooth Anda.
#!/bin/bash
bluetoothctl << EOF
connect 00:2F:AD:12:0D:42
EOF
Pastikan untuk memberikan izin eksekusi untuk skrip.
sudo chmod a+x [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
Di /etc/rc.local , tambahkan yang berikut ini ke akhir file untuk menjalankan skrip saat startup:
# Pair Bluetooth devices
[PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
exit 0
Salin komponen speaker Bluetooth TTS (dari repo github ini) dan simpan ke direktori konfigurasi asisten rumah Anda.
custom_components/tts_bluetooth_speaker/media_player.py
Langkah ini hanya berlaku jika Anda menggunakan Bluetooth Tracker.
Salin komponen Bluetooth Tracker dan simpan ke direktori Home Assistant Config Anda.
custom_components/bluetooth_tracker/device_tracker.py
pactl list sinks
Anda harus melihat sesuatu seperti:
Sink #1
State: SUSPENDED
Name: bluez_sink.00_2F_AD_12_0D_42.a2dp_sink
Jika malah mengatakan headset_head_unit, Anda dapat beralih ke profil A2DP sebagai berikut:
pactl set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink
Periksa lagi dan validasi menggunakan A2DP.
Tes Menggunakan baris perintah jika mplayer dapat streaming ke A2DP
mplayer -ao pulse::bluez_sink.00_2F_AD_12_0D_42.a2dp_sink -channels 2 -volume 100 /some/mp3file.mp3
Pada tahap ini (setelah reboot), Anda harus dapat mulai menggunakan speaker TTS Bluetooth di HA.
Di bawah ini adalah contoh bagaimana komponen dikonfigurasi. Anda perlu menentukan alamat Bluetooth dari speaker Anda, dan secara opsional mengatur level volume (harus antara 0 dan 1). Jika Anda menemukan speaker Anda tidak memainkan bagian pertama dari audio (yaitu detik pertama hilang saat diputar kembali), maka Anda dapat secara opsional menambahkan keheningan sebelum dan/atau setelah audio TTS asli memiliki opsi pre_silence_duration dan post_silence_duration (harus antara 0 dan 60 detik). Jika Anda telah mengubah direktori cache TTS Anda (di konfigurasi TTS Anda), maka Anda harus mengatur cache_dir di sini agar cocok.
media_player:
- platform: tts_bluetooth_speaker
address: [BLUETOOTH_ADDRESS] # Required - for example, 00:2F:AD:12:0D:42
volume: 0.45 # Optional - default is 0.5
# pre_silence_duration: 1 # Optional - No. of seconds silence before the TTS (default is 0)
# post_silence_duration: 0.5 # Optional - No. of seconds silence after the TTS (default is 0)
# cache_dir: /tmp/tts # Optional - make sure it matches the same setting in TTS config
Jika Anda menggunakan Bluetooth Tracker, Anda mungkin sudah memilikinya di konfigurasi:
device_tracker:
- platform: bluetooth_tracker
Untuk menguji itu semua berfungsi, Anda dapat menggunakan alat pengembang> layanan di frontend HA untuk memainkan pesan TTS melalui speaker Bluetooth Anda:

{ "entity_id": "media_player.tts_bluetooth_speaker", "message": "Hello" }
Cara lain untuk mengujinya adalah dengan menambahkan otomatisasi yang memainkan pesan TTS setiap kali HA dimulai:
automation:
- alias: Home Assistant Start
trigger:
platform: homeassistant
event: start
action:
- delay: '00:00:10'
- service: tts.google_translate_say
data:
entity_id: media_player.tts_bluetooth_speaker
message: 'Home Assistant has started'