FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomLee am 01 März 2019, 15:11:49

Titel: rename ändert (jetzt?) auch Name von zugehörigem Filelog-Device
Beitrag von: TomLee am 01 März 2019, 15:11:49
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.
Titel: Antw:rename ändert (jetzt?) auch Name von zugehörigem Filelog-Device
Beitrag von: betateilchen am 01 März 2019, 17:55:12
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.

Titel: Antw:rename ändert (jetzt?) auch Name von zugehörigem Filelog-Device
Beitrag von: TomLee am 01 März 2019, 18:20:45
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

Titel: Antw:rename ändert (jetzt?) auch Name von zugehörigem Filelog-Device
Beitrag von: betateilchen am 01 März 2019, 20:04:11
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.

Titel: Antw:rename ändert (jetzt?) auch Name von zugehörigem Filelog-Device
Beitrag von: TomLee am 04 März 2019, 16:15:04
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.