24-Stunden Temperatur Minimum und Maximum

Begonnen von uwirt, 04 Juni 2024, 10:57:44

Vorheriges Thema - Nächstes Thema

uwirt

Gibt es eine Möglichkeit von Temperatur-Readings ein 24-Stunden-Minimum bzw. -Maximum zu berechnen?

Ich habe mir dazu das statistics-Modul angesschaut nur leider ist das dort leider nicht implementiert.
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

jkriegl

Schau Dir mal das Modul average an.
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Aurel_B

Falls du an einer individuelle Lösung interessiert bist, so mache ich es:

In 99_myUtils.pm:

sub avgMinMaxAusLog($$$) {
    my($offset, $logfile, $cspec) = @_;
    my $period_s = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime(time - $offset);
    my $period_e = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime;
    my $oll = $attr { global } { verbose };
    $attr { global } { verbose } = 0;
    my @logdata = split("\n", fhem("get $logfile - - $period_s $period_e $cspec"));
    $attr { global } { verbose } = $oll;
    my ($cnt, $cum, $avg, $min, $max) = (0)x5;
    foreach(@logdata) {
        my @line = split(" ", $_);
        if (defined $line[1] && $line[1] ne "") {
            $cnt += 1;
            $cum += $line[1];
# Beim ersten Eintrag min/max setzen
if ($cnt == 1) {
$min = $line[1];
$max = $line[1];
# Bei den darauffolgenden Einträgen $min/max ermitteln
} else {
if ($line[1] < $min) { $min = $line[1]; }
if ($line[1] > $max) { $max = $line[1]; }
}
}
    }
    if ("$cnt" > 0) {
        $avg = sprintf("%0.5f", $cum / $cnt)
    };
    Log 4, ("avgMinMaxAusLog: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, Count: $cnt, Cum: $cum, Average: $avg, Minimum: $min, Maximum: $max");
    return ($avg, $min, $max);
}

Und dann ein "at":

defmod at_Tagestemperaturen_speichern at *23:59:00 {\
# Mittelwerte, Min & Max ermitteln\
foreach my $Temp ( 'EG', '1Stock', '2Stock', 'Estrich', 'Keller', 'Aussen' ) {\
my ($avg, $min, $max) = avgMinMaxAusLog(24*60*60, "dblog", "Temp_".$Temp.":temperature_avg_10min");;\
print ("setreading Temp_'.$Temp.' avg_24h $avg");;\
# Avg/Min/Max Readings setzen\
fhem("setreading Temp_$Temp avg_24h $avg");;\
fhem("setreading Temp_$Temp min_24h $min");;\
fhem("setreading Temp_$Temp max_24h $max");;\
# Avg/Min/Max speichern in DB\
fhem('set dblog addLog Temp_'.$Temp.':avg_24h.* !useExcludes');;\
fhem('set dblog addLog Temp_'.$Temp.':min_24h.* !useExcludes');;\
fhem('set dblog addLog Temp_'.$Temp.':max_24h.* !useExcludes');;\
}\
}

Ich speichere alle 10min einen Durchschnittswert für jeden Temperatursensor in meiner DB ab "DbLogInclude temperature_avg_10min", kannst du auch anders machen. Die Routine "avgMinMaxAusLog" berechnet dann für einen gewünschten Zeitraum Min/Max/Durchschnitt für diese Logeinträge. Funktioniert seit Jahren einwandfrei.

uwirt

Ich werde mir eure Vorschläge anschauen.

Im Prinzip ist es eigentlich ein gleitendes 24h Maximum bzw. Minimum welches ich mir im FTUI darstellen lassen möchte. Im Moment ist sind es halt die Maximum- und Minimum-Werte vom Vortag.


Du darfst diesen Dateianhang nicht ansehen.

FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

uwirt

Ich bin immer noch nach der Suche wie ich gleitende 24h Maxima und Minima berechnen kann.

Was ist denn der Unterschied im statistics-Modul zwischen statStateDay statStateDayLast?
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

Der_Tom

Zitat von: uwirt am 07 Juni 2024, 09:36:39Ich bin immer noch nach der Suche wie ich gleitende 24h Maxima und Minima berechnen kann.

Hi Uwirt,

falls du noch immer auf der Suche nach einer Lösung bist habe ich das ganze mal in ein MSwitch gepackt ( anstatt doif / 99_Utils / whatever ) - auch aus Eigeninteresse.

ggf nutzt du MSwitch ja , zumindest habe ich deinen Namen mal in entsprechendem Thread gelesen.

ist relativ easy anzupassen und liest eine bereits angelegte Logdatei aus, um entsprechende Werte zu ermitteln .

Im grossen und ganzen habe ich den Code von Aurel_B hierfür genutzt.
Falls Interesse kann ich die RAW für dieses device posten.
Optisch ist es auf die schnelle dahingemacht !

gruss Thomas