[gelöst] FileLog: Logfiles fehlen bei get und plot

Begonnen von didi-fritz, 12 Januar 2019, 10:23:41

Vorheriges Thema - Nächstes Thema

didi-fritz

Hallo,

ich verwende bei FileLog logfile mit mit '/opt/fhem/log/....-%Y.log' und createGluedFile =1.

nun hab ich das Problem, dass
"get fl_wasserverbrauch CURRENT -   2017-01-01  2019-01-12  4:Day:0"
nur die Daten aus 2017 und 2019 liefert - 2018 fehlt nun in den Plots.

meiner Meinung ist da ein Fehler in 92_FileLog.pm.

ich habe in der Funktion FileLog_Get($@) einige Zeilen erweitert (markiert mit #)

FileLog_Get($@)
{
....
        if(AttrVal($name, "createGluedFile", 0)) {
          if($to =~ m/^(....)-(..)-(..)/) {
            my $linf_to = $hash->{logfile};
            my $Ys=$Y;                                                          ############## zeile 644
            my $ms=$m;                                                          ##############
            my ($Y,$m,$d) = ($1,$2,$3);
            $linf_to=expandFileWildcards($linf_to,$Y,$m,$d);
            # Log3 $name, 4, "FileLog: $linf  -> $linf_to # $Ys $ms -> $Y $m";  ##############
            if($linf ne $linf_to){  # use to log files
              $tempread=$linf_to.".transit.temp.log";
              if(open(my $temp,'>',$tempread)){
                if(open(my $i,'<',$linf)){
                  print $temp join("",<$i>);
                  close($i);
                }
                for (my $Yt=$Ys+1; $Yt<$Y; $Yt++)                               #############
                {                                                               #############
                        my $linf_temp = $hash->{logfile};                       #############
                        my $linf_temp=expandFileWildcards($linf_temp,$Yt,1,1);  #############
                        #Log3 $name, 4, "FileLog: $Yt --> read $linf_temp";     #############
                        if(open(my $i,'<',$linf_temp)){                         #############
                          print $temp join("",<$i>);                            #############
                          close($i);                                            #############
                        }                                                       #############
                }                                                               #############
                if(open(my $i,'<',$linf_to)){
                  print $temp join("",<$i>);
                  close($i);
                }
                $linf=$tempread;
                close($temp);
              }
            }
          }
....
}


es funktiomiert nun bei meinen Jahres-logs.

@Rudi: kannst du bitte das übernehmen?

Danke

Didi





rudolfkoenig

Zitatmeiner Meinung ist da ein Fehler in 92_FileLog.pm.
Kann man so sehen :)
Ich meine, createGluedFile sichert nur das Kleben von "nebeneinander" liegenden Dateien zu, die Doku spricht auch nur von 2 Dateien.

Das Problem mit deinem Patch ist, dass es nur bei Jahreslogs hilft, und die anderen Platzhalter (%d %m %w %j %U %W) ausser Acht laesst.
Ich habe einen relativ einfachen Algorithmus im Kopf, was aber fuer die bisherigen Faelle etwas mehr performance kostet.
Wenn noch jemanden gibt, der sowas braucht (bitte hier melden), dann baue ich das ein.

didi-fritz

ja ich weiss, dass mein Patch nur bei Jahres-logs funktioniert.

Ich würde auch ganz gut mit einem Performanceverlust leben können - Hauptsache die Daten sind richtig.

danke

rudolfkoenig

Ich habe eine Version eingecheckt, bitte um Feedback.

didi-fritz

funktioniert perfekt und der Performanceverlust ist bei mir nicht spürbar.

danke Rudi!