Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

mike.d

ich hab ein Problem mit dem transportState - wenn sich der Player in einem Verbund befindet, dann wird das Reading scheinbar nicht adäquat von PLAYING auf PAUSED_PLAYBACK und umgekehrt geändert.

Muss ich irgendwas beachten - gibt es ein alternatives Reading, um auf den tatsächlichen Status zu reagieren?

dev0

Hier hatte Reiner die Frage zu dem transportState schon einmal beantwortet. Um das zu umgehen, kannst Du z.B. in einem Notify auf alle transportStates reagieren um dann ggf. zusätzliche Events auslösen, wenn der Player Slaves hat. Ist zwar sehr auf das Smartvisu Widget für Sonos zugeschnitten, aber hier würdest Du ein Beispiel dazu finden.

Nobby1805

Seit ein paar Tagen funktioniert bei mir set Sonos_Schlafzimmer PlayURITemp \\Homeserver\Musik\xx.mp3 50 nicht mehr :(
Ich habe jetzt schon verbose auf 5 gesetzt aber es wird keine Meldung ausgegeben

Nach einem Restart des Fhem läuft es jetzt wieder ... aber warum? Das gleiche hatte ich vor ein paar Wochen schon einmal  :-\
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Mumpitz

Hallo Nobby

Bei mir exakt das gleiche Problem!

klemmi86

Hallo Gemeinschaft,

ich habe einen Wunsch an meine Verbindung FHEM-SONOS um die Usability weiter zu vereinfachen.
Hintergrund: Wenn die Internetverbindung oder Stromverbindung an den Playern ausfällt, vergessen diese den letzten Stream. Wenn man dann am nächsten morgen zum Zähneputzen ohne iPhone in das Bad geht, erfolgt bei Klick auf die Playtaste nichts. Ebenso möchten wir auch gern ohne Handy zwischen unseren beiden Favoritensendern umschalten können.

Daher mein Wunsch: Ein Druck auf die Playtaste startet den letzten gespeicherten Stream (meistens Internetradio), also alles wie gehabt. Jetzt kommt die Aufgabe: Doppelklick auf die Playtaste startet Stream1 (URL bekannt), sollte uns das Lied nicht gefallen wechseln wir mit weiteren Doppelklick auf Stream2. Weiterer Doppelklick wieder Stream1.

Lässt sich so etwas im FHEM abbilden? Falls ja, wäre es schön, wenn ihr mich ein wenig an die Hand nehmen könntet bzw. mir zeigen könntet, wo ich was einstellen kann.

Besten Dank!
Daniel

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dev0

Zitat von: klemmi86 am 17 Februar 2016, 10:01:57
Doppelklick auf die Playtaste startet Stream1
Oder wäre es nicht einfacher und flexibler einen x-beliebigen (Funk)taster zu nehmen und die gewünschten Funktionen über Notifies selbst zu gestalten?

klemmi86

Zitat von: justme1968 am 17 Februar 2016, 10:08:33
schau mal hier: http://www.fhemwiki.de/wiki/SONOS#Beispiel_zum_automatischen_Abspielen_einer_Liste_nach_dem_Einschalten_eines_Players.

das habe ich bereits gesehen, denke aber, das es nicht meinen Anforderungen entspricht. Ich möchte ja nicht immer Sender X nach dem Einschalten hören, sondern im Regelfall soll einfach wie gehabt der letzte Sender weiterlaufen und wenn mir danach ist, möchte ich ohne Controller/App/Weboberfläche auf meinen 2. Lieblingssender umschalten - und bei Bedarf wieder zurück.

Zitat von: dev0 am 17 Februar 2016, 10:14:03
Oder wäre es nicht einfacher und flexibler einen x-beliebigen (Funk)taster zu nehmen und die gewünschten Funktionen über Notifies selbst zu gestalten?

Ich habe derzeit nur ZigBee über Hue sowie Sonos integriert. Eine Schnittstelle zu anderen Funkfrequenzen wird nicht angesteuert. Zudem möchte ich auch unnötige Taster in der Wohnung vermeiden, allein schon des WAF wegen. Ich möchte das use+feel des Sonos Play:1 nicht unbedingt neu erfinden, sondern mir nur die Gelegenheit öffnen, ohne weitere Hardware direkt am Play:1 die Sender umzuschalten. Im Endeffekt eine "virtuelle" Taste hinzufügen, die zwischen 2 Lieblingssender hin und herschalten kann.

besten Dank für Eure Hilfe
Daniel

Reinerlein

Hi Daniel,

das Problem mit der Playtaste am Player ist, dass diese kein eigenes Event sendet (was man dann in Fhem verarbeiten könnte), sondern direkt am Player die Wiedergabe startet oder stoppt.
Gibt es gerade keinen aktiven Stream oder Eintrag in der Wiedergabeliste, und schlägt deswegen die Wiedergabe fehl, bekommt Fhem das nicht mit.

Für die Programmierung gibt es also nur noch die Möglichkeit der Laut-/Leisertasten (früher war der Play-Button ja ein Mute-Button, da konnte man ihn auch benutzen).
Du könntest also zum einen den Hinweis auf das Wiki verfolgen. Damit kannst du erstmal erreichen, dass an dem Player immer ein Radiostream "aktiv" ist. Das bedeutet nicht, dass er gerade abgespielt wird, sondern nur, dass er abgespielt werden könnte. Damit funktioniert der Druck auf die Player-Playtaste immer.

Dann könntest du am Fhem-Sonosplayer-Device ein Attribut buttonEvents definieren. Zum Beispiel:

attr player buttonEvents 1:UD 1:DU
Damit erhältst du in Fhem ein Event, wenn du innerhalb von einer Sekunde die Buttons für die Lautstärke Hoch/Runter (bzw. Runter/Hoch) nacheinander drückst.

Da kannst du dann mit einem Notify drauf reagieren, und deinen Stream schalten. In Kladde ungefähr so:

notify player:ButtonEvent.(UD|DU) {
  if ($EVTPART1 eq 'UD') { # Sender 1 aktivieren
  } elsif ($EVTPART1 eq 'DU') { # Sender 2 aktivieren
  }
}
Du kannst hier natürlich auch ein Hoch-/Runterdurchschalten durch eine Liste von Sendern realisieren...

Ansonsten bleibt, wie schon erwähnt, nur irgendwelche Schalter anzubringen...

Grüße
Reiner

Gorean

Hallo,

nachdem ich seit gestern ein glücklicher Besitzer eines Play:5 bin muss ich sagen, dass das SONOS Modus echt einfach zu konfigurieren ist. Vielen Dank an Reinerlein für seine Arbeit. Die Musikwiedergabe klappt wie geplant.

Leider habe ich noch ein Problem mit der Sprachausgabe. Hier bekomme ich von der Google TTS Engine immer einen 403 Forbidden error.

Jetzt habe ich gerade gelesen, dass Google anscheinend den Free Access zur TTS Engine eingestellt haben soll. Es soll nur noch mit API Key gehen.

Kann das jemand von Euch bestätigen?

VG,
Peter

klemmi86

Zitat von: Reinerlein am 17 Februar 2016, 12:34:22

Da kannst du dann mit einem Notify drauf reagieren, und deinen Stream schalten. In Kladde ungefähr so:

notify player:ButtonEvent.(UD|DU) {
  if ($EVTPART1 eq 'UD') { # Sender 1 aktivieren
  } elsif ($EVTPART1 eq 'DU') { # Sender 2 aktivieren
  }
}

Grüße
Reiner

Hallo Reiner,

das klingt super, so würde ich das gern umsetzen. Allerdings fehlt es mir da noch an Übung. Ich habe in meinem Sonos-Player für die Küche nun folgende Attribute:

(https://dl.dropboxusercontent.com/u/10352327/Foren/sonos1.PNG)

soweit denke ich mal OK, allerdings weiß ich mir leider nicht zu helfen das notify anzulegen - ist denn meine Syntax überhaupt richtig?

define Notify_Sonos_Kueche notify Sonos_Kueche:ButtonEvent.(UD|DU) {
  if ($EVTPART1 eq 'UD') { StartRadio <Mallorca 95.8>
  } elsif ($EVTPART1 eq 'DU') { StartRadio <MDR JUMP 103.0 (Pop)>
  }
}


bekomme nur das hier heraus:
(https://dl.dropboxusercontent.com/u/10352327/Foren/sonos2.PNG)


Vielen Dank!
Daniel

Reinerlein

Hi Daniel,

sieht doch schon gut aus. Im Notify befindest du dich wegen der {}-Klammern im Perl-Modus.
Bedeutet, dass du deine Steuerung mit dem Befehl fhem() bauen musst (das Beispiel hier ist für die Eingabe über die Weboberfläche mittels Def-Änderungs-Button gedacht):

Sonos_Kueche:ButtonEvent.(UD|DU) {
  if ($EVTPART1 eq 'UD') {
    fhem("set Sonos_Kueche StartRadio Mallorca%2095.8");
  } elsif ($EVTPART1 eq 'DU') {
    fhem("set Sonos_Kueche StartRadio MDR%20JUMP%20103.0%20(Pop)");
  }
}
Allerdings musst du diese beiden Radiosender auf jeden Fall in deinen eigenen Radiosendern haben. Das kannst du in der Fhem-Oberfläche an dem Player mittels eines get-Aufrufs mit dem Parameter "Radios" sehen. Die Liste, die du dann siehst, sind die verwendbaren Radiosender.
Wenn dein gewünschter nicht dabei ist, dann musst du den mit dem Sonos-Controller erst hinzufügen...

Grüße
Reiner

klemmi86

Hallo Reiner,

vielen Dank für Deine Hilfe. Ich habe in der Radio-Sektion folgendes gefunden:
(https://dl.dropboxusercontent.com/u/10352327/Foren/2radios.PNG)

demnach müsste ich meine Radiosende wohl "Mallorca%2095.8" sowie "MDR%20JUMP" nennen. Das habe ich auch getan. Allerdings möchte der Player immer noch keinen Stream ausspucken..

(https://dl.dropboxusercontent.com/u/10352327/Foren/2notify.PNG)

findest Du evtl den Fehler? Liegt es evtl daran, dass wir bei ATTR buttonEvent´s´ benutzt haben (also mit s)? Oder ist in meiner Syntax noch etwas falsch? Muss irgendwie ein Perl-Interpreter installiert werden?


Reinerlein

Hallo Daniel,

hmm... das sollte alles stimmen. Das Attribut hat die Mehrzahl, weil man mehrere definieren kann. Wir haben ja auch zwei verschiedene definiert. Das Event ist dann aber natürlich Einzahl.

Du müsstest im ersten Schritt mal im Event-Monitor schauen, ob das Event überhaupt auftaucht. Wenn ja, schau dir mal die genaue Schreibweise des Events an, und vergleiche das nochmal mit dem Notify.

Zugleich kannst mal den set-Aufruf für den Radiostream direkt eingeben und testen.
Also in der Eingabebox

set Sonos_Kueche StartRadio Mallorca%2095.8
eingeben und Enter drücken.

Grüße
Reiner

klemmi86

Hallo Reiner,

ich denke ich bin kurz vor dem Durchbruch. Der Event wird bei UD DU erfolgreich getriggert:

(https://dl.dropboxusercontent.com/u/10352327/Foren/2events.PNG)

Auch der direkte Aufruf per set Sonos_Kueche StartRadio Mallorca%2095.8 funktioniert! Allerdings in Kombination habe ich noch keinen Erfolg. Ich werde nun einmal probieren und testen, ob es an irgendeiner Schreibweise liegt.
Kann es $evtpart1 liegen? Oder das oben im Notify im Bereich Regexp Wizard die ButtonEvents getrennt dargestellt sind?

Beste Grüße
Daniel