Maak van je Raspberry Pi een bluetooth radio
Aangezien je een Raspberry Pi voor zowat alles kunt gebruiken gaan we hem ook maar inzetten als radio. Gewoon omdat het kan ;). Op de Raspberry Pi zelf zit bluetooth, het enige wat je moet aanschaffen is een degelijke bluetooth speaker. Ik heb gekozen voor de JBL Go 2 Speaker, lekker compact, goed betaalbaar en een uitstekend geluid!
Benodigdheden
Software
Allereerst gaan we een aantal packages installeren op de Pi. Voer onderstaande commando’s uit in de terminal:
1 2 3 4 5 6 7 8 9 10 |
sudo -i apt-get update apt-get upgrade apt-get dist-upgrade apt-get install mplayer apt-get install bluealsa apt-get install pulseaudio apt-get install pulseaudio-module-bluetooth curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash sudo reboot |
Nadat de Pi herstart is gaan we een bluetooth-verbinding maken. Eerst moet je het bluetooth MAC-adres van de speaker zien te achterhalen. Dit kan met een app (op je telefoon) als Bluetooth Discovery. Zorg ervoor dat de JBL Go 2 speaker voldoende opgeladen is en zet hem aan (knopje helemaal links). Daarna druk je op het 2e knop, zodat de speaker in connectie-modus staat. Het MAC-adres van mijn speaker is 70:69:2D:40:B6:81, schrijf dit ergens op (of kopieer het naar kladblok.
Om verbinding tussen de Raspberry Pi en de speaker te maken voer onderstaande commando’s in de terminal in:
1 2 3 4 5 6 7 8 9 |
sudo bluetoothctl power on agent on scan on trust 70:69:2D:40:B6:81 pair 70:69:2D:40:B6:81 connect 70:69:2D:40:B6:81 scan off exit |
Na het connect-commando zal je iets als onderstaande zien, de speaker heeft dan verbinding met de Raspberry.
pi@raspberrypi:~ $ sudo bluetoothctl
[NEW] Controller B9:31:EB:AC:7B:E1 raspberrypi [default]
[NEW] Device 70:69:2D:40:B6:81 JBL GO 2
[JBL GO 2]# connect 70:69:2D:40:B6:81
Attempting to connect to 70:69:2D:40:B6:81
Connection successful
[JBL GO 2]#
Om te testen of het allemaal goed werkt geef je onderstaand commando in, je moet dan Q-Music te horen krijgen.
1 |
mplayer -noconsolecontrols http://icecast-qmusic.cdp.triple-it.nl/Qmusic_nl_live_96.mp3 |
Het kan voorkomen dat de verbinding een keer weg valt, maar daar is een oplossing voor. We maken een crontask aan:
1 |
sudo crontab -e |
En voeg onderstaande regel toe.
1 |
*/1 * * * * /bin/echo -e 'connect 70:69:2D:40:B6:81 \n' | bluetoothctl &> /dev/null |
Druk op CTRL+X en bevestig dat je de wijziging wilt opslaan.
Dan is er nog een ander probleem: van de EU moet tegenwoordig alles energiezuinig zijn, een bluetooth speaker dus ook. Indien er 10 minuten geen geluid afgespeeld wordt dan zal de speaker zichzelf uitschakelen. Dat is niet handig. Hier vind je MP3-bestand met geluid dat niet te horen is. Met het script, later in de artikel, laten we dit MP3-bestand iedere 5 minuten afspelen indien je geen radio-zender geselecteerd hebt in Domoticz. Pak het bestand uit met een extractor als WinRar en plaats het bestand in de folder /home/pi/domoticz/
Radio switch aanmaken
De volgende stap is om een radio switch aan te maken. Ga naar Setup -> Hardware en kies bij Type voor Dummy. Je mag zeg een herkenbare naam kiezen:
Zodra de Dummy Hardware toegevoegd is kunnen de radio switch gaan aanmaken. Klik hiervoor op Create Virtual Sensors (in het donkerblauw).
Maak nu de radio switch aan van het type “Selector Switch” en geef “Radio” als naam van de sensor in:
Ga nu naar het tabblad Switches en klik op “Edit” bij de Selector Switch. Bij Selector Style kies je voor “Select menu”, wijzig de huidige Selector Levels naar radio-zenders naar keuze. Indien je meer dan 3 radio-zenders wilt hebben dan kun je deze één voor één toevoegen bij Level name. Zodra je alle radio-zenders toegevoegd heb klik je op “Save”.
Script
Op regel 21, 26 en 31 vind je de streams van de radio-zenders. Als je meer radio-zenders hebt aangemaakt dan moet je deze uiteraard ook in het script toevoegen. Hier of hier vind je URL’s van streams. Ga nu in Domoticz naar Setup > More Options > Events en maak een dzVents script aan met de trigger “All”. Haal alle tekst/code weg en plak onderstaand script erin. Activeer het script en klik op “Save”.
Je kunt nu met de selector switch een radio-zender kiezen. Als je niet meer naar de radio wilt luisteren selecteer je “Off”. Het script zal dan iedere 5 minuten een MP3-bestand afspelen dat voor mensen niet te horen is, zodat wordt voorkomen dat de JBL Go 2 Speaker zichzelf uitzet. Ik heb de speaker aangesloten op een bureaulamp dit een USB-poort heeft, zodat de batterij van de speaker nooit leeg is.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
return { on = { devices = { 'Radio' }, timer = { 'every 5 minutes' }, }, execute = function(domoticz, device) if domoticz.devices('Radio').state == 'Off' then os.execute ("killall mplayer") os.execute ("mplayer -noconsolecontrols /home/pi/domoticz/testsound.mp3 -volume 100 &> /dev/null") end if device.state ~= 'Off' then if device.state == 'Q-Music' then os.execute ("killall mplayer") os.execute ("mplayer -noconsolecontrols http://icecast-qmusic.cdp.triple-it.nl/Qmusic_nl_live_96.mp3 -volume 100 &> /dev/null") end if device.state == 'Radio 538' then os.execute ("killall mplayer") os.execute ("mplayer -noconsolecontrols http://playerservices.streamtheworld.com/api/livestream-redirect/RADIO538AAC.aac -volume 100 &> /dev/null") end if device.state == 'Sky Radio' then os.execute ("killall mplayer") os.execute ("mplayer -noconsolecontrols http://playerservices.streamtheworld.com/api/livestream-redirect/SKYRADIO.mp3 -volume 100 &> /dev/null") end end end } |
Veel luisterplezier!
UPDATE:
Mocht de JBL Go 2 Speaker wel verbinding maken, maar er komt geen geluid uit, volg dan onderstaande stappen:
1 |
sudo nano ~/.asoundrc |
Er zal nu een leeg bestand geopend worden. Plak onderstaande tekst erin (uiteraard wel het MAC-adres even aanpassen!):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
pcm.bt_speaker { type plug slave { pcm { type bluealsa device 70:69:2D:40:B6:81 profile "a2dp" } } hint { show on description "BT Speaker" } } |
De Raspberry Pi even rebooten:
1 |
sudo reboot |
De muziek-stream van bv. Skyradio start je met onderstaand commando:
1 |
mplayer -ao alsa:device=bt_speaker -noconsolecontrols http://playerservices.streamtheworld.com/api/livestream-redirect/SKYRADIO.mp3 -volume 100 |
Indien je deze stappen hebt uitgevoerd moet je ook in het script de regels met mplayer blablabla
aanpassen naar bovenstaand format.
Leuk idee.!! Maar zou dit ook afgespeeld kunnen worden via Chromecast Audio die in het zelfde netwerkt hangt.?
Precies bovenstaande stappen doorlopen. Configureren binnen Domoticz is ook succesvol. Alleen krijg ik geen geluid. Ook niet als ik via CLI handmatig een stream open middels mplayer.
Dit is waar het waarschijnlijk door komt:
Audio only file format detected.
==========================================================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 48000 Hz, 2 ch, s16le, 192.0 kbit/12.50% (ratio: 24000->192000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
AO: [pulse] Init failed: Connection refused <<======
Failed to initialize audio driver 'pulse' <<======
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback…
A: 12.3 (12.2) of 0.0 (unknown) 2.5% 41%
Iemand die hier ook last van heeft / een oplossing voor heeft?!
ik heb alles uitgevoerd, ik krijg bluetooth verbinding met mijn speaker maar er komt geen geluid uit
Is er iemand die mij kan helpen.
Alvast bedankt met vriendelijke groet
Rene
Beste Rene,
Ik had hetzelfde probleem. Onderstaande info heeft het probleem bij mij opgelost!
—-
The solution is to set a default config:
– sudo nano ~/.asoundrc
And insert:
pcm.bt_speaker {
type plug
slave {
pcm {
type bluealsa
device 88:C6:26:A8:32:C9
profile “a2dp”
}
}
hint {
show on
description “BT Speaker”
}
}
– Waarbij “device 88:C6:26:A8:32:C9” natuurlijk het bluetooth MAC moet zijn van de speaker. Daarna evt een sudo reboot.
– Daarna de volgende syntax gebruiken voor je radiostreams (voorbeeld met SKYRADIO):
mplayer -ao alsa:device=bt_speaker -noconsolecontrols http://playerservices.streamtheworld.com/api/livestream-redirect/SKYRADIO.mp3 -volume 100
ik krijg wel geluid als de mplayer wordt gestart vanaf de cli.
Wanneer ik het probeer via domoticz dan wordt er wel een stream gestart maar heb ik geen geluid…
Weet iemand waar dat aan kan liggen?
Alvast bedankt met vriendelijke groet,
Tjerk
Ik heb het probleem gevonden.
Domoticz start mplayer als root i.p.v. user pi.
Door, in het dzVents, voor elk commando ‘sudo -u pi’ te plaatsen werkt het wel.
os.execute(“sudo -u pi mplayer -noconsolecontrols http://play………
met vriendelijke groet,
Tjerk
Ik krijg 1 seconde geluid van de stream en dan gaat hij op pauze? Iemand enig idee hoe dit te verhelpen?
Starting playback…
../../../src/asound/bluealsa-pcm.c:226: Starting
../../../src/asound/../shared/ctl-client.c:443: Requesting PCM resume for F8:DF:15:05:C1:A7
../../../src/asound/bluealsa-pcm.c:122: Starting IO loop
../../../src/asound/../shared/ctl-client.c:219: Getting transport for F8:DF:15:05:C1:A7 type 1
../../../src/asound/bluealsa-pcm.c:429: BlueALSA delay: 274.9 ms (13195 frames)
../../../src/asound/bluealsa-pcm.c:133: IO thread paused: 4
A: -0.7 (unknown) of 0.0 (00.0) ??,?% 94%
MPlayer interrupted by signal 2 in module: unknown
MPlayer interrupted by signal 2 in module: enable_cache
../../../src/asound/bluealsa-pcm.c:266: Stopping
../../../src/asound/bluealsa-pcm.c:330: Freeing HW
../../../src/asound/../shared/ctl-client.c:417: Closing PCM for F8:DF:15:05:C1:A7
../../../src/asound/bluealsa-pcm.c:284: Closing plugin
Deze regel: curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash
werkt niet meer. Hier de juiste link:
bash <(curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh)
Hallo,
Is er ook een manier om vanuit domoticz het volume te regelen?
Ik krijg ook geen geluid op mijn Beats pill
– sudo nano ~/.asoundrc en script met mijn MAC adress geplaatst en een file bij de testsound gezet en het volgende commando ingegeven, maar er is toch iets misgegaan
pi@raspberrypi:~ $ mplayer -noconsolecontrols /home/pi/domoticz/Editors.mp3 -volume 100
MPlayer 1.3.0 (Debian), built with gcc-8 (C) 2000-2016 MPlayer Team
do_connect: could not connect to socket
connect: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing /home/pi/domoticz/Editors.mp3.
libavformat version 58.20.100 (external)
Mismatching header version 58.12.100
Audio only file format detected.
Clip info:
Ik had e.e.a goed werkend totdat ik mijn bluetooth speaker, die ineens op vol volume stond, vanwege de herrie uit moest zetten. Ik heb nu de volgende foutmelding: Audio device got stuck!
Ik krijg het geluid niet meer aan de praat, steeds dezelfde foutmelding.
Is er iemand die mij hiermee kan helpen?
Gr. Piet
Beste Piet,
deze regel in typen
sudo service bluetooth restart
De bluetooth service loopt waarschijnlijk vast.
Vriendelijke groeten,
Jos
He Hoi
Leuk project..
Kan dit mss met elke bt luidspeaker?
Hi, de laatste reactie op dit project is al van enige tijd geleden, dus ik hoop dat iemand deze post nog beheert 🙂 Afgelopen tijd probeer ik mijn Raspberry met Domoticz wat meer te leren kennen en zag deze erg leuke post. Heb sinds kort ook een HiFiBerry DAC+ Standard – RCA aangeschaft en rechtstreeks aangesloten op (actieve) speakers. Hoopte dus radio via Domoticz aan te sturen. Alle stappen uitgevoerd exclusief de Bluetooth speaker acties. Helaas ik krijg “de radio niet werkend” (met recht een beginner op dit gebied). Van alles geprobeerd zoals gemeld in de reacties (sudo -u pi, etc). Als ik het MPLAYER commando direct op de command prompt uitvoer werkt het evenals in een script. Echter vanuit Domoticz, geen geluid. Het dsVentz script wordt uitgevoerd….. heeft iemand een tip waar ik de oorzaak moet zoeken of mee kan vinden?