[gelöst] Jeden Tag: höchst tiefst mittel - in ein Log

Begonnen von curt, 17 November 2019, 04:31:25

Vorheriges Thema - Nächstes Thema

curt

Hallo,

ich schaue mir gerade den bei mir gemessenen Temperaturgraphen (und Feinstaub usw.) über einen längeren Zeitraum (diesen Monat bzw. dieses Jahr) an - und sehe: Optisch unbrauchbar.

Ideal wäre, wenn ich für am Ende eines jeden Tags in ein weiteres Logfile die ermittelten Daten für Höchstwert, Tiefstwert sowie Mittelwert schreiben könnte.

Nur - wie macht man das denn? Hat das schon jemand gemacht?
RPI 4 - Jeelink HomeMatic Z-Wave

Icinger

Genau dafür gibts das statistics-Modul :)

Da bekommst du dann zB solche Daten raus:
     2019-11-17 08:05:23   statTemperature Hour: 0.0 Day: 1.0 Month: 5.4 Year: 9.4
     2019-11-17 08:05:23   statTemperatureDay Min: 9.4 Avg: 9.5 Max: 10.4
     2019-11-17 08:05:23   statTemperatureDayAvg 9.5
     2019-11-16 23:59:55   statTemperatureDayAvgLast 9.7
     2019-11-16 23:59:55   statTemperatureDayLast Min: 7.9 Avg: 9.7 Max: 12.9
     2019-11-17 08:05:23   statTemperatureDayMax 10.4
     2019-11-16 23:59:55   statTemperatureDayMaxLast 12.9
     2019-11-17 08:05:23   statTemperatureDayMin 9.4
     2019-11-16 23:59:55   statTemperatureDayMinLast 7.9
     2019-11-17 08:05:23   statTemperatureHour Min: 10.4 Avg: 10.4 Max: 10.4
     2019-11-17 08:05:23   statTemperatureHourAvg 10.4
     2019-11-17 07:59:55   statTemperatureHourAvgLast 9.5
     2019-11-17 07:59:55   statTemperatureHourLast Min: 9.4 Avg: 9.5 Max: 10.4
     2019-11-17 08:05:23   statTemperatureHourMax 10.4
     2019-11-17 07:59:55   statTemperatureHourMaxLast 10.4
     2019-11-17 08:05:23   statTemperatureHourMin 10.4
     2019-11-17 07:59:55   statTemperatureHourMinLast 9.4
     2019-11-17 07:59:57   statTemperatureLast Hour: 1.0 Day: 0.4 Month: -8.1 Year: -1.3
     2019-11-17 08:05:23   statTemperatureMonth Min: -1.0 Avg: 7.0 Max: 16.3
     2019-10-31 23:59:55   statTemperatureMonthLast Min: -0.7 Avg: 10.6 Max: 22.6
     2019-11-17 08:05:23   statTemperatureYear Min: -9.8 Avg: 12.4 Max: 38.3
     2018-12-31 23:59:56   statTemperatureYearLast Min: -13.8 Avg: 11.5 Max: 34.2


lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

curt

Zitat von: Icinger am 17 November 2019, 08:16:10
Genau dafür gibts das statistics-Modul :)

Danke für den Hinweis, das wusste ich nicht: Klingt perfekt ... wenn im zuständigen Wiki_Artikel das kleinen Wörtchen "regex" nicht wäre.

Ehe ich mir dabei einen abbreche und dann doch scheitere:
Magst Du bitte zeigen, wie Du das ganz konkret mit dem Reading "temperature" bewerkstelligst?

(Eigentlich gehören solche Beispiele in https://wiki.fhem.de/wiki/Statistics - man wird ja mal träumen dürfen ...)

Hilfst Du bitte?

(Also mir ... um den Wiki-Artikel würde ich mich dann notfalls kümmern.)
RPI 4 - Jeelink HomeMatic Z-Wave

Icinger

Hier mal das komplette DEF von meinem Statistics-Modul:
defmod Stat_Strom statistics Anemometer|Temp_.*|PoolController|Sonoff_POW.*|myLuftdaten|DevOPB_Temp.*
attr Stat_Strom DbLogExclude .*
attr Stat_Strom durationReadings Brenner,FilterPump,SolarPump
attr Stat_Strom excludedReadings CUL_HM_HM_SWI_3_FM_10DC29_Sw_02:state|Strom:state
attr Stat_Strom minAvgMaxReadings wind_dir,temperature,pressure,humidity,PoolTemp,SolarTemp,TecTemp,PM10,PM2.5,POWER.
attr Stat_Strom singularReadings myLuftdaten:PM.*:(Min|Max|Avg):(Hour|Day|Month|Year)|\
Strom:energy_total:(Max|Delta):(Hour|Day|Month|Year)|\
Anemometer:wind_speed:(Avg|Max):(Hour)|\
Anemometer:wind_dir:(Avg):(Hour)|\
.*:temperature:(Min|Max|Avg):(Hour|Day)|\
.*:pressure:(Max):(Hour)|\
.*:pressure:(Tendency):(1h|2h|3h|6h)|\
.*:POWER.:(Min|Max|Avg):(Hour|Day|Month|Year)
attr Stat_Strom tendencyReadings pressure,humidity


Das ist nicht nur für die Temps zuständig, sondern für div. andere Geräte auch.
Das wichtige kannst du dir aber sicher raussuchen :D Ist ziemlich selbsterklärend.
Bei Fragen, einfach melden.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

curt

@Icinger
Schüchtern meld ...

Es kann nicht am Wiki-Artikel liegen und auch nicht an der commandref (als neugieriger Neuling habe ich den Eindruck, dass beide von Wissenden für Wissende geschrieben wurden) - der Fehler sitzt grundsätzlich vor dem Gerät. Ich weiß. Ich habe etwas übersehen oder falsch verstanden - ich erzähle Dir mal.

Ich dachte aus Erfahrung: Wir fangen mal ganz klein an, nur eine Quelle, nur ganz wenige Optionen, nur mal sehen, was das Dingens überhaupt macht (das sparen die Artikel leider aus: Welches Ergebnis ist zu erwarten? Und vor allem: Wo?)

Ich habe eine Wetterstation, die Device heißt passenderweise Wetterstation und hat als Hintergrund ws980wifi. Dort gibt es das Reading temperature. Ich dachte in meiner Naivität, dass das doch sehr nahe meines Ziels liegt: Da höchst/tiefst/mittel pro Periode herauszufinden. Sinnvollerweise so einfach wie möglich, damit es möglichst wenige Fehlerquellen gibt:


define Statistik_1 statistics Wetterstation
attr Statistik_1 room 99 System
attr Statistik_1 singularReadings .*:temperature:(Min|Max|Avg):(Hour|Day|Month|Year)


Hour steht übrigens drin, weil man ja auch mal sehen will, wie die Ergebnisse so aussehen. - Allein: Es gibt keine Ergebnisse. :(

Sowohl der Wiki-Artikel als auch die commandref lassen leider aus, was eigentlich das Ergebnis der Veranstaltung ist: Offenbar irgendwas mit stat*. Also suchte ich sowohl in der Device Wetterstation als auch in der Device Statistik_1 nach derartigen Readings - allein: Da sind keine.

Ok, vorsichtshalber mal ein LogFile für die Device Statistik_1 bauen:

define FileLog_Statistik_1 FileLog ./log/Statistik_1-%Y.log Statistik_1
attr FileLog_Statistik_1 logtype text
attr FileLog_Statistik_1 room 99 System


Das ist leider leer. Orrr, ich hab verbose nicht gesetzt, das sehe ich gerade. Aber egal, das bringt jetzt nicht weiter.

Zudem "lernte" ich in den Texten auch, dass mein Konstrukt offenbar nur zusätzlich irgendwas tut. Was es aber grundsätzlich ohne dieses zusätzlich tut - das ist mir völlig schleierhaft: ich sehe nirgendwo ein Ergebnis. Und ich bin darüber sehr traurig - ich bin zu doof.

Du willst nun das list sehen:

Internals:
   DEF        Wetterstation
   DEV_REGEXP Wetterstation
   FUUID      5dd2e37d-f33f-769b-c0c4-6b9db8ad6cfb65e8
   NAME       Statistik_1
   NOTIFYDEV  global,Wetterstation
   NR         1081
   NTFY_ORDER 10-Statistik_1
   PREFIX     stat
   STATE      Waiting for notifications
   TYPE       statistics
   .attraggr:
   .attrminint:
   READINGS:
     2019-11-20 02:59:55   nextPeriodChangeCalc 2019-11-20 03:59:55
   fhem:
     modulVersion $Date: 2018-03-18 19:51:57 +0100 (Sun, 18 Mar 2018) $
     nextPeriodChangeTime 1574218795
Attributes:
   room       99 System
   singularReadings .*:temperature:(Min|Max|Avg):(Hour|Day|Month|Year)


<seufzt>
Was mache ich denn so alles falsch? Was habe ich grundsätzlich falsch verstanden? Welche Daten habe ich zudem zu liefern?

Ich danke Dir für deine Bereitschaft zu helfen.
RPI 4 - Jeelink HomeMatic Z-Wave

Wzut

Klein anfangen ist immer gut :)
define Statistik_1 statistics Wetterstation
Wird dir Stats erstellen nur für das Device Wetterstation.
Lass attr Statistik_1 singularReadings ruhig ersteinmal weg und nimm attr Statistik_1 minAvgMaxReadings temperature
Die Statistik selbst findest du primär als neue Readings im Gerät Wetterstation (fangen mit stat an) und sekundär als Internals im Device Statistik_1 wenn du alle Internals anzeigst ( attr global showInternalValues  1  bzw bei list )
Wlllst du die Temp Stats extra loggen  :
define FileLog_Statistik_1 FileLog ./log/Statistik_1-%Y.log Wetterstation:stat.*
Es wird vermutlich noch nicht ganz das sein was du willst, aber so hast erst einmmal einen Anfang und siehst etwas
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Icinger

Guten Morgen,

naja, die fehlt noch die Angabe, von WELCHEN readings du die Statistiken haben willst.  ;D

Bei dir wäre das also:
attr Statistik_1 minAvgMaxReadings temperature

Das singularReadings sagt dem Modul nur, dass du von min,max,hour-readings etc die Einzelwerte haben willst.

Ohne diesem würdest du nur solche bekommen:
statTemperatureDayLast Min: 4.0 Avg: 7.3 Max: 10.4
statTemperatureHour Min: 5.6 Avg: 5.6 Max: 5.8
statTemperatureHourLast Min: 5.4 Avg: 5.5 Max: 5.6



Somit solltest du jetzt dann auch neue Readings direkt im Wetterstation-Device haben.

lg, Stefan

Edith sagt: Wzut war schneller :D
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

sinus61

Zitat von: Icinger am 20 November 2019, 07:25:56

naja, die fehlt noch die Angabe, von WELCHEN readings du die Statistiken haben willst.  ;D

Für temperature ist das aber eigentlich nicht nötig.


Until now statistics for the following readings are automatically built:

Min|Avg|Max Minimum, average and maximum of instantaneous values:
over a period of day, month and year:
current, energy_current, humidity, luminosity, temperature, voltage
over a period of hour, day, month and year:
brightness, wind, wind_speed, windSpeed


curt

Ich bedanke mich für die vielen hilfreichen Hinweise: Das läuft nun fein.

Der eigentlich entscheidende Fehler war übrigens: Im Wiki heißt das beispielhaft "Wetterstation" und bei mir auch ... scheinbar. Bei mir ist das aber real ein alias auf den eigentlichen Device-Namen. Gna.

Eine Frage noch: Kann ich fallweise das stündliche abschalten? (Hintergrund: Flusspegel. Da ist ein stündlicher Anstieg um 1cm schon sehr extrem. Hat also wenig Sinn ... außer das Protokoll zu füllen.)
RPI 4 - Jeelink HomeMatic Z-Wave

MandelHL

#9
Guten Morgen,

Ich habe für meine Wetterstation die Auswertung übernommen. Das sieht jetzt so aus:
defmod Temp_Statistik statistics Wetterstation
attr Temp_Statistik minAvgMaxReadings temperature(Min|Max|Avg):(Hour|Day|Month|Year)
attr Temp_Statistik room Temp-Statistik


Was ich an dem Ergebnis nicht verstehe ist, dass ich jetzt die Auswertung aller Statistiken erhalte. Das gilt also auch für Wind, Regen, Luftfeuchtigkeit ... und Temperatur.
Erwartet hätte ich lediglich die Tiefst-, Durchschnitts- und Höchsttemperatur aufgrund des Attributes, das ja ,, temperature(Min|Max|Avg):(Hour|Day|Month|Year)" lautet.
Das Ergebnis ist ja ok. Mich würde nur interessieren, warum das so ist.
Liegt das daran, dass in der ersten Zeile die Statistiken der gesamten Wetterstation definiert werden?
Hätte man dann beim Attribut auch z.B. ,,Brightness" nehmen können und das Ergebnis wäre das gleiche?

Ich könnte das ausprobieren, hätte dann aber die Erklärung trotzdem nicht.

Bei meinem Log leuchtet mir ein, dass das alle Werte sind:
./log/Statistik_1-%Y.log Wetterstation:stat.*

Allerdings finde ich den fast minütlichen Eintrag sehr übertrieben.

Mich würde vielmehr eine Logdatei interessieren, die jeweils Tag, Monat und Jahr mit den niedrigsten, durchschnittlichen und höchsten Temperaturen aufzeichnet, so dass man dann immer mal nachsehen kann, wie die einzelnen Jahreszeiten über einen längeren Zeitraum waren. Das dann auch gerne mit den anderen Informationen, wie z.B. Regen, aufgezeichnet werden.
Die Datei wird dann aber nicht so groß und ist zudem übersichtlicher.

Wie würde eine solche Logdatei aussehen?

Danke für Eure Hilfe und viele Grüße
Mandel