SonosBY (Sonos // Gruppen erstellen, Gruppen auflösen, Text to Speech, ...)

Hallo,

  • im BUG-Tracker wird leider nur der Ladekringel angezeigt.
  • Unter WSE2012 kann Steffi ausgewählt und getestet werden (sapi bereits ausgetauscht)
  • ???

Gruß Proxima

Schalte mal einen Deiner Ad-Blocker aus (z.B. uBlock) :wink:

Beste Grüße
/Jens

Hallo Bayaro,

zuerst mal Danke für Dein Skript. Mich hat auch irrtümlich das Update auf 6.0 beim Zufügen einer neuen Play 1 erwischt, und jetzt klappts nicht mehr mit dem IPSSonos Modul, möchte daher auf Dein Skript umstellen, aber irgendwie fehlt mir mal der Plan. Wie spiele ich mit deinem Tool eine Radiostation oder eine Playlist zuerst nur mal auf 1 Player ab ? Wie löst Du das, da doch auch via IPSView deine Radios und Playlists abspielst ? Sehe ich den Wald vor lauter Bäumen nicht ?

Danke für einen kurzen Fingerzeig in die richtige Richtung.
Gruß
hoep

Hi!

Für Radio/Playlist im IPS/IPSView habe ich bisher IPSSonos verwendet. Da das leider nicht mehr möglich ist, werde ich die Funktion demnächst bei mir einbauen, bin schon dran :wink:

Mein SonosBY wird zwar nicht so werden wie IPSSonos, aber zumindest kann man Sprachausgaben über Gruppen realisieren, Play, Stop, … und bald auch einen Radiosender/Playlist abspielen lassen.

Die Visualisierung muss sich zwar jeder selbst bauen und auch andere nette Features aus IPSSonos sind nicht enthalten, aber mir reicht das dann aus und vmtl. können die meisten damit dann gut zurecht kommen :slight_smile:

Wenn es ein Update gibt bzgl. Radio/Playlist, werdet ihr es hier erfahren. Ich bin schon an der Umsetzung, ist aber etwas komplizierter als die anderen bisher verbauten Funktionen…

Grüße,
Chris

HI Bayaro,

danke für die Rückmeldung. Ich habe IPSSonos wieder zum Laufen gebracht. Die Soaps scheinen alle unverändert, nur die Antwort der Sonos-Boxen scheint sich minimal im Aufbau geändert zu haben, so dass die Zeile

return $array[count($array) - 1];

im Modul PHPSonos.inc.php in der Funktion sendPacket ins Leere läuft.

	private function sendPacket( $content )
	{
		$fp = fsockopen($this->address, 1400 /* Port */, $errno, $errstr, 10);
		if (!$fp)
		    throw new Exception("Error opening socket: ".$errstr." (".$errno.")");

		fputs ($fp, $content);
		$ret = "";
		while (!feof($fp)) {
			$ret.= fgetss($fp,128); // filters xml answer
		}
		fclose($fp);

		if(strpos($ret, "200 OK") === false)
   	throw new Exception("Error sending command: ".$ret);
// TAG_DEBUG_DEEP sendpacketdebug
		// echo "sendPacketDebug: "; //DEBUG

		$array = preg_split("/
/", $ret);

		return $array[count($array) - 1];
	}

einfach die letzte Zeile durch

return $ret;

ersetzen und schon läufts bei mir wieder. Probleme habe ich noch keine festgestellt, aber wie immer ist Vorsicht am Mann. Ich hatte noch keine Zeit für ein tieferes debug.

Beste Grüße
hoep

@hoep

Habe mal Deine Änderungen gemacht - habe nun folgenden Status:

Playlist Sync geht nun ohne Fehler
Radio Station Sync bringt Fehler - Failed to Parse QName - Line 2121 in PHPSonosInc

Playlist abspielen bringt einen Fehler - Uncaught Exception - Server Close
Einschalten, Ausschalten usw. funktioniert.

Hast Du eine Idee?

Danke und Grüsse,
MaLu

Hallo MaLu,

um nicht Bayaros thread zu kapern, schlage ich vor, wir führen die Diskussion hier weiter.
Grüße
hoep

Hallo Bayaro,

ich teste gerade Dein script. Wenn Ich eine Gruppe aus einer Auswahl von Sonos-Playern mit

SonosBY_GruppeErstellen_Auswahl("Lesezimmer,Wohnzimmer,Kueche");

erstelle klappt das wie gewünscht. Wenn ich allerdings dann versuche die Gruppe aufzulösen mit

SonosBY_GruppeAufloesen();

läuft das script in ein timeout mit:

Fatal error: Maximum execution time of 90 seconds exceeded in [Program\IPSLibrary\app\modules\IPSSonos\SonosBY.inc.php] on line 184
Abort Processing during Fatal-Error: Maximum execution time of 90 seconds exceeded
Error in Script C:\IP-Symcon\scripts\SonosBY.inc.php on Line 184

Wie löse ich eine Gruppe mit einer Auswahl von Playern richtig auf ?
Gruß
hoep

Abend!

Ich hab da so einen Verdacht was du „falsch“ machst… Aber beschreib doch bitte mal genauer was du machst.

Im Normalfall (für Sprachausgabe) braucht man keine Gruppen erstellen oder auflösen, weil das automatisch innerhalb der Funktionen:

SonosBY_TTS_Alle($Text) 
SonosBY_TTS_Auswahl($RaumlisteDerPlayer, $Text)
SonosBY_DateiAbspielen_Alle($Dateiname)
SonosBY_DateiAbspielen_Auswahl($Raumliste, $Dateiname) 

…selbst erledigt wird.

Nutzt du diese Funktion „GruppeAufloesen“ alleine, ohne vorher eine Sprachausgabe zu machen und du hast Sonos Version 5.5 oder höher, dann endet das im „Chaos“. Weil dann holt sich das Skript die Track-Dauer vom letzten Track den du auf dem Master-Sonos-Player abgespielt hast und wartet genau so lange… Hast du Sonos Version 5.4 oder kleiner, dann wird nur geschaut, ob gerade etwas abgespielt wird oder nicht und löst nach dem Abspielen der Sprachausgabe die Gruppe korrekt wieder auf.

Wirst du sehen, wenn du z.B. einfach mal ein „SonosBY_TTS_Alle(„Ich bin ein Test“);“ machst. Da wird das Gruppe erstellen und auflösen funktionieren (kann man gut in der Sonos-Controller Software am Computer beobachten.

Falls noch Fragen offen sind, beschreib doch bitte mal genauer was du anstellen möchtest, dann kann ich evtl. noch entsprechend etwas umbauen oder noch eine passende Funktion für dich einbauen (z.B. GruppenAufloesen_Sofort).

Grüße,
Chris

Hallo Bayaro,

ich habe tatsächlich nur getestet was ich beschrieben habe. Zuerst mit einem Skript eine selektive Gruppe erstellt.

Läuft wunderbar. Alle Player in der Gruppe spielen die Musik des Masters. Dann ein Skript, dass einfach nur die Gruppe wieder auflöst. (Ohne Textansage o.ä.). Nur als Test für IPSView um Gruppe zu erstellen und Gruppe wieder aufzulösen (wie in der Sonos-App). Dann ende ich im Nirvana. Und ja, ich habe leider schon die 6.0 im System (by Accident).
Gruß
hoep

Hi Bayaro,
Danke für den Hinweis. Mit dem klappt auch was ich umsetzen möchte.
Gruß
Hoep

Freut mich :slight_smile:

Ich hab heut auch ein wenig an SonosBY v1.7 gearbeitet und die ein oder andere praktische neue Funktion eingebaut :slight_smile: Aber ist noch etwas Arbeit, bis ich die veröffentlichen kann mit Radio- und Playlist-Features.

Grüße,
Chris

SonosBY 1.7 online

>> NEU # SonosBY_PlayPlaylistByName_Auswahl($Raumliste, $PlaylistName)
>> NEU # SonosBY_PlayPlaylistByName_Alle($PlaylistName)
>> NEU # SonosBY_PlayRadiostationByName_Auswahl($Raumliste, $RadiostationName)
>> NEU # SonosBY_PlayRadiostationByID_Auswahl($Raumliste, $RadiostationID)
>> NEU # SonosBY_PlayRadiostationByName_Alle($RadiostationName)
>> NEU # SonosBY_PlayRadiostationByID_Alle($RadiostationID)
>> NEU # SonosBY_SetAVTransportURI($SonosGroupAR_NrDesPlayer, $URI)
>> NEU # SonosBY_AddURItoQueue($SonosGroupAR_NrDesPlayer, $URI)
>> NEU # SonosBY_GruppeAufloesen_Erzwingen()
>> NEU # SonosBY_VolumeLauter($Raumname, $LauterUmWert)
>> NEU # SonosBY_VolumeLeiser($Raumname, $LeiserUmWert)
>> NEU # SonosBY_SetPlayMode($Raumname, $PlayMode)
>> NEU # SonosBY_Stop_Playing_Alle()
>> NEU # SonosBY_BrowsePL()
>> NEU # SonosBY_PlaylistLeeren($SonosGroupAR_NrDesPlayer)

Grüße,
Chris

Hallo Bayaro,

Ich habe dein Script für meine 4 Sonos 5 im Einsatz mit der aktuellen Firmware 6.0
Nachdem ich eine Sprchnachricht wiedergebe auf allen Sonos5 wird die Gruppe auch wieder aufgelöst nur nicht das Seteropaar.

Meine Frage ist habe ich die Möglichkeit etwas an dem Script zu ändern damit das funktioniert.

hat das vielleicht was mit der RINCON zu tun das die SOnos bei einem Stereopaar eine andere bekommt ?

Gruß

Stephan

Hi Stephan!

Mit einem Stereopaar hab ich noch nie getestet…

Nur damit ich dich richtig verstehe, du hast 4 x Sonos Play:5. Davon sind 2 als ein Stereopaar zusammen.
Also machst du das TTS nur an 3 „Räume“ und abgespielt wird auf 4 Sonos Boxen? Oder wie sieht das aus?

Beschreib das bitte etwas genauer, dann kann ich es mal versuchen nachzustellen.

Grüße,
Chris

Hallo Chris,

Im Schlafzimmer ist der Master und beim TTS werden alle 4 Stück Play5 zu einer Gruppe zusangefasst.

Die zwei Stereo im Wohnzimmer werden in der Sonos App nur als ein Play5 dargestellt.

Nachdem das TTs abgespielt wird werden wird vom Master lediglich die Play5 aus der Küche vom Master getrennt.

löse ich das Stereo paar auf funktioniert es wunderbar.

es muss also am Stereopaar liegen.

Gruß

Stephan

Hallo zusammen

Ich habe die SonosBY Version 1.7 installiert und benutze die Methode SonosBY_TTS_Auswahl() mit Google TTS.
Nun erhalte ich immer folgende Fehlermeldung:

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\SonosBY.ips.php on line 1044

Dies betrifft den Returnwert folgender Funktion:

function XMLFilter($Var,$SuchString) {
preg_match(’/<’.$SuchString.’>(.+)</’.$SuchString.’>/’,$Var,$result);
return $result[1];
}

Was geht du schief?

@Stephan: Du hast eine Play:5 im Schlafzimmer, eine in der Küche und 2 im Wohnzimmer?
Und hast du 3 oder alle 4 in die Config eingetragen? Ich könnte mir vorstellen, dass man nur eine vom Stereopaar ansprechen darf bei den Gruppen. Jemand hatte hier glaub ich mal so einen Fall mit einer Playbar… Aber ich versuch das gerne mal nachzustellen und sag dir dann Bescheid.

@MyHomeAT2012: Poste mal bitte genau deinen Aufruf. Also „SonosBY…“. Ich denke da in er Klammer hast du entweder einen Raum eingetragen den es nicht gibt oder irgendwie sowas?!

Grüße,
Chris

Hallo

Mein Aufruf ist wie folgt:

SonosBY_TTS_Auswahl(„Kitchen“,„Bitte Türe öffnen,“);

Freundliche Grüsse

Hi!

Hast du die Freigabe erstellt für Sonos und auch in deine Sonos-Bibliothek eingebunden? Kannst du vom Sonos auf die Bibliothek zugreifen und etwas abspielen? Liegt in dem Verzeichnis das du in der Konfiguration eingetragen eine MP3 Datei und kannst du diese am Computer abspielen?

Grüße,
Chris