Nautilus steuert Squeezebox (per Python-Skript)

Veröffentlicht am

Im heutigen Artikel möchte ich euch einen Weg vorstellen, wie man von die Squeezebox vom Rechner aus steuern kann, ohne dazu die Web-Oberfläche des Squeezebox-Servers zu benutzen. Der Wunsch dazu entstand bei mir, weil ich die Web-Oberfläche relativ träge finde (was vielleicht aber auch an geringer Leistung meines NAS liegen könnte). Mit einem „leichteren“ Skin kann man das zwar etwas verbessern – ich benutze das Skin ClassicCB – aber dennoch sollte es flotter gehen.

pysqueezecenter

Zunächst einmal geht es um ein Python-Modul namens pysqueezecenter, das den Zugriff auf das CLI (Command Line Interface) des Squeezebox-Servers ermöglicht bzw. erleichtert.

Damit das Modul ordentlich installiert werden kann, installiert man sich am besten zunächst noch easy_install. Einfach über Synaptic oder das Software-Center – das Paket heißt python-setuptools – oder per:

sudo apt-get install python-setuptools

Als nächstes lädt man sich das Modul von der Download-Seite des Projekts herunter. Derzeit ist die Version 0.94 aktuell, so dass die heruntergeladene Datei pysqueezecenter-0.94.tar.gz hieß.

Um die Installation dann durchzuführen, wechselt man in das Verzeichnis, in das man die Datei heruntergeladen hat und führt folgenden Befehl aus:

sudo easy_install pysqueezecenter-0.94.tar.gz

Damit wird das Modul in den Pfad von Python kopiert, so dass es ohne weitere Konfiguration in jedes Python-Skript importiert werden kann.

Squeezebox CLI aktivieren

Natürlich muss am Squeezebox-Server die Verwendung des CLI aktiviert werden. So weit ich mich erinnern kann, ist die Funktion per Default nicht aktiviert. Also auf der Weboberfläche des Squeezebox-Servers auf die Server-Einstellungen wechseln und dort in den Bereich Befehlszeilenschnittstelle (CLI). Hier kann man dann die Portnummer eingeben, die man verwenden möchte. Default ist 9090.

Nebenbei bemerkt:

Die Steuerung der Squeezebox ist auch per einfachem Telnet-Aufruf möglich, wie hier im Squeezebox-Wiki beschrieben ist. Welche Befehle ausgeführt werden können, ist in der Server-Dokumentation zu finden. Die Server-Dokumentation könnt ihr über folgende Adresse aufrufen (wobei ihr natürlich Host-Adresse und Portnummer durch euren Server ersetzen müsst):

http://squeezeserver:9002/html/docs/cli-api.html

Diese Dokumentation beschreibt aber eben den (vollen) Funktionsumfang der SqueezeboxserverCLI und nicht den des Python-Moduls…

Basis-Steuerungsskript

Nun kann man munter los skripten und die Squeezebox beliebig steuern. Zumindest fast beliebig, denn ein paar Funktionen sind wohl im pysqueezecenter-Modul nicht umgesetzt. Als Dokumentation der Modul-API gibt es derzeit das Beispiel auf der Startseite des Projektes und zusätzlich eine API-Beschreibung im Dokumentationsbereich.

Für mich ging es darum, folgende Calls an die Squeezebox umzusetzen – und zwar so, dass ich die Aufruf praktischerweise in das NautilusKontextmenü einbinden konnte:

  • Einfügen bzw. Anhängen eines ganzen Albums an die aktuelle Playlist.
  • Einfügen bzw. Anhängen eines einzelnen Titels an die aktuelle Playlist.
  • Leeren der aktuellen Playlist.
  • Starten/Stoppen/Pausieren des Players.

Dazu habe ich mir dieses Basisskript (/usr/local/bin/squeeze.py genannt) gebastelt:

#!/usr/bin/python

import sys
from pysqueezecenter.server import Server
from pysqueezecenter.player import Player

server_host = 'myhost'
server_port = 9090
server_auth_username = 'myuser'
server_auth_passwd = 'mypass'
player_mac_addr = '01:02:03:04:05:06'
music_src_base = '/home/ich/Musik/'
music_dst_base = 'file:///volume1/Medien/Audio/Musik/'

fileargs = []
i = 0
for arg in sys.argv:
    if i == 1:
        action = arg
    elif i != 0:
        files = arg.splitlines()
        fileargs.extend(files)
    i += 1

filelist = []
if action == 'plinsert' or action == 'pladd':
    for filearg in fileargs:
        if filearg.startswith(music_src_base):
            file = filearg.replace(music_src_base, '')
            if file.find('/') >= 0:
                filelist.append(music_dst_base + file)

sc = Server(hostname=server_host, port=server_port, username=server_auth_username, password=server_auth_passwd)
sc.connect()
sq = sc.get_player(player_mac_addr)

