Neuentw. Modulpaket zu UPnP: Controller, Device, DLNA(Renderer-Ersatz)

Begonnen von KölnSolar, 15 Februar 2021, 19:29:49

Vorheriges Thema - Nächstes Thema

KölnSolar

Ausgehend von der Fragestellung
Zitat von: https://forum.fhem.de/index.php/topic,114457.msg1087213.html#msg1087213UPnP - Simple Service Discovery Protocol (SSDP) als Basismodul
hat sich ergeben, dass der Fragesteller gerne ein Modul hätte, mit welchem sich ein upnp-device in FHEM anlegen lässt. Durch meine Kenntnis(u. nicht völlige Zufriedenheit) mit dem DLNARenderer habe ich als Ziele für eine Neuentwicklung definiert:

1. FHEM-Modulpaket, welches sowohl Controllerfunktionen, als auch Devicefunktion bereitstellt
2. das Thema UPnP in/mit FHEM für user transparenter zu machen. Also quasi einen sniffer bereitzustellen u. wesentliche Funktionen von UPnP in einem Modul umzusetzen
3. wir haben ein paar Module, die das fremde Perlpaket perlupnp (SONOS,DLNARenderer,entertainTV) oder Net::UPnP(YAMAHA_MC) nutzen. Ein gleichzeitiger Einsatz der nutzenden Module ist nicht möglich.
4. Zumindest das Paket perlupnp blockiert FHEM. Daher eine sinnvolle "Entzerrung" von "technischer" UPnP-Funktionalität u. anwenderspezifischen Funktionalitäten in separate Module.
5. Neue Funktionalität(z.B. DLNA-Control von Mediaservern(SONOS hat das glaub ich eingebaut) oder weitere actions des services RenderingControl.......)

Der Weg zum Ziel:
- es gibt kein Perl-Paket, welches umfassend und non-blocking UPnP unterstützt--> das Paket perlupnp hat noch die umfassendste Funktionalität, ist aber blockierend-->perlupnp nutzen;evtl. später non-blocking "umbauen"
- Das physische Modul UPNPController(Physisch bedeutet in FHEM ein device, welches sich in der einen Richtung um die Kommunikation mit der physischen Hardware kümmert, und in der anderen die Kommunikation zu einem logischen Modul, welches die Anwenderfunktionaltät liefert) ist entstanden, um die technischen Kernfunktionalitäten von UPnP in FHEM abzubilden
- Ebenso das Modul UPNPDevice, um in FHEM ein UPnP-device anzulegen.
- Ein 1. logisches Modul, DLNAController, welches in einem 1. Schritt dem Anwender in Verbindung mit UPNPController die selbe Funktionalität wie der DLNARenderer bietet

Die einzelnen Module des aktuellen Entwicklungsstands und ggfs. "Zubehör" findet Ihr unter folgenden Posts attached.
Da ich selber nur eine begrenzte Anzahl von devices habe, seid bitte vorsichtig in der Nutzung. Möglichst in einer Testumgebung, aber zumindest immer darauf gefasst, dass FHEM abstürzt oder looped !!! Alles ist bisher in einem Betastatus mit Fokus auf technische Funktionalität(ohne freezes, Abstürze.... ;))

Modulbeschreibungen u. Quellcode:
UPNPController - Basismodul (notwendig für logische Module wie DLNAController)
UPNPDevice - UPnP-device in FHEM(Basismodul nicht notwendig;keine user-Funktionalität)
DLNAController - logisches Modul für DLNA; to control Renderer-devices; Basismodul mandatory


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

#1
UPNPController

Das Herz des Modulpakets. Es öffnet 3 Ports für die UPnP-Kommunikation mit dem lokalen Netzwerk. Der Searchport wird mit dem vom User definierten device verbunden.
Bei der Definition werden 2 weitere FHEM-devices automatisch für die beiden anderen Ports angelegt. Sie heißen "UPNPSocket-"userdevicename"-"PortNo(Portno.=1900,random) und liegen im room=hidden. Diese beiden devices sollten niemals von user-Seite verändert werden. Abstürze sind sonst vorprogrammiert !!!!

Das Modul nutzt das Paket perlupnp, welches wir tw. bereits in FHEM/lib/UPnP liegen haben.

Das device wird ohne weitere Parameter definiert, z.B. define UPNP_Controller UPNPController

Mit der Definition wird ein search-request im lokalen Netzwerk mit searchterm=ssdp:all gesendet. Dies bewirkt, dass sämtliche eingehenden UPnP-Notify-messages akzeptiert/verarbeitet werden. Dies passiert aber erst dann, wenn sich ein device gem. UPnP-Standard irgendwann periodisch meldet. Soll heißen, es dauert bis alle devices erstmalig erkannt wurden. Etwas beschleunigen kann man es, indem man z.B. den set-Befehl searchterm mit dem Parameter upnp:rootdevice ausführt. Damit werden alle Rootdevices aufgefordert sich sofort zu melden(tun aber nicht alle). Die searchterms werden zwar nur einmalig gesendet, allerdings wird jede (periodisch) eingehende message eines devices gegen die searchterms geprüft. Daher fiel auch die Wahl auf ssdp:all als initialem searchterm. Wer das beenden möchte kann den stopSearch-Befehl mit dem Parameter des searchterms benutzen. Mit etwas UPnP-Know-How können auch andere searchterms z.B. für bekannte services benutzt werden.

Die gefundenen devices werden als readings angelegt. Dabei wird jedes device durch den readingname IP_Port repräsentiert. Attribute des devices werden 1:1 übernommen u. als readings mit entsprechender Bezeichnung angelegt. Die Services eines devices werden mit devicereadingname-zs-service angelegt. Evtl. vorhandene children mit devicereadingname-zz. Die Syntax mit z hat keine Bedeutung u. dient nur der Sortierung. Bei einer FritzBox lässt sich so z.B. die Hierarchie von devices u. services gut erkennen. Mit verbose=5 sollte umfangreich gelogged werden, so dass man quasi eine Dokumentation der im Netzwerk vorhandenen UPnP-devices erhält. Manche physische devices haben mehrere logische UPnP-devices. Werden sie unter demselben Port angesprochen, so erfolgt eine entsprechende Durchnummerierung IP_Port_x.

Die weitere Funktionalität ist subscribe/unsubscribe. Dahinter steckt, dass der Controller sich bei dem device bzw. service anmeldet u. zukünftig mit events versorgt werden möchte, das device also Statusmeldungen aussendet, die dann im Controller empfangen u. verarbeitet werden. Die subscription muss periodisch erneuert werden(renewal). Das macht das Modul automatisch. Als Parameter für den subscribe/unsubscribe-Befehl ist der vollständige readingname des services einzutragen. Am einfachsten per Copy&Paste.

Das service-reading hat folgende Inhalte:
ohne Aktion   - urn des services
subscribe:      - subscribed (nach set subscribe)
                     - subscription committed, timeout x(nach erfolgreicher subscription)
                      - SID, leasetime, property (nach event)
                      - subscription failed (im Fehlerfall)
                      - subscribed but offline (nach Abmeldung durch das device)
unsubscribe: - unsubscribed

Jedes device hat genau ein zusätzliches presence-reading, welches durch das Modul erzeugt wird. Grundsätzlich anhand der alive/byebye Meldungen eines devices. Ein Sonderfall ist, dass das device z.B. Stromausfall kein byebye aussenden konnte. Dann verbleibt der presence-Status "online". Wurde ein service des devices subscribed, dann wird beim nächsten renewal-Versuch der subscription(also bis zu 30min. !) in den offline-Status versetzt.

Über die Attribute usedonlyIPs, ignoredIPs,acceptedUDNs,ignoredUDNs lässt sich der Umfang der devices einschränken(UDN = Unique Device Name eines devices). Die Einschränkungen per UDN funktionieren nur beim define des Controllers.

Die interne Kommunikation zwischen physischem(UPNPController) und logischem Modul(z.B. DLNAController) erfolgt nach dem FHEM-typischen 2-Stufenmodell(dispatch, iowrite, assignIO)

Autocreate-Mechanismus: devices, für die ein logisches Modul existiert, werden per autocreate automatisch angelegt. Erkennung erfolgt anhand der Services.

Debugging: Attribut debug; auf 1 gesetzt, wird ein UPNP event/message nicht verarbeitet, sondern es werden nur Prüfungen ausgeführt, ob das UPNP event valide ist. Sofern das event i.O. ist, folgt abschließend eine Log-Ausgabe: "...without error but wasn't processed", ansonsten wird der erkannte Fehler protokolliert. Im debug mode erfolgen alle Ausgaben mit log level 3. Weitere Info zum Debugging-Attribut hier.

Changelog
-----------
04.01.23 version v0.0.4(62 downloads)
* fixed: crash of fhem with last Log entry "Can't call method "method" on an undefined value at ./FHEM/98_UPNPController.pm line 396.
* debugging option by attribute debug; forces only checks and logging of results; no processing

27.02.22 version v0.0.4(14 downloads)
* new feature: reading last_event - shows last event with service: IP_Port-zs-service, event and value of event
   very helpful to use events of subscribed services without support by a client module
   (eg. fritzbox, service 192.x.y.z_49000_3-zz-zz-zs-WANIPConn1 signals every change of external IP with the value of the IP)
* implemented: neues reading presentationURL: Liefert für das device die Information von IP/Port/Path mit denen der Zugriff per Webbrowser möglich ist
* fixed: warning Use of uninitialized value in string eq at ./FHEM/98_UPNPController.pm line 573.

31.01.22 version v0.0.3
automatic restart of controlpoint(FHEM restart no longer required, if attributes(envPrefix,envNamespace,ignoredIPs, usedonlyIPs) change)
bug fixing
additional disable attribute(currently without function)

06.05.21(35 downloads)
minor changes

25.04.21 version v0.0.2
new initialization after change of attributes: ignoredIPs, usedonlyIPs, envNamespace, envPrefix
(readings stay untouched)

31.03.21
some bug fixing

13.03.21
postprocessing of services SesssionManagement and SpeakerManagement(Multiroom) added
subscription process changed and optimized(new state possible: subscription committed, timeout x; meaning: device has confirmed subscription with timeout x; no event received so far)
- timeout of each device/service answer is saved
- internal timer runs each minute to check wether a subscription has to be renewed
some bug fixing

27.02.21(13 Downloads)
FHEM restart problem solved
Internal administration by unique UDN instead of IP/Port; automatically deletes no longer used IP/Port readings for devices w. changed IP/Port; 
set delreadings - delete readings - be careful in usage !!!
optimization of presence state and services readings
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

#2
UPNPDevice

diese Modul ist vorerst nur wenig interessant, da es eher für andere Entwickler gedacht ist, die ein "virtuelles" UPnP-device in FHEM erstellen möchten.

zusätzliche Voraussetzungen
- die Datei DeviceManager.pm muss in den Pfad .../FHEM/lib/UPnP kopiert werden
- eine xml-Datei im fhem-Pfad(nicht fhem/FHEM !!!) ist notwendig. Im Standard ist der filename "description.xml". Per attribut file übersteuerbar. Der Pfad mit path.

Das device muss in der beschreibenden xml-Datei mit seinen Eigenschaften und Attributen gem. den UPnP-Standards beschrieben/definiert werden.
Definition für z.B. SMA SEMP
define  UPNPSEMP UPNPDevice

Mit dem define wird ein Hilfsdevice "UPNPSocket-devicename"-"Port für den notification port im room hidden angelegt.  Dieses device sollte niemals von user-Seite verändert werden. (Möglicherweise wird zukünftig dieses Hilfsdevice entfallen und die Funktionalität direkt im device realisiert)
Für das ebenfalls durch perlupnp erzeugte socket für port 1900 wird vorerst kein device angelegt, um evtl. Konflikte zu vermeiden.
Services und somit auch subscrption und events werden vorerst nicht unterstützt, da für den bisher einzigen use case SMA SEMP nicht notwendig.

Neben der Öffnung der ports wird das device in seiner Funktion gestartet. Es sendet NOTIFY-broadcast-messages an Port 1900. Gleichzeitig wird der 30min-heartbeat(advertising) zu dessen Wiederholung gestartet.

Mit dem Modul lassen sich dann folgende Aktionen ausführen:
- start - zum starten des devices
- stop - zum stoppen des devices
- advertise - zum zusätzlichen Aussenden einer NOTIFY alive message (passiert per heartbeat periodisch alle 30min.)

ACHTUNG: Nutzt man UPNPController u. UPNPDevice gemeinsam in einer FHEM-Instanz, sollte man im UPNP-Controller tunlichst die IP ausschließen. Sonst kommt es zu fürchterlichen 20s-freezes, deren Ursache ich noch nicht ausgemacht habe.

Changelog
-----------
30.01.22 version v0.0.2(after 18 downloads)
bug fixing
disable attribute
automatic restart of device(FHEM restart no longer required, if attributes(file,path,port) change
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

#3
DLNAController

benötigt ein UPNPController-device als IODev

Zusätzlich sind die Perlpakete ◾SOAP::Lite, ◾LWP::Simple, ◾XML::Simple, ◾XML::Parser::Lite, ◾LWP::UserAgent, ◾XML::LibXML
zu installieren in Debian mit
sudo apt-get install libsoap-lite-perl libparse-http-useragent-perl liblwp-protocol-https-perl libxml-libxml-perl

devices werden über das UPNPController-Modul per autocreate automatisch angelegt. devicename entspricht dem dortigen readingname. room entspricht dem room für neue devices.
(eine manuelle Anlage eines devices ist weder notwendig, noch empfohlen !!!)

Bisher hat das Modul die Funktionalität des DLNARenderers. Multiroom(caskeid) ist mangels Hardware nicht richtig implementiert. Tester sind gerne gesehen.

Unterstützt werden also ein Teil des services RenderingControl(mute,volume) u. AVTransport(Abspielen einer Medienkonserve)

Das Modul selber blockiert nicht im Gegensatz zum DLNARenderer. Wohl aber noch der UPNPController. Dort ist bisher lediglich das blockierende Verhalten beim subscription-renewal(genau wie in meiner inoffiziellen Version des DLNARenderers) beseitigt. Infos über freezes bitte melden. Ich selber habe keine nennenswerten freezes in meinem Produktivsystem.

Attached die aktuelle Version. Die heißt aber noch DLNAManager. Diesen Namen wollte ich im Ursprung vergeben, glaube aber mittlerweile, dass DLNAController besser ist.

Status
- Grundsätzlich funktioniert alles wie es soll(Beispiel Mediaplayer, Samsung TV`s freeze free).
- Problematisch sind einzelne Endgeräte, die sich nicht nach DLNA-Standard verhalten(oder ich aus der Ferne das Fehlverhalten des Moduls nicht durchschaue). Ob sich das ändern lässt, muss individuell analysiert werden.
- Noch nicht abgeschlossen ist das Lautsprecherthema(Sonos, Teufel...).
- Unklar sind auch noch auftretende freezes. Sie finden aufgrund von timeouts in dem genutzten perlupnp-Fremdpaket statt. Das liegt wohl an den Endgeräten im Rahmen der subscription. Wenn mir die speziellen Situationen bekannt sind, könnte ich das irgendwie abfangen bzw. heilen.

Tested Devices
-----------------
Samsung devices funktionieren problemlos; Folgende Attribute beim UPNPController notwendig:
attr UPNP_Controller envNamespace <undef>
attr UPNP_Controller envPrefix s

LG - Einschränkung: set volume, mute nur während des streamings
FritzRepeater N/G
SIRD devices
Vestel TV - detaillierte DLNA-Ergebnisse
Lautsprecher: MUNET peaq, Teufel - teilweise getestet



Changelog
-----------
27.02.2022(14 downloads)
v0.0.4
DLNAController
* fixed: set ... mute off setzt das reading nicht auf 0
* reading volume wird beim define/restart nicht aktualisiert; erst mit der 1. Änderung
* fixed: gesetzter alias wird überschrieben
* fixed: Umlaute in Beschreibungen(z.B. currentTitle) (use: attr global encoding unicode)
* multiroom support
   - reading multiroomvolume removed
   - new command multiRoomMute
   - change of internal program structure
   - bug fixing
30.01.22 v0.0.3
bug fixing

06.05.21(25 downloads)
new method to parse xml-events
installation of package libxml required: sudo apt-get install libxml-libxml-perl
UPNPController version of same date required

31.03.21(11 downloads)
some bug fixing

13.03.21
Multiroom support added; should be the same functionality as known by DLNARenderer
automatic subscription of DLNA services after definition
extensive tests with WindowsMediaplayer(more details about functionality)
some bug fixing

27.02.21(13 Downloads)
FHEM restart problem solved
Modulname changed as proposed
unique UDN as define parameter(you shouldn't care, since define will be done by autocreate)
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

#4
Bisher habt Ihr das DLNARenderer-Modul genutzt. Ein Umstieg ist relativ einfach. Sollte vorerst sicherheitshalber(obwohl es bei mir produktiv läuft) in einem Testsystem vollzogen werden.

Download der beiden Module aus Post #1 u. #3 in Euer Modulverzeichnis. Am besten löscht Ihr dann zuerst alle DLNARenderer-devices. Insbesondere das Master-device u. die 3 Socketdevices im room hidden. Dann legt Ihr mit define EuerDevicename UPNPControllerdas neue Masterdevice an. Insbesondere für Samsung-devices mit den selben Attributen wie bei DLNARenderer. Sinnvoll ist nach der vollständigen Definition ein save/shutdown/restart. Nach einer Weile seht Ihr im device EuerDevicename eine Übersicht aller UPnP-devices in Eurem Netzwerk nach IP/Port sortiert. Im room hidden findet Ihr 2 socket-"Hilfsdevices".

DLNA-devices wurden per autocreate(sofern wie bei den meisten Installationen aktiviert)automatisch im room des autocreate-Attributs device_room mit define DLNA_UDNdesDevices DLNAController UDNdesDevices IP_Portangelegt. Nun nur noch die Attribute(wie zuvor) ergänzen u. Ihr könnt das device wie gehabt nutzen.

SamsungAV-Nutzer müssen in SamsungAV-devices zusätzlich noch den DLNARenderer-devicename durch DLNA_UDNdesDevices ersetzen.

Thats it.
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

Newbie

Hallo KölnSolar,

habe DLNAController definiert - Teufel-Lautsprecher werden gefunden - soweit so gut

Neustart von FHEM = System tot

2021.02.20 12:44:23 2: UPNPController: UPNP Controller v0.0.1 started
Can't call method "services" on an undefined value at ./FHEM/98_UPNPController.pm line 947, <$fh> line 81.


vg Jens

fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

KölnSolar

Hallo Jens,

sorry. Hatte noch keine Zeit die kleine Änderung von hiereinzubauen u. attachen.

Entweder selber einbauen oder aufs update warten.

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

Newbie

Hallo Markus,

ich hab

Zitatdie kleine Änderung von hier einzubauen

eingebaut und nach einen FHEM-Neustart sind die Devices auch alle da.
Es dauert aber 8min bis sie von "offline" auf "online" wechseln und somit bedienbar sind.
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

KölnSolar

das ist ok.
ZitatMit der Definition wird ein search-request im lokalen Netzwerk mit searchterm=ssdp:all gesendet. Dies bewirkt, dass sämtliche eingehenden UPnP-Notify-messages akzeptiert/verarbeitet werden. Dies passiert aber erst dann, wenn sich ein device gem. UPnP-Standard irgendwann periodisch meldet. Soll heißen, es dauert bis alle devices erstmalig erkannt wurden. Etwas beschleunigen kann man es, indem man z.B. den set-Befehl searchterm mit dem Parameter upnp:rootdevice ausführt. Damit werden alle Rootdevices aufgefordert sich sofort zu melden(tun aber nicht alle).

Und  bei nicht-DLNA ist das ja auch egal, da es kein logisches Modul gibt. Bei DLNA werde ich dann beim device-define ein search auf die udn machen, so dass es schnell  den aktuellen Status wiederspiegelt.

Welche services haben die Teufel denn ?
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

Newbie

ZitatWelche services haben die Teufel denn ?

??? Kopf kratz, was meinst du damit? Kann ich die irgendwie abfragen?
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

Newbie

Meinst du eventuell das hier:

beim physischen Device:

<root>
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<friendlyName>Speaker Kueche #2</friendlyName>
<modelDescription>Digital Media Player</modelDescription>
<UDN>uuid:f9e8fd48-3e69-4b28-b388-d92cbcef7d80</UDN>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>24</depth>
<url>/icons/teufel-48.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>32</width>
<height>32</height>
<depth>24</depth>
<url>/icons/teufel-32.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<SCPDURL>/rendercontrol.xml</SCPDURL>
<controlURL>/RenderingControl/ctrl</controlURL>
<eventSubURL>/RenderingControl/evt</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<SCPDURL>/connectmanager.xml</SCPDURL>
<controlURL>/ConnectionManager/ctrl</controlURL>
<eventSubURL>/ConnectionManager/evt</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<SCPDURL>/avtransport.xml</SCPDURL>
<controlURL>/AVTransport/ctrl</controlURL>
<eventSubURL>/AVTransport/evt</eventSubURL>
</service>
<service>
<serviceType>
urn:schemas-raumfeld-com:service:RaumfeldGenerator:1
</serviceType>
<serviceId>urn:raumfeld-com:serviceId:RaumfeldGenerator</serviceId>
<SCPDURL>/feldgenerator.xml</SCPDURL>
<controlURL>/RaumfeldGenerator/ctrl</controlURL>
<eventSubURL>/RaumfeldGenerator/evt</eventSubURL>
</service>
</serviceList>
<manufacturer>Lautsprecher Teufel GmbH</manufacturer>
<manufacturerURL>https://www.teufel.de/</manufacturerURL>
<modelName>Teufel One M</modelName>
<modelNumber>1</modelNumber>
<serialNumber>x:y:z</serialNumber>
<raumfeld:protocolVersion>16351</raumfeld:protocolVersion>
<raumfeld:hardwareType>21</raumfeld:hardwareType>
</device>
</root>


beim virtuellen Device:

<root>
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<X_DLNACAP>playcontainer-0-1</X_DLNACAP>
<friendlyName>Kueche</friendlyName>
<modelDescription>Virtual Media Player</modelDescription>
<modelName>Teufel One M</modelName>
<UDN>uuid:f97f36f9-abcf-4987-9727-c15eda14def4</UDN>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>24</depth>
<url>/icons/teufel-48.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>32</width>
<height>32</height>
<depth>24</depth>
<url>/icons/teufel-32.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<SCPDURL>/RenderingService.xml</SCPDURL>
<controlURL>/RenderingService/Control</controlURL>
<eventSubURL>/RenderingService/Event</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<SCPDURL>TransportService.xml</SCPDURL>
<controlURL>/TransportService/Control</controlURL>
<eventSubURL>/TransportService/Event</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<SCPDURL>ConnectionManager.xml</SCPDURL>
<controlURL>/ConnectionManager/Control</controlURL>
<eventSubURL>/ConnectionManager/Event</eventSubURL>
</service>
</serviceList>
<manufacturer>Lautsprecher Teufel GmbH</manufacturer>
<manufacturerURL>https://www.teufel.de/</manufacturerURL>
<modelNumber>1</modelNumber>
<serialNumber>x:y:z</serialNumber>
<raumfeld:protocolVersion>16351</raumfeld:protocolVersion>
<raumfeld:hardwareType>21</raumfeld:hardwareType>
</device>
</root>
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

KölnSolar

ZitatKopf kratz, was meinst du damit? Kann ich die irgendwie abfragen?
ZitatDie gefundenen devices werden als readings angelegt. Dabei wird jedes device durch den readingname IP_Port repräsentiert. Attribute des devices werden 1:1 übernommen u. als readings mit entsprechender Bezeichnung angelegt. Die Services eines devices werden mit devicereadingname-zs-service angelegt.
Aber die xml-Datei beantwortet es mir auch  :D
Der urn:raumfeld-com:serviceId:RaumfeldRaumfeldGenerator:1ist herstellerspezifisch. Guck mal, was die entsprechende SCPDURL ausspuckt, ob es interessante actions oder events gibt.
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

Newbie

Hallo Markus,

die <SCPDURL>/feldgenerator.xml</SCPDURL> spuckt das aus:

<scpd>
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<serviceStateTable>
<stateVariable sendEvents="yes">
<name>TransportControlButtons</name>
<dataType>string</dataType>
</stateVariable>
</serviceStateTable>
</scpd>


vg Jens
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

Newbie

Anbei mal eine Übersicht was der UPNP-Controller an Readings auflistet:


    xx.x.x.xx_51626-UDN uuid:f97f36f9-abcf-4987-9727-c15eda14def4
    xx.x.x.xx_51626-friendlyName Kueche,Schlafzimmer
    xx.x.x.xx_51626-location http://xx.x.x.xx:51626/f97f36f9-abcf-4987-9727-c15eda14def4.xml
    xx.x.x.xx_51626-manufacturer Lautsprecher Teufel GmbH
    xx.x.x.xx_51626-modelDescription Virtual Media Player
    xx.x.x.xx_51626-modelName Teufel One M
    xx.x.x.xx_51626-modelNumber 1
    xx.x.x.xx_51626-presence online
    xx.x.x.xx_51626-zs-AVTransport SID: uuid:44b110d0-e7a3-4a0a-8197-e36001eae8c0 timeout: 300 property: LastChange
    xx.x.x.xx_51626-zs-ConnectionManager urn:schemas-upnp-org:service:ConnectionManager:1
    xx.x.x.xx_51626-zs-RenderingControl SID: uuid:97a1845d-f708-4e77-be52-2a4efe60ac31 timeout: 300 property: LastChange
   
    xx.x.x.xx_52207-UDN uuid:f9e8fd48-3e69-4b28-b388-d92cbcef7d80
    xx.x.x.xx_52207-friendlyName Speaker Kueche #2
    xx.x.x.xx_52207-location http://xx.x.x.xx:52207/f9e8fd48-3e69-4b28-b388-d92cbcef7d80.xml
    xx.x.x.xx_52207-manufacturer Lautsprecher Teufel GmbH
    xx.x.x.xx_52207-modelDescription Digital Media Player
    xx.x.x.xx_52207-modelName Teufel One M
    xx.x.x.xx_52207-modelNumber 1
    xx.x.x.xx_52207-presence online
    xx.x.x.xx_52207-zs-AVTransport SID: uuid:55ba7b01-16cf-45b2-aaf6-3794a9567eb7 timeout: 300 property: BufferFilled
    xx.x.x.xx_52207-zs-ConnectionManager urn:schemas-upnp-org:service:ConnectionManager:1
    xx.x.x.xx_52207-zs-RaumfeldGenerator urn:schemas-raumfeld-com:service:RaumfeldGenerator:1
    xx.x.x.xx_52207-zs-RenderingControl SID: uuid:5c0de44c-7b14-48e2-bdc7-fa8a586a9d0d timeout: 300 property: LastChange
   
    xx.x.x.xx_52778-UDN uuid:eb57db8a-b475-4e3f-879b-1f8d314e1401
    xx.x.x.xx_52778-friendlyName Raumfeld MediaServer
    xx.x.x.xx_52778-location http://xx.x.x.xx:52778/eb57db8a-b475-4e3f-879b-1f8d314e1401.xml
    xx.x.x.xx_52778-manufacturer Lautsprecher Teufel GmbH
    xx.x.x.xx_52778-modelName Teufel One M
    xx.x.x.xx_52778-modelNumber 1
    xx.x.x.xx_52778-presence online
    xx.x.x.xx_52778-zs-ConnectionManager urn:schemas-upnp-org:service:ConnectionManager:1
    xx.x.x.xx_52778-zs-ContentDirectory urn:schemas-upnp-org:service:ContentDirectory:1
   
    xx.x.x.xx_54841-UDN uuid:5470b1a7-c6c7-48a0-bc86-8a48cac5dbdc
    xx.x.x.xx_54841-friendlyName Raumfeld ConfigDevice
    xx.x.x.xx_54841-location http://xx.x.x.xx:54841/5470b1a7-c6c7-48a0-bc86-8a48cac5dbdc.xml
    xx.x.x.xx_54841-manufacturer Lautsprecher Teufel GmbH
    xx.x.x.xx_54841-modelName Teufel One M
    xx.x.x.xx_54841-modelNumber 1
    xx.x.x.xx_54841-presence online
    xx.x.x.xx_54841-zs-ConfigService urn:schemas-raumfeld-com:service:ConfigService:1
   
    xx.x.x.xx_55354-UDN uuid:85c93a10-d169-42c2-8e93-ecdd0724707e
    xx.x.x.xx_55354-friendlyName Schlafzimmer
    xx.x.x.xx_55354-location http://xx.x.x.xx:55354/85c93a10-d169-42c2-8e93-ecdd0724707e.xml
    xx.x.x.xx_55354-manufacturer Lautsprecher Teufel GmbH
    xx.x.x.xx_55354-modelDescription Virtual Media Player
    xx.x.x.xx_55354-modelName Teufel One M
    xx.x.x.xx_55354-modelNumber 1
    xx.x.x.xx_55354-presence offline
    xx.x.x.xx_55354-zs-AVTransport subscribed but offline
    xx.x.x.xx_55354-zs-ConnectionManager urn:schemas-upnp-org:service:ConnectionManager:1
    xx.x.x.xx_55354-zs-RenderingControl subscribed but offline
   
    xx.x.x.xx_58281-UDN uuid:063f7a0f-b90e-4754-824a-9eb5d62c163d
    xx.x.x.xx_58281-friendlyName Teufel Raumfeld Device
    xx.x.x.xx_58281-location http://xx.x.x.xx:58281/063f7a0f-b90e-4754-824a-9eb5d62c163d.xml
    xx.x.x.xx_58281-manufacturer Lautsprecher Teufel GmbH
    xx.x.x.xx_58281-modelName Teufel One M
    xx.x.x.xx_58281-modelNumber 1
    xx.x.x.xx_58281-presence online
    xx.x.x.xx_58281-zs-SetupService urn:schemas-raumfeld-com:service:SetupService:1
   
    aa.a.a.aa_37134-UDN uuid:faa2efcd-f7b3-48f6-a075-82ef5800789d
    aa.a.a.aa_37134-friendlyName UGW4
    aa.a.a.aa_37134-location http://aa.a.a.aa:37134/rootDesc.xml
    aa.a.a.aa_37134-manufacturer Ubiquiti, Inc.
    aa.a.a.aa_37134-modelDescription Debian router
    aa.a.a.aa_37134-modelName Debian router
    aa.a.a.aa_37134-modelNumber e221
    aa.a.a.aa_37134-presence online
    aa.a.a.aa_37134-zs-L3Forwarding1 urn:schemas-upnp-org:service:Layer3Forwarding:1
    aa.a.a.aa_37134-zz uuid:faa2efcd-f7b3-48f6-a075-82ef5800789e
    aa.a.a.aa_37134-zz-UDN uuid:faa2efcd-f7b3-48f6-a075-82ef5800789e
    aa.a.a.aa_37134-zz-friendlyName WANDevice
    aa.a.a.aa_37134-zz-location http://aa.a.a.aa:37134/rootDesc.xml
    aa.a.a.aa_37134-zz-manufacturer MiniUPnP
    aa.a.a.aa_37134-zz-modelDescription WAN Device
    aa.a.a.aa_37134-zz-modelName WAN Device
    aa.a.a.aa_37134-zz-modelNumber 20210129
    aa.a.a.aa_37134-zz-presence online
    aa.a.a.aa_37134-zz-zs-WANCommonIFC1 urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
    aa.a.a.aa_37134-zz-zz uuid:faa2efcd-f7b3-48f6-a075-82ef5800789f
    aa.a.a.aa_37134-zz-zz-UDN uuid:faa2efcd-f7b3-48f6-a075-82ef5800789f
    aa.a.a.aa_37134-zz-zz-friendlyName WANConnectionDevice
    aa.a.a.aa_37134-zz-zz-location http://aa.a.a.aa:37134/rootDesc.xml
    aa.a.a.aa_37134-zz-zz-manufacturer MiniUPnP
    aa.a.a.aa_37134-zz-zz-modelDescription MiniUPnP daemon
    aa.a.a.aa_37134-zz-zz-modelName MiniUPnPd
    aa.a.a.aa_37134-zz-zz-modelNumber 20210129
    aa.a.a.aa_37134-zz-zz-presence online
    aa.a.a.aa_37134-zz-zz-zs-WANIPConn1 urn:schemas-upnp-org:service:WANIPConnection:1
   
    yy.y.y.yy_49692-UDN uuid:70d5b346-9b22-4e75-965b-3cedf880e531
    yy.y.y.yy_49692-friendlyName Teufel Raumfeld Device
    yy.y.y.yy_49692-location http://yy.y.y.yy:49692/70d5b346-9b22-4e75-965b-3cedf880e531.xml
    yy.y.y.yy_49692-manufacturer Lautsprecher Teufel GmbH
    yy.y.y.yy_49692-modelName Teufel One S
    yy.y.y.yy_49692-modelNumber 1
    yy.y.y.yy_49692-presence online
    yy.y.y.yy_49692-zs-SetupService urn:schemas-raumfeld-com:service:SetupService:1
   
    yy.y.y.yy_59448-UDN uuid:df6f32d1-1569-465b-8329-a14b6c788fa5
    yy.y.y.yy_59448-friendlyName Speaker Schlafzimmer
    yy.y.y.yy_59448-location http://yy.y.y.yy:59448/df6f32d1-1569-465b-8329-a14b6c788fa5.xml
    yy.y.y.yy_59448-manufacturer Lautsprecher Teufel GmbH
    yy.y.y.yy_59448-modelDescription Digital Media Player
    yy.y.y.yy_59448-modelName Teufel One S
    yy.y.y.yy_59448-modelNumber 1
    yy.y.y.yy_59448-presence online
    yy.y.y.yy_59448-zs-AVTransport SID: uuid:8629a29c-89c0-42c0-9e0a-8584df170c70 timeout: 300 property: BufferFilled
    yy.y.y.yy_59448-zs-ConnectionManager urn:schemas-upnp-org:service:ConnectionManager:1
    yy.y.y.yy_59448-zs-RaumfeldGenerator urn:schemas-raumfeld-com:service:RaumfeldGenerator:1
    yy.y.y.yy_59448-zs-RenderingControl SID: uuid:9c372e41-99fe-4569-887f-572ac12cddeb timeout: 300 property: LastChange
   
    zz.z.z.zz_54066-UDN uuid:0fee29da-3ea9-49bb-9902-a736a18ffd15
    zz.z.z.zz_54066-friendlyName Teufel Raumfeld Device
    zz.z.z.zz_54066-location http://zz.z.z.zz:54066/0fee29da-3ea9-49bb-9902-a736a18ffd15.xml
    zz.z.z.zz_54066-manufacturer Lautsprecher Teufel GmbH
    zz.z.z.zz_54066-modelName Teufel One S
    zz.z.z.zz_54066-modelNumber 1
    zz.z.z.zz_54066-presence online
    zz.z.z.zz_54066-zs-SetupService urn:schemas-raumfeld-com:service:SetupService:1
   
    zz.z.z.zz_55693-UDN uuid:fedf2043-eac0-49e1-82ed-6ac78b34f79d
    zz.z.z.zz_55693-friendlyName Speaker Schlafzimmer  #3
    zz.z.z.zz_55693-location http://zz.z.z.zz:55693/fedf2043-eac0-49e1-82ed-6ac78b34f79d.xml
    zz.z.z.zz_55693-manufacturer Lautsprecher Teufel GmbH
    zz.z.z.zz_55693-modelDescription Digital Media Player
    zz.z.z.zz_55693-modelName Teufel One S
    zz.z.z.zz_55693-modelNumber 1
    zz.z.z.zz_55693-presence online
    zz.z.z.zz_55693-zs-AVTransport SID: uuid:7ebd3594-b649-4549-8d4d-977eeed1d02e timeout: 300 property: LastChange
    zz.z.z.zz_55693-zs-ConnectionManager urn:schemas-upnp-org:service:ConnectionManager:1
    zz.z.z.zz_55693-zs-RaumfeldGenerator urn:schemas-raumfeld-com:service:RaumfeldGenerator:1
    zz.z.z.zz_55693-zs-RenderingControl SID: uuid:1fa6884b-08fa-4699-90d4-c621ef9a25c0 timeout: 300 property: LastChange

fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

KölnSolar

Hi Jens, erst mal danke fürs Testen u. die Mühe beim Info liefern.
Zitatspuckt das aus:
Ist arg dünn. Keine actions, 1 event. Ich spekuliere bei einem Tastendruck. :-\ Nicht so wirklich spannend für ein Modul.

Bist Du Teufelhändler ?  :o ;D Ich bin wohl Hinterweltler, da mir TVs, ein dot u. ne alte B&O mit Lautsprechern genügen.  ;D
hier http://xx.x.x.xx:58281/063f7a0f-b90e-4754-824a-9eb5d62c163d.xml könnte es was interessantes für ein Modul geben.

Wechseln die Ports bei den Teufeln ? Und hast Du evtl. dadurch doppelte Einträge ?(Das ist auch noch sone Baustelle. Selbst die IPs könnten sich ja ändern)

Grüße Markus

Edit: Der timeout von 300 ist interessant kurz. Müsste eigentlich beim subscription renewal zu Fehlern(412 - precondition failed) im Log führen(verbose=4).
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