br_sonos

Hi Sonos-Freaks,

vielleicht hab ichs auch überlesen: ich kann in der Sonos-Klasse keine Befehle finden um eine definierte Zone anzusteuern (Start, Stop, Radio-Stream, Volume etc). Hat jemand ein bischen Code für mich?

Hallo Raketenschnecke,

falls ich dich richtig verstanden habe, und mein Wissen ausreicht, kann man einzelne Zonen nur über die IP ansprechen.

Ich mach das so:

z.B. die Steuerung (Start, Stop, Pause, Next, Previous)

Ich habe eine Integer Variable mit 5 assoziationen, sprich:
0 = previous Titel
1 = start
2 = pause
3 = stop
4 = next Titel

dazu ein „toggle“ wie folgt:

if($IPS_SENDER == "WebFront")
{
    SetValue($IPS_VARIABLE, $IPS_VALUE);
}

switch($IPS_VALUE)
{
case 0: IPS_Runscript(59866 /*[Sonos\stüberl\Steuerung\Steuerung\play sonos\prev]*/);
break;
case 1: IPS_Runscript(53389 /*[Sonos\stüberl\Steuerung\Steuerung\play sonos\play]*/);
break;
case 2: IPS_Runscript(42708 /*[Sonos\stüberl\Steuerung\Steuerung\play sonos\pause]*/);
break;
case 3: IPS_Runscript(55289 /*[Sonos\stüberl\Steuerung\Steuerung\play sonos\stop]*/);
break;
case 4: IPS_Runscript(45247 /*[Sonos\stüberl\Steuerung\Steuerung\play sonos
ext]*/);
break;
}

Die einzelnen Skripte die dann ausgeführt werden sind dann die entsprechenden Steuerbefehle (am Beispiel „play“):


include("PHPSonos.inc.php");

$sonosip = GetValue(53118 /*[Sonos\Player Übersicht\Stüberl\ip stueberl]*/);
$sonos = new PHPSonos($sonosip); //Sonos ZP IPAdresse
$id_ausleseskript = 40866 /*[Sonos\stüberl\Skripte\sonos auslesen artist status position\]*/;

$sonos->Play();
IPS_SetEventCyclic($id_ausleseskript, 2, 1, 0, 0, 1, 5); //Auslesezeit 5s

Ich hab für die „Gesamtinfos“ meiner Sonos-Player eine Kategorie. In dieser hab ich für jeden Player die IP, RINCON, Name etc als Variable gespeichert. Bei dem oberen Skript („Play“) hole ich mir die IP des entsprechenden Players. Für die weiteren Skripte, die ich für einen Player benötige, kopier ich immer nur den Kopf, mit dem Include-Befehl, dem $sonosip und dem $sonos = new Sonos…

Die Zeile mit $id-ausleseskript brauche ich, da ich nur wenn ein Player läuft eine zyklische 5s Abfrage am Player hab. Wenn der Status „stop“ ist, dann reichen mir zyklisch 5min (falls sich etwas ändert).

Ich hoffe ich hab deine Frage beantworten können, sonst einfach nochmal fragen.

greets iamking

Hallo zusammen,

ich hab auch eine Frage.

Ich hab nun die Funktion „GetSonosPlaylist“ ausprobiert. Ich kann auch alle Playlists auslesen und in eine Integervariable als Assoziation schreiben.

In „Eigene Aktion“ der Variable habe ich einen Toggle.

ABER:

Wie heißt der Befehl um die Playlist in den Sonos schreiben zu lassen?
Ich finde den einfach nicht.

Ich habs schon mit diversen Trial-and-Errors mit folgendem Befehl versucht:

$sonos->SetQueue("x-rincon-queue:RINCON_".GetValue(19537 /*[Sonos\Player Übersicht\Stüberl\rincon stueberl]*/)."#0");

Ich habe dabei ab der Stelle ."#0" die #0 durch die id aus der GetSonosPlaylist ersetzt usw. Es kommt aber immer ein Fehler.

Ich habe alle 4 Infos aus der GetSonosPlaylist [id], [title], [sonos] und [file] in vielen Weisen versucht, aber auch hier die Fehlermeldung

Danke im Voraus

EDIT:

Ich hab die Lösung nun gefunden. Es geht nicht mit einem einzelnen Befehl. Es ist eine Kombi aus mehreren Befehlen notwendig:


$sonos->ClearQueue();
$sonos->AddToQueue("file:///jffs/settings/savedqueues.rsq#8");
$sonos->SetQueue("x-rincon-queue:RINCON_".GetValue(19537 /*[Sonos\Player Übersicht\Stüberl\rincon stueberl]*/)."#0");
$sonos->Play();

