Sonos Modul

Hallo,

sorry, ich hatte die letzte Zeit echt wenig Zeit…

Nun ja, „[44104]“ ist ein JSON Array. Halt nur mit einem Eintrag. Wenn Du mehrere Member hast, sieht es z.B: so aus:
string(31) „[20587,23466,25386,49825,52124]“
Das sind die Object IDs der Member (ohne Coordinator).

Bei den Funktionen bei denen ich es für Sinnvoll erachtet habe, habe ich es bereits so implementiert, dass das Kommando an den Coordinator weitergeleitet wird. das Gilt für:

  • DeleteSleepTimer
  • Next
  • Play
  • Previous
  • SetCrossfade
  • SetPlayMode
  • SetSleepTimer
  • SetTrack
  • Pause
  • Stop

Du kannst diese Aktionen also einfach auf jeden Member ausführen. Reicht das nicht?

Das musst Du SONOS fragen :wink:
Ich bilde nur ab, was ich von abfrage. Wenn ein Player alleine ist, ist dieser seine eigene Gruppe.

Natürlich könnte man einfach alle Boxen aus der Gruppe schmeißen, wenn man auf den Coordinator ein „SNS_SetGroup($instanceID, 0);“ ausführt. Das würde dann aber alles anhalten.
Irgendwie fände ich das aber seltsam…
Und wenn man nur die eine Box rausnimmt, wer is dann der neue Koordinator?
Ich bin eher ein Freund von expliziten Anweisungen:

  1. SNS_BecomeCoordinator($instanceIDNew);
  2. SNS_SetGroup($instanceID, 0);

Gruß,
Thorsten

Hallo,

nein, das geht leider nicht. Zumindest habe ich keine Ahnung, wie man das erkennen könnte.

Gruß,
Thorsten

Hallo,

Dazu bräuchte ich die genaue Bezeichnung im System.
Könntest Du mal bitte folgendes Script bei Dir ausführen:

<?

if(file_exists('../modules/SymconSonos/Sonos/sonosAccess.php')){
  include_once '../modules/SymconSonos/Sonos/sonosAccess.php';
}elseif(file_exists('../modules/Sonos/libs/sonosAccess.php')){
  include_once '../modules/Sonos/libs/sonosAccess.php';
}elseif(file_exists('../modules/.store/de.kugelberg.sonos/libs/sonosAccess.php')){
  include_once '../modules/.store/de.kugelberg.sonos/libs/sonosAccess.php';
}else{
    die('sonosAccess.php not found');
}


// enter your IP here
  $ip = '192.168.1.10';
// 

$sonos = new SonosAccess($ip);

$grouping = new SimpleXMLElement($sonos->GetZoneGroupState());
$zoneGroups = $grouping->ZoneGroups->ZoneGroup;

foreach ($zoneGroups as $zoneGroup) {
  foreach ($zoneGroup->ZoneGroupMember as $zoneGroupMember) {
    if (isset($zoneGroupMember->attributes()['Invisible'])) {
      $invisible = true;
    }else{
      $invisible = false;
    }
    if (preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', (string) $zoneGroupMember->attributes()['Location'], $ip_match)) {
      if (Sys_ping($ip_match[0], 1000)) {
        $xml = @file_get_contents((string) $zoneGroupMember->attributes()['Location']);
        if ($xml) {
          $description = new SimpleXMLElement($xml);
          $SonosDevices[(string) $zoneGroupMember->attributes()['UUID']] = [
                                    'Name'      => strval($zoneGroupMember->attributes()['ZoneName']),
                                    'Model'     => strval($description->device->displayName),
                                    'RINCON'    => strval($zoneGroupMember->attributes()['UUID']),
                                    'IPAddress' => $ip_match[0],
                                    'Invivble'  => $invisible
                                ];
        }
      }
    }
  }
}

var_dump($SonosDevices);

Das gibt Dir eine Liste all Deiner Geräte zurück. Ich brauche das, was bei der Ray unter „Model“ steht.

Danke,
Thorsten

Hi Thorsten,

anbei der Output:

  ["RINCON_F0F6C1F2D5EE01400"]=>
  array(5) {
    ["Name"]=>
    string(17) "Schlafen Soundbar"
    ["Model"]=>
    string(3) "Ray"
    ["RINCON"]=>
    string(24) "RINCON_F0F6C1F2D5EE01400"
    ["IPAddress"]=>
    string(9) "10.0.0.81"
    ["Invivble"]=>
    bool(false)
  }

Hi,

ich habe die Ray aufgenommen und erstmal als Beta version 2.4 bereitgestellt.
Könntest Du das bitte testen? Wenn alles OK ist, schicke ich es als stable.

Gruß,
Thorsten

Hallo,

in beiden Problemen Von Dir steht „Could not connect to HTTP“. Das bedeutet schicht und einfach, dass IPS nicht an die Boxen kommt. Dafür gibt es viele mögliche Ursachen:

  • Da ist eine Firewall dazwischen
  • die IP der Box(en) hat sich geändert
  • die Box hat keinen Strom

Besteht das Problem noch, oder läuft es mittlerweile wieder?

Gruß,
Thorsten

1 „Gefällt mir“

Hallo,

die Gruppen werden aus den Boxen gefüllt, die gerade keiner Gruppe als member zugewiesen sind.
Ich suche alle SonosPlayer Instanzen und schaue ob sie Coordinator sind.
Wenn ja, werden sie dem Profil SONOS.Groups zugewiesen.

Wenn Du die alte / falsche Instanz löschst, sollte die Gruppe bei der nächsten Gruppenänderung automatisch verschwinden.
Alternativ kannst Du aber auch das Profil bearbeiten.

Gruß,
Thorsten

Das funktioniert! :slight_smile:

Das hier dürften SONOS Fehler sein :

Meine Installation läuft eigentlich problemlos aber die Fehler hier stehen im Statusprotokoll und sollten falls möglich behoben werden

Hallo,

nein. Hier scheint das „__generated.inc.php“ nicht richtig generiert worden zu sein.
Bei mir hat bei diesem Fehler immer ein neustart von IPS geholfen.

Das ist ein SOAP Fehler der bei einem Aufruf in die Box geworfen wurde.
Wenn es immer der gleiche Callstack ist, ist es vielleicht etwas, was Deine Box nicht unterstützt.
Kannst Du mehr details bereitstellen?
Ein „Expand“ auf die Meldung sollte mehr anzeigen.

Danke,
Thorsten

Moin Leute,
ich taste mich gerade an das Thema Sonos ran weil ich über Sonos ein paar Durchsagen machen möchte. Hierbei bin ich über ein paar Probleme gestolpert …

  • Eine Auflistung aller Geräte in Discovery gibt es nicht. Ich kann die Geräte nur manuell erstellen.
  • Einen Sonos Five scheint es noch nicht zu geben, zumindestens steht keiner in der Liste.
  • Einen Sonos Port scheint es auch noch nicht zu geben.
  • Eine Durchsage nur mit dem Modul scheint nicht vorgesehen zu sein … oder doch?

Wäre schön wenn ihr mir bei den ersten Hürden helft.
Übrigens grosses Lob an Thorsten für das Modul.

Moin,

Doch, das sollte eigentlich so sein:


Wenn Du sie nicht angezeigt bekommst, funktioniert es bei Dir nicht richtig.
Was ich mit vorstellen könnte:
Wenn Du Dein IPS in einem Docker laufen lässt, musst Du dafür sorgen, dass die Broadcasts durchkommen.
Testen kannst Du es mit

var_dump(YC_SearchDevices(IPS_GetInstanceListByModuleID('{FFFFA648-B296-E785-96ED-065F7CEE6F29}')[0], 'urn:schemas-upnp-org:device:ZonePlayer:1'));

Stimmt:

        $knownModels = [
            ['caption' => 'Arc',         'value' => 'Arc'],
            ['caption' => 'Amp',         'value' => 'Amp'],
            ['caption' => 'Beam',        'value' => 'Beam'],
            ['caption' => 'Connect',     'value' => 'Connect'],
            ['caption' => 'Connect:Amp', 'value' => 'Connect:Amp'],
            ['caption' => 'Move',        'value' => 'Move'],
            ['caption' => 'One',         'value' => 'One'],
            ['caption' => 'One SL',      'value' => 'One SL'],
            ['caption' => 'Play:1',      'value' => 'Play:1'],
            ['caption' => 'Play:3',      'value' => 'Play:3'],
            ['caption' => 'Play:5',      'value' => 'Play:5'],
            ['caption' => 'Playbar',     'value' => 'Playbar'],
            ['caption' => 'Playbase',    'value' => 'Playbase'],
            ['caption' => 'Ray',         'value' => 'Ray'],
            ['caption' => 'Roam',        'value' => 'Roam'],
            ['caption' => 'SYMFONISK',   'value' => 'SYMFONISK']
        ];

Ich brauche aber zur Sicherheit was da exakt zurückkommt (siehe oben):

Wichtig ist das [„Model“]"

Du meinst, dass das Modul Text in Sprache umwandelt?
Das ist bewusst so.
Aber Du kannst ja einfach per TTS Lösung (da gibt es ja diverse) ein MP3 erzeugen und abspielen lassen. Hat mehrere Vorteile/Gründe:

  1. Du kannst die Lösung Deiner Wahl verwenden
  2. Das modul steuert nur Features von SONOS. Und TTS gehört nunmal nicht dazu.
  3. Würde die Komplexität nur unnötig erhöhen.

Es gibt aber z.B. auch ein Polly Modul, das sich wunderbar integrieren lässt. :wink:

:face_with_hand_over_mouth: Danke.

Gruß,
Thorsten

Moin Thorsten und Danke für deine schnelle Reaktion. :+1:

  • Mein IPS 6.2 läuft auf einem WIN10 Rechner
    Den Befehl teste ich aber trotzdem.
  • Den Output zu den neuen Geräten liefere ich.
  • Deine Einstellung zum TTS kann ich nachvollziehen.
    Gerne würde ich was ohne Kosten haben und bestenfalls ohne Cloud. Hat wer eine Tip für mich?

Job 1 … der Output vom Five und Port

array(8) {
[„RINCON_347E5CE17C9401400“]=>
array(5) {
[„Name“]=>
string(6) „Küche“
[„Model“]=>
string(4) „Five“
[„RINCON“]=>
string(24) „RINCON_347E5CE17C9401400“
[„IPAddress“]=>
string(14) „192.168.178.82“
[„Invivble“]=>
bool(false)
}
[„RINCON_48A6B825858E01400“]=>
array(5) {
[„Name“]=>
string(10) „Wohnzimmer“
[„Model“]=>
string(4) „Port“
[„RINCON“]=>
string(24) „RINCON_48A6B825858E01400“
[„IPAddress“]=>
string(14) „192.168.178.83“
[„Invivble“]=>
bool(false)
}
}

Job 2 … das Ergebnis bezüglich Discovery sieht mau aus

array(0) {
}

Bei meinem dritten Punkt bin ich noch nicht weiter.

  • Modul Text to speech (AWS Polly) von der SYMCON GmbH erfordert einen AWS Account und ist nach einem Jahr kostenpflichtig … richtig?
  • Modul VoiceRSS von Michael Tröger ist ein „offline“ Modul mit 350 freien Anfragen pro Tag … richtig?

Sind beide Module nutzbar um Meldungen und Durchsagen über Sonos auszugeben?
Wäre bei Einstiegshilfe oder Alternativen dankbar.

ziemlich am Anfang war mal die Frage nach Fade In und Fade Out. Ist dies inzwischen möglich? Ich finde nichts dazu.

Ich möchte gerne die Geister-Player löschen.
Ich habe schon versucht, das Modul zu deinstallieren und wieder zu installieren.
Als folge tauchen immer mehr Geisterplayer auf, welche dann beim Auswählen eine Fehlermeldung generieren.
Ich habe 4 Sonos Player im Einsatz.
Ich verwende die aktuellste Version Symcon und Sonos Modul.
Weis jemand Rat?

image

Hallo,

nun ja, die Liste der verfügbaren Player besteht aus allen Instanzen des Moduls.
Wenn Du die Discovery Instanz öffnest, sollen die nicht erreichbaren player rot hinterlegt sein.

Ich würde erwarten, dass die „Geisterplayer“ verschwinden, wenn Du die zugehörigen Instanzen in IPS löschst.

Gruß,
Thorsten

Guten Morgen!

Ich versuche mp3-files mit SNS_PlayFiles abzuspielen und komme nicht weiter und erhoffe mir hier Hilfe.

Folgender Sachstand:

Sonos-Modul erfolgreich installiert. Player laufen und lassen sich über das Webfront steuern.

Per Script kann ich auch mit


$ID = 57799;

SNS_Play($ID);

SNS_Pause($ID);

Die entsprechenden Player steuern, wobei 57799 die ID eines Players ist.

Ich habe nun eine Datei per winSCP auf der Symbox abgelegt und zwar hier:
/var/lib/symcon/webfront/user/

Ferner konnte ich mit Polly eine Testdatei ebenfalls per Skript dort ablegen. Zugriff funktioniert also.

Wenn ich nun aber den folgenden Befehl ausführe:


$ID = 57799; //Sonosplayer Küche

SNS_PlayFiles ($ID, json_encode (array("http://192.168.1.50:3777//user/test.mp3") ), 10);

passiert leider gar nichts. Keine Fehlermeldung aber auch kein Ton.

Kann mir jemand hier einen Tipp geben?

Danke im Voraus.

Hallo
Ich wuerde das 2. Slash wegnehmen.
Wenn ich bei mir auch 2 Slashes benutze passiert hier auch nichts.