UPNPController, DLNAController und Multiroom

Begonnen von KölnSolar, 11 Februar 2022, 17:24:12

Vorheriges Thema - Nächstes Thema

MichaelT

Hallo.

neue Module im Einsatz:

für mich sieht es so aus, als wenn die SessionID nicht bis zum DLNAController durchkommt.
Multiroomsupport wird zwar gesetzt - aber wegen "Groups" nicht wegen "SessionID".

2022.02.20 17:10:35.570 5: UPNPController: Received event: by 192.168.4.30_51053-zs-SpeakerManagement UPnP::ControlPoint::Service=HASH(0x32195fc) $VAR1 = 'Groups';
$VAR2 = '<?xml version="1.0" ?><groups version="1.0"></groups>';
$VAR3 = 'SessionID';
$VAR4 = '';

2022.02.20 17:10:35.595 5: SYS_UPNP: dispatch SpeakerManagement|192.168.4.30_51053|Groups|<?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.20 17:10:35.595 4: DLNAController: message from SYS_UPNP, message: SpeakerManagement|192.168.4.30_51053|Groups|<?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.20 17:10:35.595 5: DLNAController: message parameters: SpeakerManagement, 192.168.4.30_51053, Groups, <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.20 17:10:35.595 5: DLNAController: DG_BUE_MR process property Groups, xml-event <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.20 17:10:35.595 4: DLNAController: DG_BUE_MR parsing did enter load_xml call: <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.20 17:10:35.596 3: DLNAController: DG_BUE_MR property Groups, propertyval: <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.20 17:10:35.596 4: DLNAController DG_BUE_MR: state update from SYS_UPNP, address 192.168.4.30_51053
2022.02.20 17:10:35.633 3: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event SessionID not yet implemented
2022.02.20 17:10:35.633 4: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event details: $VAR1 = '';

2022.02.20 17:10:35.636 5: UPNPController: Received event: by 192.168.4.30_51053-zs-SessionManagement UPnP::ControlPoint::Service=HASH(0x32197b4) $VAR1 = 'SessionID';
$VAR2 = '';

2022.02.20 17:10:35.660 3: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event SessionID not yet implemented
2022.02.20 17:10:35.660 4: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event details: $VAR1 = '';

2022.02.20 17:11:35.117 5: UPNPController: try to renew subscriptions for services, device SYS_UPNP



Hier kommt er gar nicht vorbei:

  } elsif($property eq "SessionID") {
    #TODO search for other speakers with same sessionId and add them to multiRoomUnits
Log3 $hash, 3, "DLNAController: $hash->{NAME} property SessionID, propertyval: $propertyval";
    $hash->{helper}{sessmgmt} = 1;
    readingsSingleUpdate($hash, "sessionId", $propertyval, 1);
    readingsSingleUpdate($hash, "multiRoomSupport", 1, 1);
  }



Oder ich verstehe es nicht richtig.
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

KölnSolar

Hi Michael,

ZitatMeinst Du sowas?
Genau. Man sieht das event und dann kommt:
Zitat2022.02.19 11:06:58.727 3: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.32_48846 event SessionID not yet implemented
Aber wieso hat es dann funktioniert ?  ??? Also ich meine in der Nutzung.

Zitatfür mich sieht es so aus, als wenn die SessionID nicht bis zum DLNAController durchkommt.
Sag ich ja.