if action == 'plinsert':
    for file in filelist:
        sq.playlist_insert(file)
elif action == 'pladd':
    for file in filelist:
        sq.playlist_add(file)
elif action == 'plclear':
    sq.playlist_clear()
elif action == 'start':
    sq.play()
elif action == 'stop':
    sq.stop()
elif action == 'pause':
    sq.pause()

Wichtig ist folgende Voraussetzung, unter der ich dieses Skript gebaut habe:

Das gesamte Musik-Verzeichnis, auf das ich per Nautilus zugreife (oder z.B. auch mit Banshee) wird genau so auch vom Squeezebox-Server benutzt. Entweder wird also das selbe (!) Verzeichnis von beiden Seiten verwendet oder ihr synchronisiert das gesamte Musik-Verzeichnis auf beiden Seiten. Letzteres ist bei mir der Fall. Ich habe einmal das Musik-Verzeichnis auf meinem Ubuntu-Rechner und kopiere Neuerungen und Änderungen daran jeweils auf den NAS, auf dem der Squeezebox-Server läuft.

Damit das Skript richtig funktionieren kann, müsst ihr noch die Konfigurationsparameter anpassen:

  • Anstatt myhost gebt ihr die Adresse des Squeezebox-Servers an.
  • Ggfs. passt ihr den Port an – falls ihr nicht den 9090 benutzt.
  • Anstatt myuser und mypass gebt ihr euren Benutzernamen bzw. euer Kennwort für den Zugriff auf den Squeezebox-Server an. Ich habe den Kennwortschutz bei mir aktiv, weil ich den Squeezebox-Server auch aus dem Internet verfügbar machen wollte. Ob der CLI-Zugriff ohne Passwort funktioniert und wie das Skript dann umgebaut werden müsste, weiß ich nicht.
  • Anstatt 01:02:03:04:05:06 gebt ihr die MAC-Adresse eurer Squeezebox an. Um die MAC-Adresse herauszubekommen, könnt wechselt in der Web-Oberfläche des Squeezebox-Servers auf die Player-Einstellungen eures Players. Dort wird die MAC-Adresse angezeigt.

Disclaimer

An dieser Stelle sei auch noch einmal erwähnt, dass ich in der Python-Welt noch recht frisch bin und das eine oder andere sicher auch einfacher oder besser gelöst werden könnte.

Seht das Ganze bitte auch eher als Idee und weniger als 100%-iges Tool.

Ggfs. werde ich das Skript demnächst auch im Download-Bereich meines Blogs anbieten. Allerdings möchte ich es bis dahin noch etwas reifen lassen. Wer also sachdienliche Hinweise (zur Optimierung, Korrektur usw.) hat… einfach ein Kommentar schreiben oder das Kontakt-Formular benutzen.

Einbindung in Nautilus

Wie die Einbindung eigener Skripte in Nautilus funktioniert, habe ich vor Kurzem bereits in einem gesonderten Artikel beschrieben. Die folgenden Nautilus-Skripte habe ich zur Squeezebox-Steuerung bei mir eingebunden:

Das Skript für das Anfügen an die Playlist:

#!/bin/bash
/usr/local/bin/squeeze.py pladd "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"

Das Skript für das Einfügen in die Playlist:

#!/bin/bash
/usr/local/bin/squeeze.py plinsert "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"

Das Skript zum Leeren der Playlist:

#!/bin/bash
/usr/local/bin/squeeze.py plclear

Das Skript zum Starten des Players:

#!/bin/bash
/usr/local/bin/squeeze.py start

Das Skript zum Stoppen des Players:

#!/bin/bash
/usr/local/bin/squeeze.py stop

Das Skript zum Pausieren des Players:

#!/bin/bash
/usr/local/bin/squeeze.py pause

Dieser Artikel wurde in der/den Kategorie(n) _Anwendungen, Planet-U, Praxis, Programmierung und Skripting veröffentlicht und mit den Tags , , , , , , , versehen.

3 Kommentare zu Nautilus steuert Squeezebox (per Python-Skript)

  1. Kommentar von Linu74
    27. August 2011, 10:40 Uhr.

    Was für ein NAS nutzt du denn? Ich habe hier ein Zyxel NSA 220 Plus und darauf läuft der Squeezecenter so gut wie garnicht.

    Linu74

    • Kommentar von Gerald
      27. August 2011, 10:53 Uhr.

      Ich habe ein Synology DS211j. Der Server läuft eigentlich ganz gut, obwohl lt. Synology der Speicher zu klein ist. Nur die Weboberfläche ist wahnsinnig träge.

  2. Kommentar von momo
    26. Oktober 2011, 08:20 Uhr.

    Ich bin begeistert!
    Vielen, vielen Dank, danach habe ich so lange gesucht, jetzt kann ich meine Box mit dem Rechner fernsteuern und total schnell die Playlist verändern. Klasse!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>