Este proyecto proporciona un reproductor multimedia (componente personalizado) para el asistente de inicio que reproduce TTS (texto a voz) a través de un altavoz Bluetooth.
Si está utilizando el rastreador de dispositivos Bluetooth de HA (para la detección de presencia), este proyecto también proporciona un rastreador de Bluetooth de reemplazo que permite que ambos componentes jueguen bien juntos.
Dado que el rastreador Bluetooth escanea constantemente para dispositivos, la reproducción de audio en el altavoz Bluetooth puede verse interrumpido / volverse entrecortado mientras escanea. Estos componentes personalizados funcionan juntos para garantizar que solo uno de ellos acceda a Bluetooth en un momento dado.
El flujo es algo como esto:
sudo apt-get install pulseaudio pulseaudio-module-bluetooth bluez mplayer sox libsox-fmt-mp3
sudo adduser pi pulse-access
sudo adduser homeassistant pulse-access
En /etc/pulse/system.pa , agregue lo siguiente al final del archivo:
### 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
La última parte es persistir la configuración para A2DP, en caso de que su Bluetooth parezca predeterminado a un perfil diferente. Lo he comentado porque parece ser escamoso.
Es posible que desee desenchufar esta línea si su audio se está cortando:
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
Cree el archivo /etc/systemd/system/pulseaudio.service y agregue lo siguiente:
[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
Habilite el servicio para comenzar en el momento del arranque.
sudo systemctl daemon-reload
sudo systemctl enable pulseaudio.service
Dé acceso a los usuarios de Pulse a las interfaces Bluetooth
editar /etc/dbus-1/system.d/bluetooth.conf
Agregue las siguientes líneas:
<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
Cree el archivo [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh y agregue lo siguiente. Asegúrese de reemplazar la dirección Bluetooth con la de su altavoz Bluetooth.
#!/bin/bash
bluetoothctl << EOF
connect 00:2F:AD:12:0D:42
EOF
Asegúrese de otorgar permisos de ejecución para el script.
sudo chmod a+x [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
En /etc/rc.local , agregue lo siguiente al final del archivo para ejecutar el script al inicio:
# Pair Bluetooth devices
[PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
exit 0
Copie el componente del altavoz Bluetooth TTS (de este repositorio de GitHub) y guárdelo en el directorio de configuración de su asistente de inicio.
custom_components/tts_bluetooth_speaker/media_player.py
Este paso solo se aplica si está usando el rastreador Bluetooth.
Copie el componente de rastreador Bluetooth y guárdelo en el directorio de configuración de su asistente de inicio.
custom_components/bluetooth_tracker/device_tracker.py
pactl list sinks
Deberías ver algo como:
Sink #1
State: SUSPENDED
Name: bluez_sink.00_2F_AD_12_0D_42.a2dp_sink
Si, en cambio, dice Headset_head_unit, puede cambiar al perfil A2DP de la siguiente manera:
pactl set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink
Verifique nuevamente y valida que está usando A2DP.
Pruebe usando la línea de comando si MPlayer puede transmitir a A2DP
mplayer -ao pulse::bluez_sink.00_2F_AD_12_0D_42.a2dp_sink -channels 2 -volume 100 /some/mp3file.mp3
En esta etapa (después de un reinicio), debería poder comenzar a usar el altavoz TTS Bluetooth en HA.
A continuación se muestra un ejemplo de cómo se configura el componente. Debe especificar la dirección Bluetooth de su altavoz y opcionalmente establecer el nivel volume (debe ser entre 0 y 1). Si encuentra que su altavoz no está reproduciendo la primera parte del audio (es decir, falta el primer segundo cuando se reproduce), entonces opcionalmente puede agregar algo de silencio antes y/o después del TTS TTS Audio Hsing las opciones pre_silence_duration y post_silence_duration (debe ser entre 0 y 60 segundos). Si ha cambiado su directorio de caché TTS (en su configuración de TTS), debe configurar el cache_dir aquí para que coincida.
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
Si está utilizando el rastreador Bluetooth, probablemente ya tenga esto en su configuración:
device_tracker:
- platform: bluetooth_tracker
Para probar que todo está funcionando, puede usar Servicios de Desarrollo> Servicios en HA Frontend para reproducir un mensaje TTS a través de su altavoz Bluetooth:

{ "entity_id": "media_player.tts_bluetooth_speaker", "message": "Hello" }
Otra forma de probarlo es agregar una automatización que reproduce un mensaje TTS cada vez que se inicia 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'