Problem in FW_iconName($): Use of uninitialized value $name

Begonnen von bugster_de, 03 Januar 2017, 17:58:30

Vorheriges Thema - Nächstes Thema

bugster_de

[Tue Jan  3 17:49:15 2017] fhem.pl: Use of uninitialized value $name in substitution (s///) at /opt/fhem/FHEM/01_FHEMWEB.pm line 2411.
[Tue Jan  3 17:49:15 2017] fhem.pl: Use of uninitialized value $name in hash element at /opt/fhem/FHEM/01_FHEMWEB.pm line 2413.


Ich musste mich wegen HMLAN Problemen mal wieder um mein FHEM kümmern und da hat mich im Logfile die obige Message angelacht. Sie scheint immer dann aufzutauchen, wenn man das Web-Interface von FHEM aufruft.
FHEM ist mit aktuellstem Update versorgt.
Offensichtlich wir die Funktion FW_iconName($) ohne Übergabe Parameter aufgerufen, was dazu führt, dass die Variable $name dann undefined ist.
  my ($oname)= @_;
  my $name = $oname;


Ich habe mir jetzt erstmal so beholfen:
  my ($oname)= @_;
  if( !defined( $oname ) ) {
      return( undef );
  }
  my $name = $oname;


Aber das ist natürlich auch nicht die Lösung sondern nur ein Pflaster. Wie finde ich raus, von wem diese Funktion ohne Übergabeparameter aufgerufen wird?



rudolfkoenig

Danke fuer den Hinweis, die Abfrage habe ich jetzt eingecheckt, as schadet sicher nicht.
Um rauszufinden, wo es herkommt, wuerde ich in FW_iconName vorne ein "Log 1, $oname;" einbauen. Durch die Ausgaben kommt man hoffentlich auf die Idee, aus welcher Ecke es herkommt.
Die Funktion wird aus FHEMWEB, LightScene, FLOORPLAN und weekprofile aufgerufen, und nur weekprofile ist "unschuldig". FHEMWEB und FLOORPLAN haben ein Probem bei komisch gesetzten roomIcon/fp_roomIcon, LightScene bei nicht vorhandenen state.

bugster_de

Hi,

Danke für die Antwort.

LightScene und weekprofile nutze ich nicht, fällt also aus. Floorplan ist zwar definiert aber den habe ich schon seit ewiger Zeit nicht mehr genutzt; sprich der Floorplan ist nur in der Menü-Eintragsliste links enthalten. Ich tippe also mal auf FHEMWeb.

Ich werde mal versuchen mit der "caller" Funktion in Perl heraus zufinden, wer die Funktion aufruft. Sprich folgender Code:
my ($oname)= @_;
  if( !defined( $oname ) ) {
      my @res = caller( 1 );
      Log 1, $res[ 3 ];
      return( undef );
  }


Dann kann man sich entsprechend weiter hangeln.
  my $name = $oname;