ZitatHier kommt er gar nicht vorbei:
Klar. Bleibt bereits im UPNPController hängen. Ich dachte aber ich hätte das jetzt gelöst.  :-[

Die Log-Zeile hast Du ja eingebaut. Was sagt denn das Log zu der Stelle, von wo Du es kopiert hast, also bei Groups ?

Funktionalität müsste klappen, wenn Du     $hash->{helper}{sessmgmt} = 1; in den "Groups-Block" packst.

Ich gucke....

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

KölnSolar

#17
Bist Du sicher, dass Du ein reload für den UPNPController gemacht hast ?  :-\

Ich hab mir ein test_dispatch eingebaut und das sieht gut aus2022.02.20 22:16:31 5: UPNP_Controller: dispatch SessionManagement|192.168.178.62_9197|SessionId|test
2022.02.20 22:16:31 4: DLNAController: message from UPNP_Controller, message: SessionManagement|192.x.y.z_9197|SessionId|test
2022.02.20 22:16:31 5: DLNAController: message parameters: SessionManagement, 192.x.y.z_9197, SessionId, test


Danach hab ich multiroomSupport.

Edit: Und dann funktionieren multiroomVolume und multiroomMute auf meinem Samsung  ;D
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

MichaelT

Moin,

ZitatAber wieso hat es dann funktioniert ?
Die Nutzung funktioniert, da bei einem Play immer eine neue Session erzeugt wird und addUnit diese nur nutzt.
Sobald man eine neuen Stream "played", wird wieder eine neue Session erzeugt und alle "geaddeten" sind wieder weg, da die "damalige" Session
nicht im Modul gespeichert wurde.

ZitatDie Log-Zeile hast Du ja eingebaut. Was sagt denn das Log zu der Stelle, von wo Du es kopiert hast, also bei Groups ?
Multiroomsupport wird zwar gesetzt - aber wegen "Groups" nicht wegen "SessionID".
Logausgaben sind vorhanden
2022.02.20 17:10:35.596 3: DLNAController: DG_BUE_MR property Groups, propertyval: <?xml version="1.0" ?><groups version="1.0"></groups>

ZitatBist Du sicher, dass Du ein reload für den UPNPController gemacht hast ?
Ja, habe sogar nach dem Kopieren ein Restart fhem gemacht.

Gruß Michael, muss jetzt schaffen.


Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

KölnSolar

Hi Michael,

das ist seltsam. Hab mir gerade die eingestellte Version angeguckt, ob ich vielleicht eine Falsche eingestellt hatte. Passt aber.

Entweder müsste richtigerweise dispatched werden oder die (noch falsche) Logmeldung         Log3 $hash, 5, "UPNPController: $hash->{NAME}: empty event $msgtype found" if ($msg);
müsste auftauchen. Kannst Du diese Zeile(in UPNPController_checkdispatch) mal so abändern Log3 $hash, 5, "UPNPController: $hash->{NAME}: checking event $msgtype against event_map";

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

MichaelT

Guten Abend,

geänderte Debugausgabe:

2022.02.21 18:37:51.845 4: DLNAController: DG_BUE_MR Update reading nextAVTransportURI with
2022.02.21 18:37:51.845 4: DLNAController: DG_BUE_MR Update reading CurrentMediaDuration with 0:00:00
2022.02.21 18:37:51.845 4: DLNAController: DG_BUE_MR Update reading CurrentTrackDuration with 0:00:00
2022.02.21 18:37:51.846 4: DLNAController DG_BUE_MR: state update from SYS_UPNP, address 192.168.4.30_51053
2022.02.21 18:37:51.872 5: UPNPController: Received event: by 192.168.4.30_51053-zs-SpeakerManagement UPnP::ControlPoint::Service=HASH(0x32195fc) $VAR1 = 'Groups';
$VAR2 = '<?xml version="1.0" ?><groups version="1.0"></groups>';
$VAR3 = 'SessionID';
$VAR4 = '';

2022.02.21 18:37:51.896 5: SYS_UPNP: dispatch SpeakerManagement|192.168.4.30_51053|Groups|<?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.21 18:37:51.896 4: DLNAController: message from SYS_UPNP, message: SpeakerManagement|192.168.4.30_51053|Groups|<?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.21 18:37:51.896 5: DLNAController: message parameters: SpeakerManagement, 192.168.4.30_51053, Groups, <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.21 18:37:51.896 5: DLNAController: DG_BUE_MR process property Groups, xml-event <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.21 18:37:51.897 4: DLNAController: DG_BUE_MR parsing did enter load_xml call: <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.21 18:37:51.897 3: DLNAController: DG_BUE_MR property Groups, propertyval: <?xml version="1.0" ?><groups version="1.0"></groups>
2022.02.21 18:37:51.897 4: DLNAController DG_BUE_MR: state update from SYS_UPNP, address 192.168.4.30_51053
2022.02.21 18:37:51.933 5: UPNPController: SYS_UPNP: checking event SessionID against event_map
2022.02.21 18:37:51.933 3: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event SessionID not yet implemented
2022.02.21 18:37:51.933 4: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event details: $VAR1 = '';

2022.02.21 18:37:51.936 5: UPNPController: Received event: by 192.168.4.30_51053-zs-SessionManagement UPnP::ControlPoint::Service=HASH(0x32197b4) $VAR1 = 'SessionID';
$VAR2 = '';

2022.02.21 18:37:51.959 5: UPNPController: SYS_UPNP: checking event SessionID against event_map
2022.02.21 18:37:51.959 3: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event SessionID not yet implemented
2022.02.21 18:37:51.959 4: UPNPController: SYS_UPNP: uniqueDeviceName 192.168.4.30_51053 event details: $VAR1 = '';




Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

KölnSolar

Nun bin ich sicher, dass Du reloaded hast.  ;)

Jetzt kann es eigentlich nur daran liegen, dass ich
ZitatSessionID
anders geschrieben habe, aber ich seh keinen Unterschied

zu
  my $property_map = {
    Groups     => "SpeakerManagement",
    SessionId  => "SessionManagement"

und
if (exists($property_map->{$msgtype})) {
sollte wahr sein.

;D ;D ;D ;D Hahaha, das passiert, wenn man nicht mit eigener Hardware testen kann. Jetzt im direkten Vergleich sieht man es.

Mach doch mal in Zeile 74 ein D aus dem d  ::)
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

MichaelT

Hi,

Genau das habe ich gerade auch gesehen.
Jetzt ist die SessionID in den reading!   ;D
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

MichaelT

Hi,

ich bin begeistert. Mal grob getestet. Klappt alles soweit.

Danke Dir.

Gruß Michael
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

MichaelT

Nochmal Hi,

hast Du noch eine Idee, warum bei addUnit nicht die verfügbaren Devices (sessionmgm1==1) angezeigt werden?
Blick da nicht ganz durch, ob {helper}{sessionmgmtClients} hier die richtigen Werte hat ;-<

addUnit           => {method => \&DLNAController_addUnit, args => 1, argdef => $hash->{helper}{sessmgmtClients}, sessmgmt => 1},
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

KölnSolar

#25
Zitatich bin begeistert. Mal grob getestet. Klappt alles soweit.
Da bin ich aber auch begeistert und erleichtert.

Zitat$hash->{helper}{sessmgmtClients}
haben wir wohl noch nie gehabt. Übersetzt aus dem DLNARenderer müssen wir      #update list of SessionManagement clients(multiroom devices)
      my @sessmgmtClients = DLNAController_sessmgmtClients($hash);
      $hash->{helper}{sessmgmtClients} = "";
      foreach my $client (@sessmgmtClients) {
        #do not add myself
        if($client->{UDN} ne $hash->{UDN}) {
          $hash->{helper}{sessmgmtClients} .= ",".ReadingsVal($client->{NAME}, "friendlyName", "");
        }
      }
      $hash->{helper}{sessmgmtClients} = substr($hash->{helper}{sessmgmtClients}, 1) if($hash->{helper}{sessmgmtClients} ne "");



in sub DLNAController_devicestate einfach am Ende der sub einbauen. Könnte klappen.  :-\

Edit: das kleine Problem ist sicherlich, dass sich das "einschwingen" muss. Beim 1. device gibt es die anderen devices noch nicht. Also bleibt es leer. Das 2. findet das 1. ..... Bei jedem event wird die Liste neu aufgebaut, so dass dann irgendwann alle devices auch alle devices in der Liste haben. So die Theorie meines "Trockentests".
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

MichaelT

Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

MichaelT

Hallo Markus,

habe deinen Vorschlag mal eingebaut, funktioniert.

Versuche gerade mal das mit den Timer (StereoMode) unterzubringen.

Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

KölnSolar

#28
bau den Funktionsaufruf ins define als letzte Zeile. Dann sollte alles wie von selbst gehen. (nach reload und defmod)

Edit:  Aber wieso brauchten wir das noch ?  :-\ Sehe da gerade keinen Sinn drin(und scheinbar auch "Fehler" ? :-\)
Edit2: opjepass(sacht der Kölsche): beim DLNArenderer gab es ja DAS master device. Nun haben wir x Einzeldevices !!! Da müssen wir uns konzeptionell Gedanken machen wann, wo(device) die Attribute multiRoomGroups(saveas,load) und  multiRoomUnits(session: stereo oder multiroom) definiert sind(Und mir gefällt nicht, dass das in Attributen steht). Müsste man nicht beim device, das man "bedient" diese Variablen(eher readings) maintainen und die anderen devices einer session bzw. alle(bei groups) bekommen eine Kopie ?
Oder wir definieren ein device als master ? per define oder attribute ?

RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

MichaelT

Hi,
morgen hab ich wieder etwas Zeit.

Was hältst du von einem weiteren device, welches abhängig von multiroom angelegt wird und die Steuerung übernimmt.
Weiss selbst nicht, ob das gut ist. Wäre dann ähnlich z.B. der app. Die steuert einfach 1 bis x Devices.

Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.