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

Der Fehler kam bei folgendem Befehl:

„SonosBY_DateiAbspielen_Auswahl(„Sonos“, „hinweis.wav“);“

Die Zeilen im Skript sehen folgendermaßen aus:

function SonosBY_SendSOAP($IPaddress, $content) {
    $fp = fsockopen($IPaddress, 1400);
   fputs ($fp, $content);
   $result = stream_get_contents($fp, -1);
   fclose($fp);
   return $result;
}


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


function SearchArray($value, $key, $array) {
   foreach ($array as $k => $val) {
       if ($val[$key] == $value) {
            return $k;
        }
   }

Die entsprechende als fehlerhaft markierte Zeile ist:

" return $result[1];"

Meinen einzigen Play 1 habe ich folgender Zeile definiert:

$SonosGroupAR[0] = array("Sonos","192.168.178.40","RINCON_B0000000000000000","30");

Gruß

Axel

Wenn du mit der Handy-App von Sonos auf „Bibliothek > Ordner“ gehst und dort in deine Freigabe „//192.168.178.20/public/“, siehst du da die „hinweis.wav“ und kannst sie abspielen?

-Chris-

Ja, die sehe ich und kann sie auch abspielen.

Axel

Dann stimmt wohl immer noch irgendwas mit deinen Pfaden in der Config nicht…wie sehen diese Zeilen jetzt bei dir aus?

$Sonos_Dateiordner = "/etc/symcon/ordnerxyz/";  
$Sonos_SMBordner = "//192.168.178.20/public/";                  
$TTS_InstanzID = false;  

Ich hab es eben mal getestet, auch mit nur einer Box kann ich ohne Probleme etwas abspielen.

Hast du im Sonos auch die Freigabe genauso eingetragen mit der IP und nicht mit einem DNS-Namen? Also identisch zur Variable „$Sonos_SMBordner“.

>> Hat das irgendwer sonst auf IPS unter Linux laufen und kann uns sagen, was bei den Pfaden eingetragen werden muss?

-Chris-

Die drei Zeilen sehen bei mir so aus:

$Sonos_Dateiordner = "//sonos/"; 
$Sonos_SMBordner = "//192.168.178.20/public";                
$TTS_InstanzID = false;                 

In der Sonos App ist die Freigabe exakt so eingetragen wie in der Variable.

Axel

Ich kann nur raten, weil ich kein IPS unter Linux habe…

Aber der Pfad sieht irgendwie falsch aus…probier mal diesen Pfad zu ändern in das:

$Sonos_Dateiordner = "/sonos/";  

…oder was anderes.

Probier auch mal einen Unterordner vom Sonos Verzeichnis. Vielleicht hat IPS da keine Zugriffsrechte wo es jetzt ist? Oder „\sonos“? Keine Ahnung, ich hoffe es meldet sich noch jemand, der IPS unter Linux im Einsatz hat…

-Chris-

Hallo Chris,

mit meinem Pfad wird jetzt eine MP3 Datei an der korrekten Stelle erzeugt. Diese kann ich dann auch auf der SONOS App sehen und abspielen.

Leider wird die Box nicht direkt aus IP Symcon angesprochen. Ich gehe momentan davon aus, das ich vielleicht bei der Zuordnung einen Fehler gemacht habe.

Axel

Teste bitte mal folgendes:

1.) Über die Sonos App ein Lied in die Playlist bei einer Box machen und abspielen
2.1) Während das Lied abgespielt wird, dann folgenden Befehl in SonosBY starten

SonosBY_Stop_Playing(0);

Wird die Wiedergabe gestoppt?

2.2) Wenn nicht, dann füge bitte den folgenden Code in ein neues Skript ein und führe es aus (während deine Sonos Musik abspielt):

<?
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
HOST: 192.168.178.20:1400
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Stop"
CONTENT-TYPE: text/xml; charset="utf-8"
Content-Length: 329

<?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:Stop xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
         <InstanceID>0</InstanceID>
      </u:Stop>
   </s:Body>
</s:Envelope>';
$result = SonosBY_SendSOAP("192.168.178.20", $content);
echo $result;


function SonosBY_SendSOAP($IPaddress, $content) {
	$fp = fsockopen($IPaddress, 1400);
   fputs ($fp, $content);
   $result = stream_get_contents($fp, -1);
   fclose($fp);
   return $result;
}
?>

Dann bitte berichten was funktioniert und was ggf. nicht :slight_smile:

-Chris-

Hallo Chris,

mit Deinem Skript wird das abspielen der Musik gestoppt.
Ich habe allerdings aus der 192.168.178.20 am Ende eine 40 gemacht. 20 ist der Raspberry und 40 die Sonos Box.

Nach der Ausführung Deines Skripts erhalte ich folgende Meldung:

HTTP/1.1 200 OK CONTENT-LENGTH: 240 CONTENT-TYPE: text/xml; charset=„utf-8“ EXT: Server: Linux UPnP/1.0 Sonos/29.6-93090 (ZPS1) Connection: close

Leider funktioniert der Rest noch immer nicht. Es kommt weiterhin folgende Fehlermeldung:

Undefined offset: 1 in <b>/usr/share/symcon/scripts/SonosBY.ips.php</b> on line <b>658

Gruß

Axel

Also mit „SonosBY_Stop_Playing(0);“ wird die Wiedergabe gestoppt?

-Chris-

Nein leider nicht.

