Этот проект предоставляет медиаплеер (пользовательский компонент) для домашнего помощника, который играет TTS (текст в речь) через динамик Bluetooth.
Если вы используете трекер устройства Bluetooth HA (для обнаружения присутствия), этот проект также обеспечивает заменяющий трекер Bluetooth, который позволяет оба компонента хорошо играть вместе.
Поскольку трекер 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
В /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
Дайте Pulse User -доступ к интерфейсам 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) и сохраните его в свой каталог конфигурации домашнего помощника.
custom_components/tts_bluetooth_speaker/media_player.py
Этот шаг применяется только в том случае, если вы используете трекер Bluetooth.
Скопируйте компонент Bluetooth Tracker и сохраните его в свой домашний каталог конфигурации.
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 Audio Shing the 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
Если вы используете трекер 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'