Sonos Modul

Hallo Thorsten,

besten Dank! Es macht wirklich Spaß, auf dein Modul umzustellen.:loveips:
Dabei sind mir noch ein paar Dinge aufgefallen. Darf ich sie dir vorstellen?

  • [li]wenn man eine Radiostation ausgewählt hat und anschließend (aus Versehen) auf Next oder Previous klickt, dann kommt es zu einer Fehlermeldung.
    [/li]Lässt sich auch reproduzieren mit

    php SNS_SetRadio(28199, 'WDR2 BI'); SNS_Next(28199);

    [li]Ich habe im Wohnzimmer einen CONNECT an einem AV-Receiver angeschlossen. Bei diesem ist die Raumeinstellung „Ausgangspegel“ auf „Festgelegt“ (d.h. 100%) eingestellt. Und somit kommt es bei ihm zu einem Fehler wenn man (aus Versehen ;)) versucht, die Lautstärke zu ändern. [/li]Fatal error: Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 501 (UNKNOWN)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:525 Stack trace: #0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(498): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'SetVolume', Array) #1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(840): SonosAccess->SetVolume(100) #2 C:\IP-Symcon\scripts\__generated.inc.php(231): Sonos->SetVolume(100) #3 C:\IP-Symcon\scripts\Test Sonos.ips.php(99): SNS_SetVolume(28199, 100) #4 {main} thrown in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on line 525

    [li]ich würde mir noch gerne die Funktion RampToVolume aus dem PHPSonos Modul wünschen. Die benutze ich, um uns sanft wecken zu lassen:)
    [/li]
    [quote=„PHPSonos Doku“]
    RampToVolume($ramp_type, $volume)

    Function Parameters:
    string $ramp_type: Ramps Volume to $volume using the Method mentioned in $ramp_type as string:
    „SLEEP_TIMER_RAMP_TYPE“ - mutes and ups Volume per default within 17 seconds to desired Volume
    „ALARM_RAMP_TYPE“ - Switches audio off and slowly goes to volume
    „AUTOPLAY_RAMP_TYPE“ - very fast and smooth; Implemented from Sonos for the autoplay feature.

    string $volume: DesiredVolume
    [/quote]

Vielleicht hast du Lust und die Gelegenheit, Dinge davon zu übernehmen.

Viele Grüße

Burkhard

PS: die angesprochene Sprachausgabe über eine Gruppe fände ich auch ganz toll:)

Sprachausgabe von eigenen Texten ist auch gerade meine Baustelle. Bislang ohne wirkliche Erfolge

Hallo,

aber wo ist das Problem? Das ist doch ganz einfach.

  1. Text zusammenstellen, sollte jeder schaffen
  2. MP3 aus Text erzeugen.
    Dafür gibt es verschiedene Möglichkeiten. Eines der TTS Module, google, oder was auch immer
  3. die MP3 Datei dann per SNS_PlayFiles($InstanceID,array(„File1“, „File2“), $volumeChange); abspielen lassen.

Fertig.

Und in ein paar Tagen kann man das dann auch mit sich automatisch bildenden Gruppen machen :wink:

Wenn Du ein konkretes Problem hast, poste doch mal was Du wie ausführst, und was für einen Fehler das dann verursacht.

Gruß,
Thorsten

Moin Thorsten!

Hatte da grad so eine Idee, kann aber auch Mist sein, aber wollte es mal posten :slight_smile:

> Wie wäre es, wenn man Instanzen erstellen kann für „Durchsagegruppen“? Also z.B. eine Instanz mit allen Boxen und dort kann man per Funktion eine Sprachausgabe auslösen, oder dann noch eine Instanz mit den Boxen vom Schlafzimmer und Flur als Durchsagegruppe, … ?!
> Alternativ müssten man in den aktuellen Instanzen einen Property („Name“ oder sonstwas) verwenden und dann per Funktion „SNS_Durchsage(„Schlafzimmer,Flur“, „Die Waschmaschine ist fertig“, 40);“ (wobei 40 die Lautstärke wäre…evtl. sogar noch für jeden Player einzeln die Durchsage-Lautstärke übergeben?!)

Nur so als Idee am frühen Morgen gähn :slight_smile:

Danke und Grüße,
Chris

Hallo,

ja, so in die Richtung hatt ich auch schon gedacht.

Mein erster Gedanke war ein Flag (also an oder aus) ob die Instanz bei der Gruppendurchsage berücksichtigt werdfen soll. -> Dann hat man aber nur eine Gruppierung. :mad:

Mein zweiter Gedanke war das als Integer abzulegen -> dann habe ich zwar mehrere Gruppen, kann aber jede Box nur einer Gruppe zuordnen :mad:

Mein dritter Gedanke war, es als Integer anzugelen, diesen aber Binär zu interpretieren:
1 -> Gruppe 1
2 -> Gruppe 2
3 -> Gruppe 1+2
4 -> Gruppe 4
5 -> Gruppe 1 +4
6 -> Gruppe 2+ 4
7 -> Gruppe 1 + 2 + 4
-> Dann hätte ich alle Möglichkeiten, es versteht aber keiner mehr. :mad:

-> Ich glaube es wird darauf hinauslaufen:
SNS_PlayFilesGrouping(InstanzID, array(InstanzIDs), array(files),volume);
oder nach Deinem Hinweis mit den Lautstärken:
SNS_PlayFilesGrouping(InstanzID, array(array(InstanzID,Volume)), array(files));

Dann muss ich halt die InstazIDs und nicht die Namen mitgeben. Ich denke das ist zumutbar.

Gruß,
Thorsten

Moin!

Was spricht gegen diese Methode?

> Alternativ müssten man in den aktuellen Instanzen einen Property („Name“ oder sonstwas) verwenden und dann per Funktion „SNS_Durchsage(„Schlafzimmer,Flur“, „Die Waschmaschine ist fertig“, 40);“ (wobei 40 die Lautstärke wäre…evtl. sogar noch für jeden Player einzeln die Durchsage-Lautstärke übergeben?!)

Hab es grad nicht im Kopf, aber wenn noch kein Feld mit Namen in den Sonos-Instanzen vorhanden ist - einfach eingebaut. Und dann über die „Durchsage“-Funktion werden alle Instanzen mit deiner Sonos-Instanz-GUID aufgelistet und nach Property mit Raumnamen „gefiltert“ und dann schauen wo was abgespielt wird, merken, Gruppe erstellen, Durchsagen machen und danach den alten Zustand wiederherstellen.
Das dann mit einer Semaphore oder so schützen, damit nicht 2 oder mehr Skripte gleichzeitig eine Durchsage machen können. Ich mache das bei SonosBY über eine Semaphore deren Timeout durch die ermittelte Länge der Durchsage bestimmt wird.

Mit Instanz-IDs fände ich eher unschön und unpraktisch.

Grüße,
Chris

Diese Variante halte ich für die am einfachsten zu verstehende und flexibelste Variante. Auf den ersten Parameter könnte man dabei meiner Meinung nach verzichten, wenn man z.B. das erste Element von array(array(InstanzID,Volume)) als Coordinator nimmt. Dann wäre es noch einfacher:)

Gruß

Burkhard

Ja, mache ich bei mir auch so, erster Raum in der Liste (wenn mehrere eingetragen werden) ist immer auch der Gruppen-Master.

Grüße,
Chris

Fände ich ziemlich genial!!!

LG
Bruno

Hallo,

bekomme bei Aufruf von:

SNS_PlayFiles(35488 /*[Hardware\Sonos\Kochen]*/ , array(IVNTTS_saveMP3(39827 /*[Program\Ansagen\Ivona TTS\Ivona]*/,"Test 123")) , 40);    //Sprachausgabe

folgenden Fehler:


Fatal error:  Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:525
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(293): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Play', Array)
#1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(437): SonosAccess->Play()
#2 C:\IP-Symcon\scripts\__generated.inc.php(98): Sonos->PlayFiles(Array, 40)
#3 C:\IP-Symcon\scripts\52039.ips.php(25): SNS_PlayFiles(35488, Array, 40)
#4 {main}
  thrown in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on line 525
Abort Processing during Fatal-Error: Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:525
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(293): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Play', Array)
#1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(437): SonosAccess->Play()
#2 C:\IP-Symcon\scripts\__generated.inc.php(98): Sonos->PlayFiles(Array, 40)
#3 C:\IP-Symcon\scripts\52039.ips.php(25): SNS_PlayFiles(35488, Array, 40)
#4 {main}
  thrown
   Error in Script C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on Line 525

Was mache ich denn falsch ???

Ach ja, der Player spielt zum Zeitpunkt des Befehls nichts ab und den Fehler bekomme ich bei sämtlichen Playern.

Gruß Proxima

Hallo,

dass wir hier kein Skript, sondern ein Modul haben.

Es werden die Boxen als Instanz angelegt, und auch so angesprochen.
Natürlich könnte man den Namen der Instanz auslesen und darüber sich das zusammendengeln. Was verhindert aber. dass ein Name doppelt vergeben wird?
Instanz ID ist eindeutig.

