Posts by presskopf

    Hallo zusammen,

    das hier beschriebene Setup hat nach einem apt upgrade irgendwie nicht mehr so richtig funktioniert.
    Die Verbindung zu den Bluetooth-Lautsprecher machten dabei Probleme. Da das Stretch heute auch nicht mehr taufrisch ist, entschied ich mich ein Bookworm zu installieren und das gleiche Setup aufzusetzen.
    Woran es am Ende gelegen hat, vermag ich mangels weiterer Nachforschungen im alten Betriebssystem nicht zu sagen.

    Jetzt ergab sich amüsanterweise nach dem BT-Koppeln ein Problem beim Pulseaudio-Part. Die Sinks konnten nicht gefunden werden! Da habe ich erst mal doof geschaut.=O
    Mittlerweile gibt es ja auch Pipewire, welches z.B. im Hintergrund mit Pulseaudio-Bibliotheken läuft. Kann man das so sagen? Ich schreib's jetzt einfach mal so.
    Also habe ich mich an das Pipewire rangemacht, da es ja auch moderner ist.

    Zusätzlich zum alten Setup habe ich noch ein paar UDEV-Regel hinterlegt, um möglichst viel zu automatisieren.

    Ziel ist wieder, zwei Bluetooth-Lautsprecher als Stereo-Paar, die sich automatisch koppen; Musik kommt vom mpd.


    Diese Pakete habe ich drauf:

    Wie schon gehabt, wird mit zwei Bluetooth-Adaptern in den USB-Ports gearbeitet; also ein BT-Adapter pro BT-Lautsprecher.
    Das Koppeln der Lautsprecher ist wieder im bluetoothctl auszuführen:

    Code
    bluetoothctl
    select <Adapter 1>
    scan on
    (Lautsprecher sichtbar machen)
    pair <Lautsprecher 1>
    trust <Lautsprecher 1>
    connect <Lautsprecher 1>
    select <Adapter 2>
    ...
    exit

    Damit sind die Burschen gespeichert und werden später erkannt, wenn man diese einschaltet.
    Aus irgendeinem Grund, vernahm ich da immer mal wieder Ladehemmungen: Ein Lautsprecher verband sich sofort, der andere irgendwie nie, obwohl ge-pair-trust-ed. Dann ging es wieder auch mal.
    Ein manuelles connect im bluetoothctl geht aber immer ohne Probleme.
    Daher habe ich einfach eine UDEV-Regel hinterlegt, die wenn sich einer verbindet, der andere per Skript auch "nach-"verbunden wird.

    Also gucken wir erst mal, was im UDEV passiert, wenn wir die Lautsprecher anschalten und verbinden; zuvor also:

    Code
    udevadm monitor --environment --udev

    Da geht 'ne ganze Menge ab, interessant ist aber nur das was unter der ACTION=add stattfindet; exemplarisch für einen Lautsprecher:

    Daraus generieren wir jeweils eine UDEV-Regel, welche auf Subsystem Input, Action Add und eine Phys-Adresse schielt, die den anderen Lautsprecher connected, falls noch nicht erfolgt:

    Code
    cat /etc/udev/rules.d/90-flip1.rules
    SUBSYSTEM=="input", ACTION=="add", ATTR{phys}=="00:1a:7d:da:71:13", RUN+="/home/pi/apps/connect-flip-2.sh"
    Code
    cat /etc/udev/rules.d/90-flip2.rules
    ACTION=="add", SUBSYSTEM=="input", ATTR{phys}=="00:15:83:4a:1c:67", RUN+="/home/pi/apps/connect-flip-1.sh"

    Hierbei habe ich ganz schön rumeiern müssen. Das Netz gibt viel her, aber dass man das {phys} klein schreiben muss, das war echt scher rauszufinden. Oder ich hatte es überlesen.

    Der Inhalt der /home/pi/apps/connect-flip-2.sh:

    Bash
    #!/bin/bash
    sleep 2
    bluetoothctl <<EOF
    select 00:1A:7D:DA:71:13    #<--- <Adapter 2>
    connect 5C:FB:7C:26:2C:8E   #<----<Achtung: Nicht identisch mit {phys} aus udev-Regel
    EOF

    Die Datei connect-flip-1.sh wird analog erstellt; Adressen sind anzupassen.


    Kommen wir nun endlich zum Pipewire.
    Hier gibt es zwei Session Manager: Pipewire Media Session und Wireplumber, wobei letzter empfohlen wird.
    Alle wichtigen Infos zu Bookworm findet man hier: https://wiki.debian.org/PipeWire#Debian_12

    Unter pi wird der Pipewire-Dienst aktiviert und gestartet:

    Code
    $ systemctl --user --now enable wireplumber.service

    Nachdem Reboot kann man gucken, ob dieser on ist:

    Code
    pi@raspi-3:~ $ LANG=C pactl info | grep '^Server Name'
    Server Name: PulseAudio (on PipeWire 0.3.65)

    Nun müssen noch ein paar Konfigurationen vorgenommen werden.

    Code
    pi@raspi-3:~ $ cat /etc/pulse/default.pa 
    #default.pa wurde nachträglich erstellt
    #https://wiki.archlinux.org/title/Bluetooth_headset#Setting_up_auto_connection
    #Automatically switch to newly-connected devices
    load-module module-switch-on-connect
    Code
    pi@raspi-3:~ $ cat /etc/pulse/system.pa 
    #default.pa wurde nachträglich erstellt
    #https://wiki.archlinux.org/title/Bluetooth#PulseAudio
    #Damit man Bluetooth unter Pulse nutzen kann
    load-module module-bluetooth-policy
    load-module module-bluetooth-discover
    Code
    pi@raspi-3:~ $ cat /etc/pipewire/pipewire-pulse.conf.d/50-network-party.conf 
    #50-network-party.conf wurde nachträglich erstellt
    #https://wiki.archlinux.org/title/PipeWire#Sharing_audio_devices_with_computers_on_the_network
    context.exec = [
       { path = "pactl" args = "load-module module-native-protocol-tcp" }
       ]


    Machen wir an der Stelle auch gleich die Verbindung vom mpd komplett.
    In /etc/mpd.conf muss rein:

    Code
    audio_output {
       type        "pulse"
       name        "SimOut"
       server        "127.0.0.1"        # optional
    }

    Ist an dieser Stelle zwar nicht verbindungsrelevant, aber mein finaler Sink soll SimOut heißen.

    Nachdem Neustart von pipewire kann der SimOut gebaut werden:

    Code
    systemctl --user restart pipewire


    Dafür habe ich ein Skript geschrieben. Es schaut,
    - ob beide Lautsprecher per Bluetooth connnected sind,
    - löscht alle alten SimOut, falls vorhanden (Man kann mehrere erstellen.) und
    - erstellt einen neuen SimOut als Default-Device.

    Um das Skript nicht manuell starten zu müssen, wird in die oben schon behandelten connect-flip-1 und 2.sh folgende Zeile ergänzt.
    Dadurch wird als User pi das Skript pwSimOuter.sh gestartet, sobald sich ein Lautsprecher verbindet.

    Code
    sudo -u pi XDG_RUNTIME_DIR=/run/user/1000 /home/pi/apps/pwsimouter.sh

    Außerdem kann ich das Skript per Knöppchen von einer anderen Anwendung aus starten; z.B. Fhem.
    Vorausgesetzung ist, eine sudoers-Anpassung:

    Code
    pi@raspi-3:~ $ sudo cat /etc/sudoers.d/020_fhem-nopasswd 
    fhem ALL=(ALL) NOPASSWD: /home/pi/apps/pwSimOuter.sh

    Um nochmal zu gucken, ob alles passt, kann man:


    Die Lautstärke kann man manuell am Lautsprecher oder per

    Code
    wpct set-volume <ID> <x.xx> 

    einstellen. Geht natürlich auch in pwSimOuter-sh.

    bzw.

    Code
    pi@raspi-3:~ $ pactl list sinks short
    72    alsa_output.platform-bcm2835_audio.stereo-fallback    PipeWire    s16le 2ch 48000Hz    SUSPENDED
    425    bluez_output.5C_FB_7C_26_2C_8E.1    PipeWire    s16le 2ch 48000Hz    RUNNING
    492    bluez_output.5C_FB_7C_26_51_10.1    PipeWire    s16le 2ch 48000Hz    RUNNING
    503    SimOut    PipeWire    float32le 2ch 48000Hz    RUNNING


    Puh, damit müsste alles niedergeschrieben sein.
    Mir ist folgendes sehr Positives aufgefallen. Beim alten Pulseaudio gab es Probleme mit der Stabilität, wenn man die Lautsprecher abschaltete ohne vorher den MPD zu stoppen. Man konnte die Lautsprecher nicht einfach an und ausschalten. Tat man dies, musste der MPD komplett restarted werden. Bei Pipewire ist dies nicht der Fall! Das hier beschriebene Procedere läuft mit einem Lautsprecher und wenn man den zweiten später dazuschaltet, wird der combined-Sink aktualisiert und wie von Zauberhand Stereo ausgegeben. :)

    Ich hoffe, mein Aufsatz hier hilft noch jemandem.
    Feedback is welcome!

    Netzteil bitte auch im Beitrag #8 einfügen, danke.

    done

    Hmmm, eigentlich sollten es ja >2.5 A sein. Bin ich eventuell doch tatsächlich auf den Netzteilfehler reingefallen?

    Das werde ich checken. Irgendwo habe ich noch welche mit 2,5 oder 3 A. Muss nur mal suchen...

    Ich hatte mir auch schon mal überlegt, einen Stützkondensator an die Pinleiste zu stecken.

    Muss nur mal gucken, wie ich das hinkriege, die ist nämlich mit einem Flachbandkabel belegt.

    Hallo zusammen,

    war den ganzen Tag unterwegs, aber nun:

    Klar, der Raspi hängt am LAN-Kabel und holt sich dort den Stream aus dem Internet.

    Bei der Gelegenheit könnte ich nochmal checken, wie sich mp3s auf der SD-Card verhalten.

    • Model RPi 3B, Linux raspi-3 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux
    • Raspberry Pi reference 2018-06-27
    • Audio: Stereo mit 2 BT-Lautsprechern (JBL Flip 4)
    • USB: 2 Bluetooth-USB-Sticks
    • Interner Bluetooth-Controller: deaktiviert
    • Display: Ja, dürfte aber nicht relevant sein: ein Arudino Mega mit Firmata und daran ein 20x4 per I2C
    • Kamera: am Stecker, Raspberry Cam (glaube V2 mit 1024x768)
    • Internet: LAN-Kabel
    • Netzteil: goobay Netzteile beträgt 5,1 bzw 5,25V, mit 3,1 A und 2,1 A

    Software:

    • OS: Linux raspi-3 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux, Raspbian Stretch (Lite, no Desktop)
    • Sound: pulseaudio
    • Player: mpd
    • Kamera-Stream: motion (Dienst stellt Einzelbilder im Webserver bereit)

    Ich muss hier mal einen Nachtrag bringen.

    Oberes Setup läuft bisher gut. Nun wollte ich eine Raspi-Cam anschließen und diese mittels motion in meinem LAN bereitstellen; so 2 - 5 Bilder pro Sekunde sollen gestreamt werden. Das funktioniert, aber es beeinträchtigt in erheblichem Maße die Bluetooth-Verbindung. Und zwar so stark, dass der Bluetooth-Funk periodisch zusammenbricht und der Musikgenuss komplett dahin ist.

    Bisheriges Fazit: Das geht zusammen nicht. Vor der Musik deaktiviere ich manuell (per Button) den motion-Dienst und die Musik löppt.

    Ich habe bisher keine Recherchen unternommen, ob das überhaupt funktionieren kann. Im Prinzip bin ich mit der Lösung zufrieden.

    Sollte jemand eine Idee haben, wie Bluetooth-Musik nach obigem Setup zusammen mit Motion oder Raspi-Cam im allgemeinen funktioniert, dann nur raus mit der Sprache.

    Wie hier (Bluetooth JBL FLIP 4 Stereo Problem) schon mal beschrieben, hatte ich meine liebe Not zwei JBL-Flip mittels MPD über Bluetooth anzusteuern und zwar dann, wenn der zweite Flip per "Connect+" mit dem ersten verbunden war. Die Sound brach ab, wenn der Stream gestoppt und neugestartet wurde.

    Jeder Flip alleine lief hingegen prima. Aber so hat man ja kein Stereo.

    Unter Alsa hatte ich es geschafft, beide Flips mit getrennten Verbindungen über den internen Bluetooth vom Rpi3 anzusprechen. Dabei hatte ich allerdings übelsten asynchronen Sound.

    Ein Adapter alleine scheint es nicht zu schaffen.

    Mein Lösungsansatz läuft mit folgenden Zutaten:

    - Pulseaudio

    - zwei externe USB-BT-Adapter

    Folgende Pakete werden zwingen benötigt:

    Code
    ii  libbluetooth3:armhf                  5.43-2+rpt2+deb9u2                armhf        Library to use the BlueZ Linux Bluetooth stack
    ii  pi-bluetooth                         0.1.10                            all          Raspberry Pi 3 bluetooth
    ii  gstreamer1.0-pulseaudio:armhf        1.10.4-1                          armhf        GStreamer plugin for PulseAudio
    ii  libpulse0:armhf                      10.0-1+deb9u1                     armhf        PulseAudio client libraries
    ii  libpulsedsp:armhf                    10.0-1+deb9u1                     armhf        PulseAudio OSS pre-load library
    ii  pulseaudio                           10.0-1+deb9u1                     armhf        PulseAudio sound server
    ii  pulseaudio-module-bluetooth          10.0-1+deb9u1                     armhf        Bluetooth module for PulseAudio sound server
    ii  pulseaudio-utils                     10.0-1+deb9u1                     armhf        Command line tools for the PulseAudio sound server

    Die Datei /etc/bluetooth/main.conf muss folgendes enthalten:

    Code
    [General]
    Enable=Source,Sink,Media,Socket

    Anschließend wird über bluetoothctl jeder Flip mit einem Adapter gepairt, getrustet und connected.

    Das kann man z.B. hier nachlesen: https://pi-buch.info/bluetooth-konf…t-bluetoothctl/

    Den Adapter-Wechsel nimmt man mit dem Kommando select <MAC> vor.

    Damit ist die Bluetooth-Sache schon mal abgeschlossen.

    Beim Pulseaudio müssen folgende Einstellungen vorgenommen werden.

    Ich verwende die systemweite Konfiguration mittels der Datei /etc/pulse/default.pa.

    Hier wird das load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 entsprechend aktiviert.

    Was ich nicht geschafft habe ist, dass beim Start von Pulseaudio alles von Pulse eingerichtet wird, also auch die BT-Verbindung zu den Flips.

    Daher mache ich es, wie hier zu sehen, über ein Skript:

    Die Sleeps waren nötig, weil sich das Verbindung-Aufbauen manchmal verhaspelte.

    Wer MPD verwendet sollte nun noch dafür sorgen, dass der so definierte Pulseaudio-Sink verwendet wird, anzupassen in /etc/mpd.conf.

    Code
    audio_output {
        type        "pulse"
        name        "My Combined Pulse Output"
        server        "127.0.0.1"        # optional
    
    }

    Wer lieber mplayer verwendet kommt so zum ersten Test:

    mplayer -ao pulse 08.\ ZZ\ Top\ -\ Sleeping\ Bag.flac

    Der Song ist prädestiniert, um Latenzen zu entdecken. 8)

    Kommentare:

    - Bei Verwendung nur eines BT-Adapters: Entweder keine Verbindung zu beiden Flips oder übelste Asynchronität

    - Adapter-Kombination aus Raspi-BT und USB-BT: Hier glaube ich auch Asynchronität vernommen zu haben; wenn auch nur gering.

    - Den Raspi-BT habe ich in der /boot/config.txt abgeschaltet: dtoverlay=pi3-disable-bt

    - Das Skript muss nach jedem erneuten Einschalten der Flips ausgeführt werden. Ein automatisches Verbinden und nutzen der Konfiguration klappte leider nicht.

    Ich will nicht verschweigen, dass ich es per Pulseaudio und Bluetooth hinbekommen habe (exakt um 01:39 heute Nacht :))

    Der Raspberry ist mit zwei Flips verbunden und funkt L/R separat ohne (hörbare) Latenzen.

    Bevor ich die Lösung hier poste, will ich noch ein paar abweichende / grundlegende Nachforschungen oder Verbesserungen vornehmen.

    Lasst mir mal noch einige Tage dafür Zeit.

    Vermutlich mache ich auch einen neuen Thread auf, damit der Titel eindeutiger ist.

    Hallo schrom,

    da bist Du bluetooth-mässig an vorderster Front.

    Jetzt bin ich gespannt, ob sich jemand als alsa-Wissender zu erkennen gibt.

    Da hätte ich auch ein Anliegen.

    Schönen Gruß, kle

    Danke, soviel Lorbeer nehme ich normalerweise nur zum Kochen! :blush:

    Ehrlicherweise muss ich mir auch noch viel zusammensuchen, aber es wird...

    Versuche Mal per JBL Connect App, die Lautsprecher in den Party Modus zu bringen.. also kein stereo, sondern gleiches Signal bei beiden Lautsprechern.

    Dann berichte Mal..

    Vom Handy klappt das ja.

    Aber es macht kein Unterschied, welcher Modus läuft. Es kackt vom Raspi aus ab.

    Ja, da hast Du vermutlich Recht, kle.

    Ich bin da dennoch etwas enttäuscht, dass es nicht so recht unter Debian will.

    Zwischenzeitlich habe ich etwas mit meinem raspi-8 (mit Desktop) rumgespielt.

    Hier hatte ich es geschafft, in Kombination mit zwei identischen Bluetooth-Sticks beide Flips separat anzusprechen. Und zwar wurde jeder Flip mit einem Adapter gepairt und verbunden. Die Soundwiedergabe (combined device in paprefs eingestellt), funktionierte synchron, soweit ich es vernehmen konnte.

    Jetzt müsste ich nur noch jedem Adapter einen Channel zuweisen und dann hätte ich Stereo.

    Weiß jemand auf die Schnelle, wie man das in Pulsaudio oder Alsa konfiguriert?

    Danke schlizbäda.

    Ich habe heute Nacht 8) etwas weiter geforscht.

    Im Büro habe ich ja noch einen Raspi mit stretch und Desktop.

    Dort habe ich die Prügel auch nochmal gepaired und - so gut ich es kann - unter Pulseaudio konfiguriert.

    Auch komisch; eigentlich das gleiche Verhalten wie oben.

    Abspielen von mp3 mit VLC geht.

    Dann zu stereo connect+en geht auch.

    Den Stream für 3 s pausieren und anschließend wiedergeben geht.

    Den Stream für 5 s pausieren und das System verstummt. Es wird abgespielt, aber man hört nix.

    Man muss wieder von vorne anfangen: connect+ aus, play, connect+ an :thumbdown:

    Ich könnte jetzt nochmal den Bluetooth-Dongle vom Ubuntu am Raspi nutzen, habe aber die Befürchtung, dass es nix bringt.

    Mein Bauchgefühlt sagt mir, dass es an der bluez-Version liegen könnte.

    Ubuntu Bionic: 5.48 VS Raspian Stretch: 5.43


    Nachtrag:

    Im blueman-manager sieht man die Übertragungsraten.

    Beim Pausieren bricht diese nach ca. 5s ein, bis dahin wird munter gesendet, obwohl pausiert.

    Kann man diese "Spritsparfunktion" irgendwie unterbinden?


    Nachtrag2:

    Scheiße, ich muss doch die Ubuntu Bionic Erfahrung revidieren.

    Ich hatte nicht lange genug gewartet. Bei > 5 s Pause im "connect+"-Modus, bleibt's anschließend auch stumm. :(