Este projeto fornece um media player (componente personalizado) para assistente doméstico que reproduz TTS (texto em fala) por meio de um alto-falante Bluetooth.
Se você estiver usando o rastreador de dispositivo Bluetooth do HA (para detecção de presença), este projeto também fornece um rastreador Bluetooth de substituição que permite que ambos os componentes joguem bem juntos.
Como o rastreador Bluetooth digitaliza constantemente os dispositivos, a reprodução do áudio no alto -falante Bluetooth pode ser interrompida / se tornar agitada durante a digitalização. Esses componentes personalizados trabalham juntos para garantir que apenas um deles esteja acessando o Bluetooth a qualquer momento.
O fluxo é algo assim:
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 , adicione o seguinte à parte inferior do arquivo:
### 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
A última parte é persistir a configuração do A2DP, caso seu Bluetooth pareça padrão para um perfil diferente. Eu comentei isso porque parece ser Flakey.
Você pode querer descomentar esta linha se o seu áudio estiver sendo cortado:
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
Crie o arquivo /etc/systemd/system/pulseaudio.service e adicione o seguinte:
[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 o serviço para iniciar na hora da inicialização.
sudo systemctl daemon-reload
sudo systemctl enable pulseaudio.service
Dê acesso ao usuário do Pulse às interfaces bluetooth
Edit /etc/dbus-1/system.d/bluetooth.conf
Adicione as seguintes linhas:
<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
Crie o arquivo [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh e adicione o seguinte. Certifique -se de substituir o endereço Bluetooth pelo seu alto -falante Bluetooth.
#!/bin/bash
bluetoothctl << EOF
connect 00:2F:AD:12:0D:42
EOF
Certifique -se de conceder permissões de execução para o script.
sudo chmod a+x [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
Em /etc/rc.local , adicione o seguinte ao final do arquivo para executar o script na inicialização:
# Pair Bluetooth devices
[PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
exit 0
Copie o componente do alto -falante TTS Bluetooth (deste repositório do GitHub) e salve -o no diretório de configuração do seu assistente doméstico.
custom_components/tts_bluetooth_speaker/media_player.py
Esta etapa se aplica apenas se você estiver usando o rastreador Bluetooth.
Copie o componente do rastreador Bluetooth e salve -o no diretório de configuração do seu assistente doméstico.
custom_components/bluetooth_tracker/device_tracker.py
pactl list sinks
Você deve ver algo como:
Sink #1
State: SUSPENDED
Name: bluez_sink.00_2F_AD_12_0D_42.a2dp_sink
Se ele disser headset_head_unit, você poderá mudar para o perfil A2DP da seguinte forma:
pactl set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink
Verifique novamente e valide -o usando A2DP.
Teste usando a linha de comando se o MPlayer puder transmitir para A2DP
mplayer -ao pulse::bluez_sink.00_2F_AD_12_0D_42.a2dp_sink -channels 2 -volume 100 /some/mp3file.mp3
Nesta fase (após uma reinicialização), você poderá começar a usar o alto -falante TTS Bluetooth em HA.
Abaixo está um exemplo de como o componente está configurado. Você precisa especificar o endereço Bluetooth do seu alto -falante e, opcionalmente, definir o nível volume (deve estar entre 0 e 1). Se você achar que o seu alto -falante não estiver tocando a primeira parte do áudio (ou seja, o primeiro segundo está faltando quando reproduzido), então você pode adicionar um pouco de silêncio antes e/ou depois das opções originais do TTS Audio Hsing the pre_silence_duration e post_silence_duration (deve estar entre 0 e 60 segundos). Se você alterar seu diretório de cache TTS (na sua configuração TTS), você deve definir o cache_dir aqui para corresponder.
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
Se você estiver usando o rastreador Bluetooth, provavelmente já tem isso em sua configuração:
device_tracker:
- platform: bluetooth_tracker
Para testar que tudo está funcionando, você pode usar ferramentas de desenvolvedor> Serviços no Frontend do HA para reproduzir uma mensagem TTS através do seu alto -falante Bluetooth:

{ "entity_id": "media_player.tts_bluetooth_speaker", "message": "Hello" }
Outra maneira de testar é adicionar uma automação que reproduz uma mensagem TTS sempre que o HA é iniciado:
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'