Sonos Modul

Hallo Thorsten, gibt es eventuell zum Abbrechen der Funktion SNS_PlayFilesGrouping schon eine Lösung?

Tom

Hallo zusammen,

Kann mir jemand sagen wie ich Gruppen löschen kann?
Ich habe drei One in drei Räumen betrieben. Dann habe ich mein Netzwerk umstrukturiert und die Ones wurden in anderen Räumen verwendet.
Kurz gesagt, die Namen und die IP Adressen haben sich geändert.

Kann ich die „alten“ Einträge irgend wie löschen?

Vielen Danke im Voraus
Christoph

Hallo Thorsten und alle,

ich bekomme die Coverbildchen in der „Cover URL“ nicht mehr als 640x640 Bildchen, sondern nur noch als 64x64, was ziemlich verpixelt aussieht. Hat sich dahingehend etwas im Modul geändert ? Bekomme ich irgendwie die coverbilder wieder in besserer Auflösung ?

Danke,
Tom

[EDIT] Hab ein bisschen experimentiert. Ich habe eigtl. alles in Sonos Playlisten abgelegt, diese enthalten Spotify Tracks. Wenn ich die Playliste über Symcon auswähle, bekomme ich nur noch Mini Cover 64x64. Wenn ich aber über Spotify auswähle, kriege ich auch in der „Cover URL“ links, die 640x640px Bilder wiedergeben. Das war vor wenigen Wochen garantiert nicht so.

[EDIT2] Okay, das hat wohl weniger mit dem Modul zu tun, aber ist ja vielleicht schon anderen aufgefallen. Zumindest scheint dieses Problem bekanntund ein aktueller Bug der API zu sein:
https://en.community.sonos.com/music-services-and-sources-228994/spotify-album-artwork-is-distorted-6876690?postid=16622439#post16622439

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