[GELÖST] fhem.log läuft voll --> fhem.pl

Begonnen von MarkBinary, 12 April 2017, 10:52:32

Vorheriges Thema - Nächstes Thema

MarkBinary

Hallo zusammen.
Nach einem Update vom Wochenende läuft mein LogFile -das ich wöchentlich trenne- mit folgender Meldung im Sekundentakt voll.
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE .$/ at fhem.pl line 4363

Was kann ich dagegen tun?
Da Fhem auf einem Raspberry Pi2 läuft und dieser ja wohl bei so häufigen Schreibzugriffen gerne die µSD Karten zerstört, habe ich vorsichtshalber schon eine neue µSD-Karte bespielt und als Reserve daneben liegen.

In der genannten Meldung wird auf die Datei fhem.pl verwiesen. Dort konnte ich folgenden Code finden:
# determine if an event should be created:
    # always create event if no attribute is set
    # or if the reading is listed in event-on-update-reading
    # or if the reading is listed in event-on-change-reading...
    # ...and its value has changed...
    # ...and the change greater then the threshold
    $changed= !($attreocr || $attreour)
              || $eour 
              || ($eocr && ($value ne $readings->{VAL}));
    #Log 1, "EOCR:$eocr EOUR:$eour CHANGED:$changed";

4361    my @v = grep { my $l = $_;
4362                   $l =~ s/:.*//;
4363                   ($reading=~ m/^$l$/) ? $_ : undef} @{$hash->{".attrminint"}};
    if(@v) {
      my (undef, $minInt) = split(":", $v[0]);
      my $now = $hash->{".updateTime"};
      my $le = $hash->{".lastTime$reading"};
      if($le && $now-$le < $minInt) {
        if(!$eocr || ($eocr && $value eq $readings->{VAL})){
          $changed = 0;
        } else {
          $hash->{".lastTime$reading"} = $now;
        }
      } else {
        $hash->{".lastTime$reading"} = $now;
        $changed = 1 if($eocrExists);
      }
    }

    if( $attreocr ) {
      if( my $attrtocr = $hash->{".attrtocr"} ) {
        $update_timestamp = $changed
                if( $attrtocr && grep($reading =~ m/^$_$/, @{$attrtocr}) );
      }
    }

  }

  if($changed) {
    #Debug "Processing $reading: $value";
    my @v = grep { my $l = $_;
                  $l =~ s/:.*//;
                  ($reading=~ m/^$l$/) ? $_ : undef} @{$hash->{".attraggr"}};
    if(@v) {
      # e.g. power:20:linear:avg
      my (undef,$duration,$method,$function,$holdTime) = split(":", $v[0], 5);
      my $ts;
      if(defined($readings->{".ts"})) {
        $ts= $readings->{".ts"};
      } else {
        require "TimeSeries.pm";
        $ts= TimeSeries->new( { method => $method,
                                autoreset => $duration,
                                holdTime => $holdTime } );
        $readings->{".ts"}= $ts;
        # access from command line:
        # { $defs{"myClient"}{READINGS}{"myValue"}{".ts"}{max} }
        #Debug "TimeSeries created.";
      }
      my $now = $hash->{".updateTime"};
      my $val = $value; # save value
      $changed = $ts->elapsed($now);
      $value = $ts->{$function} if($changed);
      $ts->add($now, $val);
    } else {
      # If no event-aggregator attribute, then remove stale series if any.
      delete $readings->{".ts"};
    }
  }
 
 
  setReadingsVal($hash, $reading, $value, $hash->{".updateTimestamp"})
        if($update_timestamp);
 
  my $rv = "$reading: $value";
  if($changed) {
    if($reading eq "state") {
      $rv = $value;
      $hash->{CHANGEDWITHSTATE} = [];
    }
    addEvent($hash, $rv);
  }
  return $rv;
}


Wie kann ich die Ursache dafür finden und vor allem abstellen.

Besten Dank
Markus

DeeSPe

Die Frage kam hier in letzter Zeit öfter und auch die Antwort dazu gab es schon mehrfach!

* ist einfach kein valider RegEx und er muss durch .* ersetzt werden!

Ich nehme an irgendwo "event-on-change-reading *" statt "event-on-change-reading .*" gesetzt.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe