Sonos Modul

Danke[emoji106]

Moin,

nix da.
Aber wir können alle anderen von dieser Diskussion erlösen.:rolleyes:

Mach mal folgendes:
Schreib mir eine Mail (Adresse über mein Profil) mit den Informationenen wo Du Boxen hast und welche davon eine Gruppe kontrollieren sollen.
Zusätzlich bitte einen Screenshot von Deiner „Topology“ (wie hier beschrieben).

Ich werde Dir dann eine Empfehlung schicken, wie es meiner Meinung nach konfiguriert wein sollte.

Ausserdem stelle ich das dann entsprechend aufbereitet in der Doku als Beispiel zur Verfügung.

Gruß,
Thorsten

Hi,

irgendwie mochte ich es auch nicht.

Daher ist die Doku jetzt etwas verbessert und auf Deutsch.

Gruß,
Thorsten

Ist das Feature „detailed status information“ noch in Planung oder ist das erst mal nach hinten verschoben worden? Wäre prima wenn das noch ergänzt würde, zur Zeit läuft das Sonos Modul und Sonos aus der IPS Library bei mir parallel, da nur die IPS Libraray momentan Detail Infos anzeigt. Wäre auf Dauer prima man könnte nur noch das Modul unter IP-Symcon 4 nutzten und alle Infos an einer Stelle haben.

https://github.com/tkugelberg/SymconSonos
Klasse Arbeit, besten Dank.

Da hat aber jemand fleißig dokumentiert :cool: TOP! Weiter so!
Wenn irgendwann IPS4 den Stable Status erreicht, dann freue ich mich am meisten auf dieses Modul :slight_smile:

Danke und Grüße,
Chris

Ich bekomme das Modul irgendwie nicht ans laufen. Endlich hat sich das Feld RINCON zwar selber mit einer ID gefüllt aber es scheint nichts zu gehen. Im Webfront wähle ich z.b. eine Radiostation aus und als Fehlermeldung kommt folgendes:

Ein Fehler von vielen:-) Kann damit jemand was anfangen? Ich meine viel falsch machen kann man bei der Installation nicht wirklich…

Besten Dank im Voraus,
Dirk

Vielen Dank für das tolle Modul und die Deutsche Dokumentation.
Mfg Stefan

Auch von mir vielen Dank für das tolle Modul und die gute Dokumentation.
MfG Ulli

Hi,

Dieser Fehler („Sonos Box 192.168.2.106 is not available“) wird immer dann geworfen, wenn die Box nicht innerhalb des timeouts (siehe Instanz Konfiguration) erreicht werden kann.
Wenn Du sicher bist, dass die IP richtig ist, könntest Du mal den Timeout erhöhen oder auf 0 (kein Verfügbarkeitstest) stellen.

Wobei der Timeout per default auf 500ms steht, das sollte eigentlich reichen.
Oder Auf Windows funktiuoniert das Sys_Ping() nicht so wie ich erwartet hätte…

Gruß,
Thorsten

Hi,

ich habe mal versucht meine Vorhaben transparenter zu machen und mein „Backlog“ veröffentlicht:
SymconSonos/BACKLOG.md at master · tkugelberg/SymconSonos · GitHub

Zufälltig ganz kurz vor Deiner Frage :smiley:

Um es kurz zu machen:
Da das mit der doch recht unflexiblen Gruppierung echt blöd ist, habe ich das vorgezogen.
Habe es aber definitiv vor kurzfristig einzubauen.

Gruß,
Thorsten

Super, ganz herzlichen Dank für die Transparenz und die Mühe die Du Dir machst das auch noch extra aufzuschreiben. Dann warte ich mal geduldig :D, ich weis ja wie das ist und wie zeitfressend so ein Modul in der Freizeit sein kann.

Hallo Thorsten,

mir ist aufgefallen das Du noch keine Cover anzeigst.

Beim Umzug auf die Symbox und beim ausmisten ist mir das auf die Füsse gefallen.


