Sonos Modul

Moin,

uiuiuiuiui, Windows… :smiley:

Also, ich vermute eher eine „Fehlconfiguration“ von IVONA:

Der Fehler tritt hier auf:


        foreach ($files as $key => $file) {
          $sonos->SetAVTransportURI("x-file-cifs:".$file);
          $sonos->Play();
          IPS_Sleep(500);
          while ($sonos->GetTransportInfo()==1){ IPS_Sleep(200);}
        }

und zwar beim „Play()“.

Die funktioniert nur, wenn die Datei in der Form „//hostname/path/to/file/file.mp3“ angegeben wird.

Kannst Du mal Stück für Stück schauen?

var_dump(IVNTTS_saveMP3(55186 /*[Ivona]*/,"Wau, wau!"));

das sollte etwas wie
string(69) „//ipsymcon.fritz.box/sonos/ivona/7c3c9c7b30952bc9378b0b91339c6830.mp3
als output kommen. Wenn das so nicht kommt, sondern etwas wie „C:\TEMP\7c3c9c7b30952bc9378b0b91339c6830.mp3“ ist der Fehler in der IVONA config.
Den Pfad vor der Datei (in meinem Beispiel „//ipsymcon.fritz.box/sonos/ivona/“) musst Du in dem Parameter „Access Path“ angeben.

  1. Falls das richtig ist, könnte es auch daran liegen, dass dieser Pfad nicht zugreifbar ist. Wichtig ist: Ohne Passwort von einem anderen Rechner aus per „Start“-> „Run“ (oder wie das auf Windows gerade heißt) zugreifbar.

  2. Falls die Anmeldung bei IVONA nicht fuktioniert hat, ist es keine MP3. Dann steht eine Text-Fehlermeldung in der Datei. --> Kann die Datei abgespielt werden?
    Wenn nicht, winfach mal mit dem Notepad öffnen.

Könntest Du dies mal überprüfen?

Danke,
Thosrten

Hi Thorsten,

vielen Dank. Bezog sich Deine Antwort eben auf meine Frage?

Ich bin jetzt etwas verwirrt, dass es an IVONA liegen soll, da es ja auf der Play1 tadellos funktioniert nur auf der ZP120 nicht.

herbertf

Hi,

Ja.

Das hatte ich überlesen :rolleyes:

Dann habe ich keine Ahnung.
Einen ZP120 habe ich nicht, und auch keine Ahnung worin sich dieser unterscheidet. Aber ein file vom SMB abzuspielen sollte gehen.

In der „http://<ip vom ZP120>:1400/xml/AVTransport1.xml“ gibt es eine Action „SetAVTransportURI“.

Bei mir sieht die so aus:


<action>
  <name>SetAVTransportURI</name>
  <argumentList>
    <argument>
      <name>InstanceID</name>
      <direction>in</direction>
      <relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
    </argument>
    <argument>
      <name>CurrentURI</name>
      <direction>in</direction>
      <relatedStateVariable>AVTransportURI</relatedStateVariable>
    </argument>
    <argument>
      <name>CurrentURIMetaData</name>
      <direction>in</direction>
      <relatedStateVariable>AVTransportURIMetaData</relatedStateVariable>
    </argument>
  </argumentList>
</action>

Das wird da verwendet. Wenn das genau so angeboten wird, habe ich keine Ahnung…

Gruß,
Thorsten

Hi!

Ich habe zwar nicht dein Sonos-Modul im Einsatz, aber bei mir (SonosBY) gibt es keinen Unterschied zwischen meinen Sonos Play:1 in allen Räumen und dem Sonos Connect im Wohnzimmer. Eventuell eine unterschiedliche Firmware/Software auf den Sonos Geräten (kann man z.B. mit der Windows Software in „Hilfe > Über mein Sonos System…“ überprüfen)?

Grüße,
Chris

Hi herbertf,
einen „HTTP/1.1 500 Internal Server Error“ bekomme ich reproduzierbar auch, wenn ich beim Stereopaar (2xPlay1) den falschen Lautsprecher adressiere. Könnte das bei Dir ähnlich sein?
Gruß
Peter

Hallo,

um Fehlerquellen besser identifizieren zu können, habe ich noch eine Exception eingebaut, wenn die/eine der abzuspielenden Datei(en) nicht auf einem Samba Share liegen.

Gruß,
Thorsten

Hallo ihr alle,

vielen Dank! Ich habe jetzt der muckenden Sonos einen Neustart gegönnt - jetzt geht es … :D:D

Darf ich noch dreiWünsche/Fragen haben?

  1. Wie kann ich denn analog folgenden Befehlen auf den Cinch umstellen?
$sonos = new PHPSonos($SonosIP);
$sonos->SetAVTransportURI("x-rincon-stream:RINCON_000E58A39A0E01400");  //auf Fernseherchinch Stream schalten
$sonos->Play();
  1. Neue Radiosender habe ich in die radio_stations.php eingetragen (unter modules - Ordner). Wie kann ich die „Favorite Radio Station“ ändern?
  2. In IPS-View werden die Steuervariablen (Play…), welche ja im Webfront vorhanden sind, nicht im IPS-View-Baum angezeigt. Was kann man tun?

Ciao
Herbertf

Hallo,

Zu 1), ist das die RINCON vom ZP120?

Zu 2) Du solltest die Dateien im modules Ordner nicht ändern. Schick mir mal die Radiosender, dann mach ich sie für alle verfügbar.

Es ist von mir gewollt, das die Liste immer größer wird…

Gruß,
Thorsten

Hi,

hier die Sender:

        Array( ('name') =&gt; "Radio Top40",      ('url') =&gt; "x-rincon-mp3radio://xapp2023227392c40000.f.l.i.lb.core-cdn.net/40000mb/live/app2023227392/w2075033610/live_de_128.mp3"), 
        Array( ('name') =&gt; "MDR Jump",         ('url') =&gt; "x-rincon-mp3radio://www.jumpradio.de/static/webchannel/jump_live_channel_high.m3u"),   
        Array( ('name') =&gt; "Antenne Thueringen", ('url') =&gt; "x-rincon-mp3radio://xapp2023227392c40000.f.l.i.lb.core-cdn.net/40000mb/live/app2023227392/w2075033608/live_de_128.mp3"), 

Zu 2. Die Rincon ist vom Connect, das Prinzip (Cinch-Eingangssignal zu verteilen) ist aber das Gleiche…

Ciao
Herbertf

Vielen Dank für das tolle Modul bin mal am experimentieren damit.

Ist es noch geplant Shuffle, Repeat, Cover, Album, Artist, Position und Laufzeit wie im Sonos der IPSLibrary zu ergänzen?

Hallo,

Ist jetzt enthalten.

Ich habe eine neue funktion hinzugefügt:

SNS_SetAnalogInput($InstanceID, $InputInstanceID);

Leider kann ich es mangels Hardware nicht testen, daher wäre ich um eine Rückmeldung dankbar.

Gruß,
Thorsten

Hallo,

Geplant ist nichts :smiley:

Auf das WebFront habe ich noch keinen Wert gelegt, da ich persönlich mehr auf Automation als auf WebFront achte.
Das mit dem Cover hatte ich mir schon mal angeschaut, aber dann doch wieder bei Seite gelegt, da mich das WebFront noch verwirrt…

Ich habe leider immer recht hohe anspüche an UIs, und das wird mir schnell zu voll…

Da muss ich mich dann erstmal einarbeiten :eek:

Gruß,
Thorsten

Servus Thorsten,

Kann man mit dem neuen "SNS_SetAnalogInput($InstanceID, $InputInstanceID); " auch den Optischen Eingang an der Playbar setzen?

Hi,

Keine Ahnung. Das ganze war mir bis vor wenigen Stunden unbekannt.
Magst Du es mal ausprobieren, und uns berichten?

Oder kennt jemand die Antwort?

update:
scheinbar nicht --> PHP Sonos (Klasse zum Ansteuern einzelner Player) - Seite 29
Aber das könnte ich auch noch einbauen (z.B.

SNS_SetSPDIF(<instane>,<input instance>);

), wenn Du mir verifizierst, dass es auch funktioniert.
Wenn Du Hilfe brauchst es zu testen schick mir eine PN

Gruß,
Thorsten

Hallo zusammen,

bin total begeistert!
ich habe aber noch IPS 3.4 soweit ich gelesen habe unterstützt es noch nicht alle Funktionen, wie z.b. die module.
gibt es denn auch eine Möglichkeit z.b. Tastaktoren mit Funktionen zu belegen? (an/aus, lauter/leiser)

vg
norman

Hallo,

genau das ist es, wofür ich es gebaut habe :smiley:

Hier ein paar beispiele:
Wenn ich im Schlafzimmer eine Taste drücke (hängt am LCN BUS) wird dieses Script getriggert:


SNS_Pause(31596 /*[Sonos_neu\Küche]*/);
SNS_ChangeGroupVolume(31596 /*[Sonos_neu\Küche]*/, 10);
SNS_PlayFiles(31596 /*[Sonos_neu\Küche]*/, Array( "//ipsymcon.fritz.box/sonos/temperatur/".GetValuefloat(23851 /*[Aussen\Garten\T: Außen\Temperature T]*/).".mp3"));
SNS_ChangeGroupVolume(31596 /*[Sonos_neu\Küche]*/, -10);
SNS_SetRadio(31596 /*[Sonos_neu\Küche]*/, 'SWR3');

