โครงการนี้มีเครื่องเล่นสื่อ (องค์ประกอบที่กำหนดเอง) สำหรับผู้ช่วยในบ้านที่เล่น TTS (ข้อความเป็นคำพูด) ผ่านลำโพงบลูทู ธ
หากคุณใช้ตัวติดตามอุปกรณ์บลูทู ธ ของ HA (สำหรับการตรวจจับการแสดงตน) โครงการนี้ยังมีตัวติดตามบลูทู ธ ทดแทนที่ช่วยให้ทั้งสองส่วนเล่นเข้าด้วยกันได้อย่างดี
เนื่องจากตัวติดตามบลูทู ธ สแกนอุปกรณ์อย่างต่อเนื่องการเล่นเสียงบนลำโพงบลูทู ธ อาจถูกรบกวน / กลายเป็นขาด ๆ หาย ๆ ในขณะที่สแกน ส่วนประกอบที่กำหนดเองเหล่านี้ทำงานร่วมกันเพื่อให้แน่ใจว่ามีเพียงหนึ่งในนั้นคือการเข้าถึงบลูทู ธ ในเวลาใดก็ตาม
การไหลเป็นสิ่งนี้:
sudo apt-get install pulseaudio pulseaudio-module-bluetooth bluez mplayer sox libsox-fmt-mp3
sudo adduser pi pulse-access
sudo adduser homeassistant pulse-access
ใน /etc/pulse/system.pa เพิ่มสิ่งต่อไปนี้ไปที่ด้านล่างของไฟล์:
### 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
ส่วนสุดท้ายคือการคงอยู่สำหรับการตั้งค่าสำหรับ A2DP ในกรณีที่บลูทู ธ ของคุณดูเหมือนจะเริ่มต้นเป็นโปรไฟล์อื่น ฉันได้แสดงความคิดเห็นเพราะดูเหมือนว่าจะเป็น Flakey
คุณอาจต้องการที่จะไม่รู้สึกถึงบรรทัดนี้หากเสียงของคุณถูกตัดออก:
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
สร้าง file /etc/systemd/system/pulseaudio.service และเพิ่มสิ่งต่อไปนี้:
[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
เปิดใช้งานบริการเพื่อเริ่มต้นในเวลาบูต
sudo systemctl daemon-reload
sudo systemctl enable pulseaudio.service
ให้การเข้าถึงผู้ใช้พัลส์ไปยังอินเตอร์เฟสบลูทู ธ
แก้ไข /etc/dbus-1/system.d/bluetooth.conf
เพิ่มบรรทัดต่อไปนี้:
<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
สร้างไฟล์ [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh และเพิ่มสิ่งต่อไปนี้ ตรวจสอบให้แน่ใจว่าได้เปลี่ยนที่อยู่บลูทู ธ ด้วยลำโพงบลูทู ธ ของคุณ
#!/bin/bash
bluetoothctl << EOF
connect 00:2F:AD:12:0D:42
EOF
ตรวจสอบให้แน่ใจว่าได้ให้สิทธิ์ดำเนินการสำหรับสคริปต์
sudo chmod a+x [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
ใน /etc/rc.local ให้เพิ่มสิ่งต่อไปนี้ในตอนท้ายของไฟล์เพื่อเรียกใช้สคริปต์เมื่อเริ่มต้น:
# Pair Bluetooth devices
[PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
exit 0
คัดลอกส่วนประกอบลำโพง TTS Bluetooth (จาก GitHub repo นี้) และบันทึกลงในไดเรกทอรีผู้ช่วยที่บ้านของคุณ
custom_components/tts_bluetooth_speaker/media_player.py
ขั้นตอนนี้ใช้เฉพาะในกรณีที่คุณใช้ตัวติดตามบลูทู ธ
คัดลอกองค์ประกอบตัวติดตามบลูทู ธ และบันทึกลงในไดเรกทอรีการกำหนดค่าผู้ช่วยที่บ้านของคุณ
custom_components/bluetooth_tracker/device_tracker.py
pactl list sinks
คุณควรเห็นบางอย่างเช่น:
Sink #1
State: SUSPENDED
Name: bluez_sink.00_2F_AD_12_0D_42.a2dp_sink
ถ้ามันแทน headset_head_unit คุณสามารถเปลี่ยนเป็นโปรไฟล์ A2DP ได้ดังนี้:
pactl set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink
ตรวจสอบอีกครั้งและตรวจสอบว่าใช้ A2DP
ทดสอบโดยใช้บรรทัดคำสั่งหาก mplayer สามารถสตรีมไปยัง a2dp
mplayer -ao pulse::bluez_sink.00_2F_AD_12_0D_42.a2dp_sink -channels 2 -volume 100 /some/mp3file.mp3
ในขั้นตอนนี้ (หลังจากรีบูต) คุณควรจะเริ่มใช้ลำโพง TTS Bluetooth ใน HA
ด้านล่างเป็นตัวอย่างของวิธีการกำหนดค่าส่วนประกอบ คุณต้องระบุที่อยู่บลูทู ธ ของลำโพงของคุณและเลือกระดับระดับ volume (ต้องอยู่ระหว่าง 0 ถึง 1) หากคุณพบว่าลำโพงของคุณไม่ได้เล่นส่วนแรกของเสียง (เช่นวินาทีแรกหายไปเมื่อเล่นกลับ) คุณสามารถเลือกความเงียบก่อนและ/หรือหลังจากตัวเลือก TTS เสียงดั้งเดิม hsing ตัวเลือก pre_silence_duration และ post_silence_duration (ต้องอยู่ระหว่าง 0 ถึง 60 วินาที) หากคุณเปลี่ยนไดเรกทอรี TTS Cache ของคุณ (ในการกำหนดค่า TTS ของคุณ) คุณควรตั้งค่า cache_dir ที่นี่เพื่อให้ตรงกับ
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
หากคุณใช้ตัวติดตามบลูทู ธ คุณอาจมีสิ่งนี้อยู่ในการกำหนดค่าของคุณ:
device_tracker:
- platform: bluetooth_tracker
ในการทดสอบว่ามันใช้งานได้ทั้งหมดคุณสามารถใช้ เครื่องมือนักพัฒนาซอฟต์แวร์> บริการ ในส่วนหน้า HA เพื่อเล่นข้อความ TTS ผ่านลำโพงบลูทู ธ ของคุณ:

{ "entity_id": "media_player.tts_bluetooth_speaker", "message": "Hello" }
อีกวิธีหนึ่งในการทดสอบคือการเพิ่มระบบอัตโนมัติที่เล่นข้อความ TTS เมื่อใดก็ตามที่เริ่ม HA:
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'