Sonos - Odd number of elements in hash assignment

Begonnen von micomat, 18 Januar 2016, 19:38:36

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi Claudiu,

da war aber das Problem, dass dann irgendwas mit SSL nicht mehr ging...

Grüße
Reiner

rapster

Hi Reiner,

bei mir hab ich zumindest dadurch noch keine Probleme feststellen können.

Allerdings scheint das ja eher die Stelle zu sein wo etwas schief läuft statt in der IP.pm?
Und ob das sonst bei längerer Laufzeit besonders gut ist dass dieser Hash immer länger wird?

Gruß
  Claudiu

Nobby1805

Hi Reiner,

jetzt kommt  gaaaanz viel ... ich hänge es mal als Datei an

Gruß Norbert
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Nobby1805

Hi,

ich habe mal ein bisschen rumgespielt (da merkt man schon, dass ich jahrelang nicht mehr mit perl programmiert habe) und gebe jetzt zusätzlich den Aufrufstack aus ...

wobei m.E. in IP das Problem nur "gemeldet" wird ... erzeugt wird es woanders

Gruß Norbert

PS zur "Reihenfolge" im Log ... zuerst der Dump, dann der Call-Stack und dann ggf. die Fehlermeldung
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Nobby1805

Ich habe mal versucht zu finden, wo SendTE eingetragen wird .. aber leider erfolglos :(
Weiß jemand, wofür SendTE steht ?
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Nobby1805

Ich gebe ja gerne zu, dass ich nicht völlig verstehe was dort gemacht wird  ::) aber derartige Fehlersuche war immerhin viele Jahre mein Job  ;)

Ich glaube, ich habe das Problem gefunden, es liegt im Modul FHEM/lib/UPnP/ControlPoint.pm

# We've found examples of where devices claim to do transfer
# encoding, but wind up sending chunks without chunk size headers.
# This code temporarily disables the TE header in the request.
push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, SendTE => 0);
my $ua = LWP::UserAgent->new(timeout => 20);


m.E. werden hier ZWEI Werte gepushed

pop(@LWP::Protocol::http::EXTRA_SOCK_OPTS);


und hier wird nur einer wieder entfernt

Wenn ich das Pop zweimal ausführe dann sieht der Log nach einem Restart gut aus  :D

PS das ganze passiert zweimal in dem Modul
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Reinerlein

Hi Norbert,

mensch, da ist man mal wegen Besuch verhindert, dann löst du das Ding einfach mal so :)
Was mich dabei trotzdem etwas wundert, ist der Umstand, dass es bei manchen Perl-Versionen geht, und manchmal nicht...

Ich würde jetzt kurz eine Anpassung schreiben, die den Inhalt des Arrays @LWP::Protocol::http::EXTRA_SOCK_OPTS untersucht, sich merkt, ob "SendTE" schon enthalten ist (und wie es gesetzt ist), es hinzufügt, oder überschreibt, und dann am Ende entsprechend wieder korrekt zurücksetzt.
Das erscheint mir am sichersten. Ich bin mir nämlich auch nicht sicher, was genau mit der Verbindung passiert, wenn es zweimal enthalten ist (einmal mit 0 und einmal mit 1)...

Es wird aber nicht mehr Heute fertig werden ;)

Grüße und Danke für die tolle Unterstützung,
Reiner

DanielGab

gibt´s hier schon was neues? Ich weiß einfach nicht, was ich noch machen kann...die Performance ist echt nicht so toll unter jessie, wenn perl am rackern und rödeln ist  :o

Reinerlein

Hallo DanielGab,

ich habe da was eingebaut, baue aber gerade noch an anderen Features (die ich vorher begonnen hatte), sodass ich das gerade nicht veröffentlichen kann...

Ansonsten ist weiter oben doch ein kleiner Workaround...

Grüße
Reiner

dev0

Wobei das weiter oben kein Fix ist, sondern nur die Warnungen nicht ins Log geschreiben werden. Performanceprobleme würde ich aber wohl auch an anderer Stelle suchen.

Nobby1805

#25
Zitat von: dev0 am 30 Januar 2016, 15:51:53
Wobei das weiter oben kein Fix ist, sondern nur die Warnungen nicht ins Log geschreiben werden. Performanceprobleme würde ich aber wohl auch an anderer Stelle suchen.
Nö, das http://forum.fhem.de/index.php/topic,47758.msg397586.html#msg397586 ist schon ein Workaround ;) man könnte dazu auch ein unsauberer Fix sagen  ;D
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

dev0

Stimmt, ich hatte an meinen Beitrag viel weiter oben gedacht...

Reinerlein


Xguide

Hallo zusammen,

ich habe das gleiche Verhalten wie eingangs von Markus berichtet.
Haufenweise Einträge ala:

Odd number of elements in hash assignment at /usr/share/perl5/IO/Socket/IP.pm line 352, <$client> line 4.

Ich habe den Workaround versucht der hier im Thread beschrieden ist:

--> Modul FHEM/lib/UPnP/ControlPoint.pm editiert und pop ein zweites Mal ausgeführt.

sub _createDevice {
my $self = shift;
my $location = shift;
my $device;

# We've found examples of where devices claim to do transfer
# encoding, but wind up sending chunks without chunk size headers.
# This code temporarily disables the TE header in the request.
push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, SendTE => 0);
my $ua = LWP::UserAgent->new(timeout => 20);
my $response = $ua->get($location);

my $base;
if ($response->is_success && $response->content ne '') {
($device, $base) = $self->parseDeviceDescription($response->content,
  {Location => $location},
  {ControlPoint => $self});
}
else {
carp("Loading device description failed with error: " .
$response->code . " " . $response->message);
}
pop(@LWP::Protocol::http::EXTRA_SOCK_OPTS);

############################################################################
###Workaround, call pop another time
###https://forum.fhem.de/index.php/topic,47758.msg397586.html#msg397586
############################################################################
        pop(@LWP::Protocol::http::EXTRA_SOCK_OPTS);


if ($device) {
$device->base($base ? $base : $location);
if ($response->is_success && $response->content ne '') {
$device->descriptionDocument($response->content);
}
}

return $device;
}


Hat leider nicht funktioniert, bzw. keine Veränderung gebracht.  :(

Ich habe jetzt die quick and dirty Variante gewählt und habe in IP.pm das "no warnings eingefügt"  :o

Auch ich bin inzwischen von Wheezy auf Jessie gewechselt und habe somit perl:5.020002.

2016.04.07 14:11:40 0: Featurelevel: 5.7
2016.04.07 14:11:40 0: Server started with 499 defined entities (fhem.pl:11191/2016-04-05 perl:5.020002 os:linux user:fhem pid:15555)


Ferner bekomme ich folgenden Fehler beim Neustart, vielleicht hat es ja was miteinander zu tun.


Smartmatch is experimental at /opt/fhem/FHEM/00_SONOS.pm line 4377.
Current: "/opt/fhem/FHEM/00_SONOS.pm", gPath: ""


Zeile 4377ff

if ($pingType ~~ @SONOS_PINGTYPELIST) {
SONOS_Log $udn, 5, "PingType: $pingType";
} else {
SONOS_Log $udn, 1, "Wrong pingType given for '$udn': '$pingType'. Choose one of '".join(', ', @SONOS_PINGTYPELIST)."'";
$pingType = $SONOS_DEFAULTPINGTYPE;
}


Jemand einen Ansatz wie ich es lösen kann ohne auf Wheezy zurück zu gehen? Diesbezüglich habe ich nur den Thread von rapster und reinerlein von 2014 gefunden, dem kann ich aber keinen Lösungsansatz entnehmen und lese es so, als ob die damaligen Probleme gelöst wurden....

Danke für Eure Hilfe,

Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

Xguide

Hallo zusammen,

manchmal ist es doch besser erstmal den Kopf anzustrengen.

Der Punkt "Smartmatch is experimental at /opt/fhem/FHEM/00_SONOS.pm line 4377." ist mir inzwischen klar. Welcome Jessie.
Ich habe nun via cpan das modul experimental geladen und die 00_SONOS.pm mit folgendem use erweitert:

######ms modified 2016.04.07######
#requires sudo cpan experimental
#################################
use experimental 'smartmatch';


Für mehr Informationen http://blogs.perl.org/users/mike_b/2013/06/a-little-nicer-way-to-use-smartmatch-on-perl-518.html.

Bleibt bei mir noch der Fehler/Warnung "Odd number of elements...." und "Current: "/opt/fhem/FHEM/00_SONOS.pm", gPath: """

Für gPath habe ich die 00_SONOS.pm nun wie folgt abgeändert, weil es wohl nur ne debugging Ausgabe war.

########################################################
# Verrenkungen um in allen Situationen das benötigte
# Modul sauber geladen zu bekommen..
########################################################
my $gPath = '';
BEGIN {
$gPath = substr($0, 0, rindex($0, '/'));
}
if (lc(substr($0, -7)) eq 'fhem.pl') {
$gPath = $attr{global}{modpath}.'/FHEM';
}
use lib ($gPath.'/lib', $gPath.'/FHEM/lib', './FHEM/lib', './lib', './FHEM', './');
###print 'Current: "'.$0.'", gPath: "'.$gPath."\"\n";
use UPnP::ControlPoint;
require 'DevIo.pm' if (lc(substr($0, -7)) eq 'fhem.pl');


Bleibt also nur noch der Fehler/Warnung "Odd number of elements...."

Für Ratschläge bin ich dankbar....

Gruß Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -