FHEM - Anwendungen > Multimedia

Squeezebox Modul - erste Version

(1/429) > >>

bugster_de:
Hallo,

Für Anwender findet sich eine super Doku hier: SB-FHEM Anwenderdoku

Für Entwickler:
siehe auch: http://www.fhemwiki.de/wiki/DevelopmentGuidelinesAV

Die jeweiligen Dateien zur Unterstützung von Squeezebox sind nun im Contrib Bereich von FHEM zu finden:
https://github.com/mhop/fhem-mirror/tree/master/fhem/contrib
97_SB_SERVER.pm und 98_SB_PLAYER.pm

Da es immer wieder Schwierigkeiten beim Download aus dem Contrib Bereich gibt:
bitte bei den Modulen auf den Butten "RAW" oben rechts klicken, dann alles markieren und kopieren und das Kopierte in eine Text Datei einfügen. Diese dann speichern

Die Unterstützung für Squeezebox ist zweistufig: ein Modul für den Server und je ein Modul für die Player. Bitte also beide angehängten Dateien in die ./FHEM kopieren und dann mittels shutdown restart FHEM neu starten.

Anlegen muss man nur den Server.

--- Code: ---define <name> SB_SERVER <serverip[:cliserverport]> [RCC:rccname] [WOL:wolname] [USER:username] [PASSWORD:password]
--- Ende Code ---

Bitte beachten: der CLI-Port ist optional und sollte nur angegeben werden, wenn man diesen auf dem SB-Server verändert hat. Standardmässig ist das 9090
RCC: falls man für den Rechner, auf dem der SB-Server läuft in FHEM ein RCC Device angelegt hat, so kann der FHEM-SB-Server diesen aufwecken. Sprich man klickt in FHEM beim SB-Server auf on und falls der PC aus ist, wird er per RCC aufgeweckt. Der name hinter dem Doppelpunkt ist der name des FHEM-RCC-Devices. Bitte RCC: angeben.
WOL: gleich wie RCC nur halt mit einem WOL Modul
[USER:username] [PASSWord:password] diese beiden Parameter sind optional. Auf SB-Server seiten kann man die Kommunikation über den CLI Port mittels Usrename und Passwort verriegeln. Falls man dies getan hat, dann hier die beiden Parameter angeben.


Die jeweiligen Player werden selbst erkannt und automatisch angelegt, falls man autocreate eingeschaltet hat. Also einfach den Server anlegen und zurücklehnen. Nach maximal 1 Minute sollten alle Player automatisch angelegt sein.

Falls autocreate ausgeschaltet ist, dann kann man die Player auch manuell anlegen:

--- Code: ---define <name> SB_PLAYER <player_mac_adress]> <ampl:FHEM_NAME> <coverart:FHEMNAME>
--- Ende Code ---
Die jeweilige MAC Adresse des Players findet man im SB-Server unter Einstellungen

optional kann man ampl:xxx angeben. Hier gibt man bei XXX den Namen eines FHEM Elementes an, das auf on und off reagiert. Dies ist nützlich um z.B. einen Verstärker ein / ausschalten zu können. Bitte auch das amplifier Attribut beachten. Dieses kann man auf on oder play setzen. Der Versärker wird denn entweder mit dem Player ein/ausgeschaltet (on/off) oder bei play/pause vs. stop. Spricht bei playing und paused ist der Verstärker an, bei stopped ist er aus. Somit spart man sich die notifies und entsprechende Rechenlast auf dem FHEM Server

optional kann man coverart:XXX angeben. Unter XXX gibt man den Namen eines FHEM weblink image elementes an. Der Player aktualisiert dann jeweils den Link auf das aktuelle Coverart Bild, so dass man dieses z.B. im Floorplan anzeigen kann.
Mit den Attributen coverartheight und coverartwidth kann man die Breite bzw. Höhe bestimmen.
 Sprich einfach ein weblink Elemt mit define mylink weblink image Link.zu.einem.bild.jpg anlegen. Der SB_PLAYER aktualisiert dann den jeweiligen Image Link so dass das aktuelle Coverart z.B. im Floorplan angezeigt wird.
