Filelog - nur bestimmte Maximal- / Minimalwerte protokollieren

Begonnen von DerD, 03 März 2023, 14:19:27

Vorheriges Thema - Nächstes Thema

DerD

Hallo,
ich habe einen Messwert, der rauf und wieder runter pendelt. Die Minimal- und Maximalwerte und die Zeit dazwischen variieren allerdings. Bisher habe ich das protokolliert durch event_on-change-reading mit threshold um zumindest nur Daten Daten zu loggen, wenn sich überhaupt etwas tut.
Um das Ganze weiter zu vereinfachen will ich nun nur noch die Ereignisse der Maximal- bzw. Minimalwerte protokollieren. In Excel bekomme ich das hin und es sieht so aus:

=WENN(G2>G1;WENN(G3>G2;"";G2);WENN(G3>G2;G2;""))
Auf dem Arduino in C würde ich es vermutlich auch hinbekommen.

Aber wie kann ich das in FHEM lösen?
Gruß,
Dieter

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DerD

Sonst nicht, das wäre ungeschickt? Gerade so bliebe mein file klein genug, dass ich mir ja eben keine Gedanken zu einer db machen müsste.
Gruß,
Dieter

betateilchen

Nein, sonst nicht.
Eine ValueFn() kann FileLog nicht anwenden.
FileLog ist halt eine rudimentäre Variante des Loggings, da wird einfach nur stumpf eine Textdatei geschrieben.

Ob man mit FileLog oder mit DbLog arbeitet, ist übrigens nicht unbedingt eine Frage der Datenmenge, sondern eher des Verwendungszwecks des Loggings.
Und da bietet DbLog halt einiges mehr. Da DbLog auch mit SQLITE funktioniert, musst Du Dir aber auch keine allzu großen Gedanken machen, wenn Du das erstmal probieren möchtest.

Vorschlag:

DbLog parallel einrichten (z.B. mit SQLITE) und kennenlernen.
Der Parallelbetrieb von DbLog und FileLog ist problemlos möglich.


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Icinger

ZitatNein, sonst nicht.
So direkt würd ich das jetzt nicht sagen.

Stichwort: statistics

Damit kannst du über Stunden/Tage/Monate/Jahre die Min/Max/Avg-Werte auswerten, bekommt auf Wunsch jeweils extra Readings in dein Device und kannst dann explizit diese Readings loggen.

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

DerD

statistics hatte ich mir schon angesehen, klar wenn man nach Maximalwerten sucht :) Soweit ich das verstanden habe, bietet die Funktion ja aber nur bestimmte Zeiteinheiten, und genau die weiß ich ja auch nicht bzw. ändern sich signifikant.

Habe mir schon überlegt, ob ich Variablen über dummy nutzen kann, um dann die Auswertung zu machen über

Pseudocode:
wenn (Wert_alt < Wert UND Wert > Wert_neu) dann Ausgabe Wert
Gruß,
Dieter

betateilchen

Zitat von: DerD am 03 März 2023, 17:27:44
Habe mir schon überlegt, ob ich Variablen über dummy nutzen kann, um dann die Auswertung zu machen über

Pseudocode:

Genau das geht halt mit DbLog sehr einfach. Da gibt es DbLogValueFn() womit Du für jeden Wert vor dem Loggen prüfen kannst, ob er relevant ist oder nicht.
Um in solchen Fällen mit Variablen zu arbeiten, braucht man übrigens keinen dummy, das geht viel einfacher, wenn man den dafür vorgesehenen hash %data benutzt.

Mit DbLog kannst Du übrigens auch erstmal alles loggen und dann mittels zugehörigen DbRep beispielsweise jede Nacht die "überflüssigen" Werte automatisiert aus der Datenbank entfernen, damit nur die wirklich wichtigen Werte dauerhaft gespeichert bleiben.

Mit DbLog kannst Du auch einfach den bisherigen Maximalwert eines readings abfragen, um ihn mit dem aktuellen Wert zu vergleichen.

FileLog ist halt für Dein Ansinnen der falsche Lösungsansatz, da geht das alles nicht.

Und auch statistics wäre in dem Zusammenhang lediglich eine Krücke, aber keine wirkliche Lösung.


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DerD

Ich habe für mich das jetzt so gelöst, dass ich in ESPEasy eine Regel definiert habe, die mir die gewünschten Werte identifiziert und nur diese dann über ein ESPEasy dummy-device an FHEM überträgt.
Ich bin mir ziemlich sicher, das ginge ähnlich auch in FHEM, quasi als Zwischenebene und vor dem eigentlichen loggen, aber mache mir da gerade keine Kopf weil ich erstmal sehen will ob die so geloggten Werte aussagekräftig genug sind.

Gibt es denn einen bestimmten Grund, weshalb ein zu DbLogValueFn() vergleichbares Attribut nicht auch als FileLogValueFn() verfügbar ist?
Gruß,
Dieter