이 프로젝트는 Bluetooth 스피커를 통해 TTS (텍스트 연설)를 연주하는 홈 어시스턴트를위한 미디어 플레이어 (사용자 정의 구성 요소)를 제공합니다.
HA의 Bluetooth 장치 추적기 (PRESENTETECT)를 사용하는 경우이 프로젝트는 두 구성 요소를 모두 잘 수행 할 수있는 교체 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
마지막 부분은 Bluetooth가 다른 프로파일로 기본적으로 보이는 경우 A2DP 설정을 유지하는 것입니다. 나는 그것이 Flakey 인 것처럼 보이기 때문에 그것을 언급했다.
오디오가 끊어지면이 라인을 무너 뜨릴 수 있습니다.
### 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 인터페이스에 펄스 사용자에게 액세스 할 수 있습니다
/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)를 복사하여 Home Assistant Config 디렉토리에 저장하십시오.
custom_components/tts_bluetooth_speaker/media_player.py
이 단계는 Bluetooth 트래커를 사용하는 경우에만 적용됩니다.
Bluetooth 트래커 구성 요소를 복사하여 Home Assistant Config 디렉토리에 저장하십시오.
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
이 단계에서 재부팅 후에는 HA에서 TTS Bluetooth 스피커를 사용할 수 있어야합니다.
아래는 구성 요소가 어떻게 구성되는지에 대한 예입니다. 스피커의 Bluetooth 주소를 지정하고 선택적으로 volume 레벨을 설정해야합니다 (0과 1 사이야). 스피커가 오디오의 첫 번째 부분을 재생하지 않는 경우 (즉, 다시 재생 될 때 첫 번째 초가 누락 된 경우), pre_silence_duration 및 post_silence_duration 옵션 (0 ~ 60 초 사이 여야 함)을 찍는 원래 TTS 오디오를 선택한 후 선택적으로 약간의 침묵을 추가 할 수 있습니다. 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
Bluetooth 트래커를 사용하는 경우 이미 구성에 다음과 같습니다.
device_tracker:
- platform: bluetooth_tracker
모든 것이 작동하는지 테스트하려면 HA Frontend에서 개발자 도구> 서비스를 사용하여 Bluetooth 스피커를 통해 TTS 메시지를 재생할 수 있습니다.

{ "entity_id": "media_player.tts_bluetooth_speaker", "message": "Hello" }
테스트하는 또 다른 방법은 HA가 시작될 때마다 TTS 메시지를 재생하는 자동화를 추가하는 것입니다.
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'