Montag, 26. August 2013

Webmin installieren und den Pi per Browser verwalten

Webmin bietet gerade für Anfänger wie mich, die sich mit der Konsole noch nicht so sehr vertraut sind einige Vorteile, da es zur Verwaltung des System eine übersichtliche grafische Oberfläche im Browser bereitstellt.

Die folgenden Schritte erklären, wie Webmin erfolgreich auf dem Pi installiert wird:

Als erstes müssen ein paar Pakete installiert werden, die den reibungslosen Betrieb von Webmin garantieren:

sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python

Anschließend wird die neueste Version von Webmin heruntergeladen

sudo wget http://www.webmin.com/download/deb/webmin-current.deb

Die heruntergeladene .deb-Datei wird installiert mit dem Kommando

sudo dpkg --install webmin-current.deb

Sollte es eine Fehlermeldung geben die sagt, dass Webmin nicht ordentlich installiert wurde, bitte folgendes eingeben

sudo apt-get install -f

Wurde Webmin erfolgreich installiert, kann es über den Browser aufgerufen werden. Dazu einfach die IP-Adresse des Pi's in die Browserzeile tippen und den Port 10000 abfragen. Als benutzer wird root gewählt und das dazugehörige passwort eingegeben.

Beispiel: https://192.168.1.22:10000

Über Webmin lassen sich beispielsweise auf einfachem Weg Dateifreigaben einrichten oder Cron Jobs anlegen, die eine bestimmte Aufgabe in regelmäßigen vordefinierten Zeitintervallen ausführen. Die Konsole wird hierfür nicht benötigt, lediglich ein Browser.

Sonntag, 30. Juni 2013

Einen Alias anlegen / Einen eigenen Befehl erzeugen

Häufig verwendete Befehle, wie bspw. das Aktualisieren der Paketlisten mit anschließendem Upgrade der Pakete, können mit wenig Zeitzaufwand mittels einem Alias zu einem neuen Befehl zusammengeführt werden:

Nachdem die Anmeldung mit dem User pi erfolgte wird in das Home-Verzeichnis gewechselt:
cd ~
Anschließend muss die Datei, die die Aliase beinhaltet verändert werden:
sudo nano .bash_aliases
Hier wird folgendes eingetragen:
alias piupgrade="sudo apt-get update && sudo apt-get upgrade"
Dabei trennen die zwei && die zwei Kommandos voneinander, so dass diese hintereinander ausgeführt werden. Es muss nun lediglich in das Terminal der Befehl
piupgrade
getippt werden, um die Paketlisten zu aktualisieren und die Upgraderoutine zu starten.

Nachdem der Alias angelegt wurde musser vom System jedoch zuerst erkannt werden. Dafür wird dieses Kommando benötigt (Mit Dank an werfl für den Kommentar).
. .bash_aliases 

Mittwoch, 5. Juni 2013

A2DP Audiostreaming über NFC triggern

Diese Anleitung setzt vorraus, dass der 3. Teil meines vorangegangenen Tutorials durchexerziert wurde.

Für die folgende Anleitung habe ich mir bei Amazon ein paar NFC-Tags bestellt (link) und diese von innen an die Oberseite meines Gehäuses für den Raspberry Pi geklebt. Von dem NFC-Tag ist somit von außen nichts zu sehen.

NFC-Tag im Gehäuse

Als NFC-fähiges Gerät verwende ich mein Nexus 4, dass zuvor über Bluetooth mit dem Pi verbunden wurde und in die Liste der vertrauensvollen Geräte aufgenommen wurde (s. oben erwähnten Link zum 3. Teil Tutorial).

Diese Schritte müssen durchgeführt werden:
  1. Aus PlayStore die App NFC Aufgaben Launcher installieren.
  2. App öffnen und einen neuen Task anlegen über: + > NFC > Aktion hinzufügen > WLAN & Netzwerke > Bluetooth An/Aus. Anschließend das Handy auf den Pi legen, so dass Kontakt zum NFC-Tag aufgenommen werden kann. Auf den Button SPEICHERN & SCHREIBEN drücken. Die Aufgabe wird nun auf dem Tag gespeichert.
  3. Bluetooth auf dem Smartphone aktivieren und einen weiteren Task anlegen über: + > Bluetooth > Bei Verbindung mit: (Hier den Pi aus der Liste auswählen) > Aktion hinzufügen > Anwendungen & Shortcuts > Anwendung > Gewünschte Streaming App auswählen.
