Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

Begonnen von Otto123, 31 Mai 2020, 18:30:55

Vorheriges Thema - Nächstes Thema

binford6000

Zitat von: ch.eick am 19 April 2022, 12:29:02
Hallo zusammen, seit gerade bin ich dann auch dabei :-) Vielen dank für die tolle Vorarbeit.

sonos2mqtt habe ich als Docker Container und die ersten Devices sind nun auch schon ins FHEM gerutscht.

Nun habe ich eine Sonos Base, die bereits erscheint, aber der Sub und die hinteren Sonos 1 Lautsprecher tauchen noch nicht auf.
Kann mir da jemand das Zauberwort nennen, damit die fehlenden Lautsprecher auch erzeugt werden?
Ich verwende das sonos2mqtt_bridge_comfort template.

Gruß
   Christian

Ich habe eine Beam mit Sub und 2x One als "Surround-Quartett"  - es wird aber nur die Beam als Device angelegt.
Genügt ja eigentlich auch oder dröselst du die Surround Speaker immer mal wieder auf? Wenn du das machst müssten
zumindest die Sourround Speaker als Geräte auftauchen...

VG Sebastian

ch.eick

Zitat von: binford6000 am 19 April 2022, 12:36:25
Ich habe eine Beam mit Sub und 2x One als "Surround-Quartett"  - es wird aber nur die Beam als Device angelegt.
Genügt ja eigentlich auch oder dröselst du die Surround Speaker immer mal wieder auf? Wenn du das machst müssten
zumindest die Sourround Speaker als Geräte auftauchen...

VG Sebastian
Hi Sebastian,
danke für die Rückmeldung, das hatte ich unter dem Link auch schon gelesen. Es war halt nur anders als bisher, aber das ist schon okay.
Ich schalte nur zu der 5.1 Konfiguration noch 2x One zusätzlich dazu als pseudo 7.1 , das füllt den Raum besser :-)
Dazu muss ich dann jetzt das DOIF noch anpassen und dann sollte alles wieder gehen.
Ich hoffe, dass das disappear jetzt weg ist :-), was ich auch bei der 5.1 Kombination schon gesehen hatte.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo nochmal,
bisher habe ich anhand solch einer Abfrage erkannt, ob gerade das TV abspielt
[Sonos_Wohnzimmer:currentTrackHandle:[spdif<\/res>.*.<r:streamInfo>(\d)] ] ne "0"

Was habe ich denn jetzt für eine Möglichkeit?
Ich möchte sobald der Fernseher über spdif abgespielt wird eine Sonos Gruppe definieren und diese natürlich nach dem Abspielen wieder auflösen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

binford6000

Zitat von: ch.eick am 19 April 2022, 13:56:11
Hallo nochmal,
bisher habe ich anhand solch einer Abfrage erkannt, ob gerade das TV abspielt
[Sonos_Wohnzimmer:currentTrackHandle:[spdif<\/res>.*.<r:streamInfo>(\d)] ] ne "0"

Was habe ich denn jetzt für eine Möglichkeit?
Ich möchte sobald der Fernseher über spdif abgespielt wird eine Sonos Gruppe definieren und diese natürlich nach dem Abspielen wieder auflösen.

Hallo Christian,
bei mir steht im reading Input dann TV drin. Allerdings kommt der über HDMI-ARC rein und nicht spdif.
Müsstest du mal schauen was bei spdif drin steht.

Ansonsten ggf. noch über den aktuellen Codec:
https://forum.fhem.de/index.php/topic,123728.msg1185263/topicseen.html#msg1185263

Internals:
   BUSY       0
   DEF        http://10.3.3.142:1400/status/zp 0
   FUUID      61883c8c-f33f-0308-2852-97d812062d530404
   FVERSION   98_HTTPMOD.pm:0.259620/2022-04-14
   Interval   0
   MainURL    http://10.3.3.142:1400/status/zp
   ModuleVersion 4.1.10 - 6.7.2021
   NAME       beam_codec
   NOTIFYDEV  global
   NR         361
   NTFY_ORDER 50-beam_codec
   STATE      nur Audio-Wiedergabe
   TYPE       HTTPMOD
   value     
   HttpUtils:
     NAME       
     addr       http://10.3.3.142:1400
     auth       0
     code       200
     compress   1
     conn       
     data       
     displayurl http://10.3.3.142:1400/status/zp
     header     
     host       10.3.3.142
     httpheader HTTP/1.1 200 OK
