Hauptmenü

Spezielle Events loggen

Begonnen von sn0000py, 12 September 2023, 16:13:25

Vorheriges Thema - Nächstes Thema

sn0000py

Eine Frage wie mache ich das das ich spezielle Events extra logge?
Ich möchte dazu nicht das normale Filelog nehmen, da mir da viel zu viel Ereignisse und Debug und co rein kommen.

Es könnte theoretisch schon ein extra neues Filelog sein, wenn das besser geht.
ansonsten wird es ein normales Textfile, das ich dann per 99_myUtils befüllen muss, dann muss ich halt für alles Notify machen.

Was soll reinkommen :
Jedes mal wenn der Lichttaster ein/ausgeschaltet wird.
Alle Bewegungsmelder, wenn ein/aus
Alle Sicherheitsrelevanten Sensoren (Tür auf/Tür zu)
Regenmelder ein/aus usw.

Ich möchte einfach einen Tagesbericht dann haben damit ich weiß was ist an dem Tag passiert.

Was wäre hier der einfachste Ansatz?

betateilchen

#1
Was hindert Dich daran, ein FileLog device zu definieren, das genau diese von Dir genannten events loggt?

Alternativ kannst Du Dir natürlich auch aus dem zentralen Logfile alles das in einem "Bericht" ausgeben lassen, was Du wissen möchtest. Dafür hat jedes FileLog device ja einen get-Befehl. Bekanntestes Einsatzszenario dafür ist ein SVG plot, in dem ja soagr bis auf reading-Ebene aus einem FileLog (oder auch DbLog) Daten selektiert werden. Anstatt daraus eine grafische Darstellung zu machen, kann man auf gleiche Weise natürlich auch eine Textausgabe generieren.

Beispiel:

get fhemDbLog HISTORY - 2023-09-12_00:00:00 2023-09-12_23:59:59 fl_PIR1_Motion:motion

liefert mir aus meinem DbLog alle Ereignisse, die einer der Bewegungsmelder im Flur heute registriert hat.

(Auszug)
2023-09-12_00:00:00 off
2023-09-12_00:03:00 off
2023-09-12_00:06:00 off
2023-09-12_00:09:01 off
...
2023-09-12_10:03:00 off
2023-09-12_10:06:00 off
2023-09-12_10:09:00 off
2023-09-12_10:12:00 off
2023-09-12_10:14:22 on (to hmvccu)
2023-09-12_10:15:00 on (to hmvccu)
2023-09-12_10:15:22 on (to hmvccu)
2023-09-12_10:16:23 on (to hmvccu)
2023-09-12_10:17:20 on (to hmvccu)
2023-09-12_10:18:00 on (to hmvccu)
2023-09-12_10:18:22 off
2023-09-12_10:21:00 off
2023-09-12_10:24:00 off
2023-09-12_10:27:00 off
2023-09-12_10:27:54 on (to hmvccu)
2023-09-12_10:28:53 on (to hmvccu)
2023-09-12_10:29:55 off
2023-09-12_10:30:00 off
...

Das funktioniert genauso auch für FileLog.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

sn0000py

Also das FileLog das lösche ich immer wieder mal, das ist mir da zu unsicher.
Gerade wenn ich das teste, dann haue ich immer sehr viele Log ins 99_myUtils rein und lösche dann das log damit ich es besser debuggen kann.

Aus dem DBLog, die Auswertung zu fahren stelle ich mir eben umständlich vor, da ich sicher über 30 Devices mit den Readings da drinnen stehen werden müssen.

dh
Also meine Idee wäre nun
ein FileLog zu erzeugen
define Tagebuch FileLog ./log/Tagebuch_%Y_%m.log .*:Tagebuch.*

und dann bei allen devices die ich haben will ein userReadings Tagebuch dazu
Die shellys die zwei Geräte steuern bekommen dann 2 userreadigns Tagebuch_FlurLicht und Tagebuch_Kellerlicht dazu

und dann beim device noch ein event-on-change-reading Tagebuch.* dazu

Wenn das passt, dann noch eine Frage, bekomme ich per code auch einen Eintrag da reinbringen?

sn0000py

Noch eine Frage kann man im Log File den Namen durch den Alias ersetzen?

2023-09-12_19:31:03 HmIP_SWDO_I_00109A49A50D22 Tagebuch: open
2023-09-12_19:31:03 HmIP_SWDO_I_00109A49A50D22 Tagebuch: closed
2023-09-12_19:31:04 HmIP_SWDO_I_00109A49A50D22 Tagebuch: closed
2023-09-12_19:31:04 HmIP_SWDO_I_00109A49A50D22 Tagebuch: open
2023-09-12_19:31:33 HmIP_SWDO_I_00109A49A50D22 Tagebuch: open
2023-09-12_19:31:33 HmIP_SWDO_I_00109A49A50D22 Tagebuch: closed

damit ich das etwas klarer/schöner ausgeben kann hier

bzw welche Perl Expression es für den  outputFormat <perlCode> gibt?
wenn ich nur den $VALUE bekomme (Also das open, closed) dann könnte ich mir den Text in das userreading reingeben den ich haben will
aber das $EVENT ist hier ja "Tagebuch: closed"

betateilchen

Für mich ist Dein gesamter Lösungsansatz ziemlicher Unfug.

Zitat von: sn0000py am 12 September 2023, 19:21:10Aus dem DBLog, die Auswertung zu fahren stelle ich mir eben umständlich vor, da ich sicher über 30 Devices mit den Readings da drinnen stehen werden müssen.

Das mag zwar Deine Vorstellung sein, das bedeutet aber nicht automatisch, dass Deine Vorstellung richtig ist.

Ob Du aus dem Log ein Reading rausholst oder 30 ist völlig egal, prinzipiell geht das sogar mit eine einzigen Befehl. Daraus kannst Du Dir ein cmdalias basteln, das die Sache weiter vereinfacht. Und dabei den device-Namen durch den alias zu ersetzen, lässt sich auch gleich mit erledigen.

Mit Dutzenden userReadings zu arbeiten, die vorhandene Daten duplizieren, ist einfach nur Quatsch. Sorry.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

sn0000py

Ja da hast sicher recht - bin halt leider von der Fraktion erst mal so schnell wie möglich zum Ziel egal wie.

Es funktioniert so mal erst mal für meine Zwecke aber ich verspreche ich werde es dann noch umbauen bevor ich dann wieder hier wo einen Thread eröffne mit dem Titel "mein FHEM ist so langsam wie kann ich das optimieren"

Eine Frage noch wie würdest du dann aus den DBLog die Auswertung fahren?

Das Resultat sollte so oder so ähnlich dann aussehen
Heute 8:20:10 Terrassentür geöffnet
Heute 8:10:12 Licht im Flur ausgeschaltet
Gestern 23:12:09 Regensensor ein
Gestern 15:19:12 Akku voll geladen
13.09.2023


PS.: Für sowas wie Akku voll muss ich dann doch ein userReading erzeugen vermute ich mal, da ich in dem Fall alles mit > 99% als voll definieren muss (normal wird der Akku nur bis 99% geladen, ab und zu dann doch auf 100% - da soll dann nur einmalig als voll gemeldet werden)

Meine vermutlich falsche Idee wäre hier wieder ein kleines Script in der 99_myUtils, das die DBLog ausliest und dann den Text erzeugt und als Reading wo ablegt

betateilchen

#6
Zitat von: sn0000py am 15 September 2023, 07:56:28Für sowas wie Akku voll muss ich dann doch ein userReading erzeugen vermute ich mal, da ich in dem Fall alles mit > 99% als voll definieren muss (normal wird der Akku nur bis 99% geladen, ab und zu dann doch auf 100% - da soll dann nur einmalig als voll gemeldet werden)

Meine vermutlich falsche Idee wäre hier wieder ein kleines Script in der 99_myUtils, das die DBLog ausliest und dann den Text erzeugt und als Reading wo ablegt

Das würde ich schon beim Loggen erledigen: Mit DbLog valueFn den Wert ab 99 einfach als 100 (oder sogar schon als "voll") loggen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!