Wenn jetzt das Nexus 4 auf den Pi gelegt wird und der NFC-Tag gescannt wird, schaltet das Nexus 4 automatisch Bluetooth ein. Sobald Bluetooth eingeschaltet und das Smartphone mit dem Pi verbunden ist, öffnet der NFC Aufgaben Launcher die gewünschte Streaming App und man kann sofort Audio übertragen. Legt man das Smartphone erneut auf den Pi beendet sich Bluetooth automatisch. Hier noch ein Video zur Demonstration:



Tipps:
  • Analog zu Schritt 3 kann natürlich noch ein weiterer Task eingerichtet werden, der beim Beenden von Bluetooth die gewünschte Streaming App wieder schließt.
  • Die NFC Aufgaben Launcher App bietet noch viele weitere Funktionen. Ich habe mir bspw. ein NFC Tag so beschrieben, dass bei Auflage des Handys ein Wecker nach 7 Minuten klingelt und benutze dieses Tag als meine neue Eieruhr.

Samstag, 18. Mai 2013

Teil 3/3 - Musikstreaming per Bluetooth (A2DP) auf den Raspberry Pi

Musik streamen per Bluetooth (A2DP) auf den Raspberry Pi

Anmerkung vorneweg:
Audiostreaming per A2DP ist eine fummelige Angelegenheit. Viele Nutzer des Pi's berichten, die gleichen im Netz kursierenden Anleitungen befolgt zu haben ohne, einheitlichen Erfolg. Mein Pi wollte zuerst auch keine Streams abspielen. Irgendwann ging es merkwürdigerweise. Die gleiche Konfiguration habe ich bei einem anderen Pi angewendet und dort funktioniert sie merkwürdigerweise nicht. Daher muss an dieser Stelle einfach ausprobiert werden, ob es funktioniert.

Um von vorne herein Fehler auszuschließen, muss festgestellt werden ob der verwendete Bluetooth-Dongle auch korrekt vom System erkannt wird. Dazu tippt man folgendes ins Terminal:
lsusb
Dieses Kommando listet alle angeschlossenen USB-Geräte auf. Hier sollte euer Bluetooth Stick auftauchen. Ist der von mir verwendete Bluetooth Stick von Hama verwendet worden wird er bspw. als Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) erkannt.

An erster stelle installieren wir die nötigen Pakete:
sudo apt-get install bluez blueman bluetooth bluez-utils pulseaudio-module-bluetooth python-gobject python-gobject-2
Damit unser Benutzer Pi Zugriff auf die Bluetoothdienste hat, muss er einer Gruppe namens lp zugeordnet werden.
sudo usermod -a -G lp pi
Bluetooth hat viele Einsatzmöglichkeiten. A2DP ist eine von ihnen und muss vor der Nutzung erst konfiguriert werden:
sudo nano /etc/bluetooth/audio.conf
Es öffnet sich der Texteditor. Oben befindet sich ein Abschnitt in dem [General] steht. Direkt in die freie Zeile darunter muss folgenes geschrieben werden:
Enable=Source,Sink,Media,Socket

Als nächstes muss der sogenannt Resample Algorythm configuriert werden. Folgende Datei im Texteditor öffnen...
sudo nano /etc/pulse/daemon.conf
und die Zeile suchen
resample-method = speex-float-3
und direkt dahinter einen Absatz erstellen und folgenden Inhalt hinzufügen:
resample-method = trivial
Nun muss noch die folgende Datei geändert werden:
sudo nano /etc/pulse/system.pa
Dort muss hinter die vorhandene Zeile
load-module module-udev-detect
der Zusatz tsched=0 geschrieben werden, so dass die Zeile wie folgt aussieht:
load-module module-udev-detect tsched=0
Damit ist auch schon das Gröbste geschafft. Was wir jetzt noch brauchen ist ein Skript, dass automatisch das Audiosignal des verbundenen Smartphones an den Pi leitet. Dazu müssen wir diese Datei öffnen...
sudo nano /etc/udev/rules.d/99-input.rules
... und folgendes reinschreiben:
SUBSYSTEM=="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
Im letzten Schritt müssen wir noch das Skript an sich erstellen. Dafür erstellen wir einen neuen Ordner:
sudo mkdir /usr/lib/udev
und wechseln direkt in das eben erstellte Verzeichnis:
cd /usr/lib/udev
Nun erstellen wir eine Datei mit dem Namen Bluetooth:
sudo nano bluetooth
Folgendes einfügen
#!/bin/sh
#!/bin/bash  
#change if you don't use default analog audio out.  
#THIS DIDN'T WORK FOR MY PI SO I ADDED A amixer COMMAND BELOW  
AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo"  
echo "Executing bluetooth script...|$ACTION|" >> /var/log/bluetooth_dev  
  
ACTION=$(expr "$ACTION" : "\([a-zA-Z]\+\).*")  
if [ "$ACTION" = "add" ]  
then  
  
# Turn off BT discover mode before connecting existing BT device to audio  
hciconfig hci0 noscan  
  
# set the audio output to the analog  
# COMMENT THIS LINE OUT IF YOU WANT TO OUTPUT AUDIO THROUGH HDMI  
amixer cset numid=3 1  
  
   for dev in $(find /sys/devices/virtual/input/ -name input*)
   do
      if [ -f "$dev/name" ]
      then
         mac=$(cat "$dev/name" | sed 's/:/_/g')
         bluez_dev=bluez_source.$mac
  
         sleep 1
  
         CONFIRM=`sudo -u pi pactl list short | grep $bluez_dev`
         if [ ! -z "$CONFIRM" ]
         then
            echo "Setting bluez_source to:  $bluez_dev" >> /var/log/bluetooth_dev
            echo pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0 >> /var/log/bluetooth_dev
            sudo -u pi pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0 >> /var/log/bluetooth_dev
         fi
      fi
   done
fi
  
if [ "$ACTION" = "remove" ]
then
# Turn on bluetooth discovery if device disconnects
sudo hciconfig hci0 piscan
fi

Nachdem die Datei gespeichert wurde machen wir die Datei bluetooth ausführbar:
sudo chmod 755 bluetooth
Dieses Skript verbindet lediglich Smartphones, die vom Pi als vertrauenswürdig eingestuft wurden. Dazu muss aber das Smartphone erst einmal den Pi finden. Standartmäßig ist die Sichtbarkeit des Bluetooth-Adapters aber deaktiviert. Mit folgendem Kommando wird der Pi für Bluetoothgeräte sichtbar:
sudo hciconfig hci0 piscan
Über die GUI kann nun am einfachsten das ersonnene Bluetoothdevice als vertrauenswürdiges Gerät gespeichert werden.
startx
Nun unter Einstellungen --> Bluetooth-Manager mit einem Rechtsklick in die Liste der vertrauensvollen Geräte aufnehmen.


Weiter zu Teil 1 des Tutorials in dem aufgezeigt wird, wie man Apple's Airplay auf dem Raspberry Pi installiert um Musik direkt aus iTunes oder iOs auf den Pi zu streamen oder zu Teil 3 in dem erklärt wird, wie man über Bluetooth Musik auf den Pi streamen kann.

Auch besteht die Möglichkeit den Vorgang über ein NFC-Tag zu automatisieren.

Teil 1/3 - Apple AirPlay auf dem Raspberry Pi

Apple AirPlay auf dem Raspberry Pi

Um Musik direkt vom Mac aus iTunes oder dem iOs-Device an eine Stereoanlage oder einen AppleTV zu senden, verwendet Apple den hauseigenen Streamingstandard AirPlay. Mit ein wenig Mühe kann man iTunes oder iOs jedoch vortäuschen ein waschechter AiPlay-Empfänger zu sein.

Zuerst müssen dafür die benötigten Pakete installiert werden:
sudo apt-get install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils

Jetzt muss der zugehörige Source-Code von Github heruntergeladen werden:
sudo git clone https://github.com/albertz/shairport.git shairport

Anschließend wechseln wir in den Ordner, in denen die Dateien geladen wurden
cd shairport

und kompilieren die Dateien:
sudo make

Nun müssen diese noch installiert werden:
sudo make install

Anschließend müssen folgende Befehle hintereinander ausgeführt werden:
sudo cp shairport.init.sample /etc/init.d/shairport
cd /etc/init.d
sudo chmod a+x shairport
sudo update-rc.d shairport defaults

Shairport ist nun nahezu Installiert, wurde durch die Rechtevergabe ausführbar gemacht und ist als Systemservice verfügbar.

