======= Internetradio ======= == 09. März 2020 == \\ - [[internetradio#Vorbereitung]] - [[internetradio#SAMBA Fileserver installieren]] - [[internetradio#Mopidy installieren]] - [[internetradio#Feintuning]] \\ ===== Vorbereitung ===== Zuerst laden wir uns das aktuelle Raspbian herunter. Zur Erstellung dieser Anleitung war es Raspbian Buster. Ich habe mich für die Variante mit Desktop entschieden. [[https://www.raspberrypi.org/downloads/raspbian/]] Das heruntergeladene Image wird mit einer geeigneten Software (z.B. Etcher) auf die SD-Karte übertragen. Weitere Infos dazu unter [[https://www.raspberrypi.org/documentation/installation/installing-images/README.md]]. Bevor wir den Pi starten können muss noch SSH aktiviert werden. Dazu erstellen wir uns eine Datei mit dem Namen ssh und kopieren diese auf die SD-Karte. Weitere Infos dazu unter [[https://www.raspberrypi.org/documentation/remote-access/ssh/README.md]] Als nächstes wird die SD-Karte in einen RaspberryPi (in meinem Fall ein 3B+) gesteckt. Der Raspberry ist via LAN-Kabel eingebunden. Einschalten... Nun müssen wir die IP-Adresse herausbekommen, welche der DHCP unserem RaspberryPi vergeben hat. Schaut dazu am einfachsten in Eure Router oder benutzt einen Netzwerkscanner auf dem Smartphone (z.B. Fing). In dieser Anleitung verwende ich die Adresse **192.168.1.74**. Über das Terminal verbindet Ihr Euch mit dem RaspberryPi ssh 192.168.1.74 -l pi der Pi antwortet in etwa so The authenticity of host '192.168.1.74 (192.168.1.74)' can't be established. ECDSA key fingerprint is SHA256:JCO/RbFGRdoLxp8Bc+xtblaiJkPAoo0Btz+pmTG6h+Q. Are you sure you want to continue connecting (yes/no)? '' Die Frage beantworten wir mit **yes** und geben nun dass Passwort **raspberry** ein. Den Hinweis SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. nehmen wir ernst und vergeben uns mit passwd ein neues Passwort. Wie man ein starkes Passwort generiert habe ich [[passwoerter|hier]] erläutert. Im nächsten Schritt bringen wir das frisch installierte Raspbian erstmal auf den aktuellen Stand. sudo apt-get update sudo apt-get upgrade sudo reboot Der letzte Befehl startet den RaspberryPi neu. Im Anschluss stellen wir die SSH-Verbindung wieder mit ssh 192.168.1.74 -l pi her und geben das oben neu vergebene Passwort ein. Nun mach wir uns daran das frisch aufgesetzte System zu konfiguren. Mit Hilfe von sudo raspi-config nehmen wir nun folgende Einstellungen vor. - 2 Network Option -> Hostname -> raspberrypi ändern in **musicbox** - 4 Localisation Options -> I1 Change Locale -> **de_DE.UTF-8 UTF-8** aktivieren und **en_GB.UTF-8 UTF-8** deaktivieren - 4 Localisation Options -> I1 Change Timezone -> Europe -> Berlin - 5 Interfacing Option -> P3 VNC - VNC aktivieren Die abschließende Frage ob der RaspberryPi neu gestartet werden soll beantworten wir mit **Yes**. Nach dem Neustart verbinden wir uns via SSH wieder mit dem RaspberryPi. ssh 192.168.1.74 -l pi \\ \\ ===== SAMBA Fileserver installieren ===== Damit wir später auch MP3s auf unser Internetradio ablegen können wird nun ein SAMBA Server eingerichtet. Damit stellt der RaspberryPi dann ein Netzlaufwerk zur Verfügung auf das wir von Windows oder MacOS aus darauf zugreifen können. sudo apt-get install samba Die Abfrage ob das Paket dhcp-client installiert werden soll beantworten wir mit **Ja**. Nun legen wir noch ein paar Verzeichnisse an, in welches wir später die Musikdateien, Playlisten etc. ablegen wollen. sudo mkdir /music sudo mkdir /music/playlists sudo mkdir /music/podcasts Damit wir später auch als anonymer User darauf zugreifen können ändern wir gleich noch die Zugriffsrechte der Verzeichnisse. sudo chmod -v 777 /music sudo chmod -v 777 /music/playlists sudo chmod -v 777 /music/podcasts Jetzt ist die Einrichtung von SAMBA an der Reihe. Mit einem sudo nano /etc/samba/smb.conf öffnen wir die Konfigurationsdatei und ergänzen am Ende folgende Einträge [music] comment = Musik path = /music browseable = yes read only = no guest ok = yes Abgespeichert wird mit Strg+S und mit Strg+X wird nano beendet. Nun starten wir den SAMBA-Dienst neu sudo systemctl restart smbd und können nun im LAN z.B. von Windows aus über Laufwerke -> Netzlaufwerk verbinden auf die Freigabe zugreifen. \\ \\ ===== Mopidy installieren ===== Zuerst fügen wir die Mopidy Quellen der Anwendungsverwaltung hinzu und installieren das Basispaket in dem wir folgende Befehle nacheinander im Terminal eingeben: wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add - sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list sudo apt-get update sudo apt-get install mopidy Im nun folgenden Schritt starten wir Mopidy erstmalig mopidy und warten ein paar Sekunden bis die Ausgabe Creating dir file:///home/pi/.local/share/mopidy/http erfolgt ist um das Programm nun mit Ctrl+C wieder zu unterbrechen. Mopidy legt im Hintergrund ein paar Pfade und Dateien an, welche wir später bearbeiten. Wer später Mopidy als Service laufen lassen möchte fügt in diesem Schritt den User //mopidy// noch der Gruppe //video// hinzu. sudo adduser mopidy video Damit wir Mopidy später über eine Weboberfläche (Webclients) steuern können muss diese entsprechend auch installiert sein. Ich haben mich für **Iris** und **Mobile** entschieden. sudo python3 -m pip install Mopidy-Iris sudo python3 -m pip install Mopidy-Mobile Weitere mögliche Webclients wären //MusicBox-Webclient//, //Simple-Webclient//, //Moped// oder //Mopify// um nur einige zu benennen. Eine Übersicht gibt es [[https://mopidy.com/ext/|hier]]. Wer auf Mopidy auch mit externen MPD-Clients (z.B. ncmpcpp) zugreifen möchte sollte sich unbedingt noch //Mopidy-MPD// installieren. sudo python3 -m pip install Mopidy-MPD Nun können je nach Bedarf weitere Addons installiert werden: # Spotify support sudo apt-get install mopidy-spotify # Podcast support sudo python3 -m pip install Mopidy-Podcast sudo python3 -m pip install Mopidy-Podcast-iTunes # Last.FM scrobbling support sudo python3 -m pip install Mopidy-Scrobbler # Soundcloud support\\ sudo python3 -m pip install Mopidy-SoundCloud # TuneIn support\\ sudo python3 -m pip install Mopidy-TuneIn # YouTube support sudo python3 -m pip install Mopidy-YouTube Wenn alle gewünschten Addons installiert sind bearbeiten wir nun die Konfigurationsdatei //mopidy.conf//. Diese liegt für den angemeldeten User im Ordner ///home/user/.config/mopidy// (Beispiel für pi: ///home/pi/.config/mopidy/mopidy.conf//). Soll Mopidy später als Service unter dem User //mopidy// laufen gilt der Pfad ///etc/mopidy/mopidy.conf//. Egal für welche Variante ihr Euch entscheidet - in der mopidy.conf werden alle zentralen Einstellungen und die der Addons verwaltet. Wir öffnen die Datei mit sudo nano /etc/mopidy/mopidy.conf bzw. sudo nano /home/pi/.config/mopidy/mopidy.conf Im Abschnitt [core] werden die benutzen Verzeichnisse definiert Wer Mopidy als Service laufen lassen möchte verwendet folgende Einstellung, [core] cache_dir = /var/cache/mopidy config_dir = /etc/mopidy data_dir = /var/lib/mopidy wer Mopidy als User pi startet verwendet stattdessen [core] cache_dir = $XDG_CACHE_DIR/mopidy config_dir = $XDG_CONFIG_DIR/mopidy data_dir = $XDG_DATA_DIR/mopidy in beiden Varianten gefolgt von max_tracklist_length = 10000 restore_state = false Alle weiteren Einstellungen am besten so wie bei mir übernehmen. [logging] verbosity = 1 format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s color = true [audio] mixer = software mixer_volume = 90 output = autoaudiosink buffer_time = 1000 Wer später den Sound von Mopidy zusätzlich noch an einen Streamingserver (z.B. Icecast) ausgeben will verwendet in der Zeile //output = // folgende Parameter: output = tee name=t ! queue ! audioresample ! autoaudiosink t. ! queue ! lamemp3enc ! shout2send async=false mount=mopidy ip=127.0.0.1 port=8000 password=yxasqw123EDC [local] media_dir = /music [file] enabled = true media_dirs = /music excluded_file_extensions = .directory .html .jpeg .jpg .log .nfo .pdf .png .txt .zip show_dotfiles = false follow_symlinks = false metadata_timeout = 1000 [http] enabled = true hostname = 0.0.0.0 port = 6680 zeroconf = Mopidy HTTP server on $hostname csrf_protection = true default_app = mopidy [mpd] enabled = true hostname = 0.0.0.0 port = 6600 password = max_connections = 20 connection_timeout = 60 zeroconf = Mopidy MPD server on $hostname command_blacklist = listall listallinfo default_playlist_scheme = m3u [m3u] enabled = true base_dir = /music default_encoding = latin-1 default_extension = .m3u8 playlists_dir = /music/playlists [softwaremixer] enabled = true [tunein] enabled = true timeout = 5000 Um Mopidy-Spotify nutzen zu können benötigen wir API Zugriff auf Spotify. Die //client_id// und das //client_secret// bekommt ihr [[https://auth.mopidy.com/spotify/|hier]]. [spotify] enabled = true username = DEIN_SPOTIFY_USERNAME password = DEIN_SPOTIFY_PASSWORT client_id = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bitrate = 160 volume_normalization = true private_session = false timeout = 10 allow_cache = true allow_network = true allow_playlists = true search_album_count = 20 search_artist_count = 10 search_track_count = 50 toplist_countries = Ähnlich ist es bei SoundCloud. Hier benötigen wir einen auth_token welchen wir [[https://secure.soundcloud.com/connect?client_id=93e33e327fd8a9b77becd179652272e2&scope=non-expiring&response_type=code_and_token&redirect_uri=https://www.mopidy.com/soundcloud_callback|hier]] bekommen. [soundcloud] enabled = true explore_songs = 25 auth_token = x-xxxxx-xxxxxxxxx-xxxxxxxxxxxxxxx Für den Zugriff auf Last.FM genügen Benutzername und Passwort. [scrobbler] enabled = true username = DEIN_LASTFM_USERNAME password = DEIN_LASTFM_PASSWORT Etwas komplizierter wird es bei Youtube. Hierfür benötigen wir einen //youtube_api_key//. Eine einfaches Videotutorial wie man diesen erstellt bzw. bekommt gibt es [[https://youtu.be/ozOmQGDVwKQ|hier]]. [youtube] enabled = true youtube_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx api_enabled = false threads_max = 16 search_results = 15 playlist_max_videos = 20 Nun werden noch die Podcast-Quellen eingerichtet. Die Datei //podcasts.opml// ist eine XML-Datei welche in meinem Beispiel im Ordner ///music/podcasts// liegt. Diese kann man ganz leicht selbst erstellen oder z.B. in iTunes erzeugen. [podcast] enabled = true browse_root = /music/podcasts/podcasts.opml browse_order = desc lookup_order = asc cache_size = 64 cache_ttl = 86400\\ timeout = 10\\ '' Noch einfacher geht es bei diesem Addon. Hier übernimmt Apple die Verwaltung des Podcast-Verzeichnisse und sortiert dieses für uns nach Genres. Da das Verzeichnis öffentlich ist wird auch keine weitere Authentifizierung benötigt. [podcast-itunes] enabled = true base_url = http://itunes.apple.com/ country = DE explicit = Yes charts = audioPodcasts charts_limit = 20 search_limit = 20 timeout = 10 retries = 3 Wurde Mopidy für einen User z.B. pi eingerichtet so lässt sich Mopidy durch einfach durch Eingabe von mopidy starten. Möchtet ihr Mopidy als Service starten bzw. später beim Hochfahren des RaspberryPis starten lassen so müssen wir es zunächst in die Liste der Systemdienste aufnehmen. Das geschieht ganz einfach mit sudo systemctl enable mopidy Danach können wir Mopidy mit sudo systemctl start mopidy starten. Das Programm läuft nun als Prozess im Hintergrund. Bei beiden Varianten dauert es je nach Anzahl und Typ der aktivierten Module bis zu zwei Minuten bis Mopidy fertig geladen ist. Gerade bei Spotify werden im Hintergrund jede Menge Daten und Playlists geladen. Den Webclient erreichen wir im Browser unter http://192.168.1.74:6680/. Wenn nichts schiefgegangen ist, begrüßt uns Mopidy mit folgendem Bild. Die jeweiligen installierten Webclients erreicht ihr mit Klick auf den Link - in unserem Beispiel //iris// oder //mobile//). {{:bildschirmfoto_2020-03-24_um_13.34.36.png?400|}} \\ \\ ===== Feintuning ===== Die folgenden Erweiterungen können erst nach erfolgreicher Installation von Mopidy eingerichtet werden. In meinem Beispiel sind sie erst Tage bzw. Wochen später hinzugekommen. ==== ncmpcpp als Client ==== In unserer bisherigen Konfiguration wurden nur Webclients eingerichtet um Mopidy zu steuern. Mit **ncmpcpp** gibt es ein Programm mit dem man Mopidy über ein Terminal steuern kann. Alle Funktionen sind möglich und man benötigt dafür kein Betriebssystem mit grafischer Benutzeroberfläche und auch keinen Browser. {{:terminal.png?400|}} In meinem Fall war es ein alter RaspberryPi 1B mit Monitor, welcher bisher in der Werkstatt für die Überwachungskamera zuständig war, der mit neuen Funktionen ausgestattet wurde. Zugriff auf Internet-Radiostreams, auf Spotify, SoundCloud, Youtube und das nur vom Terminal aus - das ist schon irgendwie cool. Die Installation wird mit sudo apt-get install ncmpcpp gestartet und das war es auch schon. Wichtig ist, dass //Mopidy-MPD// installiert und der entsprechende Konfigurationsabschnitt in der //mopidy.conf// vorhanden ist. Eine Übersicht der Tastaturbelegung findet ihr {{ :ncmpcpp_cheat_sheet.pdf | hier}}. ==== Voreingestellte Playlist beim Start ==== Betreibt man seine Mopidy-Server "headless", also ohne angeschlossene Tastatur oder Monitor, so lässt sich mit diesem Plugin eine Default-Playlist setzen. Diese wird beim Start automatisch abgespielt. In meinem Fall ist es eine Playlist vordefinierter Radiosender mit dem Namen //Radio-Favoriten//. Installiert wird das Plugin mit sudo python3 -m pip install Mopidy-DefaultPlaylist Der entsprechende Abschnitt in der mopidy.conf sieht dann so aus [defaultplaylist] enabled = true defaultplaylist_name = Radio-Favoriten autoplay = true shuffle = true Die Option //shuffle =// sorgt dafür das bei jedem Neustart ein anderer Sender abgespielt wird. ==== Streaming an weitere Clients ==== Um noch weitere Clients im LAN (oder wahlweise auch weltweit) mit Musik zu versorgen kann man zusätzlich noch einen Streamingserver aufsetzen. Dieser läuft parallel zu //Mopidy// und stellt für angeschlossene Geräte einen MP3-Stream bereit. sudo apt-get install icecast2 Letzte Änderung --- //[[kai.ortelt@t-online.de|Kai Ortelt]] 2020/03/24 15:26//