Dieses Projekt bietet einen Media Player (benutzerdefinierte Komponente) für den Home-Assistenten, der TTS (Text-to-Speech) über einen Bluetooth-Lautsprecher abspielt.
Wenn Sie den Bluetooth -Geräte -Tracker von HA (zur Präsenzerkennung) verwenden, bietet dieses Projekt auch einen Ersatz -Bluetooth -Tracker, mit dem beide Komponenten gut zusammen spielen können.
Da der Bluetooth -Tracker ständig nach Geräten scannt, kann die Wiedergabe von Audio auf dem Bluetooth -Lautsprecher beim Scannen gestört / werden abgehackt. Diese benutzerdefinierten Komponenten arbeiten zusammen, um sicherzustellen, dass nur einer von ihnen zu einem bestimmten Zeitpunkt auf Bluetooth zugreift.
Der Fluss ist ungefähr so:
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 Fügen Sie Folgendes zum Ende der Datei hinzu:
### 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
Der letzte Teil besteht darin, die Einstellung für A2DP zu bestehen, falls Ihr Bluetooth ein anderes Profil zu standardmäßig zu sein scheint. Ich habe es kommentiert, weil es scheinbar zu sein scheint.
Möglicherweise möchten Sie diese Linie überzeugen, wenn Ihr Audio abgeschnitten wird:
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
Erstellen Sie die Datei /etc/systemd/system/pulseaudio.service und fügen Sie Folgendes hinzu:
[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
Aktivieren Sie den Dienst, um zur Bootszeit zu beginnen.
sudo systemctl daemon-reload
sudo systemctl enable pulseaudio.service
Geben Sie Pulse -Benutzer Zugriff auf Bluetooth -Schnittstellen
edit /etc/dbus-1/system.d/bluetooth.conf
Fügen Sie die folgenden Zeilen hinzu:
<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
Erstellen Sie die Datei [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh und fügen Sie ihnen Folgendes hinzu. Stellen Sie sicher, dass Sie die Bluetooth -Adresse durch die Ihres Bluetooth -Lautsprechers ersetzen.
#!/bin/bash
bluetoothctl << EOF
connect 00:2F:AD:12:0D:42
EOF
Stellen Sie sicher, dass Sie Ausführungsberechtigungen für das Skript erteilen.
sudo chmod a+x [PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
Fügen Sie in /etc/rc.local Folgendes zum Ende der Datei hinzu, um das Skript beim Start auszuführen:
# Pair Bluetooth devices
[PATH_TO_YOUR_HOME_ASSSISTANT]/scripts/pair_bluetooth.sh
exit 0
Kopieren Sie die TTS Bluetooth -Lautsprecherkomponente (aus diesem GitHub -Repo) und speichern Sie sie in Ihrem Home -Assistant -Konfigurationsverzeichnis.
custom_components/tts_bluetooth_speaker/media_player.py
Dieser Schritt gilt nur, wenn Sie den Bluetooth -Tracker verwenden.
Kopieren Sie die Bluetooth -Tracker -Komponente und speichern Sie sie in Ihrem Home -Assistant -Konfigurationsverzeichnis.
custom_components/bluetooth_tracker/device_tracker.py
pactl list sinks
Sie sollten so etwas sehen wie:
Sink #1
State: SUSPENDED
Name: bluez_sink.00_2F_AD_12_0D_42.a2dp_sink
Wenn es stattdessen Headset_head_unit sagt, können Sie wie folgt zum A2DP -Profil wechseln:
pactl set-card-profile bluez_card.00_2F_AD_12_0D_42 a2dp_sink
Überprüfen Sie erneut und validieren Sie es werden A2DP verwendet.
Testen Sie mit der Befehlszeile, wenn mPlayer auf A2DP streamen kann
mplayer -ao pulse::bluez_sink.00_2F_AD_12_0D_42.a2dp_sink -channels 2 -volume 100 /some/mp3file.mp3
Zu diesem Zeitpunkt (nach einem Neustart) sollten Sie in der Lage sein, den TTS Bluetooth -Lautsprecher in HA zu verwenden.
Im Folgenden finden Sie ein Beispiel dafür, wie die Komponente konfiguriert ist. Sie müssen die Bluetooth -Adresse Ihres Lautsprechers angeben und optional die volume festlegen (muss zwischen 0 und 1 liegen). Wenn Sie feststellen, dass Ihr Sprecher nicht den ersten Teil des Audios spielt (dh die erste Sekunde fehlt beim Zurückgespielt), können Sie optional vor und/oder nach dem ursprünglichen TTS -Audio die Optionen pre_silence_duration und post_silence_duration (müssen zwischen 0 und 60 Sekunden) stattfinden. Wenn Sie Ihr TTS -Cache -Verzeichnis (in Ihrer TTS -Konfiguration) geändert haben, sollten Sie die cache_dir hier auf übereinstimmende festlegen.
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
Wenn Sie den Bluetooth -Tracker verwenden, haben Sie dies wahrscheinlich bereits in Ihrer Konfiguration:
device_tracker:
- platform: bluetooth_tracker
Um zu testen, dass alles funktioniert, können Sie Entwickler -Tools> Dienste in der HA -Frontend verwenden, um eine TTS -Nachricht über Ihren Bluetooth -Lautsprecher abzuspielen:

{ "entity_id": "media_player.tts_bluetooth_speaker", "message": "Hello" }
Eine andere Möglichkeit, es zu testen, besteht darin, eine Automatisierung hinzuzufügen, die eine TTS -Nachricht abspielt, wenn HA gestartet wird:
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'