Den Namen des AirPlay-Empfängers kann man in der folgenden Datei festlegen:
sudo nano /etc/init.d/shairport
Hier muss etwas runtergescrollt werden und hinter das Wort PIDFILE der Zusatz "-a NAME" geschrieben werden, wobei NAME durch den gewünschten Namen ersetzt wird. In meinem Fall "AirPi". Die Datei sieht dann folgendermaßen aus:
NAME=ShairPort
DAEMON="/usr/local/bin/shairport.pl"
PIDFILE=/var/run/$NAME.pid
DAEMON_ARGS="-w $PIDFILE -a AirPi"

Es werden noch zwei weitere Dateien benötigt. Auch hier gilt wieder: Alle Befehle nach und nach eintippen:
wget http://www.forum-raspberrypi.de/mydownloads/downloads/libnet-sdp-perl_0.07-1_all.deb
wget http://www.forum-raspberrypi.de/mydownloads/downloads/shairport_0.05-1_armhf.deb
sudo dpkg -i libnet-sdp-perl_0.07-1_all.deb
sudo dpkg -i shairport_0.05-1_armhf.deb

Jetzt muss nur noch der Shairport-Service neugestartet werden
sudo service shairport restart

Das wars. Der Raspberry Pi ist nun ein AirPlay-Empfänger. Hinweis: In manchen Fällen wird der RaspberryPi nicht sofort von iTunes erkannt. Dann bitte folgendes ausführen:
sudo service shairport restart

UPDATE: Aus unbekanntem Grund, konnte der RasPi von heute auf morgen nicht mehr von iTunes als Lautsprecher gefunden werden. Abhilfe hat folgendes gebracht:
sudo apt-get install cpanminus

Weiter zu Teil 2 des Tutorials in dem ich erkläre, wie der Music Player Daemon installiert wird um lokal auf dem Pi gespeicherte Musik wiederzugeben oder zu Teil 3 in dem erklärt wird, wie man über Bluetooth Musik auf den Pi streamen kann.

Teil 2/3 - Music Player Daemon auf dem Raspberry Pi

MPD (Musicplayer Daemon), MPC und ncmpcpp

Der Music Player Daemon bietet die Möglichkeit lokal auf dem Pi abgelegte Musikdateien abzuspielen. Hierfür sind eine fülle an Apps für Smartphones vorhanden. Zur bedienung über die Kommandozeile empfehle ich das Paket ncmpcpp.

Die nötigen Pakete werden installiert:
sudo apt-get install mpd mpc ncmpcpp alsa-utils

