Logbucheinträge in ausgewähltes Logbuch statt fhem.log

Begonnen von Bäschdler, 22 März 2018, 00:45:08

Vorheriges Thema - Nächstes Thema

Bäschdler

Hallo,

ich möchte gerne mit der Ausführung bestimmter Befehle einen eigenen Logbucheintrag erzeugen.

Testhalber habe ich mal folgendes implementiert:

define Azimuth_to_Log DOIF ([myLocation:azimuth]<110) {Log 1, "Azimuth kleiner 110"} \
DOELSEIF (([myLocation:azimuth]>110) && ([myLocation:azimuth]<190)) {Log 1, "Azimuth grösser 110"} \
DOELSEIF (([myLocation:azimuth]>190) && ([myLocation:azimuth]<220)) {Log 1, "Azimuth grösser 190"} \
DOELSEIF (([myLocation:azimuth]>220) && ([myLocation:azimuth]<250)Kann  {Log 1, "Azimuth grösser 220"} \
DOELSEIF ([myLocation:azimuth]>250) {Log 1, "Azimuth grösser 250"} \
DOELSE

Die Werte für myLocation kommen aus dem Twilight-Modul.

Das funktioniert soweit alles gut und die Logbucheinträge "Azimuth...." werden auch in's Logbuch (fhem.log) geschrieben.
Jetzt würde ich diese Logbucheinträge aber gerne in einem anderen Logfile haben (z. B. ein existierendes azimuth.log welches ich schon erzeugt habe und in das schon die cmd: * Meldungen aus dem oben stehenden DOIF geloggt werden.

Kann man das irgendwo "einstellen" in welches Logfile die Meldungen geschrieben werden?


Danke schon mal für eure Hilfe.

rudolfkoenig

ZitatKann man das irgendwo "einstellen" in welches Logfile die Meldungen geschrieben werden?
Nein, Log schreibt alles ins fhem.log (oder nach STDOUT).
Aber es ist nicht aufwendig eine perl-Funktion zu bauen, um Zeilen in eine Datei zu schreiben.
Alternativ definiert man ein FileLog und verwendet trigger.

betateilchen

Zitat von: rudolfkoenig am 22 März 2018, 07:26:17
Alternativ definiert man ein FileLog und verwendet trigger.

Das Log gibt es doch schon...

Zitat von: Bäschdler am 22 März 2018, 00:45:08
ein existierendes azimuth.log welches ich schon erzeugt habe und in das schon die cmd: * Meldungen aus dem oben stehenden DOIF geloggt werden.

... was die Sache mittels trigger - wie vorgeschlagen - erheblich vereinfacht:


define Azimuth_to_Log DOIF ([myLocation:azimuth]<110) trigger Azimuth_to_log Azimuth kleiner 110 \
...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bäschdler

Zitat von: betateilchen am 22 März 2018, 08:45:48
Das Log gibt es doch schon...

... was die Sache mittels trigger - wie vorgeschlagen - erheblich vereinfacht:


define Azimuth_to_Log DOIF ([myLocation:azimuth]<110) trigger Azimuth_to_log Azimuth kleiner 110 \
...


Sorry, das habe ich nicht verstanden. Das mit dem Trigger würde mir schon gefallen, aber wo gebe ich den Dateinamen der Logdatei an ?

rudolfkoenig

ZitatDas mit dem Trigger würde mir schon gefallen, aber wo gebe ich den Dateinamen der Logdatei an ?
Indirekt, indem trigger was sendet, was das gewuenschte FileLog per Regexp erwischt.

Beispiel:

define fl1 FileLog log/file1.txt Azimuth_to_Log:cmd.*
define fl2 FileLog log/file2.txt Azimuth_to_Log:log.*

trigger Azimuth_to_Log cmd set lamp on
-> landet in file1.txt

trigger Azimuth_to_Log log Etwas zum Protokollieren
-> landet in file2.txt

Bäschdler

Ich bekomme leider nichts in das Logfile eingetragen.

folgendes habe ich gemacht:
es gibt einen Time_Timer der mir jede Minute die aktuelle Uhrzeit in einen Dummy schreibt. Diesen habe ich jetzt um den Text ("aktuelle Uhrzeit gesetzt") erweitert der im Logbuch erscheinen soll.

define FileLog1 FileLog log/Azimuth_to_Log_FileLog_1.log Time_Timer:log.*
Damit müsste doch alles was was der Time_Timer loggen soll im File "log/Azimuth_to_Log_FileLog_1.log" landen, oder?

define Time_Timer at +*00:01:00 { my $s = (FmtTime(time()));; fhem("set 5_aktUhrzeit $s");; trigger FileLog1 log "aktuelle Uhrzeit gesetzt"}

Damit müsste doch "aktuelle Uhrzeit gesetzt" in's Logbuch geschrieben werden, oder?

Leider sehe ich im File Azimuth_to_Log_FileLog_1.log keine Einträge

rudolfkoenig

ZitatDamit müsste doch alles was was der Time_Timer loggen soll im File "log/Azimuth_to_Log_FileLog_1.log" landen, oder?
Klar, aber dann muss trigger auch mit Time_Timer aufgerufen werden, und nicht mit FileLog1. Von wo aus trigger aufgerufen wird, ist irrelevant. Man kann sich auch helfen lassen:
- Event-Monitor oeffnen
- trigger in einem anderen Fenster eingeben
- die Event-Zeile markieren, und mit Hilfe von "Create/Modify device" anschauen, wie die FileLog Definition ausschauen muesste, um dieses Event zu erfassen.

Bäschdler

Super, vielen Dank. jetzt landen die manuellen Logbucheinträge von mir im jeweiligen Logbuch in dem ich sie gerne sehen möchte.