Bitte die Attribute für Höhe und Breite des weblink elementes NICHT verwenden. Größe wird durch den SB_PLAYER gemacht. Sonst geht das nicht

Das Player unterstützt bisher folgende Kommandos (die via set <name> angegeben werden
play --> startet die Wiedergabe
stop --> Stoppt die Wiedergabe
pause --> toggelt die Wiedergabe (wenn Pause dann Play und wenn Play dann Pause)
pause 1 --> setzt den Player auf Pause egal wie der Zustand zuvor war
pause 0 --> setzt den Player auf Un-Pause egal wie der Zustand zuvor war
channelUp --> spielt das nächste Stück (next)
channelDown --> spielt das vorherige Stück (prev)
volUp --> erhöht die Lautsärke um den Wert, der im Attribut volStep angegeben ist. Per Default 10
volDown --> veringert die Lautsärke um den Wert der im Attribut volStep angegeben ist
volume xx --> xx sollte ein Wert zwischen 0 und 100 sein und setzt die Lautstärke auf den angegebenen Wert (ist im Prinzip Prozent)
volumeStraight -_> gleich wie volume
mute --> schaltet mute um: setzt auf mute, wenn unmuted und setzt auf unmute wenn muted
on --> schaltet den Player ein, falls dieser das unterstützt. Wenn nein, dann macht es play
off --> schaltet den Player aus falls dieser das unterstützt. Wenn nein, dann macht es stop
shuffle on --> schaltet shuffle ein
shuffle off --> schaltet shuffle aus
repeat off|one|all --> schaltet repeat für die aktuelle Playlist in den jeweiligen Modus
show --> zeigt Text auf dem Player an. Dabei folgendes Format:

--- Code: ---set sbradio show line1:text der ersten Zeile line2:text der zweiten Zeile duration:ss
--- Ende Code ---
das ist glaube ich selbsterklärend
nach duration verschwindet der Text dann wieder
sleep xx --> schaltet den Player nach XX Sekunden aus (und fadet vorher runter)
favorites --> hier wird eine Drop-Down Liste angezeigt, die alle Favoriten der Squeezebox erhält. Durch Auswahl eines dieser Einträge wird die Playlist geleert und dieser Eintrag gespielt.
talk xxx --> der jeweilige Player spricht den Text, der angegeben wurde

--- Code: ---set myplayer talk Hallo Welt ich war da
--- Ende Code ---
playlist track|album|artist xxx --> hiermit kann man gezielt etwas aus der Datenbank anspielen. Der SB-Server scheint aber etwas pciky zu sein bezgl. korrekter Schreibweise.

--- Code: ---set myplayer playlist track Satisfaction
--- Ende Code ---

--- Code: ---set myplayer playlist album Best of
--- Ende Code ---

--- Code: ---set myplayer playlist artist Whitesnake
--- Ende Code ---
playlist genre artist album --> spielt die jeweils angebene Tracks, die auf das Suchkriterium passen. Stern ist wildcard

--- Code: ---set myplayer playlist * Whigfield *
--- Ende Code ---
statusRequest --> macht einen Update der Readings
sync --> hier wird eine Liste der Player angezeigt, mit denen man eine Gruppe bilden kann (Multiroom). Der angezeigte Player ist dann der Master
unsync --> nimmt den Player wieder aus der Gruppe raus
playlists --> hier werden, wie bei den Favoritn, die Serverseitig definierten Playlisten zu Auswahl angezeigt

Und dann kann man bis zu zwei Alarme setzen

--- Code: ---set sbradio alarm1 set 5 12:23:17
set sbradio alarm2 set 4 17:18:00
--- Ende Code ---
der erste Parameter ist der Wochentag (mit So = 0), der zweite ist die Uhrzeit

Löschen der Alarme

--- Code: ---set sbradio alarm1 delete
set sbradio alarm2 delete
--- Ende Code ---

Lautsärke setzen mit:

--- Code: ---set sbradio alarm1 volume xx
set sbradio alarm2 volume xx
--- Ende Code ---

Enable / Disable des Alarms mit:

--- Code: ---set sbradio alarm1 enable
set sbradio alarm2 enable
set sbradio alarm1 disable
set sbradio alarm2 disable
--- Ende Code ---

Alle Alarme ein|aus

--- Code: ---set sbradio allalarms enable
set sbradio allalarms disable
--- Ende Code ---

Und als Schmankerl kann man auch CLI Kommandos an den Player schicken
cliraw --> schickt Kommandos an den Player. Die jeweilige Player-ID (MAC Adresse) wird automatisch eingefügt.
Bsp.

--- Code: ---set sbradio cliraw mixer volume 50
--- Ende Code ---
Also hier die Player-ID NICHT einfügen; sie wird vom Modul eingefügt.
Die Antwort des Players auf die Anfrage findet sich dann im lastunknowncmd Reading des Players.

Der Player besitzt das Attribut donotnotify. Mit diesem kann man Einstellen, ob der Player ein FHEM Notify bei jeder Änderung der Readings lostritt. Per default ist das ausgeschaltet; der Player erzeugt dann nur ein Notify, wenn sich state (on/off) ändert aber nicht, wenn z.B. das nächste Stück angespielt wird. Ein Notify erzeugt signifikante Rechenlast im FHEM Server und so mancher Radio Sender wechselt ja alle paar Sekunden die Anzeige. Jeder dieser Anzeigenwechsel würde dann zu einem Notify auf dem FHEM Server führen.
Am Player kann man auch die Zielsprache der talk Funktion einstellen: de, en, fr, ... für die jeweilige Sprache. der hier gesetzte Wert wird so 1.1 an die Google TTS Engine übergeben. In der FHEM Oberfläche kann man ein paar Sprachen auswählen. Wer eine andere Sprache möchte, dann einfach das attribut in der fhem.cfg manuell setzen.
Das Attribut ttslink enthält den Pfad zur TTS Engine. Als Default ist hier Google eingestellt.

Mit dem Attribut volumeLimit kann man eine maximale Lautstärke vorgeben, die bei den set Kommandos volume und volumeUp beachtet wird. Es können Werte von 0 bis 100 vergeben werden. Ein Limit von 100 bedeutet Funktion ist aus.

Der Server unterstützt folgende Kommandos
renew --> erneuert die Verbindung zum Server, falls dieser down war
abort --> stoppt die Verbindung zum Server
cliraw --> hiermit kann man beliebige Kommandos des CLI Interface an den Server schicken
rescan --> startet das Durchsuchen der Musikdatenbank des SB-Servers
statusRequest --> holt alle möglichen Infos vom Server und den Playern und aktualisiert dann die Readings

ToDo:
- Szenario ohne SB Server / mit Playern die mit mysqueezebox.com verbunden sind unterstützen
- die URL der Cover-Art holen, so dass man die Cover Art dann z.B. in einem Floorplan anzeigen kann.

Nebenbemerkung:
der SB_SERVER hat kein state Reading. Die Variable power zeigt on | off. Die Variable STATE zeigt connected | disconnected an. Dies sagt aber nur etwas darüber aus, ob FHEM überhaupt auf Ethernet zugreifen kann. Wenn man den SB-Server PC in hibernate fährt, bleibt STATE auf connected. Wenn man also Verstärker etc. schalten will, dann muß man das power Reading nehmen.

UliM:
Hi,
coole Sache!

- vielleicht magst Du die Befehle anpassen an die Multimedia-Richtlinie und Dein Modul auch in den Übersichtstabellen der Befehle hinterlegen, siehe http://www.fhemwiki.de/wiki/DevelopmentGuidelinesAV

- besteht die Möglichkeit, auch die Weckzeit der Squeezebox von fhem aus einzustellen? Das wäre für mich persönlich ein sehr wünschenswertes feature, siehe http://forum.fhem.de/index.php/topic,16965.0.html

Gruß + viel Erfolg,
Uli

bugster_de:
Hi,

oh, diese Spezifikation kannte ich noch nicht. Das kommt halt davon, wenn man alleine im dunklen Kämmerlein vor sich hin werkelt :-)