Im ersten Schritt erstellen wir einen Ordner music im Home-Verzeichnis des Pi's:
cd ~
mkdir music
(Info: Das Tildezeichen (~) lässt sich auf dem Mac bei deutschem Tastaturlayout über die Tastenkombination ALT + N erzeugen.) Anschließend folgendes eingeben:
sudo modprobe snd_bmc2835
Nun muss MPD konfiguriert werden:
sudo nano /etc/mpd.conf 
Mit der Tastenkombination CTRL + V scrollt man im Text soweit hinunter bis die Zeile:
bind_to_adress
erscheint. Soll MPD nicht direkt vom Pi aus bedinet werden können muss direkt vor die Zeile eine # geschrieben werden (Auskommentieren.)Dies ist notwendig wenn man bspw. die Musik über das Smartphone oder das Terminal steuern will. Beim Eintrag
auto_update    "yes"
sollte ebenfalls die # entfernt werden. So wird die Musikbibliothek automatisch von MPD aktualisiert sobald neue Musik im ordner abgelegt wird. Ein paar Zeilen weiter muss bei der Zeile
#follow_outside_symlinks   "yes"
die Raute (#) entfernt werden. Da ich nicht das Standartverzeichnis nutze in dem MPD normalerweise die Musikdateien erwartet, sondern den vorher erstellten Ordner music verwenden möchte. Weiter unten werden die Audio-Ausgänge definiert. Bei mir sieht das so aus:
audio_output {
        type            "alsa"
        name            "RaspberryPi"
        format          "44100:16:2"    # optional
        mixer_type      "software"
Mit CTRL + X und anschließender Bestätigung zum Speichern ist der Music Player Daemon soweit startklar. Da MPD über die vorhin geänderte Zeile follow_outside_symlinks bereits so konfiguriert ist, dass auch auf Musikverzeichnisse ausserhalb des Standartpfades zugegriffen werden kann, muss noch einen Verknüfung (Symlink) zu dem erstellten Ordner music im Standartpfad erstellt werden. Dazu wechselt man in den Standartpfad:
cd /var/lib/mpd/music
und erstellt über folgendes Kommando eine Verknüpfung auf den music-Ordner:
ln -s /home/pi/music
Die Standardpfade benötigen noch die notwendigen Berechtigungen, die den reibungslosen Betrieb von MPD garantieren:
sudo chmod g+w /var/lib/mpd/music/ /var/lib/mpd/playlists/
sudo chgrp audio /var/lib/mpd/music/ /var/lib/mpd/playlists/
Jetzt können Musikdateinen im MP3-, FLAC- und vielen anderen Formaten einfach in diesem Ordner abgelegt werden.

Im letzten Schritt muss MPD einmal neugestartet werden, damit alle Änderungen wirksam werden:
sudo service mpd restart


NCMPCPP

Über den Befehl
ncmpcpp
kann nun eine minimale Textbasierte Oberfläche zur Steuerung über die Kommandozeile aktiviert werden. Drück man die Taste 1 findet man alles nötige was zur Steuerung von ncmpcpp benötigt wird. Beendet wird ncmpcpp durch ein druck auf die Q-Taste.


Steuerung über Apps:
MPD lässt sich wunderbar über das Tablet/Samrtphone steuern.

Weiter zu Teil 1 des Tutorials in dem aufgezeigt wird, wie man Apple's Airplay auf dem Raspberry Pi installiert um Musik direkt aus iTunes oder iOs auf den Pi zu streamen oder zu Teil 3 in dem erklärt wird, wie man über Bluetooth Musik auf den Pi streamen kann. 

Dreiteiliges Tutorial: RaspberryPi als Radio und Streaming-Client

In diesem dreiteiligem Tutorial werde ich zeigen, wie man einen Raspberry Pi in ein erstklassiges Radio verwandeln kann. Jedoch kein herkömmliches UKW-Radio, sondern ein funktionales kleines Medienradio was sich nahtlos in die heimische digitale Infrastruktur ingeriert und Konnektivität für nahezu jedes Device und OS bietet.

Das Tutorial wird an dieser Stelle in drei Posts aufgeteilt. Nachdem diese befolgt wurden sollte der Pi folgendes bieten:
  • TEIL 1: Apple Airplay Streaming um Musik direkt aus iTunes auf den Raspberry Pi zu streamen. Ich benutze dafür ein Paket namens Shairport, was leicht zu konfigurieren ist und seinen Dienst mehr oder minder gut leistet.
  • TEIL 2: Music Player Daemon (MPD) um auf dem Raspi abgespeicherte Musik abzuspielen. MPD lässt sich wunderbar per Smartphone steuern und beherrscht neben der Wiedergabe lokaler Musikdateien auch die Wiedergabe von Streams, das Anlegen von Playlists, eine einfache Bedienung über das Terminal und noch vieles weitere.
  • TEIL 3: Musik-Streaming per Bluetooth A2DP-Protokoll um bspw. Musik von Android oder iOs auf das Gerät zu streamen. Der große Vorteil besteht darin, dass nahezu jedes Smartphone mit Bluetoothmodul von Haus aus dieses Protokoll spricht und somit ohne zusätzliche App Musik streamen kann. Zusätzlich kann der Pairing-Vorgang mittels eines NFC-Tags vereinfacht und automatisiert werden.
Bevor eine dieser Anleitungen befolgt wird, muss jedoch eingangs die Quelle angegeben werden, aus der der gestreamte Sound aus dem Pi kommen soll. Dies kann über HDMI oder Analog-Klinke erfolgen. Standardmäßig ist der Pi so eingestellt, dass er automatisch erkennt an welchem der beiden Anschlüsse ein entsprechender Stecker eingesetzt wurde. Probleme gibt es jedoch wenn man den Sound altmodisch über den 3,5mm-Klinkenport nutzen möchte aber gleichzeitig einen Monitor über HDMI angeschlossen hat. Dann bleibt der Pi stumm, da er denkt dass das Audiosignal über HDMI übertragen werden soll. In meinem Fall habe ich den Pi so eingestellt, dass alles Audio über den Klinkenport ausgegeben wird. Dies geht folgendermaßen:
sudo amixer cset numid=3 1
Dabei steht die letzte Zahl "1" für den Klinkenport. Soll der Sound über HDMI ausgegeben werden muss hier eine "2" stehen. Steht dort eine "0" ist der bereits erwähnte automatische Modus aktiviert.