FHEM/lib/UPnP/ControlPoint.pm bringt fhem zum einfrieren

Begonnen von the ratman, 08 Januar 2018, 11:25:15

Vorheriges Thema - Nächstes Thema

the ratman

hiho,

seit dem heutigen update bringt die FHEM/lib/UPnP/ControlPoint.pm fhemweb zum wanken.
allerdings nicht wegen sonos, sondern scheinbar wegen dem modul dlnarenderer.
log gibts leider keines

verhalten: ohne dlnarenderer geht das update und der neustart durch. ist ein aktives modul aktiviert friert fhem beim neustart ein und bleibt auf 100% cpu-auslastung hängen.
→do↑p!dnʇs↓shit←

Hauswart

Interessant ich habe auch eben mit dem Problem zu kämpfen, dass FHEM nicht mehr möchte. Auch keine Logs, etc.

DLNA löschen und neustarten bringt bei mir nichts.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

the ratman

ich hab die lib aus dem backup wieder rein, dann gings wieder
→do↑p!dnʇs↓shit←

Hauswart

Ich habe nun auch mal die letzte ControlPoint.pm restored ( https://svn.fhem.de/trac/export/14715/trunk/fhem/FHEM/lib/UPnP/ControlPoint.pm ). Jetzt läuft es auch wieder, lief nun nach Reboot glaub auch auf nach dem löschen der 98_DLNARenderer.pm wieder.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Reinerlein

Hallo,

ich wusste gar nicht, dass die Library noch von jemand anderem verwendet wird... sorry dafür...
Steht denn irgendwas im Log, warum es da ein Einfrieren-Problem gibt?

Soweit ich dachte, sind alle Änderungen von mir gestern Abwärtskompatibel...
Ist wohl nicht so :(

Grüße
Reiner

the ratman

#5
da ghört sowieso mal was gmacht ... ich hab wegen dem dlna-renderer alle 10 min. 83 warnings (ja, ich habs gezählt *g*) wegen eines offline-devices (nehm ich mal an), hab das auch schon 3 mal geschrieben (auch per pn).
schaut mir auch so aus, als ob das irgendwie mit dem jetztigen problem zusammenhängen könnte. da rennt irgendwas verdammt unrund ...
bin leicht am verzweifeln, weil der dlna-renderer eigentlich ein essentielles stück für die waf in meiner neuen hausautomatisation werden sollte (wecker, küchenradio, intercom, ...).


@Reinerlein
mein log wird leider automatisch gelöscht, wegen der oben genannten warnings *g*.
was ich auf die schnelle sehen konnte war ein warning wegen des dlna-renderers und alle infos drunter bezogen sich auf fhem.pm

sag mal - du bist doch der sonos-programmierer? wenn ja - könnte man dein modul irgendwie als primitiven dlna-renderer mißbrauchen? also quasi als ersatz für diesen?
ich will doch nur ne mp3 und tts an eine dumme wlan-box senden können, ohne, dass ich in warnings untergehe ...

btw - lass "sorry" stecken - da hätt ich ganz wen anderen im auge, der 1) dir sagen könnte, daß er deine sachen verwendet und 2) auch mal was machen könnte - meine erste info wegen meiner warnings ging vor monaten raus. jetzt n sorry von mir, bin grade angesäuert ...
→do↑p!dnʇs↓shit←

Reinerlein

Hi ratman,

ich habe den Fehler gefunden. Eine Änderung von mir war natürlich nicht Initalisierungs-abwärtskompatibel, weil ich ein neues Feature eingebaut habe, welches einen anderen Datentyp bei der Konstruktor-Übergabe benötigt.

Ich schreibe dem Modulverantwortlichen (dominikkarall) eine Nachricht, was er anpassen muss.
Wenn du/ihr das kurzfristig korrigieren wollt:
- Zeile 1175: "%empty" in "@empty" ändern
- Zeile 1182: beide Verweise auf den alten Hash in das neue Array umschreiben, also aus "\%empty" ein "\@empty" machen

Zu deiner Frage bzgl. "Fremdverwendung" des Sonos-Moduls für reine DLNA-Komponenten: Das wird nicht funktionieren. Die Erkennung und prinzipielle Steuerbarkeit läuft zwar über UPnP, aber es gibt Unmengen von Sonderlocken für Sonos.... Deswegen ist das Modul auch direkt in der Erkennung auf Zoneplayer beschränkt...

