24_NetIO230B.pm auf FB7390

Begonnen von housekeeper, 05 März 2013, 15:42:12

Vorheriges Thema - Nächstes Thema

housekeeper

Nach Einrichtung einer NETIO230B Steckdosenleiste und Definition der Schalter, stelle ich fest, daß im Log zu jedem Vorgang der Eintrag: "CustomGetFileFromURL <hidden>: Select timeout/error:" erscheint, obwohl das Schalten funktioniert.

Nach längerem Suchen bin ich in HttpUtils.pm fündig geworden, "# - noshutdown must be set for e.g the Fritz!Box". Da ich nicht das Modul 24_NetIO230B verändern wollte, habe ich in der Routine "sub CustomGetFileFromURL($$@)" die Zeile "$noshutdown = 1 if(!defined($noshutdown));" eingefügt. Jetzt bekomme ich korrekte Rückmeldung vom NetIO (250 OK, etc.)

Vermutlich kann man das noch eleganter lösen, aber für meine Zwecke reicht das erst mal.

Noch besser ist: "$noshutdown = 1 if($ENV{'CONFIG_PRODUKT_NAME'} eq "FRITZ!Box Fon WLAN 7390");"




housekeeper

Der "Pfleger" für das Modul ist wohl Rudolf König.

$Id: HttpUtils.pm 2684 2013-02-10 19:22:55Z rudolfkoenig $

vielleicht schaust Du mal Rudi, ob Du meinen Änderungsvorschlag

$noshutdown = 1 if($ENV{'CONFIG_PRODUKT_NAME'} eq "FRITZ!Box Fon WLAN 7390");

einpflegen möchtest ? Immerhin lassen einige FHEM auf der Fritz!Box laufen.

housekeeper

housekeeper

Noch allgemeiner wäre anstelle von


$noshutdown = 1 if($ENV{'CONFIG_PRODUKT_NAME'} eq "FRITZ!Box Fon WLAN 7390");

folgende Zeile

$noshutdown = 1 if( substr ( $ENV{'CONFIG_PRODUKT'}, 0, 9 ) eq "Fritz_Box");

da dieser String laut AVM Wiki in _allen_ Modellen verwendet wird.



rudolfkoenig

Wenn ich shutdown($conn,1) richtig verstehe, dann wird damit innerhalb des TCP/IP Protocols signalisiert, dass man nichts mehr senden will, nur noch die Antwort auf die gesendeten Daten lesen. Manche Server ignorieren diesen Hinweis, und warten weiter auf Daten vom Client. D.h. das Problem ist eigentlich ein SERVER-Bug.

Anders formuliert: ich glaube dieser Flag sollte nicht generell gesetzt werden, wenn FHEM auf einem FritzBox laeuft, sondern wenn das von FHEM angesprochene Server (z.Bsp der auf dem FritzBox) das Problem hat, jedenfalls war mein Kommentar so gemeint. Ich vermute deine Steckdosenleiste ist in diesem Sinn auch "defekt", und das Problem muss in 24_NetIO230B.pm behoben werden. Entweder per Attribut, oder indem man generell alle Dosen per noshutdown anspricht.

Kannst Du das bitte meine Theorie verifizieren, indem Du FHEM auf einem anderen Rechner (nicht FB :) installierst, und von diesem FHEM aus die Dose schaltest?

housekeeper

Also gut, auf einem virtuellen 64bit openSuSE 12.3 installiert und device define test NetIO230B 192.168.178.55:80 4 FHEM/netio.cfg eingerichtet.

Beim Einschalten des device habe ich tatsächlich im Log die gleiche Fehlermeldung wie auf der Fritz!Box:

2013.05.11 09:41:45 3: NetIO230B: device opened at host: 192.168.178.55:80 => test NetIO230B 192.168.178.55:80 4 user password

2013.05.11 09:41:56 1: CustomGetFileFromURL http://192.168.178.55:80/tgi/control.tgi?l=p:user:password&p=uuu1: Select timeout/error:
2013.05.11 09:41:56 3: NetIO230B_Request failed:
2013.05.11 09:41:56 3: NetIO230B set test on =>


Damit gehört eine Korrektur wohl eher ins "24_NetIO230B.pm".

Beiläufig sei erwähnt, daß die user:password Kombination sowohl mit "list device" als auch im Log bekannt gegeben  wird, obwohl eine netio.cfg Datei angelegt ist.

housekeeper

Na gut, ich habe mal eben einen Schnellkurs "wie übergebe ich Parameter in Perl" absolviert. Im Anhang eine diff Datei mit meinem Ergebnis. Möglicherweise nicht perfekt, aber es funktioniert. Vielleicht kann jemand das einpflegen ?

rudolfkoenig

Das sollte Andy uebernehmen, er ist der Autor.
Wenn er sich nicht meldet, dann kann ich das uebernehmen, bitte erinnere mich daran.

housekeeper

Zitat von: rudolfkoenig:...bitte erinnere mich daran.
@Rudi: ping

rudolfkoenig

Also nochmal, nachdem ich die Antwort in dem falschen Thread gepostet habe :(

In perl steht ("c","d") fuer ein Array mit zwei Werten. Der Aufruf
fn("a", ("b"), ("c", "d"));
uebergibt aber nicht 3 Parameter (1x Skalar + 2x Array) an die Funktion, sondern 4 Einzelwerte (Skalare).
Der obige Aufruf suggeriert aber was anderes, deswegen habe ich die Klammer in deinem Patch entfernt.

Habs eingecheckt, kannst Du es bitte testen?

housekeeper

Zitat von: rudolfkoenig:Habs eingecheckt, kannst Du es bitte testen?
sieht gut aus 2013.05.24 08:34:52 3: NetIO230B set DoseHPLaserJet2840 on => 250 OK, Danke für's proofreading.