NEWS
Alexa als Bluetooth-Lautsprecher
-
Nachdem ich der Vergangenheit bereits erfolgreich einen kleinen Bluetooth-Lautsprecher mit meinem Raspberry Pi, auf welchem auch ioBroker läuft, gekoppelt habe und diesen als Ziel für sayit-Ausgaben genutzt habe, dachte ich mir, dass könnte ich doch auch mit Alexa bewerkstelligen. Immerhin kann ich mein Handy mit Alexa koppeln und Alexa als Audiogerät nutzen.
Das koppeln und Verbinden mit meinem Raspberry Pi funktioniert auch, allerdings kann ich kein Audio wiedergeben. Die Bluetooth-Audio-Senke (sink) fehlt:
pactl list sinks short 0 alsa_output.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING
Eine Senke wird durch Echo allerdings bereitgestellt
pactl list cards [...] Karte #1 Name: bluez_card.34_D2_70_BD_CB_96 Treiber: module-bluez5-device.c Owner-Modul: 24 Eigenschaften: device.description = "Echo-GSW" device.string = "34:D2:70:BD:CB:96" device.api = "bluez" device.class = "sound" device.bus = "bluetooth" device.form_factor = "speaker" bluez.path = "/org/bluez/hci0/dev_34_D2_70_BD_CB_96" bluez.class = "0x0c0414" bluez.alias = "Echo-GSW" device.icon_name = "audio-speakers-bluetooth" Profile: a2dp_source: High Fidelity Capture (A2DP Source) (sinks: 0, sources: 1, priority: 10, available: yes) a2dp: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes) off: Aus (sinks: 0, sources: 0, priority: 0, available: yes) Aktive Profile: a2dp_source Profile: speaker-output: Speaker (priority: 0, latency offset: 0 usec) Part of profile(s): a2dp speaker-input: Bluetooth Input (priority: 0, latency offset: 0 usec, available) Part of profile(s): a2dp_source
Kann mir jemand helfen?
-
Da bist Du schon weiter als ich … ich scheitere noch daran mit ubunti 16.04 das Audio-gerät zu koppeln weil die bt-audio als Tool rausgeworfen haben ... Wie hast Du connected und das als Audio-Sink verbunden?
-
Vorab: Ich habe es nun zum Laufen bekommen. Einziges Problem momentan: bei einem Reconnect ist nicht nur "Alexa" der Audioempfänger (RPi = Source, Alexa = Sink) sondern auch anders herum der RPi der Empfänger (Alexa = Source, RPi = Sink). Dies führt dazu, dass man Alexa selbst nicht mehr hört (da am RPi kein Ausgabegerät angeschlossen ist.
Folgend versuche ich nieder zuschreiben, wie ich das Ganze zum Laufen bekommen habe.
Mein aktuelles System ist ein Raspberry Pi 3 mit Raspbian Jessie Lite mit Kernel 4.4.27 vom 25.10.2016.
Folgende Pakete habe ich installiert:
-
bluez
-
bluez-utils
-
pulseaudio
sowie deren Abhängigkeiten.
sudo apt-get update sudo apt-get install bluez bluez-utils pulseaudio
:!: WICHTIG: :!:
Die Dienste müssen im root-Kontext gestartet werden, da ioBroker als root ausgeführt wird. Werden die nachfolgenden Dienste nur als normaler Benutzer, z.B. pi ausgeführt, funktioniert es zwar von der Console aus im Benutzerkontext, jedoch nicht aus ioBroker heraus.
Anschließend den Bluetooth-Dienst starten:
sudo service bluetooth start
Nun müssen wir den Pulseaudio-Dienst starten, ansonsten schlägt das Koppeln fehl:
sudo pulseaudio -D --system
Jetzt können wir versuchen, Alexa zu koppeln. Den Kopplungsvorgang startet man entweder über die App
oder durch den Sprachbefehl "Alexa, koppeln!"
Auf dem RPi starten wir bluetoothctl:
sudo bluetoothctl
An der bluetoothctl-Kommandozeile führen wir nun folgende Befehle aus:
agent on scan on
'agent on' bewirkt das Starten des Bluetooth-Agents, welcher die Autorisierung durchführt (der Part mit der PIN-Eingabe etc.)
'scan on' aktiviert die Suche nach neuen Geräten, die sich in Reichweite befinden.
Irgendwann sollte dann Alexa gefunden werden (sofern diese noch Paarungsbereit ist):
[NEW] Device XX:XX:XX:XX:XX:XX Echo-YYY
Wobei YYY für die Kurzbezeichnung eures Echos steht (wird auch von Alexa beim Starten des Kopplungsvorgangs angesagt).
Im Folgenden bezieht sich die Angabe von XX:XX:XX:XX:XX:XX bzw. XX_XX_XX_XX_XX_XX immer auf diese Device-Adresse.
Nun können wir den Scan wieder deaktivieren:
scan off
Jetzt starten wir den Pairing-Vorgang und setzen das Gerät als vertrauenwürdig:
pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX
:idea: Hinweis: Es genügt in der Regel, nach dem Befehl, z.B. 'pair', die ersten beiden Stellen der Adresse einzugeben, gefolgt von [TAB] für die automatische Vervollständigung.
Sollte bisher alles funktioniert haben, können wir mit 'quit' oder 'exit' das Tool wieder verlassen.
An dieser Stelle hatte ich das Problem, dass 'pactl list sinks short' nur die Standard-Senke des ALSA-Soundsystems auflistet:
pi@RPI06-ioBroker:~ $ pactl list sinks short 0 alsa_output.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
Die Soundkarte wird hingegen aufgelistet, jedoch ohne aktiven Profil:
pi@RPI06-ioBroker:~ $ pactl list cards short 0 alsa_card.0 module-alsa-card.c 1 bluez_card.XX:XX:XX:XX:XX:XX module-bluez5-device.c pi@RPI06-ioBroker:~ $ pactl list cards [...] Karte #1 Name: bluez_card.XX_XX_XX_XX_XX_XX Treiber: module-bluez5-device.c Owner-Modul: 24 [...] Profile: a2dp_source: High Fidelity Capture (A2DP Source) (sinks: 0, sources: 1, priority: 10, available: yes) a2dp: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes) off: Aus (sinks: 0, sources: 0, priority: 0, available: yes) Aktive Profile: [...]
Das könnt ihr mit den folgenden Befehlen fixen, indem wir das Profil wählen, welches die Senke enthält. und die default-sink setzen. In diesem Fall 'a2dp':
sudo pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp sudo pactl set-default-sink bluez_sink.XX_XX_XX_XX_XX_XX
Zu guter Letzt müssen wir noch Änderungen in der Datei ~/.asoundrc vornehmen. Bei mir war diese Datei nicht vorhanden, also nicht wundern wenn ihr diese nicht findet, sie wird dann einfach erzeugt:
nano ~/.asoundrc
und füllen diese mit
pcm.!default { type plug slave.pcm "bluetooth" } ctl.mixer0 { type hw card 0 } pcm.bluetooth { type bluetooth device "XX:XX:XX:XX:XX:XX" profile "auto" }
Die Datei kopiert ihr dann noch nach /root:
sudo cp ~/.asoundrc /root/.asoundrc
Nun könnt ihr testen, ob's funktioniert:
sudo mpg321 /opt/iobroker/node_modules/iobroker.sayit/gong.mp3 -a default
Wichtig ist hierbei "-a default".
Dies ist auch im SayIt-Adapter als Systemkommando anzugeben, insofern man nicht mplayer nutzt:
mpg321 "%s" -a default
Ich werde, sobald ich Zeit habe, das Ganze noch einmal auf einer neuen Raspberry Pi-Installation durchführen und Vorgänge, die ich jetzt eventuell vergessen habe zu erwähnen, ergänzen, da die obige Anleitung ein "Gedächtnisprotokoll" ist. Dann werde ich auch auf auftretende Probleme eingehen.
Es ist noch zu erwähnen, dass nach einem Neustart folgendes momentan noch ausgeführt werden muss:
sudo pulseaudio -D --system echo -e "connect XX:XX:XX:XX:XX:XX\nquit" | sudo bluetoothctl sudo pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp sudo pactl set-default-sink bluez_sink.XX_XX_XX_XX_XX_XX
Wenn jemand eine Idee hat, wie man das vernünftig automatisieren kann, bin ich sehr interessiert
Ich hoffe, allen Interessenten weitergeholfen zu haben.
Euer Zeebo
-
-
Ich hatte fast alles auch rausgefunden.
Also eine Option ist übrigens die Befehle zum Systemstart in "rc.local" zu packen (ggf mit ner kleinen verzögerung per sleep x vorher damit alle dinge hochgefahren sind und so.
Wozu wird das "-a default" gebraucht?
Ich hab gerade noch das Problem (heute Abend mal mit dem "-a default" testen) das ich auf der Kommandozeile alles machen kann, aber per ioBroker es nicht tut. mpg321 sagt dann:
tcgetattr(): Inappropriate ioctl for device
Hast Du so ein Problem auch?
Ansonsten tut es grundsätzlich. Will es heute Abend auch finalisieren
Ingo F
-
Schönen guten Abend!
@apollon77:Wozu wird das "-a default" gebraucht? `
Damit zwingst du mpg321 als Ausgabegerät "default" zu verwenden. Ohne diese Angabe hat es bei mir nicht funktioniert.tcgetattr(): Inappropriate ioctl for device ```` `
Dieses Problem hatte ich bisher nicht. Meines Wissens nach tritt dies auf, falls mpg321 noch eine Datei am wiedergeben ist, z.B. in einem anderen (Hintergrund-)-Prozess und eine weitere Wiedergabe stattfinden soll. Das Gerät ist dann noch "blockiert".
-
Super Tipp … vllt stört der "Gong" vor dem echten Ton ... muss ich morgen mal antesten! Danke!
-
Es ist noch zu erwähnen, dass nach einem Neustart folgendes momentan noch ausgeführt werden muss:
sudo pulseaudio -D --system echo -e "connect XX:XX:XX:XX:XX:XX\nquit" | sudo bluetoothctl sudo pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp sudo pactl set-default-sink bluez_sink.XX_XX_XX_XX_XX_XX
Wenn jemand eine Idee hat, wie man das vernünftig automatisieren kann, bin ich sehr interessiert
`
Das hat super geholfen und die lücken geschlossen die ich noch hatte.
Nun zum Start beim Boot :-))
1-) Pulseaudio
Ich hab das hier gefunden
https://rudd-o.com/linux-and-free-softw … your-users
Da steht drin wie man init.d/systemd Skripte bauen kann/muss die das tun.
Für Ubuntu Xenial (systemd) musste ich das Systemd-Unit leicht anpassen. ANstelle der "Exec"-Zeile muss es eher
ExecStart=/usr/bin/pulseaudio --daemonize=no --system --realtime --log-target=journal ExecStop=/usr/bin/pulseaudio -k
heissen.
Den Rest einfach in "/etc/rc.local" packen.
sleep 60 /bin/echo -e "connect 88:71:E5:49:D9:D2\nquit" | /usr/bin/bluetoothctl sleep 15 /usr/bin/pactl set-default-sink bluez_sink.88_71_E5_49_D9_D2
Die A2DP-teile von dir brauche ich irgendwie nicht bzw kommt ein Fehler, aber egal
Die sleeps sind drin um sicherzustellen das alles andere gestartet ist wenn man versuch zu verbinden, weil bei systemd alles parallel gestartet wird.
So startet jetzt die Verbindung automagisch krz nach Systemstart. Coooooool
Und las but not least war es der gong. Der war auf 2s eingestellt im Adapter, was wohl aber minimal zu kurz war. Mit 3s klappt alles.
Ingo F
-
@ Zeebo
Hallo könntest Du eventuell mal genau sagen schreiben wie du die Sayit ansagen über einen Bluetooth Lautsprecher realisiert hast..
Genau das versuche ich auch hinzubekommen..
Danke Dir schon mal im voraus…
Gruss Stephan
-
Ich scheitere leider bei
pactl list cards short
ich bekomm die BT-Karte nicht angezeigt, obwohl vorher scheinbar alles klappt.
-
Kann es sein, dass "connect XX:XX.XX…" bei Bluetooth Kopplung fehlt?
-
Hat überhaupt jemand geschafft Alexa als Bluetooth Lautsprecher zu benutzen. Das ist nicht so trivial.
-
Ich. Muss mal suchen. Gab nen Thread hier im Forum wo es ne gute Anleitung gab.
Aber auch ich habe mehrere Anläufe gebraucht.
-
Ich habe nun auch versucht nach der oberen Anleitung vorzugehen. Benutzt habe ich einen Raspi 3.
Zuerst kommt:
pi@ioBroker-RasPi:~ $ sudo apt-get install bluez bluez-utils pulseaudio Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Package bluez-utils is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source However the following packages replace it: bluez E: Package 'bluez-utils' has no installation candidate
Problem?
Dann bin ich weiter mit````
sudo suAnschließend wieder ein Problem:
root@ioBroker-RasPi:/home/pi# sudo service bluetooth start
root@ioBroker-RasPi:/home/pi# sudo pulseaudio -D --system
sudo: pulseaudio: Kommando nicht gefundenDann weiter:
root@ioBroker-RasPi:/home/pi# sudo bluetoothctl
[NEW] Controller B8:27:EB:9A:68:DD ioBroker-RasPi [default]
[bluetooth]# agent on
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:9A:68:DD Discovering: yes
[NEW] Device 7C:2F:80:A2:A1:C3 Gigaset G-tag
[NEW] Device 7C:2F:80:99:B7:F6 Gigaset G-tag
[NEW] Device 7C:2F:80:99:C3:7D 7C-2F-80-99-C3-7D
[NEW] Device 7C:2F:80:A2:9F:92 7C-2F-80-A2-9F-92
[CHG] Device 7C:2F:80:99:C3:7D Name: Gigaset G-tag
[CHG] Device 7C:2F:80:99:C3:7D Alias: Gigaset G-tag
[NEW] Device 34:D2:70:93:07:79 Echo-5NB
[CHG] Device 7C:2F:80:A2:A1:C3 RSSI: -87
[CHG] Device 7C:2F:80:A2:9F:92 Name: Gigaset G-tag
[CHG] Device 7C:2F:80:A2:9F:92 Alias: Gigaset G-tag
[CHG] Device 7C:2F:80:A2:A1:C3 RSSI: -77
[bluetooth]# scan off
[CHG] Device 34:D2:70:93:07:79 RSSI is nil
[CHG] Device 7C:2F:80:A2:9F:92 RSSI is nil
[CHG] Device 7C:2F:80:99:C3:7D RSSI is nil
[CHG] Device 7C:2F:80:99:B7:F6 RSSI is nil
[CHG] Device 7C:2F:80:A2:A1:C3 RSSI is nil
Discovery stopped
[CHG] Controller B8:27:EB:9A:68:DD Discovering: nodann habe ich zusätzlich zu pair und trust auch connect gemacht:
[bluetooth]# pair 34:D2:70:93:07:79
Attempting to pair with 34:D2:70:93:07:79
[CHG] Device 34:D2:70:93:07:79 Connected: yes
[CHG] Device 34:D2:70:93:07:79 UUIDs:
0000110a-0000-1000-8000-00805f9b34fb
0000110b-0000-1000-8000-00805f9b34fb
0000110e-0000-1000-8000-00805f9b34fb
00001200-0000-1000-8000-00805f9b34fb
4e72b490-1d0f-bf92-0e47-a84e01000000
[CHG] Device 34:D2:70:93:07:79 Paired: yes
Pairing successful
[CHG] Device 34:D2:70:93:07:79 Connected: no
[bluetooth]# trust 34:D2:70:93:07:79
[CHG] Device 34:D2:70:93:07:79 Trusted: yes
Changing 34:D2:70:93:07:79 trust succeeded
[DEL] Device 7C:2F:80:A2:A1:C3 Gigaset G-tag
[bluetooth]# connect 34:D2:70:93:07:79
Attempting to connect to 34:D2:70:93:07:79
Failed to connect: org.bluez.Error.FailedKommando nicht bekannt:
root@ioBroker-RasPi:/home/pi# pactl list sinks short
bash: pactl: Kommando nicht gefunden.Ich musste noch mpg321 installieren```` sudo apt-get install mpg321
root@ioBroker-RasPi:/home/pi# sudo mpg321 /opt/iobroker/node_modules/iobroker.sayit/gong.mp3 -a default High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3. Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew, now maintained by Nanakos Chrysostomos and others. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Directory: /opt/iobroker/node_modules/iobroker.sayit Playing MPEG stream from gong.mp3 ... MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo ALSA lib dlmisc.c:252:(snd1_dlobj_cache_get) Cannot open shared library /usr/lib/arm-linux-gnueabihf/alsa-lib/libasound_module_pcm_bluetooth.so Can't open libao driver with device default (is device in use?)
Schließlich:
root@ioBroker-RasPi:/home/pi# mpg321 "%s" -a default High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3. Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew, now maintained by Nanakos Chrysostomos and others. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! %s: No such file or directory
Edit: in der Alexa App wird nun ein zusätzliches Gerät angezeigt. Es handelt sich um die BT-Adresse vom Raspi 3. Aber verbinden will nicht so recht.
-
Habe "leider" die nächsten 3 Wochen noch urlaub und kann nicht testen. Ich bin ab Juli wieder dabei.
-
Ich scheitere leider bei
pactl list cards short
ich bekomm die BT-Karte nicht angezeigt, obwohl vorher scheinbar alles klappt.
`
Hallo, ich hatte auch das problem und war auf der suche, hab es jetzt hin bekommen.
du musst noch zusätzlich module laden:
sudo pactl load-module module-bluetooth-discover sudo pactl load-module module-bluetooth-policy
dann war die karte bei mir in packt drin und es hat funktioniert.
Mit freundlichen Grüßen
-
Konnte jemand Bomben- und Idioten- sichere Anleitung schreiben wie es geht?
Nicht mal ich habe das hinbekommen.
Am besten die Anleitung mit Bilder oder sogar Video
-
Bin gestern auch wieder dran gescheitert.
Ich bekomme alles hin aber bei:
pactl list sinks short
keinerlei Bluetooth Soundkarte angezeigt. Somit geht natürlich nix…
Hab gestern pulseAudio und den ganzen Kram deinstalliert und neu installiert...mit dem selben Ergebnis!!
-
Fragt mich nicht wie aber bei mir geht es jetzt.
Nur habe ich soviel probiert das ich am Ende nicht wirklich weis was nun den Erfolg gebracht hat. Momentan trau ich mich nicht den Raspi neu zu starten….
Hier anbei mal meine schlechten Aufzeichnungen die ich mir parallel gemacht habe. Aber keinerlei Garantie das war echt eher Trial and Error:
sudo apt-get update sudo apt-get install bluez bluez-utils pulseaudio sudo service bluetooth start sudo usermod -a -G pulse-access root sudo usermod -a -G pulse-access pi sudo pulseaudio -D --system
sudo reboot
sudo nano ~/.asoundrc
dort folgendes einfügen:
pcm.!default { type plug slave.pcm "bluetooth" } ctl.mixer0 { type hw card 0 } pcm.bluetooth { type bluetooth device "XX:XX:XX:XX:XX:XX" profile "auto" }
dann
sudo nano /etc/bluetooth/audio.conf
folgendes einfügen:
Enable=Source,Sink,Media,Socket
dann
sudo nano /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
folgerndes einfügen
<busconfig><policy user="pulse"><allow send_destination="org.bluez"></allow></policy></busconfig>
dann
sudo nano /etc/systemd/system/pulseaudio.service
folgendes einfügen
Description=Pulse Audio [Service] Type=simple ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm [Install] WantedBy=multi-user.target
dann
sudo nano /etc/pulse/system.pa
folgendes ganz unten anhängen
### Automatically load driver modules for Bluetooth hardware .ifexists module-bluetooth-policy.so load-module module-bluetooth-policy .endif .ifexists module-bluetooth-discover.so load-module module-bluetooth-discover .endif
Echo kopplung starten
sudo bluetoothctl
agent on scan on
sollte folgendes kommen [NEW] Device XX:XX:XX:XX:XX:XX Echo-YYY
scan off
pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX connect XX:XX:XX:XX:XX:XX quit
prüfen:
pactl list sinks short pactl list cards short
dann
sudo pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp sudo pactl set-default-sink bluez_sink.XX_XX_XX_XX_XX_XX
sudo reboot
dann
sudo systemctl start pulseaudio.service
wenn das nix bringt
sudo service bluetooth start sudo pulseaudio -D --system
Sollte es nach reboots nicht gehen sollte das hier helfen
sudo pulseaudio -D --system echo -e "connect XX:XX:XX:XX:XX:XX\nquit" | sudo bluetoothctl sudo pactl set-card-profile bluez_card.XX_XX_XX_XX_XX_XX a2dp sudo pactl set-default-sink bluez_sink.XX_XX_XX_XX_XX_XX
leider jedes mal notwendig.
-
Ich sehe, dass "home" Verzeichnis benutzt wird:
sudo nano ~/.asoundrc
Als wer bist du dabei angemeldet? root oder pi?
Kann jemand das verifizieren?
-
ich melde mich immer als pi an.
Hab den ganzen Kram aus mehreren Tutorials zusammengebastelt.
Es ist durchaus möglich das man nicht alles braucht.
Wie gesagt am Ende ging es dann und vorher ums verrecken nicht.
Ist alles nur gesammeltes Google-Wissen.