Squeezebox Modul - erste Version

Begonnen von bugster_de, 17 Dezember 2013, 22:12:10

Vorheriges Thema - Nächstes Thema

TeeVau

Wie macht ihr das mit der audioausgabe? Der line out vom Pi soll ja angeblich schlecht sein. Ist dem so?
Ich überlege auch so langsam, in jedem Raum einen Pi zu Hängen wegen Audio.
Dachte bei den Lautsprechern an den Control ONE von JBL. Zwischen Pi und den Lautsprecher noch ein kleiner Verstärker und alles sollte laufen...oder?
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

siggi85

Zitat von: TeeVau am 16 Juni 2014, 23:10:02
Wie macht ihr das mit der audioausgabe? Der line out vom Pi soll ja angeblich schlecht sein. Ist dem so?
Beim starten und stoppen von Audioausgaben habe ich immer ein knacken gehabt. Daher habe ich eine USB Soundkarte verbaut.
Hier ein Thread in dem ich meinen ersten Aufbau im Bad beschrieben habe (mit Bildern und ungefähren Preisen der Einzelkomponenten)
Link

vbs

Nur um anderen auch eine evtl. frustrierende Fehlersuche zu ersparen (vielleicht stehts auch irgendwo, nur ich Trottel habs überlesen  :-\):
Bei mir funktionierte das Steuern der Player immer nur ein paar Minuten nach dem Start von FHEM. Danach hat SB_SERVER im Log gemeldet, dass der Server nicht mehr erreichbar ist. Ich hab dann im Code gesehen, dass dafür ein TCP-Ping benutzt wird. Der wiederum baut eine Verbindung zum TCP-Port 7 auf (Echo-Dienst). Diesen Dienst gibt es aber normalerweise auf Windows-PCs nicht.
Wenn also der Squeezebox Server auf einem Windows PC läuft, dann muss man unter Software -> "Windows Funktion hinzufügen" die "Einfachen TCP-Dienste" installieren. Dann noch händisch die Firewall für Port 7 aufmachen. Danach funktioniert das Modul dauerhaft.

Evtl. könnte kann man den Mechanismus auf etwas umstellen, das auch unter Windows out-of-the-box funktioniert?

msdv

Hallo,

ich habe jetzt einiges herumprobiert - aber leider scheine ich nicht darauf zu kommen.
Wie kann man denn gezielt eine hinterlegte (m3u) Playlist abspielen?
Ich habe eine ganze Reihe von Playlisten (synchronisiert mit itunes) - und würde diese gerne auswählen und abspielen.

Dinge, die ich getestet habe:
set SB_Cookie playlist play /volume1/music/Playlists/ZenPlaylist.m3u
set SB_Cookie playlist play ZenPlaylist

Das scheint aber nicht zu gehen...
Kann ich irgendwie so eine Playlist abspielen?

Danke,
M.

bugster_de

ZitatZitat von: RoBra81 am 13 Juni 2014, 12:40:01

    ich hab's nicht selbst probiert, aber laut Hilfe des CLI gibt's die URL
    http://<server>:<port>/music/current/cover.jpg?player=<playerid>


@bugster: Wäre es möglich dies als Weblinkfunktion in das Modul einzubauen?

Ja, ich habe das sogar schon bei mir implementiert, aber der angegebene Link funktioniert bei mir zumindest nicht zuverlässig. Es scheint für MP3s zu gehen aber für Webstreams / Webradio nicht. Geht das bei Dir?

bugster_de

ZitatWie kann man denn gezielt eine hinterlegte (m3u) Playlist abspielen?
Ich glaube da war noch ein Bug im Modul. Da ich selbst nur mit den Favoriten arbeite ging das in Vergessenheit. Schaue ich mir nochmal an.

jody

Hallo,

erstmal vielen Dank für das tolle Modul.
Da ich recht neu im Thema Logitech Media Server bin habe ich eine Frage an euch.

Ist es möglich drei Squeeze Player auf einmal zu synchronisieren/verbinden, damit überall die gleiche Musik läuft? Über das Server Web Interface ist dies ja etwas aufwändiger. (Zuerst zwei synchronisieren, anschließend auf den dritten Player wechseln und diesen dann mit der Gruppe syncen).
Hab mich auch schon bei einem großen Such Dienstleister erkundigt, jedoch keine Lösung gefunden. Die CLI Dokumentation stellt auch keine Lösung für mein Problem zur Verfügung.

Vielen Dank für eure Hilfe.

Gruß Jody
Cubietruck
CUL SlowRF
CUL Homematic
ZWave

bugster_de

Hi,

Wie man per FHEM Skript synced findet sich weiter vorne in diesem Thread. Also ja das geht, schau einfach mal den Thread durch

jody

Hi bugster_de,

das mit dem syncen in fhem hab ich schon gelesen, aber bei dieser variante werden nur zwei Player miteinander vernetzt. Wie die CL Methode funktioniert weis ich schon.