Klar werde ich so umsetzen!

 
Muss das Modul alle der Kommandos unterstützen? Denn nicht alle Kommandos kann die Squeezebox.
Im Umkehrschluss habe ich noch keine Möglichkeit gefunden den echten Status des Players abzufragen. Squeezebox liefert da keine einfache Möglichkeit. Aber ich mache eh mal noch ein bisschen Research darauf.


rippi46:
Hi

würde mich über so ein Modul auch freuen ;D

Habe das ganze noch etwas umständlich in der fhem.cfg gemacht.


--- Code: ---define LautsprecherGaeste dummy
attr LautsprecherGaeste alias Gästeklolautsprecher
attr LautsprecherGaeste eventMap BI:on B0:off
attr LautsprecherGaeste fm_type state,offbutton,onbutton
attr LautsprecherGaeste group Lautsprecher
attr LautsprecherGaeste icon audio_volume_low
attr LautsprecherGaeste room Gästeklo,Sound
attr LautsprecherGaeste setList state:on,off
define LautsprecherGaeste_ntfy notify LautsprecherGaeste:.* {\
    my $master = "10011";;\
    my $slave = "00000";;\
    my $v=Value("LautsprecherGaeste");;\
    if ($v eq "on") {connair("on",bin2dec("$master"),bin2dec("$slave"))};;\
    if ($v eq "off") {connair("off",bin2dec("$master"),bin2dec("$slave"))};;\
    }


