Autor Thema: Sonos steuern  (Gelesen 759125 mal)

Offline funclass

  • Full Member
  • ***
  • Beiträge: 101
Antw:Sonos steuern
« Antwort #3255 am: 04 Januar 2019, 18:23:26 »
Hallo und gesundes Neues an alle Mitlesen,

nehmt es mir bitte nicht übel, wenn ich den 200-seiten Thread nicht komplett durchforstet habe, aber die Suche hat auf meine Frage leider keine passende Antwort geliefert.

Vor einigen Tagen ist mein Sonos-Setup um eine Beam erweitert worden, nun habe ich mit wiedermal ein wenig mit dem sehr ausführlichen FHEM-Modul befasst. Gibt es eine Möglichkeit (ggf. ein Reading was ich noch nicht gefunden habe) das Eingangssignal der Beam zu checken? Konkret geht es mir darum künftig zu visualisieren, dass gerade 5.1 DolbyDigital abgespielt wird, indem ich z.B. die Status-LED an der Beam aktiviere.
Ich habe mir in myUtils schon eine kleine Funktion erstellt, die aus dem Reading "currentTrackHandle" den Wert <r:streamInfo>xy</r:streamInfo> extrahiert, da dort scheinbar zu erkennen ist wie viele Kanäle der Stream enthält. Ich will aber ungern für diese "Spielerei" unnötige Events erzeugen. Vielleicht lässt sich ja auch ein neues Reading implementieren, welches gleich die korrekte Bezeichnung mappt.

sub mySonosStreamType {

my $xmltext = ReadingsVal("Sonos_Wohnzimmer", "currentTrackHandle", "");
my $begin = index($xmltext, "<r:streamInfo>");
my $end = index($xmltext, "</r:streamInfo>");
my $type = substr($xmltext,$begin+14,$end-$begin-14);
my $text = "unbekannt";

# 0 = kein Stream
# 2 = Stereo
# 7 = 2.0 DD
# 18 = 5.1 DD

if ($type == 0) {
    $text = "Aus";
} elsif ($type == 2) {
    $text = "Stereo";
} elsif ($type == 7) {
    $text = "Dolby Digital 2.0";
} elsif ($type == 18) {
    $text = "Dolby Digital 5.1";
}
fhem("setreading Sonos_Wohnzimmer myStreamType $text");
return;
}

Ein notify reagiert aktuell auf Änderungen des currentTrackHandle und schreib mein Reading. Dieses habe ich im StateFormat ergänzt, damit sehe ich direkt womit die Beam grad "befeuert" wird.
« Letzte Änderung: 04 Januar 2019, 22:58:13 von funclass »

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2028
Antw:Sonos steuern
« Antwort #3256 am: 05 Januar 2019, 01:14:55 »
Hallo funclass,

wenn du dir ein Notify sparen möchtest und alles übersichtlich an einem Device haben möchtest, dann mach doch ein UserReading:
attr Sonos_Wohnzimmer userReadings myStreamType:currentTrackHandle.* { return mySonosStreamType(ReadingsVal($name, "currentTrackHandle", "")); }

Und deine Sub baust du so um, dass sie das Reading übergeben bekommt, und als Ergebnis deinen StreamType liefert:
sub mySonosStreamType($) {
        my ($xmltext) = @_;
my $begin = index($xmltext, "<r:streamInfo>");
my $end = index($xmltext, "</r:streamInfo>");
my $type = substr($xmltext,$begin+14,$end-$begin-14);

# 0 = kein Stream
# 2 = Stereo
# 7 = 2.0 DD
# 18 = 5.1 DD

if ($type == 0) {
      return 'Aus';
} elsif ($type == 2) {
      return 'Stereo';
} elsif ($type == 7) {
      return 'Dolby Digital 2.0';
} elsif ($type == 18) {
      return 'Dolby Digital 5.1';
}

return 'unbekannt';
}

Etwas kürzer mit einem regulären Ausdruck (ungetestet :) ):
sub mySonosStreamType($) {
  my ($xmltext) = @_;

  if ($xmltext =~ m/<r:streamInfo>(\d+)<\/r:streamInfo>/i) {
    if ($1 == 0) {
      return 'Aus';
    } elsif ($1 == 2) {
      return 'Stereo';
    } elsif ($1 == 7) {
      return 'Dolby Digital 2.0';
    } elsif ($1 == 18) {
      return 'Dolby Digital 5.1';
    } else {
      return 'Unbekannt: ' + $1;
    }
  } else {
    return 'Keine Angabe';
  }
}

Damit wird dieses Reading "myStreamType" immer dann mit aktualisiert, wenn "currentTrackHandle" aktualisiert wird.

Grüße
Reinerlein
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline funclass

  • Full Member
  • ***
  • Beiträge: 101
Antw:Sonos steuern
« Antwort #3257 am: 05 Januar 2019, 11:48:40 »
Hallo Reinerlein,

vielen Dank für die Infos. Hatte es erst mit nem zusätzlichem Userreading versucht und bin gescheitert. Nun weiß ich auch warum, ich hab den Trigger vergessen.  ::)

Deine verkürzte Variante mit dem RegEx funktioniert super. Ich hab noch ne Prüfung eingebaut, ob der SPDIF-Eingang aktiv ist da die Ausgabe ja nur dann Sinn macht. Ggf. kann das im Wiki ergänzt werden (oder kann ich das selbst?). Hatte vorher am AV-Receiver immer eine kleine Anzeige im Display, das fand ich ganz nett. Mit dieser Lösung bin ich nun wieder glücklich  ;D

attr Sonos_Wohnzimmer userReadings myStreamType:currentTrackHandle.* { if(ReadingsVal($name, "currentTitle", "") eq "SPDIF-Wiedergabe") {return mySonosStreamType(ReadingsVal($name, "currentTrackHandle", "")); } else { return ""; } }

VG Christian
« Letzte Änderung: 05 Januar 2019, 13:06:00 von funclass »

Offline willib

  • Full Member
  • ***
  • Beiträge: 206
Antw:Sonos steuern
« Antwort #3258 am: 13 Januar 2019, 19:54:45 »
Hallo Zusammen.
Ich habe ein Problem mit Speak. Nach Jedem Speak erhalte ich folgende Meldung:

SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!
Es sollte ein Radiosender aus meinen Favoriten laufen. Ich höre aber wenn ich die Playtaste drücke natürlich immer nur die letzte FHEM Durchsage.
Der Sender ist im Moment der Durchsage normalerweise gestoppt.

siehe auch mein separater Thread:
https://forum.fhem.de/index.php/topic,95402.msg882307.html#msg882307

Edit:
Es liegt anscheinend an der MP3 die als Gong vor der Durchsage ausgebe. Laut Wiki müssen die Formate übereinstimmen:
Achtung!: Die Verkettung der diversen MP3-Dateien erfolgt durch einfaches hintereinanderschreiben. Bei verschiedenen Formaten (Mono oder Stereo, 16kHz oder 22kHz, usw.) funktioniert zwar die Wiedergabe auf dem Sonos-System fehlerfrei, allerdings werden die Zeitinformationen nicht korrekt dargestellt. Um das zu korrigieren, kann man noch nachträglich einen lokal installierten Konverter (z.B. avconv) drüberlaufen lassen. Diesen kann man mit dem Sonos-Device-Attribut targetSpeakMP3FileConverter einstellen (z.B. mit /usr/bin/avconv -i %infile% %outfile%). Dabei ist zu beachten, dass dieser Zeit benötigt und somit die Verzögerung der Durchsage vergrößert.
Wie bringe ich jetzt meine Gong MP3 mit der Google MP3 in Übereinstimmung wenn ich den lokalen converter nicht nutzen möchte?

Vielen Dank.
« Letzte Änderung: 14 Januar 2019, 12:25:21 von willib »
Raspberry Pi 3B, Homematic, Hue, Intertechno, Jeelink, Harmony Hub, VU+ Uno 4K, Sonos

Offline Hotbird

  • Full Member
  • ***
  • Beiträge: 130
Antw:Sonos steuern
« Antwort #3259 am: 22 Januar 2019, 10:43:36 »
ich hab seit gestern den SonosSub. Hab auch gleich die IP Adresse unter usedonlyIPs mit reingenommen, trotzdem wird der nicht über das autocreate erstellt. Liegt es daran, dass ich ihn zusammen mit der Beam laufen lasse? In meinem WLAN ist er bisher auch erst einmal aufgetaucht. Besteht da eine andere Verbindung mit dem Sub ( also nicht wie die anderen über das normale WLAN)?


