Autor Thema: Sonos Arc - HDMI eARC transportState / Sound-Format  (Gelesen 286 mal)

Offline Eragos

  • New Member
  • *
  • Beiträge: 18
Sonos Arc - HDMI eARC transportState / Sound-Format
« am: 28 Oktober 2021, 17:42:25 »
Hallo zusammen,

bis vor kurzen habe ich Sonos One genutzt, um über AirPlay meinen TV den Ton auszuspielen. Zuspieler ist in meinem Fall ein AppleTV 4K. Dabei habe ich über den transportState die Raumbeleuchtung entsprechend angepasst – bei Play runter gedimmt oder bei Pause wieder heller usw.

Nun habe ich eine Sonos Arc über HDMI (eARC) am TV angeschlossen. Für die Sonos kommt der Sound, egal ob Play oder Pause, kontinuierlich als SPDIF-Wiedergabe an und so ist der transportState auch immer auf Play. Leider nimmt mir das damit die Steuermöglichkeit für das Licht. Über den Apple TV bekomme ich es ebenfalls nicht mit, da es keine Public-API dafür gibt.

Ich habe aber gesehen, dass die Sonos App zum Beispiel das aktuelle gespielte Sound-Format (Doly Atmos, 5.1, PCM Stereo etc.) ausgibt. Das würde mir zum Steuern schon ausreichen. Allerdings hat das FHEM Sonos Modul das Reading nicht implementiert.
Evtl. gibt es ja sogar die Möglichkeit den transportState irgendwie in dem SPDIF-Modus herauszufinden.

Viele Grüße
Micha

Offline Eragos

  • New Member
  • *
  • Beiträge: 18
Antw: Sonos Arc - HDMI eARC transportState / Sound-Format
« Antwort #1 am: 07 November 2021, 16:55:41 »
Hallo zusammen,

ich habe mir erst einmal folgende quick and dirty Lösung gebastelt. Nicht schön aber besser als nichts ;-)

defmod HTTPMOD.RINCON_F0F6C177AAC601400 HTTPMOD http://192.168.178.64:1400/status/zp 10
attr HTTPMOD.RINCON_F0F6C177AAC601400 userattr reading01Regex reading01XPath-Strict
attr HTTPMOD.RINCON_F0F6C177AAC601400 alias Sonos Arc
attr HTTPMOD.RINCON_F0F6C177AAC601400 enableXPath 1
attr HTTPMOD.RINCON_F0F6C177AAC601400 reading01Name HTAudioInCode
attr HTTPMOD.RINCON_F0F6C177AAC601400 reading01XPath-Strict //HTAudioInCode/text()
attr HTTPMOD.RINCON_F0F6C177AAC601400 stateFormat { \
    my $HTAudioInCode = ReadingsVal($name,"HTAudioInCode",0);;\
    my $r = "Code: $HTAudioInCode";;\
    \
    if ($HTAudioInCode =~ /32/      ) {$r = "DTS";;}\
    if ($HTAudioInCode =~ /59/      ) {$r = "Doly Atmos";;}\
    if ($HTAudioInCode =~ /33554434/) {$r = "Stereo PCM 2.0";;}\
    if ($HTAudioInCode =~ /33554488/) {$r = "Dolby Digital 2.0";;}\
    if ($HTAudioInCode =~ /84934713/) {$r = "Dolby Digital 5.1";;}\
    if ($HTAudioInCode =~ /84934714/) {$r = "Dolby Digital Plus 5.1";;}\
    \
    if ($HTAudioInCode =~ /22/      ) {$r = "stop";;} ##Silence\
    if ($HTAudioInCode =~ /33554454/) {$r = "stop";;} ##Silence\
    if ($HTAudioInCode =~ /0|21/    ) {$r = "stop";;} ##No Signal\
\
    return "$r";;\
}

Viele Grüße
Micha

 

decade-submarginal