greets iamking

[b]

br_sonos WIKI http://www.ip-symcon.de/wiki/Br_sonos

[/b]

Hi,
schau dir mal den PHP Sonos Wiki Artiekl an PHPSonos, Abschnitt „IPS Steuerung mit Webfront Integration und Setup Skripten (PRE/Testversion)“.

Da ist auch ein Hinweis auf br_ips_1.5.7 PRE - in diesem Zip findest Du einen nicht mehr ganz taufrischen stand meiner Routinen zur Ansteuerung mehrerer Zonen inkl. Webfront und Setuproutinen.
Grüße, Benjamin

Hi Ihr,

danke Euch für die Antworten - ich komm nur momentan nicht dazu mich hier tiefer rein zu kieen. Hab aber zwischenzeitlich ein paar 5-Minuten-Mini-Scripte gebastelt, damit ein paar Sonos-Automatisierungen (Audio follows the User) hinbekommen und so wieder etwas mehr über das Sozialverhalten der possierlichen Boxen in der Gruppe gelernt. Ich schätze das ich ab nächster Woche wieder tiefer einsteigen kann und Euren Vorschlägen nachgehen kann.

Der ist gut. :D:D

Hallo Leute,
habe auch das Paket von bengie installiert und es funktioniert auch. Das einzige Problem, das ich habe, in meinem Webfront ist die INFO-Anzeige etwas verschoben und es werden keine Umlaute angezeigt.
Ich benutze WIN7 Pro 64 bit, Firefox 3.6.18. Im IE9 ist die Anzeige zwar nicht verschoben, jedoch die Umlaute werden auch nicht angezeigt.

Umlaute.PNG

Hi,
ich denke das Problem mit den Umlauten liegt an einer älteren phpsonos Klasse. Ich habe Dir mal meinen aktuellen Entwicklungsstand zusammengezippt. Du kannst ja mal testen, ob es damit besser klappt.

