FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tschimi am 30 Oktober 2017, 10:17:16

Titel: Fhem LOG-Errors an Telegrambot schicken
Beitrag von: tschimi am 30 Oktober 2017, 10:17:16
Hi,
ich hab nun endlich meinen Bot am Laufen und meine Installation wird auch immer besser. Nun, was ich gerne machen würde, aber keine Ahnung hab wie, ist, Fehler, die FHEM in sein Log schreibt auch gleichzeitig an meinen TelegramBot zu schicken. Hat jemand schon mal sowas versucht? Wäre dankbar für einen Tip..

Lg, tschimi
Titel: Antw:Fhem LOG-Errors an Telegrambot schicken
Beitrag von: igami am 30 Oktober 2017, 10:28:15
Versucht noch nicht, aber hier ein Auszug aus der notify commandref:
Zitat
readLog
Execute the notify for messages appearing in the FHEM Log. The device in this case is set to the notify itself, e.g. checking for the startup message looks like:

    define n notify n:.*Server.started.* { Log 1, "Really" }
    attr n readLog
Titel: Antw:Fhem LOG-Errors an Telegrambot schicken
Beitrag von: automatisierer am 30 Oktober 2017, 11:15:24
Das Log lasse ich mir nicht schicken. Aber eine Nachricht, wenn innerhalb einer halben Stunde mehr als 20 Zeilen ins Log geschrieben werden...
Titel: Antw:Fhem LOG-Errors an Telegrambot schicken
Beitrag von: Amenophis86 am 30 Oktober 2017, 11:29:09
Zitat von: automatisierer am 30 Oktober 2017, 11:15:24
Das Log lasse ich mir nicht schicken. Aber eine Nachricht, wenn innerhalb einer halben Stunde mehr als 20 Zeilen ins Log geschrieben werden...

Da ich zu faul bin es selbst zu schreiben, die Idee aber gut finde, magst du deinen Code mal hier zeigen.
Titel: Antw:Fhem LOG-Errors an Telegrambot schicken
Beitrag von: automatisierer am 30 Oktober 2017, 22:23:12
Na klar, kein Problem...

musste mich erst mal wieder einlesen...

über ein at wird alle 30 Minuten eine sub aus der 99_myUtils aufgerufen, über die Readings in der FileLog Definition erstellt werden. Darauf wieder ein notify oder DOIF, welches dann eine Nachricht raus haut, wenn mehr als 20 Zeilen dazu gekommen sind.

das at Device:
defmod linesInTheFileAT at +*00:30:05 {linesInFile("Logfile","currentlogfile","linesInTheFile","linesInTheFileOld","linesInTheFileDiff")}
linesInFile > Aufruf der sub
Logfile > Name des FileLog Device das man überwachen möchte
currentlogfile > Reading mit dem aktuellen Dateiname
danach die drei Readings die erzeugt werden. aktuelle Zeilen Anzahl, alte Zeilen Anzahl, Differenz aus beiden.

sub in 99_myUtils:
#{linesInFile("LogDevice,LogFileReading,LogLinesReading,LogLinesReadingOld,LogLinesDiffReading")}
sub
linesInFile($$$$$) {
my ($logDev,$logFileInt,$logRead,$logReadOld,$logReadDiff) = @_;
my $logFile = InternalVal($logDev,$logFileInt,"undefined");
my @logLines =  split(' ',qx (wc -l $logFile));
my $logLinesOld = ReadingsVal($logDev,$logRead,"undefined");
my $logLinesDiff = $logLines[0] - $logLinesOld;
fhem "setreading $logDev $logReadDiff $logLinesDiff";
fhem "setreading $logDev $logReadOld $logLinesOld";
fhem "setreading $logDev $logRead $logLines[0]";
my $return = "$logFile\n$logLines[0].Zeilen in Datei\n$logLinesDiff.Differenz";
return $return;
}


alle Klarheiten beseitigt?