يوفر هذا المشروع مشغل وسائط (مكون مخصص) للمساعد المنزلي الذي يلعب TTS (نص إلى نص) عبر مكبر صوت Bluetooth.
إذا كنت تستخدم جهاز تعقب جهاز Bluetooth الخاص بـ HA (للكشف عن التواجد) ، يوفر هذا المشروع أيضًا تعقب Bluetooth بديل يسمح للمكونين باللعب معًا بشكل جيد.
نظرًا لأن جهاز تعقب البلوتوث يمسح باستمرار للأجهزة ، فقد يتم تشغيل / يصبح تشغيل الصوت على مكبر صوت Bluetooth متقطعًا أثناء المسح. تعمل هذه المكونات المخصصة معًا لضمان الوصول إلى Bluetooth في أي وقت.
التدفق شيء من هذا القبيل:
sudo apt-get install pulseaudio pulseaudio-module-bluetooth bluez mplayer sox libsox-fmt-mp3
sudo adduser pi pulse-access
sudo adduser homeassistant pulse-access
in /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 ، في حالة ويبدو أن Bluetooth الخاص بك افتراضيًا لملف تعريف مختلف. لقد علقت ذلك لأنه يبدو أنه فاشل.
قد ترغب في إلغاء تحديد هذا الخط إذا تم قطع الصوت الخاص بك:
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
قم بإنشاء ملف /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
امنح مستخدم النبض إلى واجهات Bluetooth
edit /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 وأضف ما يلي إليه. تأكد من استبدال عنوان Bluetooth بعنصر مكبر صوت Bluetooth.
#!/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
تنطبق هذه الخطوة فقط إذا كنت تستخدم Tracker Bluetooth.
انسخ مكون تعقب Bluetooth وحفظه إلى دليل تكوين مساعد منزلك.
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.
فيما يلي مثال على كيفية تكوين المكون. تحتاج إلى تحديد عنوان Bluetooth لمكبر الصوت الخاص بك ، وتعيين مستوى volume اختياريا (يجب أن يكون بين 0 و 1). إذا وجدت أن مكبر الصوت الخاص بك لا يلعب الجزء الأول من الصوت (على سبيل المثال ، فإن الثانية الأولى مفقودة عند تشغيلها) ، فيمكنك إضافة بعض الصمت اختياريًا قبل و/أو بعد صوت TTS الأصلي في خيارات pre_silence_duration و post_silence_duration (يجب أن يكون ما بين 0 و 60 ثانية). إذا قمت بتغيير دليل ذاكرة التخزين المؤقت TTS (في تكوين 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
إذا كنت تستخدم Tracker Bluetooth ، فربما يكون لديك هذا بالفعل في التكوين الخاص بك:
device_tracker:
- platform: bluetooth_tracker
لاختبار أن كل شيء يعمل ، يمكنك استخدام أدوات المطورين> الخدمات في الواجهة الأمامية HA لتشغيل رسالة TTS من خلال مكبر صوت Bluetooth الخاص بك:

{ "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'