Die Installation läuft wie vorher beschrieben (http://www.ip-symcon.de/forum/f53/php-sonos-klasse-ansteuern-einzelner-player-7676/index6.html#post115249 oder auch wie unten im Wiki Artikel http://www.ip-symcon.de/wiki/PHPSonos) und danach noch die plus.png und minus.png in den Ordner „Ip-Symcon\webfront\user\icons\fixed“ kopieren.

Grüße, Benjamin

br_sonos.zip (36.6 KB)

minus.png

plus.png

Danke Benjamin,
vorab habe ich noch eine Frage.
Muss ich jetzt Alles vorher deinstallieren und löschen, oder kann ich einfach nur die alten Dateien mit den Neuen überschreiben?
Grüße
Jürgen

Hallo Jürgen,
versuche erstmal die Dateien nur zu überschreiben.

Da ich nur für mich entwickelt habe, hab ich nicht darauf geachtet welche Änderungen ggf. zu machen sind.

Wenn das nicht klappt noch mal die Variablen in den Zonen bis auf SONOS_IP löschen und das Zonesetup je Zone aufrufen. Nach Zonesetup immer auch br_sonos Setup nochmal aufrufen.

Grüße, Benjamin

„Audio follows the User“ aka „Follow me“ ist doch echt spannend! Poste gerne Deine Skriptschnippsel - wenn ich Zeit habe, baue ich Sie im Wiki-Artikel ein oder schaue ob oder wie die Klasse verbessert werden kann.

Grüße, Benjamin

das würde ich glatt machen. Ich mach mir aber hierzu schon seit Monaten Gedanken ob man sowas veröffentlichen kann. Ich bin derzeit der Meinung: nein. Nicht nur weil meine Scripte aktuell saumässig strukturiert sind, vielmehr glaube ich das eine solche Lösung viel zu individuelll ist. Die Herausforderung dabei ist das man in der Wohnung sehr viele Sensoren haben muß so daß das System sicher erkennen kann von wo nach wo sich der User bewegt. Da spielen bauliche Gegebenheiten eine ebenso wichtige Rolle (und die sind bei jeden anders). Nicht zuletzt funktioniert mein Ansatz nur bei Single-bewohnten Gehäusen (alles Andere kann ich derzeit nicht testen). Für das Licht hab ich eine ähnliche Lösung in der ganzen Wohnung und hab mich damit schon heftig qälen müssen.

Zusammengefasst hängt sowas sehr entscheidend von 3 Faktoren ab:

  1. den baulichen Gegebenheiten
  2. der Sensorik zur Bewegungserkennung
  3. von den Verhaltensweisen des Users

alle 3 Punkte sind hochgradig individuell.
Der Aufwand der hier investiert werden müsste um das zu adaptieren ist m.E. höher ist als das Ganze neu zu entwickeln.
Was ich vielleicht machen kann ist das Konzept dokumentieren und einstellen - so können Dritte vielleicht meine Erfahrungen nutzen und machen nicht jeden Fehler nochmal.

Hallo Benjamin,
habe jetzt die neuen Dateien eingespielt und Setup gemacht. Es hat sich jedoch an der Anzeige der Umlaute nichts verändert. Habe mal ein Screenshot der angezeigten Variable als ~HTMLBox und als ~TextBox angefügt.
Habe versuchsweise auch eine andere Variable mit dem Wert „Bittersüß“ (ohne „“) angelegt und Diese wird im Webfront richtig als „Bittersüß“ angezeigt.

Bei mir wird es in Textbox und Htmlbox richtig angezeigt. Ich habe auf Win7 32 und 64 jeweils mit neuestem Ie9 und Safari getestet. Auf dem Iphone und Pad klappt es auch.

Welche IPS Build hast Du denn genau? Hast Du an den Webfrontseiten händisch etwas angepasst oder ist das alles Standard?

Irgendwie liegt das Problem wohl im Bereich UTF-8. In IPS (Objektbaum -> Wert) siehe ich die Sonderzeichen übrigens auch mit Problemen, aber im Browser halt immer korrekt. Wo genau das Problem liegt - aktuell hab ich keine konkrete Idee. :confused:

Funktionieren eigentlich die Routinen zum Zonehandling? Auf die Zone mit dem Plus zum hinzufügen und Minus zum entfernen klicken korrekt bei Dir?

Grüße, Benjamin

Hi bengie,

seit tagen liegt das aktuelle zip-Archiv auf meinem Server und will installiert werden. Nun hab ich vor ein paar Tagen ins Archiv reingeschaut - und vor Schreck gleich wieder zu gemacht: da sind ja megamässig viele Scripte drin! Gehören die wirklich alle zur Sonos-Funktionalität (dem Namen nach nicht?!)? Heute hab ich endlich die Installationsanleitung in Beitrag 59 gefunden.

Momentan würde ich nur die Scripte ins IPS\scripts-Verzeichnis legen die ein „Sonos“ im Namen haben. passt das so?

In den Sonos Skripten wird functions.inc.php eingebunden über welche ich einige kleiner Helfer-Routinen einbinde - Ich denke einfach so würde das nicht funktionieren.

Du müsstest dann die Sonos Skripte auf die eigentlichen Includes anpassen oder in der functions.inc.php für Sonos ausmissten (so könnte es mit anpasster Datei gehen; hab ich aber nicht probiert):



require ("br_timeanddate.inc.php");
require ("br_obj_handling.inc.php");
require ("br_sonos.inc.php");

?>

hi bengie,

ich habs geschafft! das Grundgerüst für mein Sonos-Rudel ist im IPS drin. Ich hab redcht schnell gemerkt das noch eine Reihe Sripte benötigt werden und aufgegeben: ich hab alle Scripte aus dem Achriv übernommen (schön ist das nicht: was soll ich mit fs20-Zeugs? :confused:)
Die Installation war etwas holprig: die br_sonos_zonesetup-template hab ich in jeden Raum (resp. Kategorie/Raum -> das solltest Du in der Installation ergänzen) einmal ausgeführt, hat ne Menge Warnungen produziert, die angelegten Variablen wurden aber nicht mit aktuellem Contend gefüllt. Erst als ich die br_sonos_zonesetup-template in einem Raum nochmal ausgeführt habe klappte es dann: alle Player sind ansprechbar und steuerbar froi

Jetzt werd ich das Ganze mal in Ruhe studieren und verstehen was Ihr da schönes gebastelt habt;)

Danke für die Scripts!

PS: sachmal, wär das nicht mal ein Ansatz alle benötigten Scripte in ein einziges Installer-Script zu packen -> ist für Aussenstehende wesentlich einfacher zu Installieren und senkt deutlich die Hemmungen und Installations-Streß)? Evtl. würde ich mich dazu anbieten, ich habs in meiner DENON-Anbindung schon realisiert

:smiley: :cool: Herzlichen Glückwunsch!