function getSonosCover($URI, $filename, $CoverSize)
{
/*=============================================
getSonosCover - Martin Heinzel - 19.11.2010
Version: 1.0

Beschreibung:
Mit dieser Funktion wird ein Cover mit Hilfe der von Sonos gelieferten URI
geladen und normiert auf jpg mit der in $CoverSize angegebenen Größe.
Das Cover wird dann unter "$filename" abgelegt.


Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

//--------------------------- Main ----------------------------

//Wenn die URI leer ist wird ein leeres Cover erzeugt
if ($URI == "")
{
	$im 				= ImageCreate($CoverSize, $CoverSize);
	$back_color 	= ImageColorAllocate($im, 200, 255, 255);
	$black 			= ImageColorAllocate($im, 0  , 0  , 0  );
	$end_xy        = $CoverSize -10;
	ImageRectangle($im, 10, 10, $end_xy, $end_xy, $black);
	ImageString($im, 3, 20, 80, "kein Cover verfügbar", $black);
	Header('Content-Type: image/jpeg');
	ImageJPEG($im, $filename);
	return;
}

// Zwischenspeicher für das Cover "png"
$Cover_Stack_png = IPS_GetKernelDir()."\\media\\Cover_Stack.png";

// Wenn die Datei schon vorhanden ist dann löschen
if(file_exists($Cover_Stack_png))
{
	unlink  ($Cover_Stack_png);
}

// Zwischenspeicher für das Cover "jpg"
$Cover_Stack_jpg = IPS_GetKernelDir()."\\media\\Cover_Stack.jpg";

// Wenn die Datei schon vorhanden ist dann löschen
if(file_exists($Cover_Stack_jpg))
{
	unlink  ($Cover_Stack_jpg);
}

// Auslösen der Extension "png" oder "jpg"
$ImageEx = substr ($URI, -3 );

// Hat die URI einen Dateinamen muss die Adresse zerlegt werden
// sonst nicht
if ($ImageEx == "png" or $ImageEx == "jpg")
{
	// Bei der URI des Albumcovers wird die Adresse des Players mitgesendet.
	// das Trennzeichen für die Playeradresse und die Coveradresse ist ":1400"
	$CoverURI_arr = explode(":1400", $URI);
	// Die Adresse des Covers ist im zweiten Arrayelement also "1"
	$remoteImage = $CoverURI_arr[1];
	// zusammenstellen des lokalen Dateinamens
	$localImage = IPS_GetKernelDir()."\\media\\Cover_Stack.".$ImageEx;
}
else
{
	$remoteImage = $URI;
	// zusammenstellen des lokalen Dateinamens
	$localImage = $Cover_Stack_jpg;
}

// Bild Downloaden
$content = @file_get_contents($remoteImage);
if((strpos($http_response_header[0], "200") === false))
{
	 return;
}
file_put_contents( $localImage, $content );

// Informationen des geladenen Covers lesen
$picinfos=getimagesize($localImage);

// Einlesen des Covers als Image
if($ImageEx == "png")
{
	$oldpic = ImageCreateFromPNG($localImage);
}
else
{
	$oldpic = ImageCreateFromJPEG($localImage);
}

// Wenn das Cover bereits die passende Grösse hat -> kein Resize
if ($picinfos[0] <> $CoverSize)
{

	// Erzeuge ein neues Image von 174 x 174
	$newpic=imagecreatetruecolor($CoverSize, $CoverSize);

	// Resize das Image
	ImageCopyResized($newpic,$oldpic,0,0,0,0,$CoverSize,$CoverSize,$picinfos[0],$picinfos[1]);

	// Und ablegen
	ImageJPEG($newpic, $filename);
}
else
{
	// Und ablegen
	ImageJPEG($oldpic, $filename);
}

//----------------------- Main ENDE ----------------------------

}

?>

Hallo,

das hat auch nie jemand behauptet.
Allerdings gehört das für mich zu dem Thema „detaillierte ‚now Playing‘ Informationen“, das ich ja auf meiner ToDo liste habe.

Gruß,
Thorsten

Hallo Thorsten,

gehört zu Deinem „Gruppenansatz“ auch, dass es möglich ist „Pause/Play“ an EINEN Teilnehmer einer Gruppe zu triggern und anstatt einer Fehlermeldung reagiert die gesamte Gruppe?

So funktioniert es ja in der Sonos App.

Meine Skripte für das Badezimmer z.B. funktionieren nicht, wenn jemand klammheimlich über die App das Schlafzimmer hinzugefügt hat, bzw. ich müsste die Skripte sehr umfangreich erweitern; z.B. durch Abfrage einer Gruppenzugehörigkeit vor jedem Befehl. Ist recht komplex für ein einfaches „Play/Pause“.

Hallo,

wie luistig.
Genau darüber habe ich mir gestern Gedanken gemacht.
Bisher war es so, dass ich darauf nicht so richtig reagiert habe.
Ich habe aber gerade das Gruppenverhalten komplett überarbeitet (man muss jetzt keinen Koordinator mehr bestimmen, das geht jezt dynamisch) und bin über diese Ungenauigkeit gestolpert.
Was jetzt schon drin ist:
Wenn man auf einem Gruppenmember eine Audioquelle setzt (Radio, Playlist, Analoger Eingang, …) dann wird der Player automatisch aus der Gruppe genommen.

Ich denke ich würde auch dazu tendieren, so etwas wie Play, Pause, Stop, Next und Previous auf den Gruppenkoordinator weiterzuleiten.
Unsicher bin ich mir bei beim Sleeptimer… Konsequent wäre es auch diesen auf die Gruppe umzulenken…

Gruß,
Thorsten

PS: Das Update mit dem überarbeitet Gruppenverhalten läuft derzeit erst auf meinem Entwicklungs-IPS. Ich muss vor dem Veröffentlichen noch ein wenig testen.

Prima, dieses Praxisproblem ist mir gleich in den ersten 24 stunden aufgefallen.

Ich denke das Play, Pause, Stop, Radio, Mute und Volume +/- auch die mit Abstand am häufigsten verwendeten Befehle deines (…ganz tollen!) Moduls sind und dementsprechend sauber und sinnvoll laufen sollten.

Die sinnigste und nativ-SONOS deutlich überlegene Funktion ist bei mir der auf einen Taster gepackte Play/Pause Switch, welcher erkennt ob überhaupt noch was in der Liste ist (Input/Radio/Playlist). Sollte das nicht der Fall sein, wird automatisch der Radiosender aktiviert und der lässt sich per langem Druck verändern.

Der Play/Pause Button auf dem Play:1 lässt einen da leider immer ziemlich im Regen stehen, wenn die Liste leer ist.

Inwiefern es mit dem Timer notwenig, sinnig ist… gute frage. Ich denke aber das alles was an einen einzelnen Teilnehmer gesendet wird, grundsätzlich auf die Gruppe übertragen werden sollte. Wenn jemand das nicht wünscht, kann er sie ja vorher aufspalten.
Nur keine Reaktion bzw. eine Fehlermeldung ist die unangenehmste Variante, meine ich.

Hallo zusammen,

ich bekomm beim Versuch das Modul upzudaten folgenden Fehler:

„Kann Repository nicht aktualisieren, wenn lokale Änderungen vorgenommen wurden.“

Hab in der Suche nix gefunden.

Ist das ein Problem des SonosModuls oder allg. von Modulen? Dann bitte verschieben.

Komm ich um eine neuinstallation rum?

Du hast im Quellcode des Moduls geändert, du kannst das Modul einfach löschen und neu installieren.
Die Instanzen bleiben erhalten.

Hallo,

Zeit, dass das Update wieder funktioniert, denn hier kommt ein Großes:
SymconSonos/CHANGELOG.md at master · tkugelberg/SymconSonos · GitHub

Ich habe mal angefangen ein Changelog zu schreiben, damit ihr seht, was ich so alles gemacht habe.

Kurzum: Ich habe das Gruppenhandling komplett umgebaut.

Schaut es euch mal an, ich finde es gut so.

Falls etwas nicht geht, lasst es mich zügig wissen. Am besten mit genauer Beschreibung des Fehlers :wink:

Gruß,
Thorsten