[Nicht nachdenkenswert] Logbuch - formatierung CRLF

Begonnen von DL8EI Ralph, 19 April 2023, 12:17:09

Vorheriges Thema - Nächstes Thema

DL8EI Ralph

Hallo,
ich habe ein Logbuch ./log/Filelog_FS20LS3.log FS20LS3_T3T4
mit den Inhalten
(umgekehrte Sortierung)
2023-04-19_11:56:04 FS20LS3_T3T4 off
2023-04-19_11:55:35 FS20LS3_T3T4 off
2023-04-19_11:54:16 FS20LS3_T3T4 on
2023-04-19_11:53:07 FS20LS3_T3T4 off
2023-04-19_11:51:23 FS20LS3_T3T4 on
2023-04-19_11:50:41 FS20LS3_T3T4 off
2023-04-19_11:50:39 FS20LS3_T3T4 on
und möchte aber hinter jedem off einen CRLF-Zeilenabstand haben, nämilich so:

2023-04-19_11:55:35 FS20LS3_T3T4 off
2023-04-19_11:54:16 FS20LS3_T3T4 on

2023-04-19_11:53:07 FS20LS3_T3T4 off
2023-04-19_11:51:23 FS20LS3_T3T4 on

2023-04-19_11:50:41 FS20LS3_T3T4 off
2023-04-19_11:50:39 FS20LS3_T3T4 on

Wie bekommt man das hin?
Ich weiß schon, dass man irgendwie "\r\n" anhängen muss, aber wie?
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.

betateilchen

Warum? Wo willst Du das Ergebnis verwenden?

Das FileLog hat glücklicherweise ein standardisiertes Format.
Deshalb könntest Du überlegen, das Anhängen im Rahmen des Auslesens aus dem FileLog zu erledigen.

Und wieso steht das in den Anfängerfragen und nicht im richtigen Unterforum zu FileLog?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DL8EI Ralph

Zitat von: betateilchen am 19 April 2023, 12:42:03Und wieso steht das in den Anfängerfragen und nicht im richtigen Unterforum zu FileLog?
Weil das dumm von mir war. Möchtest Du es bitte dorthin verschieben?

Ich möchte das nur wegen der Übersichtlichkeit des Lesens.
Derzeit keine maschinelle Auswertung beabsichtigt.
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.

betateilchen

Zitat von: DL8EI Ralph am 19 April 2023, 12:55:10Möchtest Du es bitte dorthin verschieben?

Ich kann das nicht verschieben. Aber Du.
Dafür gibt es einen Button am Ende der Seite.

Zitat von: DL8EI Ralph am 19 April 2023, 12:55:10Ich möchte das nur wegen der Übersichtlichkeit des Lesens.

Ok, das ist kein Grund, wegen dem es sich lohnt, weiter darüber nachzudenken.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DL8EI Ralph

Zitat von: betateilchen am 19 April 2023, 12:59:07Ok, das ist kein Grund, wegen dem es sich lohnt, weiter darüber nachzudenken.
Danke für diese überaus nette Antwort.
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.

ch.eick

#5
Moin,
Da das ziemlich speziel ist und man es nicht so oft machen wird hätte ich einen Vorschlag.

Im Win gibt es das Notepad++, dort könntest Du bei Suchen und Ersetzen nach einer Regex suchen und den String mit einem \r\n erweitern.
Das kannst Du auch in Perl mit Regex verwenden.
Ich verwende Perl auch in Devices und habe mir so ein GUI Interface zur DbLog erstellt, was im DOIF im Perl Modus mit uiTable im FHEMWEB bedienbar ist.
Bild 3 zeigt gelb markiert einen Auszug aus der DbLog für Einträge, die ich mit dem Device manuell in die Datenbank geschrieben habe.
Auch dort wird der Report etwas nachformatiert, bevor er angezeigt wird:
$report =~ s/\n/<br>/g;       <<< Linefeed wird zu html break
$report =~ s/\|/ \| /g;       <<< der Spalten Trenner wird davor und danach um ein Blank erweitert
In Deinem Fall würde dann sowas auch gehen:
$report =~ s/\| off/\| off\n/g;   <<< Nach jedem off noch eine neue Zeile einfügen

Ohne DbLog müsstest Du das letzte Log File einlesen und dieses dann bearbeiten, bevor es angezeigt wird. Das ist zwar voll 80er, geht aber auch ;-)

Die zweite Möglichkeit wäre, da es sich ja hier um eine manuelle Kontrolle handet, das ganze mit on/off in einem SVG Diagramm graphisch darzustellen.
Dort könnte man auch gleichzeitig mehrere on/off Devices zeitlich synchrinisiert darstellen, was ich z.B. mit meinem Fensterkontakt (Bild 4) mal gemacht habe. Das SVG kann man natürlich auch schöner machen, aber ich wurde von Grafana überholt ;-)

VG Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DL8EI Ralph

#6
Habe weiter darüber nachgedacht und mir selber was primitives gebaut:
defmod di_FS20LS1 DOIF ([FS20LS1:"^off"]) ({schrdatei((ReadingsTimestamp("FS20LS1","state","0")." Licht ON\r\n"),'>>/opt/fhem/log/FS20LS1-2023.log')},set X1 on) DOELSE ({schrdatei((ReadingsTimestamp("FS20LS1","state","0")." Licht OFF\r\n\r\n"),'>>/opt/fhem/log/FS20LS1-2023.log')},set X1 off)Dazu braucht es noch einen kleine SUB in myUtils.pm, die ich auch häufig anderweitig verwende:
sub schrdatei($$) {
   my ($was, $wohin) = @_;
   open  (DATEI, $wohin) or die $!;
   print  DATEI  $was;
   close (DATEI);
   return
}
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.

Prof. Dr. Peter Henning

Auch das gehört nicht ins Anfängerforum. Sondern - auch wenn es eher trivial ist - zu Codeschnipseln.

LG

pah