FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: goalv am 10 Januar 2026, 19:38:36

Titel: event-on-change-reading für (temperature) Logfiles - aber nachträglich!
Beitrag von: goalv am 10 Januar 2026, 19:38:36
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";
}