Modul für WLAN Radios mit Frontier Silicon Chipsatz (SilverCrest/Medion/Hama...)

Begonnen von mumpitzstuff, 07 November 2017, 00:21:27

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Hier mal ein kleiner Benchmark mit realen XML Daten des Radios auf meinem PC:

XML::Bare (parse)       :  0 wallclock secs ( 0.45 usr +  0.00 sys =  0.45 CPU) @ 22075.06/s (n=10000)
XML::Bare (simple dirty):  1 wallclock secs ( 0.30 usr +  0.03 sys =  0.33 CPU) @ 30581.04/s (n=10000)
            (warning: too few iterations for a reliable count)
XML::Bare (simple)      :  0 wallclock secs ( 0.31 usr +  0.01 sys =  0.33 CPU) @ 30581.04/s (n=10000)
            (warning: too few iterations for a reliable count)
XML::Bare (xmlin)       :  0 wallclock secs ( 0.31 usr +  0.03 sys =  0.34 CPU) @ 29154.52/s (n=10000)
            (warning: too few iterations for a reliable count)
XML::Fast               :  0 wallclock secs ( 0.48 usr +  0.00 sys =  0.48 CPU) @ 20703.93/s (n=10000)
XML::LibXML::Simple     :  8 wallclock secs ( 7.99 usr +  0.00 sys =  7.99 CPU) @ 1252.03/s (n=10000)
XML::Simple             : 66 wallclock secs (64.60 usr +  1.20 sys = 65.80 CPU) @ 151.97/s (n=10000)


Verwendet wird aktuell die langsamste Option XML::Simple. Ich plane deshalb auf XML::Bare (xmlin) umzusteigen, da ich hiermit kaum etwas umstellen muss in meinem Code. Heute Abend schaue ich mir die Ergebnisse noch mal auf einem rpi an, ich denke aber vom Trend wird sich nicht ändern.
Ich hoffe das ich allein damit dann die Belastung des Systems ein wenig senken kann, was insbesondere im Kompatibilitätsmodus hoffentlich was bringt.

PS: XML::Bare lässt sich einfach als Bibliothek mit apt-get installieren und ist deshalb kein großes Problem. Falls jemand das Modul auf einem System einsetzt auf dem das nicht installiert werden kann, dann meldet euch bitte bei mir.

mumpitzstuff

Könnte bitte jemand die Testversion auf Funktion prüfen? Ich habe fast nur die XML Parser Optimierung drin und würde gern wissen, ob es bei euch ebenfalls genauso läuft wie bei mir. Die Belastung des Systems durch das Modul, sollte in etwa um 30-40% sinken.

Wichtig ist, das ihr folgendes VORHER installiert:

sudo apt-get install libxml-bare-perl

Lichti

Habe getestet:  Scheint noch alles zu funktionieren.

An der System-Auslastung (mit sysmon gemessen) hat sich allerdings kein Unterschied gezeigt (vorher und nachher ca. 95% Idle)
Bei dem Wert aber sowieso kein Problem.



mumpitzstuff

Bei mir sind die Peaks, wenn das Update gelaufen ist, nach unten gegangen. Ist halt schwierig zu sehen, aber es waren im Schnitt 30-40% auf einem Raspi 2.

Danke fürs Testen!

supernova1963

Habe auch getestet, es läuft ohne erkennbare Probleme.

Zur Geschwindigkeitsgewinn kann ich nicht wirklich etwas sagen, da sowohl mein Test- als auch das Live-System in einer virtuellen Umgebung (2 GB RAM 64 GB HDD eines Fusion Drives, 2 Prozessoren eines Mac Mini 2,3 GHz Intel Core i7 laufen).

Danke,

Gernot

betateilchen

bin gerade am Testen mit einem DUAL IR6S

Und das wars. Keine Lautstärkeregelung, kein Ausschalten.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Ok, funktioniert jetzt erstmal.


