Hi,
ich habe gestern Fhem Updates eingespielt. Seit dem bekomme ich einen Fehler vom Calendar-Modul innerhalb einer Routine, die ich zum Erstellen eines WebLinks verwende:
Mein Aufruf: my $allEvents = fhem("get Abfallkalender full all");
Fehler: "Can't use an undefined value as a subroutine reference at ./FHEM/57_Calendar.pm line 2344."
Ich habe dann über FHEMWEB im Device diesen Aufruf abgesetzt: Darauf hin hat FHEM nicht mehr reagiert. Nur ein Neustart meines Raspi hat geholfen.
Wenn ich dagegen get Abfallkalender full modeUpcoming absetze, werden mir meine Termine angezeigt.
Hat jemand eine Idee wie ich dem Fehler auf die Spur kommen kann? Kann es sein, dass es eine Änderung im Modul gab?
Viele Grüße
Markus
Hallo Markus,
habe ich auch:
Can't use an undefined value as a subroutine reference at ./FHEM/57_Calendar.pm line 2344.
In Verbindung mit Homemode wo mein nextcloud Kalender abgefragt wird:
https://forum.fhem.de/index.php/topic,64317.735.html#lastPost (https://forum.fhem.de/index.php/topic,64317.735.html#lastPost)
FHEM crasht sofort, kann aber über Neustart wieder zum Leben erweckt werden.
Diese Funktion verursacht anscheinend den Fehler:
# get and filter events
my %vevents= %{$hash->{".fhem"}{vevents}};
foreach my $id (keys %vevents) {
my $v= $vevents{$id};
my @events= @{$v->{events}};
foreach my $event (@events) {
if(@filters) {
my $match= 0;
for my $h (@filters) {
my $filter= \%$h;
my $filterref= $filter->{ref};
my $param = $filter->{param};
my $field = $filter->{field};
last unless(&$filterref($event, $param, $field));
$match++;
}
#Debug "Filter $filterref, Parameter $param, Match $match";
next unless $match==@filters;
}
if(defined($t1)) { next if(defined($event->end()) && $event->end() < $t1); }
if(defined($t2)) { next if(defined($event->start()) && $event->start() > $t2); }
push @result, $event;
}
}
return sort { $a->start() <=> $b->start() } @result;
Zeile 2344 beginnt mit "last unless..."
VG Sebastian
last unless(&$filterref($event, $param, $field));
Ändern in
last unless($filterref($event, $param, $field));
reload Modulname
Und dann bitte testen.
ZitatUnd dann bitte testen.
Hi Leon,
habs geändert und beim reload kommt:
syntax error at ./FHEM/57_Calendar.pm line 2344, near "$filterref("
BEGIN not safe after errors--compilation aborted at ./FHEM/57_Calendar.pm line 2525.
VG Sebastian
Dann habe ich einen Fehler gemacht. Sorry.
Sie Zeile scheint eine Codereferenz auf zu rufen.
last unless(&$filterref($event, $param, $field));
Der Fehler muss was anderes sein.
my $filterref= $filter->{ref};
my $param = $filter->{param};
my $field = $filter->{field};
last unless(&$filterref($event, $param, $field));
Ich tippe darauf das $filterref nicht befüllt wird. Man müsste da Mal eine Ausgabe mit Debug einbauen.
Ich schaue es mir an.
gefixt und eingecheckt, sofort im SVN oder ab morgen 8 Uhr im Update
Hallo,
hab die neue Version eingespielt.
Jetzt schmiert fhem mit dieser Meldung ab:
Can't use an undefined value as a subroutine reference at ./FHEM/57_Calendar.pm line 2379.
Wie gesagt, passiert nur wenn wie bei mir HOMEMODE auf ein Calendar device zugreift. Genauer gesagt bei
set Home updateInternalForce
Selbst das Entfernen des Kalenders via attr... brachte fhem zum Absturz. Habe das im HOMEMODE Forum auch schon gepostet.
https://forum.fhem.de/index.php/topic,64317.735.html (https://forum.fhem.de/index.php/topic,64317.735.html)
VG Sebastian
HOMEMODE muss angepasst werden. Näheres siehe bitte im vorgenannten Beitrag.
Zitat von: Dr. Boris Neubert am 02 April 2018, 23:11:10
HOMEMODE muss angepasst werden. Näheres siehe bitte im vorgenannten Beitrag.
Danke, hab's gelesen. Dan liest bestimmt im Homemode Thread auch mit.
VG Sebastian
Gesendet von iPhone mit Tapatalk
Nach Einspielen der Updates von FHEM ist das Problem behoben.
:)
Vielen Dank
Markus