Ich habe br_sonos so nie veröffentlicht für die Allgemeinheit, sondern eher am Rande erwähnt oder ein Zip in einen Forumsbeitrag gestellt, weil ich glaube, es ist so noch nicht optimal.

Die Installation war etwas holprig: die br_sonos_zonesetup-template hab ich in jeden Raum (resp. Kategorie/Raum -> das solltest Du in der Installation ergänzen) einmal ausgeführt, hat ne Menge Warnungen produziert, die angelegten Variablen wurden aber nicht mit aktuellem Contend gefüllt. Erst als ich die br_sonos_zonesetup-template in einem Raum nochmal ausgeführt habe klappte es dann: alle Player sind ansprechbar und steuerbar froi

Nach ca. 2 Minuten (nach letztem Zonesetup und danach folgendem Sonos_Setup wären Deine Variablen vermutlich mit aktuellem Content gefüllt worden, denke ich. Wenn das nicht so ist oder war, ist es ein Fehler.

Jetzt werd ich das Ganze mal in Ruhe studieren und verstehen was Ihr da schönes gebastelt habt;)

Danke für die Scripts!

PS: sachmal, wär das nicht mal ein Ansatz alle benötigten Scripte in ein einziges Installer-Script zu packen -> ist für Aussenstehende wesentlich einfacher zu Installieren und senkt deutlich die Hemmungen und Installations-Streß)? Evtl. würde ich mich dazu anbieten, ich habs in meiner DENON-Anbindung schon realisiert

Soweit ich das beurteilen kann ist für Sonos ohne die Implementierung des Protokolls zum Auffinden der Geräte, keine Implementierung eines vollautomatischen Setups möglich (aber IPSInstaller und Logger unterstütze ich und das steht weiter auf meiner pers. Liste). Ich finde es garnicht schlecht - wie es ist. Wenn Du ein neues Gerät hast, kannst Du ein Zonesetup ausführen und danach das Sonossetup - dann ist es eingebunden. Man kann so auch in einzelnen Zonen Testen, ohne gleich alles über den haufen werfen zu müssen?!

Grüße, Benjamin

hab ich mir gedacht, ist aber für Aussenstehende wie mich machbar :wink:

ich denke es war ein Fehler: hab 5 Minuten rumgesucht (ohne Erfolg) und dann verzweifelt das Script nochmal ausgeführt. Es kamen auch Warnungen - aber andere. Und schwupps- war der Content drin und wird auch aktualisiert

STopp mal, ich glaube wir redne aneinander vorbei: Deine Sripte sind genial, die sollen da bleiben! was ich meine ist eine Installationsroutne für alle deine scripte: man packt die Scripte in ein Installerscript - was sich der Anwender hochlädt, ausführt und welches Deine Scripte, die Ordnerstruktur und was weis ich noch alles am richtigen Fleck installiert. Ich hab auch schon die umgekehrte Lösung gebaut: ein Installerscript-Generator. Dieses Script sammelt alle relevanten Scripte ein, packt diese in ein Installerscript und Versioniert das Ganze. Ungemein bequem, wenn man ständig entwickelt.
Bur das meine beiden Tools noch sehr indidviduell sind - das müsste mal standardisiert werden, dann könnte das jeder nutzen.

sorry, aber jetzt fangen ein paar Probleme an: mein IPS-Logger bombardiert mich mit folgenden Fehlermeldungen:


IPS-Err-PHP  2011-08-02 21:38:00.861  Warning: Division by zero
   Error in Script C:\IP-Symcon\scripts\br_sonos.inc.php on Line 302
   10 in IPSLogger.ips.php (call IPSLogger_Out)
   14 in IPSLogger_PhpErrorHandler.ips.php (call IPSLogger_Err)
  302 in br_sonos.inc.php (call IPSLogger_PhpErrorHandler)
  115 in br_sonos.inc.php (call br_sonos_read)
   21 in br_sonos_read.php (call br_sonos_read_all) IPS-Err-PHP  2011-08-02 21:38:00.952  Warning: filemtime() [<a href='function.filemtime'>function.filemtime</a>]: stat failed for C:\IP-Symcon\\webfront\user\Album_cover_Bad.jpg
   Error in Script C:\IP-Symcon\scripts\br_sonos.inc.php on Line 342
   10 in IPSLogger.ips.php (call IPSLogger_Out)
   14 in IPSLogger_PhpErrorHandler.ips.php (call IPSLogger_Err)
      in IPSLogger_PhpErrorHandler
  342 in br_sonos.inc.php (call filemtime)
  115 in br_sonos.inc.php (call br_sonos_read)


haste 'n Quickfix für mich?