Wenn ich Dein langes Skript aus dem letzten Beitrag ausführe, dann wird das Abspielen gestoppt.

Mit dem kurzen Befehl (SonosBY_Stop_Playing(0):wink: gibt es zwar keine Fehlermeldung, aber es passiert auch nichts.

Axel

Ah, ok, sag das doch gleich :rolleyes: :stuck_out_tongue:

Gut, dann haste 100% einen Fehler in der Config vom SonosBY Skript > Weil der Code den ich unter 2.2 geschrieben hab und der bei dir funktioniert, der wird GENAU SO in SonosBY verwendet! Nur hab ich halt jetzt fest die richtigen Daten schon eingetragen…

Aber wo jetzt da das Problem sein soll…keine Ahnung…ich weiß es wirklich nicht. Der Eintrag bei „$SonosGroupAR[0]“ sieht gut aus. Aber die Pfade werden bei „SonosBY_Stop_Playing(0);“ gar nicht verwendet…also können es die eigentlich auch nicht sein… :confused:

$SonosGroupAR[0] = array("Sonos","192.168.178.40","RINCON_B0000000000000000","30"); 

> Ich hoffe du hast hier bei RINCON deine RINCON eingetragen und nur unkenntlich gemacht? Weil ansonsten kann ich einfach nichts sehen, was nicht passen könnte :confused:

-Chris-

Hallo Chris,

die Rincon Daten stimmen in meiner Version.

Vielen Dank für Deine Hilfe, vielleicht findet sich ja noch ein anderer Leidensgenosse, der eventuell noch eine Idee hat.

Gruß

Axel

Echt seltsam… :confused:

Also nochmal der Aufruf/die Bitte >> Wer verwendet SonosBY mit IPS unter Linux? Oder wer kann das mal testen unter Linux?

Grüße,
Chris

Hallo Chris,

könntest Du mir eventuell eine Funktion zur Verfügung stellen, mit der ich nur die Sprachausgabe realisieren kann.
Das Google File wird bereits erzeugt und muß „nur“ noch wiedergegeben werden.

Das war für mich im Prinzip der Hauptgrund mir eine Sonos Box zuzulegen.

Gruß

Axel

Moin Axel!

Das macht ja an sich das SonosBY…dazu hab ich es geschrieben, für die Sprachausgaben auf einem oder mehreren Sonos Playern!

Mit dem Test-Skript läuft es bei dir, mit SonosBY nicht, obwohl beide die identischen SOAP-Befehle verwenden. Also hast du irgendwas im SonosBY nicht korrekt eingerichtet, oder es funktioniert unter Linux allgemein nicht (was ich nicht glaube).

Mach doch mal hier und da im SonosBY ein paar Ausgaben mit „echo“, taste dich dran und versuche so herauszubekommen an welcher Stelle genau es klemmt. Irgendwo wird ja hoffentlich ein Fehler gemeldet werden, Mist in einer Variable stehen oder irgendwas falsch laufen…

Ohne Einsatz von deiner Seite, wird das Problem nicht zu lösen sein - aber mit deinem Einsatz, wird es sicher irgendwann funktionieren :slight_smile:

Grüße,
Chris

Ich habe per PN eine Anfrage vom User „MaLu“ bekommen, welche ich hier mal eben wiedergebe und hier darauf antworte. Anfragen bitte immer in den passenden Threads stellen, weil wenn jemand per PN weiterhilft, dann hilft es nur einem und nicht allen und ist damit nicht im Sinne des „Community-Gedanken“.

Die Frage/das Problem von MaLu stellt sich wie folgt dar:

//TTS_GenerateFile(57000 /[Text To Speech]/ , „Hallo Welt“, „C:/IP-Symcon/malu/media/xxx.wav“, 39);
>> Enthält nichts zum abspielen - Ist quasi leer - Verschiedene Stimmen oder Textlängen erzeugen verschiedene Dateigrößen.
>> Unter Windows ist alles OK - in der Systemsteuerung funktioniert TTS.

Meine Antwort:
Wenn bei dir schon ein Skript nur mit TTS_GenerateFile(…) keine abspielbare Datei erzeugt, dann hast du ein allgemeines Text to Speech Problem und kein Problem mit SonosBY.

> Hast du mal probiert die Variable „$TTS_InstanzID“ auf FALSE zu setzen und damit die Google TTS API zu verwenden? Klappt das und es kommt eine funktionierende Datei raus?
> Welche IPS Version hast du im Einsatz?
> Welche Stimme(n) hast du in der Windows TTS API getestet?

Grüße,
Chris

@Axel: Lies dir bitte mal diesen Post von kugelberg durch, das könnte auch bei deinem Problem helfen!?
Sonos Modul - Seite 12

Grüße,
Chris

@Bayaro @all

Mit Google TTS API - Alles OK
IPS 3.4 - 3778
Stimmen ausprobiert - Hedda, Zira und eine gekaufte - Alex

Stimmt „Alex“ von CereProc? Die hab ich auch im Einsatz und funktionierte von Anfang an ohne Probleme! :confused:
Und ich hab die gleiche IPS Version, also muss es funktionieren bei dir!

Evtl. irgendwas mit deiner Soundkarte falsch eingestellt im IPS oder Windows? Magst du mal ein paar Screenshots machen, vlt. sieht man da irgendwas…wobei man da nicht wirklich was einstellen muss/kann :confused:

Grüße,
Chris