userReadings in dbLog doppelt?

Begonnen von tomleitner, 15 Juli 2020, 18:03:18

Vorheriges Thema - Nächstes Thema

tomleitner

Hallo,

Ich betreibe FHEM mit einer PostgreSQL Datenbank als dbLog. Nun ist mir aufgefallen das ich für einige Devices userReadings doppelt und oft mit unterschiedlichen Werten in der Datenbank habe. Beispiel Device:

defmod PoolTemperature MQTT2_DEVICE WSens9
attr PoolTemperature IODev MQTT_Client
attr PoolTemperature alias PoolTemperature
attr PoolTemperature genericDeviceType thermometer
attr PoolTemperature group Pool,Sensoren
attr PoolTemperature homebridgeMapping clear CurrentTemperature=Temperatur_Wasser
attr PoolTemperature icon temp_temperature
attr PoolTemperature readingList tele/pooltemp/LWT:.* LWT\
tele/pooltemp/STATE:.* { json2nameValue($EVENT) }\
tele/pooltemp/SENSOR:.* { json2nameValue($EVENT) }\
tele/pooltemp/INFO.:.* { json2nameValue($EVENT) }\
stat/pooltemp/RESULT:.* { json2nameValue($EVENT) }
attr PoolTemperature room Device Status,Garten,Homekit
attr PoolTemperature siriName PoolTemperature
attr PoolTemperature stateFormat W: Temperatur_Wasser S: Temperatur_Schacht, W Gradient: Temperatur_Gradient
attr PoolTemperature userReadings Temperatur_Wasser { movingAverage("PoolTemperature", "DS18B20-1_Temperature",300) }, \
Temperatur_Schacht { movingAverage("PoolTemperature", "DS18B20-2_Temperature",300) }, \
Temperatur_Gradient { gradient("PoolTemperature", "Temperatur_Wasser", 7200) }


movingAverage ist in 99_myUtils.pm so definiert:

###############################################################################
#
#  Moving average
#
#  Aufruf: movingAverage(devicename,readingname,zeitspanne in s)
#
###############################################################################

sub movingAverage($$$){
   my ($name,$reading,$avtime) = @_;
   my $hash = $defs{$name};
   my @new = my ($val,$time) = ($hash->{READINGS}{$reading}{VAL},$hash->{READINGS}{$reading}{TIME});
   my ($cyear, $cmonth, $cday, $chour, $cmin, $csec) = $time =~ /(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)/;
   my $ctime = $csec+60*$cmin+3600*$chour;
   my $num;
   my $arr;
   #-- initialize if requested
   if( ($avtime eq "-1") ){
     $hash->{READINGS}{$reading}{"history"}=undef;
   }
   #-- test for existence
   if( !$hash->{READINGS}{$reading}{"history"}){
      #Log 1,"ARRAY CREATED";
      push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
      $num = 1;
      $arr=\@{$hash->{READINGS}{$reading}{"history"}};
   } else {
      $num = int(@{$hash->{READINGS}{$reading}{"history"}});
      $arr=\@{$hash->{READINGS}{$reading}{"history"}};
      my $starttime = $arr->[0][1];
      my ($syear, $smonth, $sday, $shour, $smin, $ssec) = $starttime =~ /(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)/;
      my $stime = $ssec+60*$smin+3600*$shour;
      #-- correct for daybreak
      $stime-=86400
        if( $stime > $ctime);
      if( ($num < 25)&&( ($ctime-$stime)<$avtime) ){
        #Log 1,"ARRAY has $num elements, adding another one";
        push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
      }else{
        shift(@{$hash->{READINGS}{$reading}{"history"}});
        push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
      }
    }
    #-- output and average
    my $average = 0;
    for(my $i=0;$i<$num;$i++){
      my $v=$arr->[$i][0];
      #$v =~ s/\D//g;
      $v =~ s/[^\d.|]+//g;
      $average+=$v;
      Log 4,"[$name moving average] Value = ".$arr->[$i][0]." Time = ".$arr->[$i][1];
    }
    $average=sprintf( "%5.3f", $average/$num);
    #--average
    Log 4,"[$name moving average] calculated over $num values is $average"; 
    return $average;
}


Ergebnis im dbLog: screenshot1 sind die Original Daten vom Sensor aus Reading DS18B20-1_Temperature und screenshot2 ist das daraus erzeugte userReading Temperatur_Wasser.
Man sieht das jede Minute zwei Stück userReadings im dbLog stehen ...

Was ist hier die Ursache?

Danke // Tom


Beta-User

Setze mal geeignete trigger für die userReadings.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors