Hallo,
ich möchte die Einträge ins Logfile verringern. Alle Fensterkontakte schreiben ins gleiche Logfile. Bisher:
define FileLog_FENSTERKONTAKT FileLog ./log/FENSTERKONTAKT-%Y.log FK.*
Ich möchte aber nur die Einträge, die "on off Open Closed" haben (nicht z.B. "Window: Closed")
Mein Versuch mit klappt nicht.
define FileLog_FENSTERKONTAKT FileLog ./log/FENSTERKONTAKT-%Y.log FK.*:on|off|Open|Closed
Was mache ich falsch?
Ingo
Hallo Ingo,
im oberen Teil der Detailansicht von FileLog_FENSTERKONTAKT gibt es einen Punkt Regexp parts - dort kannst Du interaktiv wählen was geloggt werden kann und soll
Der Eintrag FK.* klingt gruselig. Auszug aus der commandref
Zitatdefine <name> FileLog <filename> <regexp> [readonly]
...
Der Ausdruck unter regexp wird anhand des Gerätenames überprüft und zwar devicename:event oder der timestamp:devicename:event-Kombination. Der regexp muss mit dem kompletten String übereinstimmen und nicht nur teilweise.
Gruß Otto
Zitat von: ingo46 am 06 November 2022, 10:49:55
define FileLog_FENSTERKONTAKT FileLog ./log/FENSTERKONTAKT-%Y.log FK.*:on|off|Open|Closed
Was mache ich falsch?
Versuche es mal mit Klammern um die events:
(on|off|Open|Closed)
Der Hinweis von @betateilchen ist wichtig. Zusätzlich muss man noch die Lücke zwischen : und Wert berücksichtigen - z.B.:
FK.*:.*(on|off|Open|Closed)
oder
FK.*:.(on|off|Open|Closed)
Das es mit Klammern aussenrum klappt ist mir bewusst, dann werden aber dort wo Otto vorgeschlagen hat (unter Regexp Parts) beim ersten und letzten Regexp die Klammern mit angezeigt, das hat mich bisher immer stutzig gemacht und mich gefragt ob das mit Klammern dann richtig sei, deshalb hab ich das meiste umgestellt auf ohne Klammern.
Kann man die Klammern unter regexp parts also einfach ignorieren ?
Di willst erreichen on oder off oder Close oder OPen .. und dafür sind nicht nur die | wichtig, sondern auch die (). Gehört also zu Regex dazu!
Wenn ich das mit Regexp Parts mache (oder auch händisch) kommt bspw. sowas raus, einfach ohne ():
gelöscht weil Unfug
Wozu brauchts jetzt noch die Klammern ?
Zitat von: OdfFhem am 06 November 2022, 11:31:45
... Zusätzlich muss man noch die Lücke zwischen : und Wert berücksichtigen - z.B.:
Wenn es sich um state Events handelt, ist da keine Lücke. Kann man übrigens auch im Eventmonitor erzeugen / modifizieren lassen. Beispiel:
Event
2022-11-06 13:09:55 CUL_HM FensterAZL closed
define
define FensterAZL_FileLog_1 FileLog ./log/FensterAZL_FileLog_1.log FensterAZL:closed
ZitatKann man übrigens auch im Eventmonitor erzeugen / modifizieren lassen
Wozu aber der Umweg über Eventmonitor, wenn man mit dem "Wizard" das entsprechende Event einfach auswählen kann ?
Weil man im Wizard nicht die Werte auswählen kann, dort geht es nur auf der device:reading Ebene.
Ich wollte das aber nur als zusätzliches Hilfsmittel anführen. ;)
Im Übrigen, damit der Wizard beim Entfernen nicht die Klammern anzeigt kann man es ausführlicher schreiben:
FK.*:on|FK.*:off|FK.*:Open|FK.*:Closed
Ob das effizienter im System (analog NOTIFYDEV) ist, weiß ich nicht.
Der Grund warum Klammern im Wizard komisch aussehen, ist sicher auch so etwas wie dem konservativem Suchmuster Mechanismus geschuldet?
https://forum.fhem.de/index.php/topic,115414.msg1096784.html#msg1096784
Danke für eure Antworten. Ich habe die Sache getestet:
vorher:
2022-11-06_12:36:11 FK.EZ Window: Closed
2022-11-06_12:36:11 FK.EZ Reliability: ok
2022-11-06_12:36:11 FK.EZ batteryState: ok
2022-11-06_12:36:11 FK.EZ Closed
2022-11-06_12:40:21 FK.EZ Window: Closed
2022-11-06_12:40:21 FK.EZ Reliability: ok
2022-11-06_12:40:21 FK.EZ batteryState: ok
2022-11-06_12:40:21 FK.EZ Closed
2022-11-06_12:44:31 FK.EZ Window: Closed
2022-11-06_12:44:31 FK.EZ Reliability: ok
2022-11-06_12:44:31 FK.EZ batteryState: ok
2022-11-06_12:44:31 FK.EZ Closed
nachher:
022-11-06_13:15:47 FK.EV Window: Closed
2022-11-06_13:15:47 FK.EV Closed
2022-11-06_13:15:55 FK.AH Window: Open
2022-11-06_13:15:55 FK.AH Open
2022-11-06_13:16:38 FK.SZ Window: Closed
2022-11-06_13:16:38 FK.SZ Closed
2022-11-06_13:16:47 FK.WZ Window: Closed
2022-11-06_13:16:47 FK.WZ Closed
2022-11-06_13:16:58 FK.AH Window: Closed
2022-11-06_13:16:58 FK.AH Closed
Jetzt sollten noch die Zeilen mit "Window:" verschwinden.
Noch ein Problem: Die Sensoren senden alle 4 Minuten ihren Zustand. Wäre es da nich möglich nur ins Logfile aufzunehmen, wenn sich der Status verändert?
Bisher hatte ich mir keine Gedanken über die Größe des Logfiles gemacht - aber für die Fensterkontakte ist er im Laufe des Jahres auf ca. 140 MB angewachsen.
Ingo
Welchen der 5 Vorschläge hast Du getestet? ::) die waren alle anders und könnten von Dir auch noch missverständlich umgesetzt sein. ;)
An den Fensterkontakten kannst Du die Event Flut mit event-on-change-reading & co eingrenzen. Das hilft auch dem LogFile.
Zitat von: Otto123 am 06 November 2022, 13:17:01
Wenn es sich um state Events handelt, ist da keine Lücke.
Stimmt und bei state Events gibt es (normalerweise) auch keinen "
:"
Ich habe jetzt mal genauer bei meinen "Beispielen" geschaut und obwohl im regexp ein
: enthalten ist, wird auch das state Event geloggt. Daher scheint klar, dass der definierte regexp wohl nicht 1:1 zum Einsatz kommt, sondern uminterpretiert wird ... richtig ?
ein Trenner ( : ) ist im Suchmuster eigentlich immer. Und zwar zwischen Devicename und Event. Der wird nur gerne weggelassen :)
ZitatDer Ausdruck unter regexp wird anhand des Gerätenames überprüft und zwar devicename:event oder
Bei den speziellen state Events fehlt ja der Readingname, der normal auch mit einem : abgeschlossen ist.
Beispiel:
2022-11-06 14:05:43 CUL_HM FensterAZL contact: closed (to VCCU)
2022-11-06 14:05:43 CUL_HM FensterAZL closed
Deswegen hatte ich eingangs gesagt das sieht gruselig aus. Zwei Buchstaben und "der Rest" als Suchmuster trifft eben auf jedes Device, das mit FK beginnt
Zitat von: ingo46 am 06 November 2022, 13:39:51
Bisher hatte ich mir keine Gedanken über die Größe des Logfiles gemacht - aber für die Fensterkontakte ist er im Laufe des Jahres auf ca. 140 MB angewachsen.
Event-on-change ist schon mal ein guter Ansatz.
Unabhängig von der Diskussion um regexp kannst Du auch ein tägliches Log-File erstellen:
Z2_BME280_FileLog_3-%Y-%m-%d.log
und dann noch die Anzahl der Log-Files begrenzen auf z.B. 6 Log-Files
attr Z2_BME280_FileLog_3 nrarchive 5
Edit:
Was interessiert der state der Fensterkontakte vor 10 Monaten??
Zitat von: Otto123 am 06 November 2022, 13:43:03
Welchen der 5 Vorschläge hast Du getestet? ::) die waren alle anders und könnten von Dir auch noch missverständlich umgesetzt sein. ;)
An den Fensterkontakten kannst Du die Event Flut mit event-on-change-reading & co eingrenzen. Das hilft auch dem LogFile.
Ich habe den 1. Vorschlag getestet
./log/FENSTERKONTAKT-%Y.log FK.*:.*(on|off|Open|Closed)
zusätzlich attr event-on-change-reading, sowie event-min-interval .*:3600 gesetzt
...es wird weniger!
Einen kürzeren Zeitraum zu setzten wäre eine Möglichkeit für dieses Logfile (weil nicht wichtig), aber nicht für andere Logfiles. Es geht mir natürlich besonders darum die Syntax zu verstehen.
Deine Umsetzung loggt alle Geräte FK.* und dort alle Events mit "irgendwas" beginnend und auf on|off|Open|Closed endend.
Der erste Vorschlag war übrigens FK.*:(on|off|Open|Closed) von betateilchen. Der hätte schon das von Dir erwartete Ergebnis geliefert :)
Zitat von: Otto123 am 06 November 2022, 14:59:30
Deine Umsetzung loggt alle Geräte FK.* und dort alle Events mit "irgendwas" beginnend und auf on|off|Open|Closed endend.
Eigentlich möchte ich alle Events mit "irgendwas" beginnend und mit on|off|Open|Closed
anfangen - dazu fehlt mir noch die Idee!
den versteh ich nicht, was ist für Dich der Unterschied zwischen beginnend und anfangen?
Gib ein Beispiel.
Oder meinst Du (on|off|Open|Closed).* ?
Und hier https://regex101.com/ kann man sowas probieren.
Gehört da an den Anfang nicht noch ein .*?
definiere Anfang :) das ist das regExp für die Events. Du meinst das regExp für das Device? Das steht da nicht, ich weiß ja nicht wie das aussehen soll.
Ich habe ja seine Frage nicht verstanden, der Vorschlag ist eine Mutmaßung.
Ich verwende immer devicename:event - also ich hätte komplett schreiben können <devicename>:(on|off|Open|Closed).*
Zitat von: Otto123 am 06 November 2022, 16:59:54
den versteh ich nicht, was ist für Dich der Unterschied zwischen beginnend und anfangen?
Gib ein Beispiel.
also:
.... Closed soll gelogt werden
.... Window: Closed soll nicht gelogt werden
.... on soll gelogt werden
momentan steht ... Window:Closed noch im Logfile
Dann probier doch bitte mal diesen Vorschlag aus :'( :'( :'( den ich im Beitrag 16 geschrieben habe!
FK.*:(on|off|Open|Closed)
Danke - das ist die Lösung, die ich gesucht habe. Leider habe ich erst die 2. Lösung getestet!!
Aber ich habe viel gelernt!!!
Hast Du denn auch verstanden, warum dieses funzt?
Hinweis: Lernkontrolle ;D