Der Effekt von event-on-change-reading begrenzt die Größe von Logfiles schon erheblich. Auch für den Aufbau der Gnuplotgrafiken positiv - von gelegentlichen Kurvenabrissen mal abgesehen.
Was aber, wenn die Logfiles bereits mit redundanten, weil wiederholt gleichen Meßwerten voll sind?
Das kleine Skript reduziert alle aufeinanderfolgenden Meßwerte (hier: temperature), so daß nur bei Einträge für Änderungen übrig bleiben. Also event-on-change-reading temperature, nur retro.
Andere Einträge "T:.*" werden ganz gelöscht.
In der Hoffnung, daß es jemand nutzen kann..
#!/usr/bin/perl -w
# reduce fhem log file size with temperature: values
# by skipping over repeated values
# the reducing gain will depend on the actual value set.
# real-world temperature data will shrink by about 70%
#
# this script effects basically the same as if setting
# attr event-on-change temperature
# beforehand
#
# plus: the T: values are dropped
#
# the logfile may hold values from several devices
use strict;
if (!defined $ARGV[0]){
usage();
exit 1;
}
# hash keeps last "temperature:" entry for _each_ item
our %lasttemperature;
while(<>){
chomp;
my($datetime,$itemid,@value)=split();
my $value=join(" ",(@value)); # keep as scalar
/temperature:/ && do{
if ($lasttemperature{$itemid} ne $value){
$lasttemperature{$itemid} = $value;
}else{
# print "reduced: ";
# skip over redundant "temperature:" lines
next;
}
};
# skip over all "T:" lines
/T:/ && do{ next };
print "$datetime $itemid $value\n";
};
sub usage{
print "usage: ".$0." <fhem log file>\n";
print "will reduce logfile by skipping over unchanged thus redundant temperature: values\n";
}