Ich suche jedoch eine Lösung 3 oder mehr Player auf einmal zu vernetzen. Hierfür habe ich noch keine Lösung gefunden und dachte mir, vielleicht hat einer von euch schon ein Script oder irgendwas, mit dem mein Vorhaben möglich ist.

Gruß Jody
Cubietruck
CUL SlowRF
CUL Homematic
ZWave

marvin78

#264
Das geht. Zuerst einen Player mit einem anderen Verbinden:


set SB cliraw sync SB2

Und dann einen weiteren Player zur Gruppe hinzufügen

set SB cliraw sync SB3

usw.

Ich habe mir dafür eine Funktion in der myUtils hinterlegt:


sub squeezeSync($$;$) {
  my ($slaves,$art,$master)=@_;
  my @dvs=();
  my $dev="";
  my $command="";
  my $i=0;
  @dvs=split(",",$slaves);
  if ($art eq "connect" && defined($master)) {
  foreach (@dvs) {
       $i++;
           $dev=$_;
       fhem("set $dev:FILTER=STATE!=on on");
           fhem("set $master cliraw sync $dev");
           Log 1,"Squeezebox: $dev synced to $master";
  }
      fhem("set $master play");
      return 1;
  }
  elsif ($art eq "disconnect") {
  foreach (@dvs) {
      $dev=$_;
      fhem("set $dev cliraw sync -;sleep 1;set $dev:FILTER=STATE!=off off");
          Log 1,"Squeezebox: $dev unsynced";
        }
    return 1;
  }
  else{return 0};
}


Aufruf:

squeezeSync(slave1[,slave2,slave..],connect|disconnect,master)

master kann beim disconnect weg gelassen werden.

Beispiele:

2 Squeezeboxen miteinander verbinden (SB1 spielt etwas):


squeezeSync("SB2","connect","SB1")


3 Squeezeboxen miteinander verbinden (SB1 spielt etwas):


squeezeSync("SB2,SB3","connect","SB1")


Eine Squeezebox aus der Gruppe lösen:


squeezeSync("SB2","disconnect")



usw.

Vorausetzung ist hier, dass alle Player im Media Server den gleichen Namen haben, wie in FHEM!!!

jody

Hey marvin,

super Sache!! :) :)

Werd ich gleich mal ausprobieren.

Gruß Jody

Vor lauter Euphorie fast vergessen dir ein Dankeschön auszurichten!!!

Danke
Cubietruck
CUL SlowRF
CUL Homematic
ZWave

jody

Hey marvin,

nochmals Vielen Dank!!

Hab's grad eingebaut und läuft super. Muss mir jetzt noch ne Möglichkeit einfallen lassen wie ich die verfügbaren Player in einer Auswahlliste darstelle und anschließend die ausgewählten Geräte deiner Funktion übergebe. Wenn ich was hab meld ich mich natürlich nochmal bei dir.

Gruß Jody
Cubietruck
CUL SlowRF
CUL Homematic
ZWave

marvin78

Mit einem Dummy und geschicktem notify sollte das kein Problem sein.

marvin78

Ein disable Attribut wäre sowohl bei PLAYER also auch bei SERVER sinnvoll.

jody

Hey marvin,

Hab mir da mal mit deiner Funktion einen Dummy erstellt, mit dem ich die Player zur Auswahl stelle und diese dann Syncen kann. Ist natürlich erst ein grober Versuch aber es funktioniert wenigstens schonmal.

Das Notify und der Auswahl Dummy in der fhem.cfg

define Syncer dummy
attr Syncer room Kueche
attr Syncer webCmd state:sync:reset
attr Syncer setList state:SB_H,SB_T,SB_L,SB_K

define SyncerNotify notify Syncer.* {syncAuswahl("Syncer")}


In der 99myUtils.pm
sub syncAuswahl($) {

my ($device) = @_;
my $input = ReadingsVal($device,"state","on");
my $allDevices = ReadingsVal($device,"Geraete","");
my $i = 0;
my $clients = "";
my $master = "";
my $fhemBefehl = "";

if ($input ne "reset" and $input ne "sync") {
readingsBeginUpdate($main::defs{$device});
readingsBulkUpdate($main::defs{$device}, "Geraete", $allDevices . $input . ",");
readingsEndUpdate($main::defs{$device}, 1);
}

if ($input eq "sync") {
my $data = ReadingsVal($device,"Geraete","on");
my @values = split(',', $data);
@values = reverse(@values);
my $laenge = @values;
while (($i+1) < $laenge) {
$clients .= "@values[$i],";
$i++;
if (($i+1) == $laenge) {
$master .= @values[$i];
}
}
my $chr = chop($clients);
squeezeSync("$clients","connect","$master");
}

if ($input eq "reset") {
my $data = ReadingsVal($device,"Geraete","on");
squeezeSync("$data","disconnect");
fhem("deletereading $device Geraete");
}
}
Cubietruck
CUL SlowRF
CUL Homematic
ZWave