Selbstverständlich ist es Dir freigestellt in Deinem Skript, in dem Du dann die Funktion aufrufst, Dir per IPS_GetName() den Namen zu holen und anhand dessen zu entscheiden welche ID Du nimmst.

Wie oben beschrieben, führt man eine Funktion eines Moduls auf die Instanz aus. Die Instanz ID ist immer der erste Parameter.

Gruß,
Thorsten

Hallo,

das hört sich irgendwie an, als wenn Die Datei nicht geladen werden kann.

Was gibt denn

var_dump(IVNTTS_saveMP3(39827 /*[Program\Ansagen\Ivona TTS\Ivona]*/,"Test 123"));

zurück?

Gruß,
Thorsten

Abend :slight_smile:

Irgendwie habe ich das Gefühl, dass du dich angegriffen fühlst…falls es so rüber gekommen ist, war 100% nicht meine Absicht! Ich will nur dir nur helfen und meine es nur gut!

Und quasi ist ein Modul auch ein Skript. Aber es geht hier auch nicht um mein Skript, war nur als Beispiel gedacht, wie man es umsetzen KÖNNTE und wie ich es halt umgesetzt habe.

Das mit den doppelten Raumnamen würde ich einfach daneben in die Form schreiben als Hinweis und noch in die Doku. Sollte es doch mal einer doppelt vergeben, könnte man sogar beim Klick auf „Übernehmen“ im Modul eine Prüfung machen > einfach bei allen Sonos-Modul GUID die Property auslesen und wenn schon vorhanden, dann Instanz-Status auf Fehler mit dem entsprechenden Fehler-Text.

Klar ist die Instanz-ID eindeutig…aber es ist einfacher/schöner, wenn man in der Funktion die Raumnamen eintippen kann und sich nicht die IDs raussuchen muss.

Beste Grüße,
Chris (der es nur gut meint :))

Hallo,

das Ergebnis ist:

string(65) "//192.168.2.11/BackUps/Ivona/f3957228139a2686632e206478ad1c9e.mp3"

Gruß Proxima

P.S: Übrigens tolle Arbeit die Du hier machst. Riesen Respekt !!!

Moin,

hmmm…
Und dieser Pfad ist auch erreichbar, ohne Benutzer und Passwort angeben zu müssen?

„ERROR_AV_UPNP_AVT_INVALID_TRANSITION“ bekommst Du normalerweise, wenn keine Audioquelle gewählt ist.

Du kannst mal parallel die Sonos APP öffnen, da sieht man (auch wenn vom IPS ausgeführt) auch manchmal Fehlermeldungen.

Gruß,
Thorsten

Tach,

Grundsätzlich bin ich mir dessen bewusst.
Evtl. lag meine Reaktion auch daran, dass ich genau solche Diskussionen („ach dann nemen wird anstelle des Alternative Key einfach den Namen und ersetzen darin dann …“) führen musste und für den Scheiß jetzt den Support an der Backe habe :mad:

Ja, aber wenn man mal ehrlich ist, sollte man das nicht so oft machen…
Ausserdem wird dann eher Copy&Paste gemacht, anstelle es einzutippen. Du glaubst garnicht wie oft ich prio SEHR HOCH Fehlermeldungen habe, bei denen der Benutzer es nur falsch/ungenau bedient!

Gruß,
Thorsten

Du bist zu Support nicht verpflichtet! Es ist dein Modul und du kannst es so machen wie du es für richtig empfindest.
Andere (mich eingeschlossen) können dir sagen was sie gut finden, was sie schlecht finden, was sie gerne an Funktionen hätten, …
Aber du MUSST darauf NICHT reagieren! Weder innerhalb einer Stunde noch innerhalb einer Woche!

Ich habe mir Anfangs auch total den Stress gemacht bei meinen Projekten und wollte es allen recht machen usw…bis es einfach zu viel war für mich und da hat bei mir ein umdenken angefangen. Man kann es nicht allen recht machen! NIEMALS! Es ist unser Hobby, also sollten wir das alles viel entspannter sehen!
Will jemand etwas anders als du es machst, dann soll er es doch einfach selbst machen! Kann er es nicht, hat er Pech und soll „auf gut deutsch“ einfach die Klappe halten und froh sein, dass er überhaupt was bekommt!

Einer ist zu doof das Modul richtig zu bedienen? Dann kannst du entweder IRGENDWANN darauf reagieren…oder gar nicht! Mach dir nicht so einen Stress! Es soll Spaß machen! Allen! Auch dir!

Willst du nicht, dass man dir in dein Projekt „rein redet“, dann sag das einfach und alles ist gut.

Also > peace :slight_smile:

Grüße,
Chris

Super das du schon daran arbeitest, Daumen hoch!
Freu mich schon aufs Ergebnis :slight_smile:
Weiter so!

Ivona funktioniert jetzt auch ohne Probleme, Danke dafür!
Deswegen, wie du schon sagtest, besser hier. :smiley:

Ich nutze das Modul jetzt schon länger, vorher war es nicht. Glaube erst nachdem ich den Pfad in Linux(RaspPi) geändert hatte?! Kann das sein? Oder erst nach dem ich IPS von einem Pi B+ auf einem Pi 2 umgezogen habe. Bin mir nicht mehr ganz sicher. Ansonsten muss ich einmal in den sauern Apfel beißen und das Modul neu installieren und in die ganzen Skripte ändern.

Was mir noch auffällt. Ab und zu geht es ohne Problem, wieso auch immer?! Heute Morgen (Wecker) ging es zB nicht.


<?
//Sonos
 IPS_RunScript(55485 /*[Sonos\Uhrzeit]*/);
 SNS_SetVolume(54533 /*[Sonos\Schlafzimmer]*/, 5);
 SNS_SetRadio(54533 /*[Sonos\Schlafzimmer]*/, "1LIVE");
 
//HUE
 HUE_SetValue(29268 /*[Räume\Schlafzimmer\Schlafzimmer Strip]*/, 'COLOR', 11911423);
 HUE_SetValue(29268 /*[Räume\Schlafzimmer\Schlafzimmer Strip]*/, 'BRIGHTNESS', 50);
 HUE_SetValue(36106 /*[Räume\Schlafzimmer\Schlafzimmer1]*/, 'COLOR', 11911423);
 HUE_SetValue(36106 /*[Räume\Schlafzimmer\Schlafzimmer1]*/, 'BRIGHTNESS', 50);
 
IPS_Sleep(300000);

 SNS_SetVolume(54533 /*[Sonos\Schlafzimmer]*/, 25);
 HUE_SetValue(29268 /*[Räume\Schlafzimmer\Schlafzimmer Strip]*/, 'BRIGHTNESS', 180);
 HUE_SetValue(36106 /*[Räume\Schlafzimmer\Schlafzimmer1]*/, 'BRIGHTNESS', 180);
 
IPS_Sleep(600000);

 IPS_RunScript(50944 /*[Jalousie\Alle Jalousien Hoch]*/);
 IPS_RunScript(19034 /*[Sonos\Guten Morgen Wetter]*/);
 HUE_SetValue(29268 /*[Räume\Schlafzimmer\Schlafzimmer Strip]*/, 'BRIGHTNESS', 254);
 HUE_SetValue(36106 /*[Räume\Schlafzimmer\Schlafzimmer1]*/, 'BRIGHTNESS', 254);
?>

$Uhrzeit = date("H:i");  // Stunde:Minute:Sekunde
$aktuelle_Temperatur = GetValueFloat(40886 /*[Wunderground\Temperatur]*/);
$bedingung = GetValueString(23549 /*[Wunderground\Wetterbedingung]*/);
$feutigkeit = GetValueInteger(37904 /*[Wunderground\Luftfeuchtigkeit]*/);
 SNS_PlayFiles(54533 /*[Sonos\Schlafzimmer]*/, Array(IVNTTS_saveMP3(57700 /*[Sonos\Ivona]*/,"Guten Morgen! Es ist: ".$Uhrzeit."Uhr. Das aktuelle Wetter in kurzer Zusammenfassung.
 Die aktuelle Temperatur beträgt: ".$aktuelle_Temperatur."Grad.
 Die Wetterbedinungen sind: ".$bedingung.".
 Die Luftfeuchtigkeit beträgt: ".$feutigkeit."Prozent")), 30);

27869 ist eine Sonos, ich habe keine Paare.

Hi Thorsten,

heute mal dazu gekommen, dein Modul zu testen, und ich habe gleich meine TS_LCN2Sonos und TS_Sonosalarm an dein Modul angepasst, Die Funktionen, die ich nutze mit einer Play3 und Play1 gehen perfekt. Da ich die Sonos auch mal ganz abschalte, kommt TS_LCN2Sonos bei mir zum tragen, damit mache ich dann z.B. den Autostart, Trigger für Sleeptimer und Übertragung der Texte auf ein LCN-GT Display.