FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Thorsten am 13 April 2013, 08:10:29

Titel: Mittelwert nachträglich aus Log berechnen
Beitrag von: Thorsten am 13 April 2013, 08:10:29
Hallo,

hat evt. jemand ein kleines Script zur Hand welches nachträglich aus einem Jahres Log einen temperatur Mittelwert für jeden Tag berechnet?

Titel: Aw: Mittelwert nachträglich aus Log berechnen
Beitrag von: Rohan am 13 April 2013, 20:48:37
Hallo Thorsten,

ich habe mir z.B. ein Python-Skript geschrieben, welches mir für jeden Tag einer Tages-Log-Datei die GTZ (nach den Angaben auf dieser Seite (//www.gruener-gockel.eu/index.php?id=gradtagszahlen)) errechnet. Dein Unterfangen ist also möglich, aber:

- welcher Sensor bzw.
- wie sehen die Log-Dateien aus?
- Einbindung in Fhem?
- welches OS?
- Anzeige wo?
- welche Skript-/Programmiersprache?

Aber: es gibt mM in Fhem auch z.B. die Möglichkeit Durchschnittswerte (average/avg) in Plots abzubilden, die sich auch wertmäßig ganz gut ablesen lassen. Vlt. reicht dir das ja schon?

Gruß
Thomas
Titel: Aw: Mittelwert nachträglich aus Log berechnen
Beitrag von: Thorsten am 14 April 2013, 07:50:33
ich habe mit einem 1-Wire Device meine Heizungs Vorlauf bzw.  Rücklauf Temperatur mitgeschnitten. Das Average Modul habe ich jetzt eingeschaltet, mir fehlen aber die Date davor. Das Log ist von FHEM : Datum Device temperature xx.x C alle 15 min geschrieben. Ich möchte die Daten nur einmal ausrechnen um sie in einem Plot mit Gasverbrauch und Ausentemperatur darzustellen. OS und Sprache egal hauptsache ich habe die Daten einmal...
Titel: Antw:Mittelwert nachträglich aus Log berechnen
Beitrag von: daedalus0815 am 25 Oktober 2019, 09:45:22
Hallo,

ich hätte da etwas ähnliches, was ich zur Ermittlung der Gradtagszahl (GTZ...wikipedia) und Logging von Tagesmittelwerten etc.... benutze.
Meine Heizperiode startet immer zum 1.Oktober......


Zunächst die Mittelwertdefinition meins Außenfühlers:


defmod TEMP_OUTSIDE_avg average TEMP_OUTSIDE:Temperature.*
attr TEMP_OUTSIDE_avg DbLogExclude .*

setstate TEMP_OUTSIDE_avg active




.... und jetzt mein Overkill zur Berechnung (jeder wie er kann...)


defmod GTZ DOIF ( [00:02] and [?TEMP_OUTSIDE:Temperature_avg_day_before] < 15.0 ) \
( setreading $SELF GTZ_counter  {([$SELF:GTZ_counter,0]+1)}   )\
( setreading $SELF GTZ_day      {(                    20 - [?TEMP_OUTSIDE:Temperature_avg_day_before:d1])}  ) \
( setreading $SELF GTZ_sum      {([$SELF:GTZ_sum,0] + 20 - [?TEMP_OUTSIDE:Temperature_avg_day_before:d1])} )\
( {Log 3, '$SELF/[$SELF:cmd_nr]: UPDATE GTZ    '} )\
\
({  \
no warnings 'numeric';;;;  \
my $gtz1 = ReadingsTimestamp("GTZ","GTZ_sum"," ");;;;\
    my $gtz2 =       ReadingsNum("GTZ","GTZ_counter",0);;;;\
    my $gtz3 =       ReadingsNum("GTZ","GTZ_sum",0);;;;\
    my $gtz4 =       ReadingsNum("TEMP_OUTSIDE","Temperature_avg_month",0);;;;\
my $gtz5 =       ReadingsNum("GTZ","year",0);;;;\
    system(" echo TS: $gtz1   GTZ_counter: $gtz2   GTZ_sum: $gtz3   Temp_avg_month: $gtz4  >> /media/usbstick/backup/GTZ_$gtz5.txt ")  \
})\
\

\
\
DOELSEIF\
( [04:15] and $mday==1 and $month==10  )   ## 1.Oktober  WECHSEL HEIZPERIODE\
( setreading $SELF    Jahr_[$SELF:year] [$SELF:GTZ_sum])     ## GTZ_sum sichern\
( setreading $SELF Counter_[$SELF:year] [$SELF:GTZ_counter]) ## GTZ_Counter sichern \
( setreading $SELF GTZ_sum      0   ) ## Reset \
( setreading $SELF GTZ_day      0   ) ## Reset \
( setreading $SELF GTZ_counter  0   ) ## Reset \
( set Entfeuchter1_stat resetStatistics)\
( set Entfeuchter2_stat resetStatistics)\
( {fhem("setreading $SELF year $year")} )\
( {Log 3, '$SELF/[$SELF:cmd_nr]: --------- UPDATE-GTZ JAHRES-WECHSEL ---------'} )\
\
\
\
\
DOELSEIF   ### Reset einmalig \
( [05:15] and $mday==1  )   ## 1. des Monats\
( setreading $SELF GTZ_sum      0   ) ## Reset\
( setreading $SELF GTZ_day      0   ) ## Reset \
( setreading $SELF GTZ_counter  0   ) ## Reset \
( {Log 3, '$SELF/[$SELF:cmd_nr]: --------- RESET GTZ ---------'} )\
\
\
\
\
DOELSEIF  ## Sicherung des Logging zum Monatswechsel als einzelne Datei \
( [00:33] and ($mday == 1) ) \
({  \
no warnings 'numeric';;;;  \
my $gtz1 = ReadingsTimestamp("GTZ","GTZ_sum"," ");;;;\
    my $gtz2 =       ReadingsNum("GTZ","GTZ_counter",0);;;;\
    my $gtz3 =       ReadingsNum("GTZ","GTZ_sum",0);;;;\
    my $gtz4 =       ReadingsNum("TEMP_OUTSIDE","Temperature_avg_month",0);;;;\
my $datum = sprintf("%02d_%d",$month ,$year) ;;;;\
    system(" echo TS: $gtz1   GTZ_counter: $gtz2   GTZ_sum: $gtz3   Temp_avg_month: $gtz4  > /media/usbstick/backup/GTZ_$datum.txt ");;;;\
system(" echo TS: $gtz1   GTZ_counter: $gtz2   GTZ_sum: $gtz3   Temp_avg_month: $gtz4  > /opt/fhem/GTZ_$datum.txt ")\
})\
\
\
\
\
DOELSEIF  ## Tagesabschluss...\
( [23:58]  ) \
( setreading $SELF anwesend nein )\
( setreading $SELF Temperature_avg_day_before [TEMP_OUTSIDE:Temperature_avg_day:d] )\
( setreading $SELF Temperature_min_day_before [TEMP_OUTSIDE:Temperature_min_day:d] )\
( setreading $SELF Temperature_max_day_before [TEMP_OUTSIDE:Temperature_max_day:d] )\
( setreading TEMP_OUTSIDE Temperature_avg_day_before [TEMP_OUTSIDE:Temperature_avg_day:d] )\
( setreading TEMP_OUTSIDE Temperature_min_day_before [TEMP_OUTSIDE:Temperature_min_day:d] )\
( setreading TEMP_OUTSIDE Temperature_max_day_before [TEMP_OUTSIDE:Temperature_max_day:d] ) \
({Log 3, '$SELF/[$SELF:cmd_nr] x1: TempDayBefore: [TEMP_OUTSIDE:Temperature_avg_day] '})\
\
({  \
no warnings 'numeric';;;;  \
my $gtz1   = ReadingsTimestamp("GTZ","Temperature_avg_day_before"," ");;;;\
    my $gtz2  =        ReadingsNum("GTZ","Temperature_avg_day_before", 0 );;;;\
my $gtz3  =        ReadingsNum("GTZ","Temperature_min_day_before", 0 );;;;\
my $gtz4  =        ReadingsNum("GTZ","Temperature_max_day_before", 0 );;;;\
my $datum =           sprintf("%02d_%d",$month ,$year) ;;;;\
    system(" echo TS: $gtz1   DayMin: $gtz3  DayMax: $gtz4  DayAVG: $gtz2     >> /media/usbstick/backup/DayTemp_$datum.txt ");;;;\
system(" echo TS: $gtz1   DayMin: $gtz3  DayMax: $gtz4  DayAVG: $gtz2                  >> /opt/fhem/DayTemp_$datum.txt ")\
})\
\
\

attr GTZ DbLogExclude .*
attr GTZ DbLogInclude GTZ_counter, GTZ_sum
attr GTZ do always
attr GTZ stateFormat GTZ_sum (GTZ_counter HeizTage)

setstate GTZ 198.1 (22 HeizTage)
setstate GTZ 2019-10-01 04:15:00 Counter_2017 18
setstate GTZ 2019-10-25 00:02:00 GTZ_counter 22
setstate GTZ 2019-10-25 00:02:00 GTZ_day 7.1
setstate GTZ 2019-10-25 00:02:00 GTZ_sum 198.1
setstate GTZ 2019-10-01 04:15:00 Jahr_2017 130.7
setstate GTZ 2019-10-24 23:58:00 Temperature_avg_day_before 12.9
setstate GTZ 2019-10-24 23:58:00 Temperature_max_day_before 17.4
setstate GTZ 2019-10-24 23:58:00 Temperature_min_day_before 10.4
setstate GTZ 2019-10-24 23:58:00 anwesend nein
setstate GTZ 2019-10-25 00:02:00 cmd 1.5
setstate GTZ 2019-10-25 00:02:00 cmd_event timer_1
setstate GTZ 2019-10-25 00:02:00 cmd_nr 1
setstate GTZ 2019-10-25 00:02:00 cmd_seqnr 5
setstate GTZ 2019-10-24 16:57:02 mode enabled
setstate GTZ 2019-10-25 00:02:00 state cmd_1
setstate GTZ 2019-10-25 00:02:00 timer_01_c01 26.10.2019 00:02:00
setstate GTZ 2019-10-25 04:15:01 timer_02_c02 26.10.2019 04:15:00
setstate GTZ 2019-10-25 05:15:00 timer_03_c03 26.10.2019 05:15:00
setstate GTZ 2019-10-25 00:33:00 timer_04_c04 26.10.2019 00:33:00
setstate GTZ 2019-10-24 23:58:02 timer_05_c05 25.10.2019 23:58:00
setstate GTZ 2019-10-01 04:15:00 year 2019




Interessant könnte für den einen oder anderen das Logging in externen Dateien sein.....


Für Nicht-Linuxer:   
"echo xxx  >> file.txt"   schreibt eine Datei fort/hängt also Daten an 
"echo xxx  > file.txt"    schreibt eine Datei neu 


P.S:
...durch dbloginclude könnte man einen interessanten Wert auch mitloggen, für Plots....

Vielleicht hilft's ja jemanden......   ;)