rename ändert (jetzt?) auch Name von zugehörigem Filelog-Device

Begonnen von TomLee, 01 März 2019, 15:11:49

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

eine Frage am Rande:

Ist es schon immer so das nach einem rename eines Devices das dazugehörige Filelog-Device auch mit umbenannt wird ?

Mir ist das heute das erste mal aufgefallen.

betateilchen

Das dürfte vermutlich davon abhängen, ob Du ein autocreate device aktiv hast oder nicht.

Schau doch mal in das FileLog rein - stehen da auch Werte von der Zeit vor der Umbennung drin? Meine Vermutung: autocreate legt ein neues FileLog device an, dessen Name zu dem neuen Namen des unbenannten devices passt.

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

TomLee

Ja, es geht um ein MQTT2-DEVICE.

Und nein, auch nach dem umbennen ist es weiterhin das alte FileLog, es wird kein neues angelegt, es stehen die alten Daten drin. Was wäre denn bei deiner Vermutung überhaupt mit dem alten Filelog das würd sich ja auch nicht in Luft auflösen, das wär ja dann zusätzlich da und würde ich sehen  :P


betateilchen

Zitat von: TomLee am 01 März 2019, 18:20:45
Was wäre denn bei deiner Vermutung überhaupt mit dem alten Filelog das würd sich ja auch nicht in Luft auflösen

Es wäre zumindest noch auf dem Datenträger vorhanden. Ob man es in FHEM noch sieht, ist eine andere Frage.

Aber so wie Du es beschreibst, wird es tatsächlich automatisch umbenannt. Schauen wir doch einfach mal in 98_autocreate.pm...


    ################
    if($s =~ m/^RENAMED ([^ ]*) ([^ ]*)$/) {
      my ($old, $new) = ($1, $2);

      if($defs{"FileLog_$old"}) {
        CommandRename(undef, "FileLog_$old FileLog_$new");
        my $hash = $defs{"FileLog_$new"};
        my $oldfile = $hash->{currentlogfile};

        $hash->{DEF} =~ s/$old/$new/g;
        $hash->{REGEXP} =~ s/$old/$new/g;
        $hash->{logfile} =~ s/$old/$new/g;
        $hash->{currentlogfile} =~ s/$old/$new/g;

        Log3 $me, 2, "autocreate: renamed FileLog_$old to FileLog_$new";
        $nrcreated++;

        notifyRegexpChanged($hash, $hash->{REGEXP});

        # Content
        if($oldfile ne $hash->{currentlogfile} &&
           open(IN, $oldfile) && open(OUT, ">".$hash->{currentlogfile})) {
          while(my $l = <IN>) {
            $l =~ s/$old/$new/;
            syswrite(OUT, $l);
          }
          close(IN); close(OUT);
          unlink($oldfile);
          my $fh = new IO::File ">>$hash->{currentlogfile}";
          $hash->{FH} = $fh;
        } else {
          Log 1, "$oldfile or $hash->{currentlogfile}: $!";
          close(IN);
        }
      }


aha... Damit sind ja dann alle Fragen beantwortet :)

In Deinem zentralen Logfile müsstest Du sogar eine Meldung finden, die auf das Umbenennen hinweist. Und wenn ich das richtig interpretiere, ist diese Funktionalität mindestens seit Februar 2016 in autocreate vorhanden.

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

TomLee

Zitat von: betateilchen am 01 März 2019, 20:04:11


    ################
    if($s =~ m/^RENAMED ([^ ]*) ([^ ]*)$/) {
      my ($old, $new) = ($1, $2);

      if($defs{"FileLog_$old"}) {
        CommandRename(undef, "FileLog_$old FileLog_$new");
        my $hash = $defs{"FileLog_$new"};
        my $oldfile = $hash->{currentlogfile};

        $hash->{DEF} =~ s/$old/$new/g;
        $hash->{REGEXP} =~ s/$old/$new/g;
        $hash->{logfile} =~ s/$old/$new/g;
        $hash->{currentlogfile} =~ s/$old/$new/g;

        Log3 $me, 2, "autocreate: renamed FileLog_$old to FileLog_$new";
        $nrcreated++;

        notifyRegexpChanged($hash, $hash->{REGEXP});

        # Content
        if($oldfile ne $hash->{currentlogfile} &&
           open(IN, $oldfile) && open(OUT, ">".$hash->{currentlogfile})) {
          while(my $l = <IN>) {
            $l =~ s/$old/$new/;
            syswrite(OUT, $l);
          }
          close(IN); close(OUT);
          unlink($oldfile);
          my $fh = new IO::File ">>$hash->{currentlogfile}";
          $hash->{FH} = $fh;
        } else {
          Log 1, "$oldfile or $hash->{currentlogfile}: $!";
          close(IN);
        }
      }



In Deinem zentralen Logfile müsstest Du sogar eine Meldung finden, die auf das Umbenennen hinweist.

richtig:

Zitat2019.03.01 18:11:37 2: autocreate: renamed FileLog_MQTT2_ebusd_scan to FileLog_MQTT2_ebusd_sca

Danke mal wieder für die ausführliche Erklärung.