Daten für log file umformatieren

Begonnen von romakrau, 08 Mai 2025, 08:52:10

Vorheriges Thema - Nächstes Thema

romakrau

Hallo zusammen,

ich möchte gerne das Datum der monatlichen Statistikdaten umformatieren. Das Log-Format ist yyyy-mm-dd_23:59:55. Für eine korrekte Anzeige in einem Diagramm hätte ich gerne yyyy-mm-01_23:59:55.

Wie übergebe ich die zu logenden Daten mittels reformatFn <perlFunktionsName>?

Als Funktion schwebt mir diese einfache Version vor:

sub correct_month ($;$;$;$) {
        my ($d , $n ,$p , $w) = @_;
        $d = substr($d,0,8) + '01' + substr($d,11,9);
        return "$d $n $p $w";
      }

Gruß Roman

betateilchen

Hast Du verstanden, dass die Funktion für alle Werte ausgeführt wird? Das heißt, in allen darzustellenden Werten, egal an welchem Tag und zu welcher Uhrzeit, würde dann yyyy-mm-01_hh:mm:ss stehen.

Ist das wirklich das, was Du möchtest?
Dein Ansinnen habe ich noch nicht ganz durchschaut.
Man könnte beispielsweise auch sowas machen, damit wäre zumindest die Uhrzeit ein Kriterium.

sub correct_month {
  my ($d,$n,$p,$w) = @_;
  $d =~ s/.._23:59:55/01_23:59:55/;
  return "$d $n $p $w";
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romakrau

Ja das hast Du richtig verstanden. Es sind ja nur monatlich gelogt Werte.
Wenn das für alle Werte des Logfiles zutrifft wäre Deine Funktion sicherlich optimal.

romakrau

Ich habe Deinen Vorschlag jetzt in die 99_myUtils.pm  übernommen. Was mir jetzt noch fehlt, oder nicht funktioniert ist der korrekte Aufruf?

attr month_log reformatFn correct_month()

Wie lautet der korrekte Eintrag?

betateilchen

#4
Du musst das nicht aufrufen, das macht FHEM zu gegebener Zeit automatisch.

Aber lass die Klammern in dem Attributeintrag weg, so wie es auch in der commandref steht.

Zitatcontains the name(!) of a function, which will be called with a "raw" line from the original file, and has to return a line in "FileLog" format.

attr month_log reformatFn correct_month
Eigentlich bin ich mir immer noch nicht sicher, ob Dein Lösungsansatz der richtige ist.
Aber um das tatsächlich einschätzen zu können, hast Du bisher einfach zu wenig Informationen geliefert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romakrau

Vielleicht hilft das beim Verständnis. Ich loge den monatlichen Verbrauch einer Steckdose und erhalte folgendes Ergebnis:

2025-01-31_23:59:55 MQTT2_DVES_9BF200 statSENSOR_MT176_E_inMonthLast: 107.685
2025-02-28_23:59:55 MQTT2_DVES_9BF200 statSENSOR_MT176_E_inMonthLast: 94.329
2025-03-31_23:59:55 MQTT2_DVES_9BF200 statSENSOR_MT176_E_inMonthLast: 110.936
2025-04-30_23:59:55 MQTT2_DVES_9BF200 statSENSOR_MT176_E_inMonthLast: 100.016

Ein Diagramm sieht allerdings nicht sehr schön aus, deshalb suche ich nach einem Weg die Daten in dem Log-File zu ändern. Hier auf den Monatsanfang.

betateilchen

Zitat von: romakrau am 12 Mai 2025, 06:10:10Vielleicht hilft das beim Verständnis.

Tut es leider nicht. Du beschreibst nicht, was genau das Problem ist und wie Du Dir eine (für Dich) funktionierende Lösung vorstellst.

"sieht nicht sehr schön aus" ist keine Problembeschreibung, mit der irgendjemand etwas anfangen geschweige denn, Dir weiterhelfen kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romakrau

Das ist die exakte Beschreibung. Ich würde gerne die gelogten Daten ändern in .._23:59:55 in 01_23:59:55 . Besser geht's nicht. Den Graphen unter FTUI2 anpassen bringt nicht das gewünschte Ergebnis. Ist mit dem Autor abgestimmt.

Ich glaube ich muss jeden Monat den Wert händisch anpassen.

betateilchen

Zitat von: romakrau am 12 Mai 2025, 11:01:22Das ist die exakte Beschreibung. Ich würde gerne die gelogten Daten ändern in .._23:59:55 in 01_23:59:55 . Besser geht's nicht.

Naja, das ist keine Problembeschreibung, sondern eine Idee, die Du als mögliche Lösung betrachtest.

Du hast hoffentlich verstanden, dass reformatFn in Verbindung mit SVG genutzt wird?

Zitatused to convert "foreign" logfiles for the SVG Module,

Wenn ich jetzt (erstmalig!) "FTUI2" als Szenario lese, bestätigt mich das in meiner Vermutung, dass Dein Lösungansatz mit reformatFn vermutlich Deine eigentliche Aufgabenstellung nicht lösen wird.

Und das ist genau das, was ich jetzt schon mehrfach hinterfragt habe: WAS möchtest Du eigentlich genau tun? Wozu soll das reformatFn dienen und an welcher Stelle soll damit eine Änderung passieren?

Beschreibe die AUFGABE, nicht eine nicht funktionierende LösungsIDEE. Dann kann man Dir auch helfen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

romakrau

Danke für den Versuch mir zu helfen. Die grafische Anzeige zu ändern habe ich schon mit Eki diskutiert. Dort lässt sich nur der Text der X-Achse verschieben damit der Monat unter der Säule steht. Die bessere Lösung wäre die Daten zu manipulieren, was wohl nicht geht.

Gruss Roman

Beta-User

Zitat von: romakrau am 12 Mai 2025, 12:53:55Die bessere Lösung wäre die Daten zu manipulieren, was wohl nicht geht.
logProxy?

Scheint auch mit FTUI2/3 zu gehen, z.B.: https://forum.fhem.de/index.php?topic=124301.0
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

romakrau

Danke für den Hinweis. Das wird ein schweres Stück Arbeit für mich.

Prof. Dr. Peter Henning

Ich halte den Ansatz für Unsinn. Warum sollte man ein Datum, das am Monatsende erhoben wird, auf den Monatsanfang verschieben?

pah

romakrau

Lieber pah,

deine Aussage scheint auf den ersten Blick richtig zu sein. Allerdings ergibt sich bei Nutzung des Statistik- Moduls in einer Grafik das Bild dass die Werte der Folgeperiode zu geordnet werden. Hierfür gibt es das LogProxy Modul in dessen Beschreibung expliziert auf die Möglichkeit der Korrektur der Daten des Statistik-Moduls hingewiesen wird.

Sollte jemand mir dabei helfen können würde ich mich freuen. Ich denke dabei an die Option Offset.

Gruß Roman

Prof. Dr. Peter Henning

Natürlich ist meine Antwort auch auf den zweiten und dritten Blick richtig - denn die Daten werden zum Ende einer Periode erhoben und somit dem Start der neuen Periode zugeordnet. Wem das nicht gefällt: Es steht jedem frei, kurz vor Mitternacht mit einem at, mit dem YAAM-Modul oder mit DOIF selbst einen Datenstring zu erzeugen und diesen zu loggen.

LG

pah

P.S.:
logProxy ist sehr gut dokumentiert, diese Doku kann auch ein Anfänger lesen.