[gelöst] "fhem.pl: Use of uninitialized value $n in hash element at fhem.pl"

Begonnen von franky08, 19 Juli 2016, 10:39:17

Vorheriges Thema - Nächstes Thema

frank

ZitatP.S. die Attribute sind noch da aber das Dropdown Menü zur Auswahl wird nicht mehr angezeigt
was hast du getan?  :)

ich habe es gerade probiert und die codezeile aus dem thread eingebaut. alle attribute sind da und selektierbar.
ich kann nur den fehler nicht provozieren, damit die logausgabe anspringt.

wenn ich sowas in der art die cmdzeile eingebe
{InternalVal("IT_Lampe_SZ",,"hallo")}
gibt es natürlich gleich schon gemeckere und es wird nicht ausgeführt.

gruss frank
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

franky08

Hab es gerade mal umgebaut, d.h. die Bedingung vorangestellt :
if(!defined($n)) {
Log (1, "----- test1 ----- device: ".$d);
}


warte jetzt auf die erste Meldung, dauert immer 30 min Hatte vorhin
Log (1, "----- test ----- device: ".$d) if(!defined($n));

vor dem if... in der fhem.pl und damit waren seltsamerweise keine DropDown's mehr auswählbar.

Habe es auch mal in ReadingsVal reingenommen, mir scheint es ehr, dass die Meldung daher kommt:
sub
InternalVal($$$)
{
  my ($d,$n,$default) = @_;
if(!defined($n)) {
Log (1, "----- test1 ----- device: ".$d);
}
  if(defined($defs{$d}) &&
     defined($defs{$d}{$n})) {
     return $defs{$d}{$n};
  }
  return $default;
}

sub
ReadingsVal($$$)
{
  my ($d,$n,$default) = @_;
  if(!defined($n)) {
Log (1, "----- test2 ----- device: ".$d);
}
  if(defined($defs{$d}) &&
     defined($defs{$d}{READINGS}) &&
     defined($defs{$d}{READINGS}{$n}) &&
     defined($defs{$d}{READINGS}{$n}{VAL})) {
     return $defs{$d}{READINGS}{$n}{VAL};
  }
  return $default;
}

sub
ReadingsNum($$$)
{
  my ($d,$n,$default) = @_;
  my $val = ReadingsVal($d,$n,$default);
  $val =~ s/[^-\.\d]//g;
  return $val;
}
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

ich habe den fehler jetzt simulieren können und meine logzeile, wie oben beschrieben, hat ausgelöst.  :)

2016.07.21 22:19:07.659 1 : ----- test ----- device: IT_Lampe_SZ
2016.07.21 22:19:07.662 1 : PERL WARNING: Use of uninitialized value $n in hash element at fhem.pl line 3694.


allerdings ist das natürlich nicht das device, welches die funktion aufruft, sondern leider nur das device, welches in der funktion InternalVal angegeben ist. vielleicht hilft das ja trotzdem bei der "findung".
aber sicherlich gibt es auch noch informativere "einbauten".

ausgelöst habe ich es mit einem notify und dann auf save config geklickt:
global:SAVE {
my $a1 = InternalVal("IT_Lampe_SZ",undef,"hallo");
Log(1, "das ist ein test");
}


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

franky08

Hab ich auch gerade gesehen (die 30 min sind um  :)  )
2016.07.21 22:28:31 1: ----- test2 ----- device: UV_Lampe
[Thu Jul 21 22:28:31 2016] fhem.pl: Use of uninitialized value $n in hash element at fhem.pl line 3739.


Da hier aber test2 steht, kommt aus aus ReadingsVal

Nu fragt sich der User wo bei einem Schaltaktor ReadingsVal herkommen soll
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

in deinem ersten post war es aber die zeile 3733.

du scheinst jetzt ja aber mehr eingebaut zu haben.  :)
ZitatEdit2: Merke! editiere nicht die fhem.pl,
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

franky08

Durch die Log Zeilen hat sich das verschoben.
Das device ist ein HM Aktor an dem eine UV Lampe (Mückenkiller) hängt. Gestartet wird das Ganze über die Außentemperatur ( da kommt wahrscheinlich das ReadingsVal her, da ich damit den Temperatursensor im Garten abfrage). Ich werde morgen den Code mal umbauen ( ist unnötig dämlich gemacht und ginge über ein at mit Bedingung der Temperatur einfacher), jetzt frage ich ab einer bestimmten Außentemperatur (vorher gibt es keine Mücken) alle 30 min ab ob die Temperatur noch im Schaltbereich liegt und dann über disable 1 oder 0 wird der Schaltaktor ein oder ausgeschaltet.

+*00:10:00 {if(ReadingsVal("Temperatur_Garten","temperature",99)>25) {fhem ("set UV_Lampe on")}else {fhem ("attr UV_Lampe_on disable 1")}}

Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

Sooo, jetzt habe ich die Steuerung der UV Lampe in eine sub ausgelagert, getriggert wird über notify auf den Außentemperatursensor:
define UV_Lampe_nty notify Temperatur_Garten:temperature.* {UV_Licht}

die sub:
sub UV_Licht()
        {
    my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;

my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);

my $zeit_1 = sprintf("Es ist %02d:%02d Uhr",
   $Stunden,
   $Minuten,
);
my $hour = $Stunden;

my $tempuv = ReadingsVal("Temperatur_Garten","temperature",0);
if ($tempuv > 25 && ($hour >= 14 && $hour < 20)) {
fhem "set UV_Lampe on"
} else {
if (Value("UV_Lampe") eq "on") {
fhem "set UV_Lampe off"
}
    }
        }


Die Time Geschichte am Anfang der sub ist drin weil ich auf die Schnelle an $hour kommen wollte und ich aus einer anderen sub den Code schnell mal reinkopiert habe.

Auch mit dem ausgelagerten Code bekomme ich im Log:
2016.07.22 08:58:31 1: ----- test2 ----- device: UV_Lampe
[Fri Jul 22 08:58:31 2016] fhem.pl: Use of uninitialized value $n in hash element at fhem.pl line 3739.


Nun bin ich mit meinem Latein am Ende, "test2" sagt das die Meldung aus ReadingsVal kommt aber was stimmt da nicht an

my $blabla = ReadingsVal("Temperatur_Garten","temperature",0);

da kann man ja nun nichts falsch machen ????

P.S. selbst wenn ich das notify disable taucht die Meldung im Log auf

?????

VG
der ratlose Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

So, jetzt hab ich's  ;D

Die Meldung kommt aus dem device "UV_Lampe", soviel war ja nun schon bekannt. Im device war irgendwie das Attribut "peerIDs 00000000" verschwunden! Ein erneutes drüber pairen hat das Attribut erneut gesetzt und die Meldung taucht seit einer Stunde nicht mehr auf.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

ZitatEin erneutes drüber pairen hat das Attribut erneut gesetzt und die Meldung taucht seit einer Stunde nicht mehr auf.
schon ein seltsamer zusammenhang.
hoffentlich bleibt es so!  8)
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