Also:

[ol]
[li]Zur Sicherheit erstmal Pause[/li][li]Lautstärke um 10% anheben[/li][li]Aussentemperatur ansagen[/li][li]Lautstärke wieder runter[/li][li]SWR3 abspielen[/li][/ol]

Oder wenn das Relais vom Fernseher angeht:


SNS_SetGroup(17265 /*[Sonos_neu\Wohnzimmer]*/, 0);

Und wenn das Relais ausgeht:


SNS_SetGroup(17265 /*[Sonos_neu\Wohnzimmer]*/, 31596 /*[Sonos_neu\Küche]*/);

–> Wenn der Fernseher an ist, geht die Musik im Wohnzimmer aus.

Und wenn ich an der Haustür die „Haus aus“ Taste drücke, wird die Musikwiedergabe auch angehalten.

Gruß,
Thorsten

Das normale Webfront sieht für Sonos auch für meine Ansprüche nicht sehr toll aus. Aber wenn man die Werte in Variablen abgelegt hat bzw. das Cover in einer Mediadatei ist es dann auch nicht schwer sich selber eine HTML Seite mit Javascript zu basteln, die die Variablen aus IP Symcon einbindet. Oder man nutzt IPS View oder NEO dann kommt auch eine ansprechendere Oberfläche raus.
Ich bin gerade am basteln sieht momentan mit der alten Sonos aus der IPS Library so aus.

Wenn dann in dem Modul noch Variablen für Repeat, Shuffle, Titel, Album, Artist, Laufzeit ergänzt werden dann könnte ich die Variablen dann in Zukunft mit der final IPS 4 auf das neue Modul umstellen.

So, heute heute noch nichts gepostet…

Ich habe mich daran erinnert, dass ich Thomas versprochen hatte den Sleeptimer einzubauen.
Hab ich nun endlich geschafft…

SNS_SetSleepTimer(<Instance ID>,<minutes>);
und
SNS_DeleteSleepTimer(<Instance ID>);
um ihn abzubrechen.

Zusätzlich gibt es noch eine Variable Sleeptimer, die die Restzeit in Minuten enthält.
Das Ganze muss aber in der Konfiguration der Instanz eingeschaltet werden.

N8,
Thorsten

Hi Thorsten,

Dein Modul ist wirklich Klasse,

  1. Vielen Dank für die 3 Sender - gehen
SNS_SetAnalogInput($InstanceID, $InputInstanceID); 

geht auch Klasse !!! (im ersten Test hatte ich die IDs verwechselt …) DANKE!
3. Obigen Wünschen von Fonzo schnließe ich mich an ;-))))
4. Im Webfront gibt es ja die Button Play, Pause … - wie greife ich denn direkt auf diese zu (primär für IPS-View) - oder kann ich dies nur per Script und Befehlen wie: „SNS_Play(integer $InstanceID)“

DANKE im Voraus
herbertf

Moin Thorsten,

falls du doch noch den „PlayMode“ (Shuffle, Repeat, …) usw. einbauen möchtest…hier die Funktion aus meinem Skript, da kannst du dir alles leicht abschauen :slight_smile:

function SonosBY_SetPlayMode($Raumname, $PlayMode) {
Global $SonosGroupAR;
$ResultVal = SearchArray($Raumname, 0, $SonosGroupAR);
$SonosGroupARx[0] = array($SonosGroupAR[$ResultVal][0],$SonosGroupAR[$ResultVal][1],$SonosGroupAR[$ResultVal][2],$SonosGroupAR[$ResultVal][3]);
$SonosGroupAR = $SonosGroupARx;
$contentlength = 380 + strlen($PlayMode);
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
HOST: '.$SonosGroupAR[0][1].':1400
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetPlayMode"
CONTENT-TYPE: text/xml; charset="utf-8"
Content-Length: '.$contentlength.'

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <u:SetPlayMode xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
         <InstanceID>0</InstanceID>
         <NewPlayMode>'.$PlayMode.'</NewPlayMode>
      </u:SetPlayMode>
   </s:Body>
</s:Envelope>';
$result = SonosBY_SendSOAP($SonosGroupAR[0][1], $content);
return $result;
}

>> Ändert den PlayMode eines Players (gültige Werte sind: NORMAL, REPEAT_ALL, REPEAT_ONE, SHUFFLE_NOREPEAT, SHUFFLE, SHUFFLE_REPEAT_ONE)

Damit solltest du alles haben was notwendig ist :slight_smile:

Grüße,
Chris