define GaesteKlo dummy
attr GaesteKlo group Sound
attr GaesteKlo room Gästeklo,Sound
attr GaesteKlo webCmd play:pause:stop:next:back:5:10:15:20:25:30:35:40:45:50:55:60:65:70:75:80:85:90:95:100
define GaesteKlo_ntfy notify GaesteKlo:.* {\
    my $v=Value("GaesteKlo");;\
    my $server='http://192.168.178.69:9000';;\
    my $player="&player=b8:27:eb:4c:f1:b5";;\
    my $bef1="/status.html?p0=play";;\
    my $bef2="/status.html?p0=pause";;\
    my $bef3="/status.html?p0=mixer&p1=volume&p2=$v";;\
    my $bef4="/status.html?p0=stop";;\
    my $bef5="/status.html?p0=playlist&p1=jump&p2=+1";;\
    my $bef6="/status.html?p0=playlist&p1=jump&p2=-1";;\
    if ($v eq "play") {GetFileFromURL "$server$bef1$player"};;\
    if ($v eq "pause") {GetFileFromURL "$server$bef2$player"};;\
    if ($v eq "stop") {GetFileFromURL "$server$bef4$player"};;\
    if ($v eq "next") {GetFileFromURL "$server$bef5$player"};;\
    if ($v eq "back") {GetFileFromURL "$server$bef6$player"};;\
    if ($v > "0") {GetFileFromURL "$server$bef3$player&start=0"};;\
    }


--- Ende Code ---

Die einzelnen Player (Raspberry mit Coreplayer + kleiner Verstärker) schalte ich über Brennenstuhl Funkschalter ein und aus.

d0np3p3:
Hallo,
Danke für das Modul, ich glaube mit den Squeezeboxen ist einiges möglich.
Hier hatte ich es auf die Wunschliste gesetzt, und auch ein paar lnfos gesammelt, ich denk du kennst das schon.
http://forum.fhem.de/index.php/topic,14390.msg91198.html
Bei mir läuft es.

Ich denke eine Remote Control wie beim Samsung usw wäre sinnvoll

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln