[patch] fhem.pl - Hinweismeldung im Frontend bei Fehlern während fhem-Start

Begonnen von betateilchen, 02 April 2014, 11:39:32

Vorheriges Thema - Nächstes Thema

betateilchen

ich schlage folgenden patch vor



Index: fhem.pl
===================================================================
--- fhem.pl (Revision 5411)
+++ fhem.pl (Arbeitskopie)
@@ -435,10 +435,14 @@

if($attr{global}{configfile} eq 'configDB') {
   my $ret = cfgDB_ReadAll(undef);
+  $attr{global}{motd} .= "\n\nError on loading fhem. Check your configuration!\n".
+                         "Set global attr motd to none to confirm and delete this message."  if($ret);
   Log 1, "configDB: $ret" if($ret);

} else {
   my $ret = CommandInclude(undef, $attr{global}{configfile});
+  $attr{global}{motd} .= "\n\nError on loading fhem. Check your configuration!\n".
+                         "Set global attr motd to none to confirm and delete this message."  if($ret);
   Log 1, "configfile: $ret" if($ret);

   if($attr{global}{statefile} && -r $attr{global}{statefile}) {



der diese Ausgabe erzeugt:

(http://up.picr.de/17840125sk.png)

falls während des Startens von fhem irgenwelche Fehler festgestellt wurden. Damit soll dem Anwender direkt signalisiert werden, dass irgendetwas nicht stimmt und er die Möglichkeit hat, seine Konfiguration zu prüfen BEVOR er das nächste "save config" durchführt und damit die nichtausgeführten defines etc. endgültig aus seiner Konfiguration löscht.

Diskussion dazu wurde z.B. hier geführt: http://forum.fhem.de/index.php/topic,22096.0.html
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

ich schlage zusätzlich folgenden patch vor:--- /Users/andre/fhem-code/fhem/FHEM/98_telnet.pm 2014-02-08 10:10:07.000000000 +0100
+++ 98_telnet.pm 2014-04-02 12:48:57.000000000 +0200
@@ -187,8 +187,11 @@
     $chash->{encoding} = AttrVal($name, "encoding", "utf8");
     syswrite($chash->{CD}, sprintf("%c%c%c", 255, 253, 0) ) if( AttrVal($name, "encoding", "") ); #DO BINARY
     $chash->{CD}->flush();
-    syswrite($chash->{CD}, sprintf("%c%c%cPassword: ", 255, 251, 1)) # WILL ECHO
-        if(telnet_pw($name, $chash->{NAME}));
+    if(telnet_pw($name, $chash->{NAME})) {
+      syswrite($chash->{CD}, sprintf("%c%c%cPassword: ", 255, 251, 1)) # WILL ECHO
+    } else {
+      syswrite($chash->{CD}, $attr{global}{motd});
+    }
     return;
   }

@@ -238,6 +241,7 @@

         if($ret) {
           $hash->{pwEntered} = 1;
+          syswrite($hash->{CD}, $attr{global}{motd});
           next;
         } else {
           if($hash->{isClient}) {


damit wird die globale nachricht auch bei telnet verbinungen ausgegeben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

@betateilchen: habs etwas zusammengefasst, und auf "auto-delete" umgestellt, kannst du bitte pruefen, ob es noch funktioniert?

@justme1968: damit habe ich Probleme, da vermutlich etliche Programme, die per telnet was ausloesen, stoeren wuerde. Vermutlich waere es aber ok, wenn das motd vor dem ersten Prompt (fhem> ) kommen wuerde. Eure Meinung?

justme1968

du hast recht. ich habe aber leider keine gute idee wie man das vermeiden kann.

da sind wir übrigens auch wieder bei dem alten problem das ich so lange kein fhem> prompt habe bis ich eine leerzeile eingebe. das finde ich aber sehr positiv weil so copy und paste viel besser geht und ich mich jedes mal ärgere wenn der prompt kommt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

So, jetzt nochmal...

Zitat von: rudolfkoenig am 02 April 2014, 13:10:16
@betateilchen: habs etwas zusammengefasst, und auf "auto-delete" umgestellt, kannst du bitte pruefen, ob es noch funktioniert?

getestet und folgenden Bug gefunden:

falsch:


if($cfgRet) {
  $attr{global}{motd} = "$cfgErrMsg,\ncheck the Logfile for details.";


richtig:


if($cfgRet) {
  $attr{global}{motd} = "$cfgErrMsg\n$cfgRet\ncheck the Logfile for details.";


Sonst werden die gesammelten Fehlermeldungen nicht - wie vorgesehen - angezeigt.

Ansonsten habe ich den Positiv- wie den Negativfall sowohl mit fhem.cfg als auch mit configDB erfolgreich getestet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 02 April 2014, 13:10:16Vermutlich waere es aber ok, wenn das motd vor dem ersten Prompt (fhem> ) kommen wuerde. Eure Meinung?

Dazu kann ich keine Meinung äußern, da ich mit telnet nicht arbeite.
Aber vermutlich hast Du mit der Ausgabe vor dem ersten Prompt recht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

@betateilchen: Bug ist das sicher keins, hoechstens unpraktisch. Ich weise bereits in der Meldung darauf hin, dass die Details in der Log zu finden sind, wenn ich die Fehler auch ausgebe, dann kann ich den Hinweis sparen. Ich finde es so "ordentlicher", aber das ist sicher Ansichtssache.

@justme1968: habe gerade gesehen, dass telnet diese Meldung vor dem ersten Prompt bereits jetzt schon ausgibt.

betateilchen

Zitat von: rudolfkoenig am 03 April 2014, 14:14:04
@betateilchen: Bug ist das sicher keins, hoechstens unpraktisch.

hm, dann hab ich Deine Intention im Coding falsch interpretiert. (Obwohl sich ja auch kein Problem daraus ergeben würde, gleich die gesammelten Fehlermeldungen mit auszugeben, wenn man schon darauf hinweist, dass welche exisiteren)

Ok, ich warte dann mal, bis der erste User danach fragt, warum man die eigentliche Fehlermeldung nicht gleich angezeigt bekommt  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!