Guten Morgen an alle!
Ich experimentierte heute morgen in der Datei 99_myUtils.pm, und fügte in meiner Funktion folgenden Code ein:
sub meineFunktion{
my $leistung = '123456';
fhem("setreading meinDevice1 Leistung $leistung");
}
Als ich den Code speicherte, war FHEM plötzlich nicht mehr ansprechbar. Und nicht nur das - mein Raspberry konnte zwar noch angepingt werden, jedoch war der SSH-Zugriff auch nicht mehr möglich.
Also steckte ich am PI die Maus, Tastatur und Monitor an, und siehe da, nach dem Bootvorgang konnte ich ca. 15 Sekunden mit dem Pi arbeiten, bevor er sich aufhing.
In diesen 15 Sekunden schaffte ich es, über die Konsole in der oben genannten Datei die Codezeile
fhem("setreading meinDevice1 Leistung $leistung");
zu entfernen. Seitdem läuft der Pi, und auch FHEM, wieder ganz normal.
Kann mir jemand erklären, warum diese Codezeile den Pi komplett in die Knie zwingt?
Wie wird denn ,,meineFunktion" aufgerufen?
Gesendet von iPhone mit Tapatalk
Hast du die Hinweise beachtet zum Aufbau einer myUtils-Datei?
(Stehen in der Datei selbst und im Wiki).
Was steht im log?
Und: JA, man kann sich mit eigenem Code ins Abseits schießen...
Von daher: versuche erst mal FHEM zu verstehen, bevor du Stufe 2 zündest!
moin,
mal angenommen:
die datei wurde mit fhem (edit files) editiert und gespeichert.
frage:
wird denn bei diesem save automatisch ein reload der datei erzeugt?
wenn nicht, verstehe ich nicht, was da passiert sein könnte.
Zitat von: Beta-User am 16 April 2020, 08:55:18
(Stehen in der Datei selbst und im Wiki).
Genauer: stehen in der Template Datei! Du musst dir die Datei aus einem Template erzeugen und nicht irgendwas reinschreiben!
Zitat von: KernSani am 16 April 2020, 08:54:45
Wie wird denn ,,meineFunktion" aufgerufen?
Ich hatte mir ein HTTPMOD-Device angelegt, dass mir die Bezinpreise anzeigt. Über das stateFormat Attribut hatte ich dann testweise die Funktion eingebaut:
attr MeineBezinpreise stateFormat {return ReadingsVal($name,"MeinErsterInhalt","").": ".meineFunktion();}
Zitat von: Pi_01 am 16 April 2020, 09:22:44
Ich hatte mir ein HTTPMOD-Device angelegt, dass mir die Bezinpreise anzeigt. Über das stateFormat Attribut hatte ich dann testweise die Funktion eingebaut:
attr MeineBezinpreise stateFormat {return ReadingsVal($name,"MeinErsterInhalt","").": ".meineFunktion();}
es ist zumindest gewagt, in stateFormat ein setreading aufzurufen... Ich kann mir eigentlich nur vorstellen, dass du es hier irgendwie schaffst einen endlos-loop zu erzeugen... aber selbst das sollte den RasPi eigentlich nicht gleich killen...
Grummel, bei meinen Hinweisen (mal wieder: in einem anderen Thread desselben TE's...) hatte ich ausdrücklich auf ein Beispiel bezug genommen, aber es mußte ja scheinbar unbedingt anders sein...
FALLS (!) die myUtils-Datei vom Aufbau her an sich ok sein sollte, würde ich mal vorschlagen, den Code so zu ändern:
sub meineFunktion{
return '123456';
}
Zitat von: frank am 16 April 2020, 09:16:18
mal angenommen:
die datei wurde mit fhem (edit files) editiert und gespeichert.
frage:
wird denn bei diesem save automatisch ein reload der datei erzeugt?
Ja.
Zitat von: betateilchen am 16 April 2020, 11:47:41
Ja.
Das ist aber neu. Oder besser so erst 2 Jahre alt. Früher ging das nicht.
Zitat von: CoolTux am 16 April 2020, 12:18:30
Das ist aber neu. Oder besser so erst 2 Jahre alt. Früher ging das nicht.
Das ist eine sehr gewagte Behauptung.
Als ich 2014 die configDB veröffentlicht habe (Rev #5080), war das Verhalten jedenfalls schon so.
Zitat von: betateilchen am 16 April 2020, 12:34:54
Das ist eine sehr gewagte Behauptung.
Als ich 2014 die configDB veröffentlicht habe (Rev #5080), war das Verhalten jedenfalls schon so.
Interessant. Ich kann mich erinnern das wie ich 2015 mit myUtils anfing eine neu eingetragene sub mit beim Aufruf mit Fehler kam. Müsste immer reload machen.
Kann es sein, dass Du gerade den automatischen reload nach dem Edit mit dem automatischen perlSyntaxCheck verwechselst? Dieser kam in der Tat erst später, wenn ich mich recht erinnere, muss das Anfang 2016 gewesen sein.
Zitat von: betateilchen am 16 April 2020, 14:42:22
Kann es sein, dass Du gerade den automatischen reload nach dem Edit mit dem automatischen perlSyntaxCheck verwechselst? Dieser kam in der Tat erst später, wenn ich mich recht erinnere, muss das Anfang 2016 gewesen sein.
Möglich. Aber gut zu wissen daß es automatisch geht. Spare ich mir einen Arbeitsschritt.
Danke
Ihr schaut aber teilweise selten ins log ::) ... Steht doch dort (in der Richtung): Perl warning: redefined routine xyz... Weiß nur grade nicht, welches loglevel.
Sollte unabhängig vom Loglevel sein
2020.04.16 15:12:35 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 15.