CONTENT-TYPE: text/xml
Server: Linux UPnP/1.0 Sonos/67.1-27100 (ZPS14)
Connection: close
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    1400
     hu_portSfx :1400
     ignoreredirects 1
     loglevel   4
     path       /status/zp
     protocol   http
     redirects  0
     timeout    2
     url        http://10.3.3.142:1400/status/zp
     sslargs:
   QUEUE:
   READINGS:
     2022-04-19 13:49:54   HTAudioInCode   21
     2022-04-19 13:49:54   audio_codec     nur Audio-Wiedergabe
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://10.3.3.142:1400/status/zp
   defptr:
     readingBase:
       HTAudioInCode reading
     readingNum:
       HTAudioInCode 01
     readingOutdated:
     requestReadings:
       update:
         HTAudioInCode reading 01
Attributes:
   alias      Beam Audio Codec
   enableXPath 1
   event-on-change-reading .*
   icon       sonos_play1
   reading01Name HTAudioInCode
   reading01XPath-Strict //HTAudioInCode/text()
   room       60_SONOS
   stateFormat audio_codec
   userReadings audio_codec {
  my $HTAudioInCode = ReadingsVal($name,"HTAudioInCode",0);
  my $r = "Code: $HTAudioInCode";
  if ($HTAudioInCode =~ /32|84934721/) {$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 = "keine Wiedergabe";} # Silence
  if ($HTAudioInCode =~ /33554454/) {$r = "keine Wiedergabe";} # Silence
  if ($HTAudioInCode =~ /0/) {$r = "keine Wiedergabe";} # No Signal   
  if ($HTAudioInCode =~ /21/) {$r = "nur Audio-Wiedergabe";} # No (Video)Signal
  return "$r";
}
   userattr   reading01Regex


VG Sebastian

Kurt77

Hallo,
bei mir werden nach dem Start keine Player gefunden.

Code:
-------------------------
[PM2] Spawning PM2 daemon with pm2_home=/opt/fhem/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /usr/bin/sonos2mqtt in fork_mode (1 instance)
[PM2] Done.
┌─────┬───────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name          │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼───────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ sonos2mqtt    │ default     │ N/A     │ fork    │ 32470    │ 0s     │ 0    │ online    │ 0%       │ 22.4mb   │ fhem     │ disabled │
└─────┴───────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
----------------------------------------

Danke und Gruß,
Kurt

ch.eick

#1160
Zitat von: binford6000 am 19 April 2022, 14:01:24
Hallo Christian,
bei mir steht im reading Input dann TV drin. Allerdings kommt der über HDMI-ARC rein und nicht spdif.
Müsstest du mal schauen was bei spdif drin steht.

Ansonsten ggf. noch über den aktuellen Codec:
https://forum.fhem.de/index.php/topic,123728.msg1185263/topicseen.html#msg1185263

VG Sebastian
Hallo nochmal,
Schritt für Schritt geht es weiter :-)

Bei Verwendung von spdif steht als Input auch TV drin. Geht der Fernseher aus, so erscheit nach ca 10 Minuten dann als Input Radio.
Die Steuerung der Gruppen ist auch etwas anders, aber das klappt schon mal.
Bei spdif scheint der Audio Codec nicht analysiert zu werden, der steht momentan fest auf 21, aber mal schauen, wenn mal ein Block Buster kommt :-)

Was jedoch noch fehlt ist Balance bei Stereo paaren.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

binford6000

ZitatGeht der Fernseher aus, so erscheit nach ca 10 Minuten dann als Input Radio.

Das fange ich mit einem notify auf
(Beam|One|Play1|Roam):transportState:.(PLAYING|STOPPED|TRANSITIONING) {
if ($EVENT =~ /PLAYING/) {
   fhem("set beam_codec reread") if ($NAME eq "Beam");
[...] }

ab. Beim TV Betrieb wechselt das aber recht zügig wenn ich zB. Sender umschalte oder von TV auf
AppleTV/KODI gehe und dort eine zB. DTS Tonspur läuft.

Otto123

@Kurt
Du hast den nodejs auf der gleichen Maschine wie FHEM installiert?
Wie ist der Aufrufparameter?
Der MQTT2_SERVER läuft und die SonosBridge hast Du definiert?
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Sonos2Mqtt

@christian
Zitatscheint der Audio Codec nicht analysiert zu werden, der steht momentan fest auf 21
der Audiocodec wird mW nicht von sonos2mqtt geliefert, der fällt sozusagen beim Einlesen der HardwareInformation über http mit an. Da wird von selbst nichts kommen, müsstest Du anders einlesen.
ZitatWas jedoch noch fehlt ist Balance bei Stereo paaren.
Will man die über FHEM einstellen? Geht in der SonosApp  - und ist doch nichts wo man ständig dreht? In der Front ist es in der SonosApp ja auch nicht angelegt.  ;)

Du kannst aber mit dem Haupt Links Lautsprecher die Lautstärke für beide regeln, mit dem Neben rechts Lautsprecher für diesen separat. War für mich so ein würgaround ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Zum Input: den ermittle ich ja so:
if ($reading eq 'Input') {
   my $currentTrack_TrackUri = ReadingsVal($name,'currentTrack_TrackUri','');
   return $currentTrack_TrackUri =~ 'x-rincon-stream'
      ? 'LineIn': $currentTrack_TrackUri =~ 'spdif'
      ? 'TV'    : ReadingsVal($name,'enqueuedMetadata_UpnpClass','') eq 'object.item.audioItem.audioBroadcast'
      ? 'Radio' : 'Playlist'
  }
}
Da bin ich für Vorschläge offen: wenn es nicht line_in und nicht TV ist frage ich das Reading enqueuedMetadata_UpnpClass ab und wenn dort audioBroadcast drin steht wird es Radio - wenn nicht wird es Playlist. Ich weiß es derzeit nicht besser :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Kurt77

Zitat von: Otto123 am 19 April 2022, 16:22:36
@Kurt
Du hast den nodejs auf der gleichen Maschine wie FHEM installiert?
ja

Wie ist der Aufrufparameter?

pm2 start sonos2mqtt

Der MQTT2_SERVER läuft und die SonosBridge hast Du definiert?
ja

Danke und Gruß,
Kurt

Otto123

@Kurt was gibt Dir dies zurück. Ich habe derzeit nur docker systeme am Start und kann nur aus dem Kopf sagen wo man schauen könnte.
pm2 list

Wie sieht die Bridge aus? Mach mal bitte einelist SonosBridge
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Kurt77

Zitat von: Otto123 am 19 April 2022, 17:29:56
@Kurt was gibt Dir dies zurück. Ich habe derzeit nur docker systeme am Start und kann nur aus dem Kopf sagen wo man schauen könnte.
pm2 list
code:
-----------------------------
                Start and Daemonize any application:                           
                $ pm2 start app.js                                             
                                                                               
                Load Balance 4 instances of api.js:                             
                $ pm2 start api.js -i 4                                         
                                                                               
                Monitor in production:                                         
                $ pm2 monitor                                                   
                                                                               
                Make pm2 auto-boot at server restart:                           
                $ pm2 startup                                                   
                                                                               
                To go further checkout:                                         
                http://pm2.io/                                                 
                                                                               
                                                                               
                        -------------                                           
                                                                               
[PM2] Spawning PM2 daemon with pm2_home=/home/pi/.pm2                           
[PM2] PM2 Successfully daemonized                                               
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
-----------------


Wie sieht die Bridge aus? Mach mal bitte einelist SonosBridge
code:
--------------------------------------
Internals:
   DEVICETOPIC sonos
   FUUID      625eab60-f33f-6c85-bdd9-f42a89adf78d9bf4
   IODev      MQTT2_SERVER
   NAME       SonosBridge
   NR         15
   STATE      connected
   TYPE       MQTT2_DEVICE
   READINGS:
     2022-04-19 14:31:21   attrTemplateVersion 20210303
Attributes:
   IODev      MQTT2_SERVER
   autocreate 1
   bridgeRegexp sonos/(RINCON_[A-Z0-9]+)[:/].* "$1"
   devStateIcon 0:10px-kreis-rot 1:10px-kreis-gelb 2:10px-kreis-gruen
   devicetopic sonos
   getList    Favorites:noArg Favorites {sonos2mqtt($NAME,$EVENT)}
Reply:Favorites,Radios,Playlists Reply {sonos2mqtt($NAME,$EVENT)}
listalarms:noArg Alarms {sonos2mqtt($NAME,$EVENT)}
   icon       mqtt_bridge_2
   model      sonos2mqtt_bridge
   readingList sonos/status/[^/]+/renderingcontrol:.* {}
homeassistant/music_player/RINCON_([0-9A-Z]+)/sonos/config:.* { $TOPIC =~ m,(RINCON_[0-9A-Z]+),; { "config_$1"=>$EVENT }}
sonos/RINCON_([0-9A-Z]+)/Favorites:.* Favorites
sonos/RINCON_([0-9A-Z]+)/Reply:.* Reply
sonos/alarms:.* Alarms
sonos/connected:.* connected
sonos/status/[^/]+/avtransport:.* {}
   room       MQTT2_DEVICE
   setList    CheckSubscription:noArg $DEVICETOPIC/cmd/check-subscriptions
PauseAll:noArg $DEVICETOPIC/cmd/pauseall
announcementall:textField {sonos2mqtt($NAME,$EVENT)}
notifyall:textField {sonos2mqtt($NAME,$EVENT)}
setalarm:textField $DEVICETOPIC/cmd/setalarm
   stateFormat connected
   userReadings favlist:Favorites.* {sonos2mqtt_ur($name,'favlist')},
grouplist:Favorites.* {sonos2mqtt_ur($name,'g
---------------------------------------------------------


Danke und Gruß,
Kurt

ch.eick

#1167
Zitat von: Otto123 am 19 April 2022, 16:22:36
@christian der Audiocodec wird mW nicht von sonos2mqtt geliefert, der fällt sozusagen beim Einlesen der HardwareInformation über http mit an.
Wann wird denn bei mqtt etwas über http eingelesen?
Zitat
Da wird von selbst nichts kommen, müsstest Du anders einlesen.Will man die über FHEM einstellen? Geht in der SonosApp  - und ist doch nichts wo man ständig dreht? In der Front ist es in der SonosApp ja auch nicht angelegt.  ;)
Die Balance setze ich wenn ich die 2x One als Front Lautsprecher zur SonosBase dazu schalte.
Dann nehme ich die in die Gruppe auf und kopple über FHEM volume und mute.
Balance habe ich dann auf das Sofa ausgerichtet.

Zitat
Du kannst aber mit dem Haupt Links Lautsprecher die Lautstärke für beide regeln, mit dem Neben rechts Lautsprecher für diesen separat. War für mich so ein würgaround ;)
Das bedeutet, ich setze beim Haupt Lautsprecher der Stereo Gruppe zuerst die Lautstärke und anschließend sofort beim Rechten eine andere, damit er lauter wie der Linke ist??
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

TomLee

@Kurt

das pm2 list ist als user fhem oder pi ?

Gestartet hast du als user fhem, dann musst auch als user fhem das pm2 list machen.

ch.eick

#1169
Zitat von: Otto123 am 19 April 2022, 16:49:16
Zum Input: den ermittle ich ja so:
< snip >Da bin ich für Vorschläge offen: wenn es nicht line_in und nicht TV ist frage ich das Reading enqueuedMetadata_UpnpClass ab und wenn dort audioBroadcast drin steht wird es Radio - wenn nicht wird es Playlist. Ich weiß es derzeit nicht besser :)
Für mich reicht das so erstmal, bei TV kann ich es aktivieren und wenn es dann auf etwas anderes geht schalte ich die Konfiguration wieder zurück.

Zitat von: binford6000 am 19 April 2022, 15:53:44
Das fange ich mit einem notify auf
(Beam|One|Play1|Roam):transportState:.(PLAYING|STOPPED|TRANSITIONING) {
if ($EVENT =~ /PLAYING/) {
   fhem("set beam_codec reread") if ($NAME eq "Beam");
[...] }

ab. Beim TV Betrieb wechselt das aber recht zügig wenn ich zB. Sender umschalte oder von TV auf
AppleTV/KODI gehe und dort eine zB. DTS Tonspur läuft.
Bei mir wechselt da noch nichts, da ich nur entweder einen TV über spdif oder halt Radio Streame.
Alle anderen Geräte kommen ebenfalls über das TV Gerät und da bekommt Sonos keine Information welche Quelle es ist.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick