[Gelöst] Logdatei per TeleGram Bot

Begonnen von Andre0909, 02 April 2018, 10:32:53

Vorheriges Thema - Nächstes Thema

Andre0909

Moin zusammen,

habe mich die letzte Tage ausführlich mit Telegram beschäftigt und es jetzt geschaft mit QueryInline ein Menü zu erstellen, mit welchem ich Steuern und Abfragen kann. Im Bereich Status wird mit z.B. die Uptime, der BAtteriestatus etc angezeigt.
Da heute mein Log zugespamt wurde kam mir die Idee auf Anfrage per Telegram das aktuelle FHEMLogfile zuschicken zu lassen. So könnte man per einfachen klick z.B. im Urlaub feststellen ob es irgdnwelche Probleme gibt.

Ich denke das ist machbar habe aber irgendwie kein Ansatz wie ich das Zusammenbasteln kann, dass auf ein Triggerwort das Log per Telegram zugeschickt wird. Jemand eine Idee auf welchem WEge man sowas realisieren könnte? DANKE und FROHE OSTERN

[EDIT]

mit meiner Sub geht es jetzt

if ($Nachricht eq "Log")
{
fhem("set teleBot sendDocument /opt/fhem/log/fhem-2018-04.log");

}


ABER wie krieg ich es hin das der Filename relativ bleibt ?

if ($Nachricht eq "Log")
{
fhem("set teleBot sendDocument /opt/fhem/log/fhem-%Y-%m.log");

}