Zu deiner Frage bzgl. der Warnings wegen eines Devices: Der Modulentwickler könnte die beiden leeren Arrays als Attribut für das Modul anbieten. Mit diesen kann man steuern, welche Komponenten (bzw. welche IP Adressen) überhaupt berücksichtigt werden sollen.
Das Sonos-Modul hat nämlich öfter das Problem, dass sich Komponenten melden, die keine Zoneplayer sind, und ich demnach nicht korrekt verwenden kann.
Die beiden Attribute dazu lauten bei mir dann "ignoredIPs" und "usedonlyIPs", jeweils eine Komma-Separierte Liste mit einzelnen IP-Adressen (bzw. einem regulären Ausdruck für einen IP-Match), um einzelne Komponenten auszuschließen (dann eingetragen bei "ingoredIPs"), oder nur bestimmte Komponenten überhaupt zuzulassen (dann eingetragen bei "usedonlyIPs").
Oder ist das ein Device, welches du verwenden möchtest, und es wirft Fehler, wenn du es dann mal ausgeschaltet hast? Wenn ja, wäre das hier natürlich keine Lösung für dich...

@dominikkarall: Dazu brauchst du nur zwei Attribute zulassen, und mittels

my @usedonlyIPs = split(/,/, AttrVal($hash->{NAME}, 'usedonlyIPs', ''));
my @ignoredIPs = split(/,/, AttrVal($hash->{NAME}, 'ignoredIPs', ''));

$cp = UPnP::ControlPoint->new(SearchPort => 0, SubscriptionPort => 0, MaxWait => 30, UsedOnlyIP => \@usedonlyIPs, IgnoreIP => \@ignoredIPs, LogLevel => AttrVal($hash->{NAME}, 'verbose', 0));
zerlegen und mit übergeben...
Außerdem kannst du einen LogLevel mitgeben. Momentan wird der nur für eine Logausgabe der Broadcast-Antworten (auf Level 5) verwendet...

Grüße
Reiner

the ratman

thx für die infos - na dann hoff ich mal, dass das auch der ersteller des dlnarenderers ließt. man weiß ja, die hoffnung stirbt zuletzt.

btw - der dlnarenderer hat auch ähnliches wie deine  "ignoredIPs" und "usedonlyIPs", die heißen dort accept und ignore udns. allerdings gehts da wohl eher darum, dass meine wlan-box nicht immer im netz is und ich auch nie weiß, wann und wie lange die box aktiv sein wird. ich kann die also nicht einfach ignorieren.

deine änderungen in der lib - so nehme ich mal frech an - wirst bis morgen eingecheckt haben?
weil dann is zumindest für mich mal dieses problem automatisch erledigt und die bringschuld liegt wo anders *g*
dir zumindest mal danke für die wirklich flotte reaktion!
→do↑p!dnʇs↓shit←

frank

Zitat von: the ratman am 08 Januar 2018, 13:23:01
allerdings gehts da wohl eher darum, dass meine wlan-box nicht immer im netz is und ich auch nie weiß, wann und wie lange die box aktiv sein wird. ich kann die also nicht einfach ignorieren.
wie wäre es, wenn du die anwesenheit der box mit einem presence device ermittelst und mit dieser info dann zb das attr ignoredIPs vom dlnaRenderer entsprechen änderst.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

the ratman

das wäre ne idee - ich finds nur generell lustig, weil das modul ja selber die box auch offline anzeigt. mein: da könnte man sicher was machen. soferns überhaupt die box is - ich weiß ja bis jetzt nur, dass sich irgendwas anderes hinter der fhem.pm drüber beschwert, dass irgendeine url fehlt. welche, wofür und warum ?...?
mein 2. versuch dazu unter: https://forum.fhem.de/index.php/topic,39706.msg733784.html#msg733784

das dumme: ich hab auch noch 3 tv's und n paar andere sachen, die ich gern einbinden will, sobald mal die box geht. wird interessant, da ne logik zu entwickeln, was in der ignore-zeile stehen muß grade *g* weil z.b. ein lg-tv dlna mit dem renderer kann und ein älterer lg-tv sich zwar als client meldet, aber nichts mit den daten anfangen kann (andere dlna-server frißt er aber immer problemlos), manchesmal aber doch (frag lg, nicht mich).
ausserdem weiß ich nicht, was ich mit den mind. 3 versteckten devices machen soll in der zeit - scheint irgendwie was mit ports zu tun zu haben. die muß ich dann ganz löschen und von welchem device sind die eigentlich, oder gehören die zum renderer selber und ich darfs nicht angreifen?

sprich: ich hab so viele baustellen am renderer, dass ichs gern mal klein angehen würde, ohne auch noch mit doifs/notifys/... zusätzliche unsicherheiten einzubauen.
→do↑p!dnʇs↓shit←

helmut

Zitat von: Reinerlein am 08 Januar 2018, 13:05:44
ich habe den Fehler gefunden. Eine Änderung von mir war natürlich nicht Initalisierungs-abwärtskompatibel,

Hallo Reiner,

ich benutze DLNARenderer fuer meine Raumfeld Stereo M und habe auch die ControlPoint.pm aus der
Sicherung zurueckladen muessen.

Kannst bitte Du oder dominikkarall hier Bescheid geben, wenn ControlPoint.pm und DLNARenderer sich
wieder verstehen? Danke.

Gruss Helmut
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

dominik

Hallo zusammen,

danke für die Hinweise bzgl. dem Fehler. Ich habe die Anpassungen gerade durchgeführt und ins SVN eingecheckt.

usedonlyIPs und ignoredIPs wird nun auch unterstützt - noch nicht in der commandref beschrieben.

Gruß
Dominik
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

the ratman

nur zur info:

nach dem heutigen update geht wieder alles problemlos und wundersamer weise sind auch meine warnings weg ... wunderbar

thx nochmal an beide entwickler!
→do↑p!dnʇs↓shit←

helmut

Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

the ratman

zu früh gefreut ... jetzt kommen meine warnings zwar weniger oft, wie mir scheint, aber dafür gleich mit mehr zeilen ... folgendes 4 mal zur selben zeit. zeitabstände weiß ich noch nicht. mind. ne halbe stunde aber.


2018.01.09 15:37:15 1: logfile wurde von hand gelöscht
2018.01.09 16:01:12 1: PERL WARNING: Use of uninitialized value $location in concatenation (.) or string at FHEM/lib/UPnP/ControlPoint.pm line 366.
2018.01.09 16:01:12 1: stacktrace:
2018.01.09 16:01:12 1:     main::__ANON__                      called by FHEM/lib/UPnP/ControlPoint.pm (366)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (398)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (522)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (223)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (249)
2018.01.09 16:01:12 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (248)
2018.01.09 16:01:12 1:     main::DLNARenderer_Read             called by fhem.pl (3479)
2018.01.09 16:01:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.09 16:01:12 1: PERL WARNING: 400-URL-Absolute-Error! Location: "", Content: "400 URL missing
" at ./FHEM/98_DLNARenderer.pm line 249.
2018.01.09 16:01:12 1: stacktrace:
2018.01.09 16:01:12 1:     main::__ANON__                      called by /usr/share/perl/5.24/Carp.pm (169)
2018.01.09 16:01:12 1:     Carp::carp                          called by FHEM/lib/UPnP/ControlPoint.pm (366)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (398)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (522)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (223)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (249)
2018.01.09 16:01:12 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (248)
2018.01.09 16:01:12 1:     main::DLNARenderer_Read             called by fhem.pl (3479)
2018.01.09 16:01:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.09 16:01:12 1: PERL WARNING: Use of uninitialized value $location in concatenation (.) or string at FHEM/lib/UPnP/ControlPoint.pm line 367.
2018.01.09 16:01:12 1: stacktrace:
2018.01.09 16:01:12 1:     main::__ANON__                      called by FHEM/lib/UPnP/ControlPoint.pm (367)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (398)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (522)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (223)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (249)
2018.01.09 16:01:12 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (248)
2018.01.09 16:01:12 1:     main::DLNARenderer_Read             called by fhem.pl (3479)
2018.01.09 16:01:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.09 16:01:12 1: PERL WARNING: Loading device description failed with error: 400 URL missing (Location: ) at ./FHEM/98_DLNARenderer.pm line 249.
2018.01.09 16:01:12 1: stacktrace:
2018.01.09 16:01:12 1:     main::__ANON__                      called by /usr/share/perl/5.24/Carp.pm (169)
2018.01.09 16:01:12 1:     Carp::carp                          called by FHEM/lib/UPnP/ControlPoint.pm (367)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (398)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (522)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (223)
2018.01.09 16:01:12 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (249)
2018.01.09 16:01:12 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (248)
2018.01.09 16:01:12 1:     main::DLNARenderer_Read             called by fhem.pl (3479)
2018.01.09 16:01:12 1:     main::CallFn                        called by fhem.pl (687)

ein list Internals:
   NAME       dlnaRenderer
   NR         139
   STATE      initialized
   TYPE       DLNARenderer
   UDN        0
   VERSION    v2.0.7
   READINGS:
     2018-01-09 12:26:40   state           initialized
   helper:
     caskeid    0
     caskeidClients
Attributes:
   acceptedUDNs uuid:7b18e7ac-1dd2-11b2-bd8d-d5a619f4804c
   alias      dlna renderer
   group      dlna
   icon       rc_RADIO
   room       multimedia
   usedonlyIPs 192.168.178.5
   userattr   acceptedUDNs defaultRoom ignoreUDNs

es gibt nur 1 gerät das aus ist. ein lg-tv läuft gerade (kein dlna modul dafür angelegt).

gibts noch hoffnung?
→do↑p!dnʇs↓shit←