Internals:
   CFGFN     
   CHANGED   
   DEF        192.168.123.97 1234 20
   INTERVAL   20
   IP         192.168.123.97
   NAME       dual_ir6s
   NOTIFYDEV  global
   NR         242
   NTFY_ORDER 50-dual_ir6s
   PIN        1234
   STATE      on
   TYPE       SIRD
   VERSION    1.1.4
   READINGS:
     2018-04-11 21:39:47   currentTitle    NDR 2 NDS
     2018-04-11 21:39:46   duration        0
     2018-04-11 21:38:50   friendlyName    DUAL IR6S
     2018-04-11 21:39:47   graphicUri      http://dual.wifiradiofrontier.com/setupapp/setup1/logo/logo-73607.png
     2018-04-11 21:42:44   infoText        Sasha - Please, Please, Please
     2018-04-11 21:39:10   input           internetradio
     2018-04-11 21:39:49   mute            off
     2018-04-11 21:39:48   playStatus      playing
     2018-04-11 21:44:30   position        5:00
     2018-04-11 21:45:16   power           on
     2018-04-11 21:45:16   presence        present
     2018-04-11 21:38:50   preset         
     2018-04-11 21:39:48   repeat          off
     2018-04-11 21:45:16   rssi            60
     2018-04-11 21:39:49   shuffle         off
     2018-04-11 21:39:49   signalStrength  0
     2018-04-11 21:45:14   state           on
     2018-04-11 21:38:50   version         ir-mmi-FS2026-0500-0095_V2.6.17.EX55921-1RC9
     2018-04-11 21:41:19   volume          62
     2018-04-11 21:41:19   volumeStraight  20
   helper:
Attributes:
   verbose    5


Was habe ich gemacht?


  • die UNDOK App auf dem ipad deinstalliert
  • dem Radio in meinem DHCP Server eine neue IP Adresse verpasst
  • Radio von der Netzspannung getrennt und wieder verbunden
  • Radio in FHEM neu angelegt

Kann es sein, dass der Volume slider einen "minus 1 Fehler" hat? Wenn ich set ... volume 53 mache, steht der slider anschließend auf 52 statt 53
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Wenn man modulseitig den "friendlyName" in das INTERNAL "MODEL" übertragen würde, kann man die Modelle in der FHEM Statistik auswerten :)



udo@fhem-rpi3:/opt/fhem-SIRD/FHEM $ git diff 17_SIRD.pm
diff --git a/FHEM/17_SIRD.pm b/FHEM/17_SIRD.pm
index 748af16..988c3d0 100644
--- a/FHEM/17_SIRD.pm
+++ b/FHEM/17_SIRD.pm
@@ -1203,6 +1203,7 @@ sub SIRD_SetReadings($)
     $reading = encode_utf8(!ref($_->{value}->{c8_array}) ? $_->{value}->{c8_array} : '');

     readingsBulkUpdateIfChanged($hash, 'friendlyName', $reading);
+    $hash->{MODEL} = $reading;
   }
   elsif ('netRemote.sys.audio.volume' eq $_->{node})
   {

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mumpitzstuff

Zitat von: betateilchen am 11 April 2018, 21:46:17
Ok, funktioniert jetzt erstmal.


Internals:
   CFGFN     
   CHANGED   
   DEF        192.168.123.97 1234 20
   INTERVAL   20
   IP         192.168.123.97
   NAME       dual_ir6s
   NOTIFYDEV  global
   NR         242
   NTFY_ORDER 50-dual_ir6s
   PIN        1234
   STATE      on
   TYPE       SIRD
   VERSION    1.1.4
   READINGS:
     2018-04-11 21:39:47   currentTitle    NDR 2 NDS
     2018-04-11 21:39:46   duration        0
     2018-04-11 21:38:50   friendlyName    DUAL IR6S
     2018-04-11 21:39:47   graphicUri      http://dual.wifiradiofrontier.com/setupapp/setup1/logo/logo-73607.png
     2018-04-11 21:42:44   infoText        Sasha - Please, Please, Please
     2018-04-11 21:39:10   input           internetradio
     2018-04-11 21:39:49   mute            off
     2018-04-11 21:39:48   playStatus      playing
     2018-04-11 21:44:30   position        5:00
     2018-04-11 21:45:16   power           on
     2018-04-11 21:45:16   presence        present
     2018-04-11 21:38:50   preset         
     2018-04-11 21:39:48   repeat          off
     2018-04-11 21:45:16   rssi            60
     2018-04-11 21:39:49   shuffle         off
     2018-04-11 21:39:49   signalStrength  0
     2018-04-11 21:45:14   state           on
     2018-04-11 21:38:50   version         ir-mmi-FS2026-0500-0095_V2.6.17.EX55921-1RC9
     2018-04-11 21:41:19   volume          62
     2018-04-11 21:41:19   volumeStraight  20
   helper:
Attributes:
   verbose    5


Was habe ich gemacht?


  • die UNDOK App auf dem ipad deinstalliert
  • dem Radio in meinem DHCP Server eine neue IP Adresse verpasst
  • Radio von der Netzspannung getrennt und wieder verbunden
  • Radio in FHEM neu angelegt

Kann es sein, dass der Volume slider einen "minus 1 Fehler" hat? Wenn ich set ... volume 53 mache, steht der slider anschließend auf 52 statt 53

Es hängt unter Umständen von deinen Einstellungen ab, ob sich UNDOK App und das Modul behindern oder nicht. Wenn du z.B. autologin machst, dann wird eine Session beim Radio angefragt und die Verbindung zu einem anderen Client wie z.B. UNDOK reisst ab. Das selbe passiert wenn du die Notifications aktivierst. Hier wird dummerweise ebenfalls eine Session benötigt. Wenn du beide Dinge abschaltest, dann müssten eigentlich das Modul und UNDOK koexistieren können.

Das mit dem Volume kann sein. Je nach Radio kann man zum Beispiel nur Werte zwischen 0-20 oder 0-32 wählen (ijm raw view sieht man das als .volumeSteps). Volume wird aber über den Bereich von 0-100 aufgezogen und dann auf den kleinen Bereich gemappt. Dadurch landet man bei Volume nicht immer beim vorgegebenen Wert. Ich muss ja den kleineren Wert zurück lesen und dann wieder in den Bereich von 0-100 auffächern.
volumeStraight funktioniert hingegen ohne solche Abweichungen.

mumpitzstuff

Das mit dem Model finde ich gut. Werde ich übernehmen. Danke!

PS: Habe noch mal drüber nachgedacht und dabei festgestellt, dass das nicht geht. friendlyName ist eine Bezeichnung für das Radio, die man selbst festlegen und jederzeit ändern kann. Das könnte auch 0815 sein. Davon kann ich leider kein Model ableiten. Ich habe auch noch mal gesucht und nichts gefunden, aus dem sich das Model ableiten lässt. Lediglich ein SSDP Request scheint sowas irgendwie auszuspucken, denn mein UPnP Spy zeigt mir unter anderem bei meinem Radio an:


Manufacturer
Manufacturer URL
Model description ir-mmi-FS2026-0500-0487_V2.12.8.EX68054-2RC6
Model name SMRS18A1
Model number
Version 1.0


SMRS18A1 wäre genau das, was ich bei Model eintragen müsste.

http://<ip des radios>:8080/dd.xml

Über diesen Link bekomme ich bei meinem Radio alle notwendigen Informationen. Ich hatte aber schon mal rumgefragt, bei anderen scheint die Abfrage nicht zu funktionieren oder ist irgendwie anders erreichbar.

Lichti

Bei mir kommt da folgendes:

<root><specVersion><major>1</major><minor>0</minor></specVersion><device><deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType><friendlyName>DigitRadio 110 IR 0022612e992c</friendlyName><manufacturer>TechniSat</manufacturer><manufacturerURL>https://www.technisat.com/de_DE/</manufacturerURL><modelDescription>DAB/DAB+/FM/Internet Digital Radio with bluetooth</modelDescription><modelName>DigitRadio 110 IR</modelName><modelNumber>DigitRadio 110 IR</modelNumber><modelURL>https://www.technisat.com/de_DE/DAB+-Digitalradios/352-8457/</modelURL><serialNumber>0f080a07100e1f270101be05ffffd5ff</serialNumber><UDN>uuid:3DCC7100-F76C-11DD-87AF-0022612E992C</UDN><iconList><icon><mimetype>image/png</mimetype><width>48</width><height>48</height><depth>32</depth><url>/icon.png</url></icon><icon><mimetype>image/jpeg</mimetype><width>48</width><height>48</height><depth>32</depth><url>/icon.jpg</url></icon><icon><mimetype>image/png</mimetype><width>120</width><height>120</height><depth>32</depth><url>/icon2.png</url></icon><icon><mimetype>image/jpeg</mimetype><width>120</width><height>120</height><depth>32</depth><url>/icon2.jpg</url></icon></iconList><serviceList><service><serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType><serviceId>urn:upnp-org:serviceId:AVTransport</serviceId><SCPDURL>AVTransport/scpd.xml</SCPDURL><controlURL>AVTransport/control</controlURL><eventSubURL>AVTransport/event</eventSubURL></service><service><serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType><serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId><SCPDURL>ConnectionManager/scpd.xml</SCPDURL><controlURL>ConnectionManager/control</controlURL><eventSubURL>ConnectionManager/event</eventSubURL></service><service><serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType><serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId><SCPDURL>RenderingControl/scpd.xml</SCPDURL><controlURL>RenderingControl/control</controlURL><eventSubURL>RenderingControl/event</eventSubURL></service></serviceList><presentationURL>/web</presentationURL><dlna:X_DLNADOC>DMR-1.50</dlna:X_DLNADOC><pnpx:X_hardwareId>VEN_2A2D&DEV_0001&SUBSYS_0001&REV_01 VEN_0033&DEV_0006&REV_01</pnpx:X_hardwareId><pnpx:X_compatibleId>MS_DigitalMediaDeviceClass_DMR_V001</pnpx:X_compatibleId><pnpx:X_deviceCategory>MediaDevices</pnpx:X_deviceCategory><df:X_deviceCategory>Multimedia.DMR</df:X_deviceCategory><microsoft:magicPacketWakeSupported>0</microsoft:magicPacketWakeSupported><microsoft:magicPacketSendSupported>1</microsoft:magicPacketSendSupported><fsns:X_audSyncProtocolID>4</fsns:X_audSyncProtocolID><fsns:X_Features>Spotify, AudioSync, DAB, FM, IR, Media, DMR</fsns:X_Features></device></root>

betateilchen

Zitat von: mumpitzstuff am 11 April 2018, 22:43:51
friendlyName ist eine Bezeichnung für das Radio, die man selbst festlegen und jederzeit ändern kann.

ok, das ist ein Argument, das gegen die Verwendung als Modellinformation spricht.




Aber ich habe noch ein ganz wichtiges anderes Thema, das Du unbedingt überdenken solltest:

Verzichte bitte auf die Verwendung von libxml-bare-perl

Warum? Relativ einfach erklärt.


  • Die Library xml-bare beinhaltet eine Funktion XMLin() die nicht 100% (aufruf-)kompatibel zu der XMLin() aus libxml-simple-perl ist.
  • Beim laden der Library überschreibt xml-bare die XMLin() von xml-simple
  • Eine ganze Reihe von FHEM Modulen verwenden xml-simple und die darin enthaltende Funktion XMLin() in der dort gültigen Syntax. Durch das Überschreiben der Funktion kommt es nun in den aus diesen Modulen erzeugten devices zu Fehlern, z.B. wenn das in simple optionale KeyAttr fehlt.

Mein Logfile ist seit meinen SIRD Tests gestern abend voll mit solchen Fehlermeldungen.
Nachdem ich libxml-bare-perl wieder gelöscht habe, ist wieder Ruhe eingekehrt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: mumpitzstuff am 11 April 2018, 22:43:51
http://<ip des radios>:8080/dd.xml

Über diesen Link bekomme ich bei meinem Radio alle notwendigen Informationen. Ich hatte aber schon mal rumgefragt, bei anderen scheint die Abfrage nicht zu funktionieren oder ist irgendwie anders erreichbar.

Bei mir kommt da als Ergebnis:


<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:pnpx="http://schemas.microsoft.com/windows/pnpx/2005/11" xmlns:microsoft="urn:schemas-microsoft-com:WMPNSS-1-0" xmlns:df="http://schemas.microsoft.com/windows/2008/09/devicefoundation">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<friendlyName>DUAL IR6S</friendlyName>
<manufacturer>DUAL</manufacturer>
<manufacturerURL>www.dual.de</manufacturerURL>
<modelDescription>RadioStation</modelDescription>
<modelName>IR6</modelName>
<modelNumber>IR6</modelNumber>
<modelURL>www.dual.de</modelURL>
<serialNumber>0f0101072c1e1f2701017704ffff13ff</serialNumber>
<UDN>uuid:3dcc7100-f76c-11dd-87af-002261f437a2</UDN>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>32</depth>
<url>/icon.png</url>
</icon>
<icon>
<mimetype>image/jpeg</mimetype>
<width>48</width>
<height>48</height>
<depth>32</depth>
<url>/icon.jpg</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>120</width>
<height>120</height>
<depth>32</depth>
<url>/icon2.png</url>
</icon>
<icon>
<mimetype>image/jpeg</mimetype>
<width>120</width>
<height>120</height>
<depth>32</depth>
<url>/icon2.jpg</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<SCPDURL>AVTransport/scpd.xml</SCPDURL>
<controlURL>AVTransport/control</controlURL>
<eventSubURL>AVTransport/event</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<SCPDURL>ConnectionManager/scpd.xml</SCPDURL>
<controlURL>ConnectionManager/control</controlURL>
<eventSubURL>ConnectionManager/event</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<SCPDURL>RenderingControl/scpd.xml</SCPDURL>
<controlURL>RenderingControl/control</controlURL>
<eventSubURL>RenderingControl/event</eventSubURL>
</service>
</serviceList>
<presentationURL>/web</presentationURL>
<dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>
<pnpx:X_hardwareId>
VEN_2A2D&DEV_0001&SUBSYS_0001&REV_01 VEN_0033&DEV_0006&REV_01
</pnpx:X_hardwareId>
<pnpx:X_compatibleId>MS_DigitalMediaDeviceClass_DMR_V001</pnpx:X_compatibleId>
<pnpx:X_deviceCategory>MediaDevices</pnpx:X_deviceCategory>
<df:X_deviceCategory>Multimedia.DMR</df:X_deviceCategory>
<microsoft:magicPacketWakeSupported>0</microsoft:magicPacketWakeSupported>
<microsoft:magicPacketSendSupported>1</microsoft:magicPacketSendSupported>
</device>
</root>


Aber man könnte doch diese URL zumindest mal als Einstieg nehmen, und wenn von dort eine entsprechende Information kommt, das MODEL setzen.
Wenn diese URL bei der Mehrzahl der Geräte gültig ist, sollte man sie als Standard verwenden und per Attribut eine Möglichkeit schaffen, dass Benutzer ggf. eine andere URL vorgeben können, die für das device discovery verwendet wird. Solche par Attribut abweichenden URLs habe ich auch schon in eigenen FHEM Modulen umgesetzt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mumpitzstuff

Das mit xml-bare wundert mich etwas, denn ich hatte beide XML Module parallel laufen, um mir die Unterschiede zwischen xml-simple und xml-bare auszugeben und zu vergleichen und es gab keine Schwierigkeiten. Weiterhin gibt es bei mir einen kleinen aber feinen Unterschied (Schreibweise):

XML::Simple::XMLin
XML::bare::xmlin

Spinnt denn deinen FHEM installation bereits wenn du lediglich XML::bare mit apt-get installierst, ohne das du überhaupt meine letzte Testversion verwendest? Oder spinnt FHEM erst wenn du nach der Installation von XML::bare auch meine letzte Testversion einsetzt?

Wenn es letzteres ist, dann würde ich gern noch mal testen require anstatt use zu verwenden und dann den Aufruf XML::bare:xmlin anstatt nur xmlin zu verwenden. Vielleicht würde das schon ausreichen.
Von welchen anderen FHEM Modulen bekommst du denn Fehler gemeldet?

PS: XML::Simple soll übrigens ausdrücklich nicht mehr verwendet werden (depricated), das steht auch so in der Modulbeschreibung drin.

betateilchen

Zitat von: mumpitzstuff am 12 April 2018, 11:42:39
Spinnt denn deinen FHEM installation bereits wenn du lediglich XML::bare mit apt-get installierst, ohne das du überhaupt meine letzte Testversion verwendest?

Jepp. Irgendwas läuft da vermutlich perl-seitig bereits schief (erfahrungsgemäß dann auch noch perl-versionsabhängig...). Es ist sicher kein Verschulden Deines Moduls.

Dass XML::Simple deprecated ist, weiß ich schon. In meinen eigenen Modulen habe ich XML wo immer möglich bereits entfernt. Die meisten externen Datenanbieter, die XML liefern, können inzwischen auch JSON liefern :)

Vielleicht sollten wir im Developer-Bereich nochmal ausdrücklich darauf hinweisen, eine spontane Suche in ./FHEM hat bei mir ergeben, dass immerhin 18 Module im offiziellen FHEM Zweig noch XML::Simple verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!