[fhem.pl] Sinnhaftigkeit bestimmter Fehlermeldungen beim FHEM Start

Begonnen von betateilchen, 18 November 2020, 13:13:18

Vorheriges Thema - Nächstes Thema

betateilchen

Hallo Rudi,

in FHEM existiert ein Verhalten, das zwar mehr oder weniger logisch begründbar ist, aber immer wieder zu Verwirrung bei Anwendern sorgt.


  • Ein Gerät HM_6A935D wird definiert, Zustände werden gesetzt.
  • FHEM wird per "shutdown" oder "shutdown restart" beendet, ohne die geänderte Konfiguration vorher zu sichern.
  • beim Shutdown schreibt FHEM automatisch das statefile, auch mit den readings des nicht gesicherten device.
  • beim nächsten FHEM Start existiert das Gerät HM_6A935D nicht, aber im statefile stehen Zustände, die nun nicht gesetzt werden können.
  • es kommt zu einer (ggf. mehrfachen) Fehlermeldung "Please define HM_6A935D first" für jedes im statefile für das device gespeicherte reading.
  • nach einem erneuten shutdown von FHEM verschwinden die Fehlermeldungen, weil die readings nun nicht mehr vorhanden sind.

Mit einer kleinen Änderung in fhem.pl ließe sich die Fehlermeldung, die in diesem Szenario für mich wenig Sinn macht, unterdrücken.
Die Änderung sorgt dafür, dass die Fehlermeldung nur dann ausgegeben wird, wenn der FHEM Start bereits beendet wurde. Dadurch wird die Fehlermeldung weiterhin ausgegeben, wenn sich der Anwender z.B. beim Ausführen von setstate vertippt oder ähnlichem Unbill.


Index: fhem.pl
===================================================================
--- fhem.pl     (revision 23172)
+++ fhem.pl     (working copy)
@@ -3108,7 +3108,7 @@

   my @rets;
   foreach my $sdev (devspec2array($a[0],$cl)) {
-    if(!defined($defs{$sdev})) {
+    if(!defined($defs{$sdev}) && $init_done) {
       push @rets, "Please define $sdev first";
       next;
     }

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

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

noansi

Hallo Rudolf,

ich denke, es macht wenig Sinn das "next" beim fhem init zu übergehen, daher noch was günstiger in der Form:
    if(!defined($defs{$sdev})) {
      push @rets, "Please define $sdev first" if ($init_done);
      next;
    }


Gruß, Ansgar.

rudolfkoenig


noansi