FHEM Forum

FHEM - Anwendungen => Multimedia => Thema gestartet von: willib am 07 Januar 2019, 13:02:26

Titel: SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: willib am 07 Januar 2019, 13:02:26
Sonos gruppiert einen Player mit dem Player auf dem zuletzt die Wiedergabe gestartet wurde mit einem langem Druck auf die Play Taste. Ein weiterer langer Druck entfernt den Player wieder aus der Gruppe.
Kann Ich diese Funktionalität per einfachem notify nachbilden - sprich einen langen Tastendruck auf Play per FHEM simulieren?
Danke.
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: willib am 11 Februar 2019, 22:11:50
Ich habe einen Ansatz gefunden. Am Sonos Haupt-Device bekomme ich die nötigen Informationen.
Internals:
   DEF        localhost:4711 30 1 5
   DELAYTIME  5
   DeviceName localhost:4711
   FD         105
   FUUID      5c4cb6b6-f33f-7452-9263-081ce7c4515e9d23
   INTERVAL   30
   NAME       Sonos
   NOTIFYDEV  global
   NR         25
   NTFY_ORDER 50-Sonos
   PARTIAL   
   STATE      opened
   TYPE       SONOS
   WAITTIME   1
   READINGS:
     2019-02-11 07:39:53   AllPlayer       ['Sonos_Bad_X','Sonos_Gaesteklo','Sonos_Kueche','Sonos_Wohnzimmer']
     2019-02-11 07:39:53   AllPlayerCount  4
     2019-02-11 07:39:53   AllPlayerNotBonded ['Sonos_Bad_X','Sonos_Gaesteklo','Sonos_Kueche','Sonos_Wohnzimmer']
     2019-02-11 07:39:53   AllPlayerNotBondedCount 4
     2017-06-27 15:47:28   LastActionResult RefreshShareIndex: Success!
     2019-02-11 21:49:57   LastProcessAnswer 1549918197
     2019-02-10 17:42:29   LastProcessRestart 2019-02-10 17:42:29
     2019-02-10 17:42:29   LastProcessRestartCount 34
     2019-02-11 07:27:41   LineInPlayer    ['Sonos_Wohnzimmer']
     2019-02-11 07:39:53   MasterPlayer    ['Sonos_Bad_X','Sonos_Gaesteklo','Sonos_Kueche','Sonos_Wohnzimmer']
     2019-02-11 07:39:53   MasterPlayerCount 4
     2019-02-11 21:48:26   MasterPlayerNotPlaying ['Sonos_Bad_X','Sonos_Kueche','Sonos_Wohnzimmer']
     2019-02-11 21:48:26   MasterPlayerNotPlayingCount 3
     2019-02-11 21:48:26   MasterPlayerPlaying ['Sonos_Gaesteklo']
     2019-02-11 21:48:26   MasterPlayerPlayingCount 1

Soweit ich sehe steht der zuletzt gestartete Player vorne im Reading MasterPlayerPlaying.
Der Befehl zum Gruppieren lautet also in diesem Fall für meinen Küchen Player
set Sonos Groups [Sonos_Gaesteklo, Sonos_Kueche]
Nun soll das Ganze natürlich variabel immer den zuletzt gestarteten Player als Master nutzen. Was muss ich jetzt tun um nur den ersten Player aus dem Reading ohne die Zeichen [''] zu übergeben?
Im Idealfall kann ich wie mit dem langen Druck auf die Play Taste am Player durch die laufenden Player "zappen" und diese dann nacheinander mit dem Player in der Küche Gruppieren und wieder Lösen.

Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: willib am 12 Februar 2019, 20:18:33
Ich habe es mit split Versucht. Ich nutze es in einem DOIF. Das ist der Zweig
([KU_4But_Btn_01:"^Long.1.*$"])({my $var = (split("'",ReadingsVal("Sonos","MasterPlayerPlaying","")))[1];; fhem("set Sonos Groups [$var, Sonos_Kueche]")})
Das klappt aber nicht. Im Log wird mir mit Verbose 5 folgendes angezeigt:
2019.02.12 20:18:59 4: di_KU_SonosFB: error in default:  Sonos_Kueche

Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: Reinerlein am 12 Februar 2019, 22:45:42
Hi willib,

allgemein ist es am Besten die Strukturen per eval() in eine Perl-Struktur zurückzuverwandeln, und damit dann zu arbeiten.

Allerdings ist die Grundlage falsch. Die Listen werden alphabetisch sortiert ausgegeben, dort steht also nicht der zuletzt gestartete Player vorne.
Du müsstest dir diese Liste mittels eines Notify merken, um bei Veränderung eben den neu hinzugekommenen Player (oder mehrere) zu erkennen und irgendwie zu speichern.

Grüße
Reinerlein
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: willib am 13 Februar 2019, 10:06:10
Danke Reinerlein, für den Hinweis mit der alphabetischen Sortierung. Deine vorgeschlagenen Maßnahmen übersteigen leider bei weitem meine Fähigkeiten.
Darf ich vielleicht vorsichtig den Wunsch äußern, dass du diese Sonos Funktion des Gruppierens bei langem Tastendruck auf die Playtaste in dein Modul mit aufnimmst? Sodass man die Möglichkeit hat diese über FHEM zu nutzen ohne die Taste am Player drücken zu müssen.
Kennst du diese Funktion?
Wir nutzen diese häufig um die Musik vom CD Player der an ein Play5 angeschlossen ist in andere Räume mitzunehmen. Das geht sehr viel schneller als über die Sonos App.
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: Reinerlein am 13 Februar 2019, 13:05:51
Hi willib,

hier mal ein Anfangs-Beispiel für das Notify:

define Sonos_LastPlayingPlayerNotify notify Sonos_.*:transportState:PLAYING setreading Sonos_LastPlayingPlayerNotify playername $NAME

Eigentlich sollte das den Playernamen ermitteln...

Dann brauchst du nur noch z.B. folgenden Perl-Code zum Gruppieren ausführen:

my $addplayername = ''; # Hier der Playerdevicename, der zum letzten abspielenden hinzugefügt werden soll
fhem('set '.ReadingsVal('Sonos_LastPlayingPlayerNotify', 'playername', '').' AddMember '.$addplayername);


Beachte, dass der letztere Code nicht auf ein Abspiel-Startevent ausgeführt wird, da dann das Reading bereits überschrieben worden sein könnte...

Ich habe leider gerade sehr wenig Zeit, und noch einiges anderes auf dem Tisch...

Grüße
Reinerlein
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: willib am 13 Februar 2019, 16:25:24
Ich Danke Dir vielmals, dass du dir trotzdem die Zeit genommen hast mir eine Lösung für mein Grundproblem zu präsentieren. Ich probiere es heute Abend aus.

Vielleicht gelingt es mir ja mit deinem Ansatz, die Gruppierung per Play Taste vollständig nachzubauen.

Könntest du dir grundsätzlich vorstellen dein Modul um diese Funktion zu erweitern, wenn es deine Zeit und deine Prioritäten erlauben?

Gutes Gelingen für die anderen Sachen auf deinem Tisch.
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: willib am 14 Februar 2019, 11:00:31
Funktioniert. Vielen Dank.
Ich habe ein usereading am notify erstellt und das notify mit einem punkt geändert da der Event an der Stelle ein Leerzeichen hat.
define Sonos_LastPlayingPlayerNotify notify Sonos_.*:transportState:.PLAYING setreading Sonos_LastPlayingPlayerNotify playername $NAME

Heute morgen waren alle Sonos player disappeared. Die Ursachen dafür untersuche ich noch.
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: Abercrombie1892 am 14 Mai 2019, 22:05:15
wäre wirklich toll, wenn diese funktion ins modul eingepflegt werden könnte.

würde so einiges leichter machen.
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: diko am 15 Mai 2019, 12:04:18
Ja, das würde mir auch sehr zusagen.
Danke
Titel: Antw:SONOS langen Tastendruck auf Play simulieren - für automatische Gruppierung
Beitrag von: Pete37 am 22 März 2021, 21:59:53
Die Funktion fände ich auch sehr praktisch