// Lösung
Hab den Sub gestern nochmal aus der Raumaufteilung rausgenommen, da wurde er dann auch wieder im WLAN angezeigt. Danach ging die Einbindung in FHEM. 
« Letzte Änderung: 23 Januar 2019, 10:56:59 von Hotbird »

Offline l2r

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:Sonos steuern
« Antwort #3260 am: 07 März 2019, 13:37:25 »
@Reinerlein: Ich hätte da noch einen kleinen FeatureRequest:

Ist es möglich an den Playern bei StartFavourite direkt eine DropDown-Liste mit anzubieten, aus der man dann seine Favouriten auswählen kann? Natürlich nur sofern das Reading Favourites auch gefüllt ist?!

Analog würde das auch für StartPlalist und StartRadio gelten.

Das ganze von mir aus auch über ein Attribut aktivier/deaktivierbar.

Danke und Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Offline Hotbird

  • Full Member
  • ***
  • Beiträge: 130
Antw:Sonos steuern
« Antwort #3261 am: 01 April 2019, 19:01:25 »
bringt das     
localhost:4711 120 1 5

eigentlich noch etwas, wenn man eine Sonosbox per LAN-Kabel angeschlossen hat und auf das interne Wlan umgestellt hat? Die usedonlyIPs hab ich auch noch eingestellt, die werden auch noch in der Fritzbox angezeigt....

bekomme nämlich immer noch die folgenden Fehlermeldungen
Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 6098 thread 1.
Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 6098 thread 1.

2019.04.01 17:16:25 0: SONOS0: Das Lauschen auf der Schnittstelle wurde beendet. Prozess endet nun auch...

Hab mittlerweile öfter das Problem das Sonos auf disconnected steht
« Letzte Änderung: 01 April 2019, 19:14:52 von Hotbird »

Offline networker

  • Full Member
  • ***
  • Beiträge: 141
Antw:Sonos steuern
« Antwort #3262 am: 08 April 2019, 11:17:31 »
Hallo Reinerlein
Kann man beim Sonos Device einstellen das ein Wechsel im state auch ein EVENT erzeugt?

Gruß Networker

Offline andre07

  • Jr. Member
  • **
  • Beiträge: 87
Antw:Sonos steuern
« Antwort #3263 am: 13 April 2019, 13:27:35 »
Hallo

Funtioniert die sprachausgabe mit Amazon Polly mit Sonos oder ist nur meine Konfiguration falsch
defmod Sonos SONOS localhost:4711 120 1 5
attr Sonos DbLogExclude .*
attr Sonos Speak1 mp3:sudo /usr/local/bin/aws polly synthesize-speech --output-format mp3 --voice-id Marlene --text '%text%' %filename%
attr Sonos SubProcessLogfileName ./log/Sonos_SubProcess.log
attr Sonos room Sonos
attr Sonos targetSpeakDir /mnt/SonosSpeak
attr Sonos targetSpeakFileHashCache 1
attr Sonos targetSpeakFileTimestamp 0
attr Sonos targetSpeakMP3FileDir /mnt/SonosSpeak
attr Sonos targetSpeakURL \\192.168.178.95\SonosSpeak
attr Sonos verbose 3
Im log ist das zu finden
SONOS1: Beim Setzen der MP3-Informationen (ID3TagV2) ist ein Fehler aufgetreten: Can't call method "config" on an undefined value at ./FHEM/00_SONOS.pm line 4148.
SONOS1: Start temporary playing of "\\192.168.178.95\SonosSpeak/RINCON_5CAAFD243CDE01400_MR_Speak_b11fea48be3e22f1d01720c23e35012502b48dbd.mp3"
Sonos player meldet dies
PlayURITemp: Error! UPnP-Fault-Fields: Code: "s:Client", String: "UPnPError", Actor: "-", Detail: "{UPnPError => {errorCode => 701}}"Mit nod-red und auf der konsole lassen sich mp3 mit Polly erstellen.

Andre


 

decade-submarginal