[FHZ] Use of uninitialized value $msg in concatenation (.) or string at c:/fhem/FHEM/00_FHZ.pm line 204.

Begonnen von Guest, 12 August 2009, 21:49:26

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo Rudi
"get FHZ fhtbuf"
führt im Log bei mir zu:
2009.08.12 20:48:45.336 2: FHZ get FHZ fhtbuf
Use of uninitialized value $msg in concatenation (.) or string at c:/
fhem/FHEM/00_FHZ.pm line 204.

Warum auch immer der FHZ nichts zurückgibt. Zumindest die
Fehlermeldung lässt sich m.E. vermeiden durch ein sauberes:
Log 5, "GET Got: $msg" if ($msg);

Gruß
Klaus

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

Originally posted by: <email address deleted>

die eigentliche Ursache des Problems hatte ich schonmal im CUL Forum
kommuniziert:
"FD wird unter Windows nicht gesetzt."
in sub ReadAnswer:
 return undef if(!$hash || !defined($hash->{FD}));
ersetzen durch:
return undef if(!$hash || ($^O!~/Win/ && !defined($hash->{FD})));

Damit komme ich zumindest schomal soweit, dass ich bis zum Timeout
gelange:
2009.08.12 23:52:27.234 2: FHZ get FHZ fhtbuf
2009.08.12 23:52:27.236 3: Timeout reading answer for get fhtbuf
... aber siehe da 100 ms später kommt auch die Rückmeldung vom fhem.pl
Dispatch:
2009.08.12 23:52:27.339 1: DispatchEXE 8107c9xx010285014a from FHZ
2009.08.12 23:52:27.340 1: DispatchParse FHZ,FHZ

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> ersetzen durch:
> return undef if(!$hash || ($^O!~/Win/ && !defined($hash->{FD})));

Eingebaut.

> Damit komme ich zumindest schomal soweit, dass ich bis zum Timeout
> gelange:
> 2009.08.12 23:52:27.234 2: FHZ get FHZ fhtbuf
> 2009.08.12 23:52:27.236 3: Timeout reading answer for get fhtbuf

Passiert auch unter Linux haeufiger, getFhtBuffer faengt es auch ab.
getFhtBuffer sollte auch fuer CUL angepasst werden, der hat inzwischen
eine dem FHZ sehr aehnliche Pufferbehandlung.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-

Guest

Originally posted by: <email address deleted>

> Passiert auch unter Linux haeufiger, getFhtBuffer faengt es auch ab.
> getFhtBuffer sollte auch fuer CUL angepasst werden, der hat inzwischen
> eine dem FHZ sehr aehnliche Pufferbehandlung.
In der Sub FHZ_Ready, die NUR unter Windows von ReadAnswer aufgerufen
wird liegt zum Zeitpunkt von:
  my ($BlockingFlags, $InBytes, $OutBytes, $ErrorFlags)=$po->status;
  return ($InBytes>0);
noch keine Antwort von der FHZ vor, wie schon im Log aufgezeigt. Es
fehlt hier schlichtweg die Timeoutmimik.

Also habe ich FHZ_ReadAnswer wie folgt geändert und so scheint es zu
funktionieren (Änderungen sind mit meinen Kürzeln kpb vermerkt)::

  my $buf; #kpb
  for(;;) {
    if($^O =~ m/Win/) {
      $hash->{PortObj}->read_const_time($to*1000); #kpb set timeout
(ms)
      $buf = $hash->{PortObj}->read(999);# kpb read bytes, no. of
bytes max. 999. Read anstatt input sonst funzt read_const_time nicht.
      return "Timeout reading answer for get $arg" if(length($buf) ==
0); #kpb
    } else {
      vec($rin, $hash->{FD}, 1) = 1;
      $nfound = select($rin, undef, undef, $to);
      if($nfound < 0) {
        next if ($! == EAGAIN() || $! == EINTR() || $! == 0);
        die("Select error $nfound / $!\n");
      }
      return "Timeout reading answer for get $arg" if($nfound == 0);
#kpb hier hin verschoben
      $buf = $hash->{PortObj}->input(); #kpb hier hin verschoben
    }

    Log 5, "FHZ/RAW: " . unpack('H*',$buf);
-----
N.B. Beim CUL wird ja exakt die gleiche Routine verwendet. Hier jedoch
gibts keine Timeouts zu verzeichnen. Ich nehme an dass die Daten (z.B.
get CUL version) dort von CUL sehr zügig bereitgestellt werden und die
CUL nicht soo "lazy" antwortet wie die FHZ. Würd allerdings der
Sauberkeit empfehlen, dort den Timoutmechanismus ebenfalls zu
implementieren, heisst die Änderungen wie oben beschrieben auch in den
00_CUL einzubauen.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> Also habe ich FHZ_ReadAnswer wie folgt geändert und so scheint es zu
> funktionieren (Änderungen sind mit meinen Kürzeln kpb vermerkt)::

Ich habe die Aenderungen eingecheckt (auch fuer CUL)

Danke & Gruss
  Rudi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-