funktioniert leider nicht :(



MadMax-FHEM

Im Reading 'currentlogfile' des Moduls 'global' steht der aktuelle Pfad der Logdatei so wie du ihn brauchst...

Also solltest du es per:

my $ActLogPath = ReadingsVal("global", "currentlogfile", "n.a.");

auslesen können...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Andre0909

#2
Zitat von: MadMax-FHEM am 02 April 2018, 13:24:45
Im Reading 'currentlogfile' des Moduls 'global' steht der aktuelle Pfad der Logdatei so wie du ihn brauchst...

Also solltest du es per:

my $ActLogPath = ReadingsVal("global", "currentlogfile", "n.a.");

auslesen können...

Gruß, Joachim

Mega, da wäre ich gar nicht drauf gekommen, allerdings weiteres "Problem"

Wie kriege ich

./log/fhem-2018-04.log
in
/opt/fhem/log/fhem-2018-04.log.

Was davor setzen wäre kein Problem. Störend ist der .

[edit]

Habe gerade gesehen mit

set teleBot sendDocument /opt/fhem/./log/fhem-2018-04.log geht es auch :>

DANKE

MadMax-FHEM

Bitte gerne!

Dann noch auf gelöst setzen, umbenennen in beispielsweise [gelöst] Logdatei per TeleGram Bot

Viel Spaß noch, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Andre0909

#4
Zitat von: MadMax-FHEM am 02 April 2018, 20:28:08
Bitte gerne!

Dann noch auf gelöst setzen, umbenennen in beispielsweise [gelöst] Logdatei per TeleGram Bot

Viel Spaß noch, Joachim

Mache ich sofort aber irgendwie kriege ich es nicht hin ?!?

Habe

sub Logdatei()
{

my $LogPath = (ReadingsVal("global","currentlogfile",0));
fhem("set teleBot sendDocument /opt/fhem/$LogPath");
}
eingerichtet.

Gebe ich {Logdatei} in di Befehlszeile ein kommt:

ZitatFAILED file :/opt/fhem/0: not found or empty

?

Hier noch ein Teil des List


Internals:
   DEF        no definition
   NAME       global
   NR         1
   STATE      no definition
   TYPE       Global
   currentlogfile ./log/fhem-2018-04.log



MadMax-FHEM

Sorry, currentlogfile ist kein Reading sondern ein Internal...

Daher statt ReadingsVal InternalVal...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Andre0909

Zitat von: MadMax-FHEM am 02 April 2018, 20:36:28
Sorry, currentlogfile ist kein Reading sondern ein Internal...

Daher statt ReadingsVal InternalVal...

Gruß, Joachim

Mega, läuft DANKE DIR

MadMax-FHEM

Dann is ja gut!

Sorry noch mal... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

otto

Hallo gibt es auch die Möglichkeit den log  nicht als Datei sondern als Text zu zusenden ?
(geht hier aber nicht um den log ist einer andere die nicht so groß ist)

Gruß Otto

MadMax-FHEM

#9
Ja.

Mit Perl die Datei öffnen, auslesen, Inhalt versenden, schließen...

EDIT: vielleicht hilft das weiter https://forum.fhem.de/index.php/topic,79520.msg715968.html#msg715968

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

otto

Hab´s versucht  :-[
leider stimmt bei mir was nicht ?
FAILS 0
FUUID 5ce1b9ec-f33f-5642-
NAME teleBot
NR 242
OLD_POLLING 32
POLLING 32
SNAME teleBot
STATE Polling
TYPE TelegramBot
UPDATER 0
WAIT 0
me 82xxxxxx:Fhem_otto:@Fxxxxxx_1_bot
sentLastResult SUCCESS
sentMsgId
sentMsgOptions

sentMsgPeer Otto
sentMsgPeerId 824xxxxxx
sentMsgResult WAITING
sentMsgText
2020-10-23_22:20:38 Seriell UNKNOWNCODE 00110: Fre 23-Okt-20 22:16:44:   ZENTRALE ZUR�CKSETZEN (FBF)



sourceVersion $Id: 50_TelegramBot.pm 23001 2020-10-21 19:33:31Z viegener $

gesendet hab ich mit :
set teleBot cmdSend ( taillog("/opt/fhem/log/Seriell.txt",10)}
und bei sendMsgText stehts ja auch drin aber warum versendet er es nicht ?


Gruß Otto

MadMax-FHEM

#11
Was steht in sendMsgText?
EDIT: ok, steht oben im list.

Dein tail-Aufruf ist ein System-Shell-Aufruf.
Glaub nicht, dass der so funktioniert...
Du wirst den Inhalt verm. vorher in eine Variable schreiben müssen...

EDIT: Sorry auf dem Handy "verlesen"...

Keine Ahnung, sorry...

EDIT: was macht "taillog"? Wo(her) ist die Funktion?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

otto

Hallo,
ist in der 99_myUtils.pm
ub read_back($$)
{
  my ($fh,$lines)=@_;
  my $line_cnt=0;
  my $data='';

  seek($fh,0,02);
  my $pos=tell($fh);

  while($line_cnt < $lines and $pos > 0)
  {
   $pos--;
   seek($fh,$pos,00);
   my $bite=getc($fh);
   $line_cnt++ if($bite eq $/);
  }
  return <$fh>;
}

sub taillog($$){

my $filename = shift or die "Usage: $0 file numlines\n";
my $numlines  = shift;

open(my $fh,"<$filename") or die ("Couldn't open $filename: $!");
my @lines = read_back($fh,$numlines);
close($fh);
my $zeilen = join("\n",@lines);
return sprintf($zeilen);
}


ist von "topfi"

Gruß Otto

andies

Ich lasse mir nur die letzten zwei Tage sowie zehn Zeilen schicken. Anemonade hatte eine viel bessere Programmierung, die finde ich gerade nicht. Also meine
  ###############################################################################
#
#  Letzten zehn Einträge des Logfiles auslesen, damit sie gesendet werden können
#  https://forum.fhem.de/index.php/topic,108574.msg1025597.html#msg1025597
#
###############################################################################

sub LogFileEintraegeSenden(){
# Datum holen
my $datum = POSIX::strftime("%Y-%m",localtime(time));
my $today_log = POSIX::strftime("%Y.%m.%d",localtime(time));
my $yesterday_log = POSIX::strftime("%Y.%m.%d",localtime(time-24*60*60));

my $nachricht = "";
my ($err, @nachrichtenliste) = FileRead({FileName => "/opt/fhem/log/fhem-$datum.log", ForceType => "file"});
if ($err) {
$nachricht = "Fehler beim Lesen der Logdatei /opt/fhem/log/fhem-$datum.log: $err";
} else {
# Eintraege mit anderem Datum entfernen
my @datatosend;
    if (@nachrichtenliste > 19) {
      @datatosend = @nachrichtenliste[-20..-1];
    } else {
      @datatosend = @nachrichtenliste;
}

foreach my $nachrichtenzeile(@datatosend){
$nachrichtenzeile =~ s/[;&><]//g;  ##Semikolon entfernen, siehe https://core.telegram.org/bots/api#markdown-style
#Log3(undef, 0, "substr= ".substr($nachrichtenzeile, 0, 10))."#";
#Log3(undef, 0, "today= ".$today_log)."#";
if ((substr($nachrichtenzeile, 0, 10) eq $today_log) or (substr($nachrichtenzeile, 0, 10) eq $yesterday_log)){
$nachricht .= substr($nachrichtenzeile, 11)."\n";
    }
}
}
fhem("set TelegramBot silentmsg ```".$nachricht."```");
}

FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

jkriegl

Ich lasse mir das aktuelle Log schicken (bzw. rufe es ab) mitset TeleBot sendDocument {(InternalVal("Logfile","currentlogfile",""))}
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly