Autor Thema: FB_mail mit Zeilenumbruch  (Gelesen 3681 mal)

Offline docb

  • Sr. Member
  • ****
  • Beiträge: 589
FB_mail mit Zeilenumbruch
« am: 24 Juni 2013, 10:46:06 »
Hallo Leute,
FB_mail funktioniert bei mir problemlos. Ich möchte allerdings jetzt das Modul MSG_Mail nachbauen, indem ich es mit FB_mail nutze. Dazu habe ich mir einen dummy angelegt, in den den ich verschiedene Werte reinschreiben lasse. Diese Werte würde ich mir gerne täglich als Mail senden lassen. Alles soweit kein Problem, allerdings hätte ich gerne zur besseren Übersicht einen Zeilenumbruch nach jedem Wert. Am einfachsten wäre es, wenn ich dieses "Zeichen" für den Zeilenumbruch gleich irgendwie in den Dummy schreiben könnte, dann wäre der Funktionsaufruf recht einfach:


{ fb_mail('e@mail.de','Subject',Value("DailyStatus")) }
{ fhem("set DailyStauts gesendet") }


Gibt es da eine Möglichkeit?
Viele Grüße
doc
I love FHEM!

Offline docb

  • Sr. Member
  • ****
  • Beiträge: 589
Aw: FB_mail mit Zeilenumbruch
« Antwort #1 am: 25 Juni 2013, 08:36:21 »
Hallo Freunde,
nach eine Nacht mit Onkel googel habe ich eine Lösung für mich gefunden. Falls das jemand brauchen kann, hier der Code. Perl-Freaks werden sich vielleicht tot lachen, aber es funktioniert ;-) Wenn jemand eine schönere Lösung hat, bin immer für Tipps offen!

Dummy anlegen in der fhem.cfg:

#DailyStatus
define DailyStatus dummy


Code in der 99_myUtils.pm:

###################################
### DailyStatus
###################################
sub DailyStatus_add($) {
 my ($newStatus) = @_;
 my $oldStatus =  ReadingsVal("DailyStatus", "state", "Leer");
 if ($oldStatus eq "Leer"){
  fhem ("set DailyStatus ".$newStatus);
 } else {
  fhem ("set DailyStatus ".$oldStatus.", ".$newStatus);
 }
}

sub DailyStatus_send() {
 my $msg =  ReadingsVal("DailyStatus", "state", "Keine Statusnachrichten");
 #fhem ("set DailyStatus ".$msg);
 my @values = split(', ', $msg);
 my $text = join("\n", @values);
 FB_mail('bb@email.de','fhem - Batteriestatus',$text);
 fhem ("set DailyStatus Leer");
}


Und wenn man jetzt ein Ereignis mitloggen will, einfach die Funktion aufrufen:
{DailyStatus_add("Füge Status hinzu")}
Das Skript prüft, ob schon ein Status vorhanden ist und fügt ggf. den neuen hinzu.

Wenn ihr versenden wollt, ruft ihr einfach die sub DailyStatus_send aus einem at auf, bei mir schaut das so aus:

define at_DailyStatus at *23:00  { DailyStatus_send() }
attr at_DailyStatus room Z_Automatisierung

Nach dem Senden wird der Status automatisch auf Leer gesetzt.

Viel Spaß damit, beste Grüße
Doc
I love FHEM!

Offline docb

  • Sr. Member
  • ****
  • Beiträge: 589
Neue Version
« Antwort #2 am: 26 Juni 2013, 00:29:15 »
Hallo Freunde,
ich habe weiterentwickelt, da ich noch mehr Tagesinfos wollte. Das Skript ist jetzt fertig, es schickt wie oben erwähnt die Statusmeldung und noch dazu den Ausschnitt des letzten Tages aus dem Hauptlogfile.

Wichtig: das at habe ich jetzt auf 00:01 Uhr gesetzt, damit das mit dem letzten Tag funktioniert
Das ganze müsste auf allen Fritzboxen laufen, da ich die Pfade zur Datei auslese. Aber keine Garantie - bei meiner 7390 funktioniert es super. Und an alle Perl-Profis - ich beschäftige mich erst seit vorgestern mit Perl, daher sind Tipps zur Verbesserung herzlich willkommen.

Hier die neue Version:

sub DailyStatus_send() {
#Daily Status auslesen
 my $msg =  ReadingsVal("DailyStatus", "state", "Keine Statusnachrichten");
 my @values = split(', ', $msg);
 my $text = "Täglicher Statusbericht:\n________________________________________________\n\n".join("\n", @values);
  open (DATEI, ">./log/DailyStatus.log") or die $!;
   print DATEI $text;
  close (DATEI);

#Logdatei auslesen
 my $log_gestern = sub{sprintf '%04d-%02d-%02d', $_[5]+1900, $_[4]+1, ($_[3])-1}->(localtime);
 my $logdatei = "./log/fhem-".substr($log_gestern,0,7).".log";
 $log_gestern =~ tr/-/./;
 
 open my $fh, $logdatei or die "Could not open $logdatei: $!";
 my @lines = grep /\Q$log_gestern/, <$fh>;
 
 open (DATEI, ">>./log/DailyStatus.log") or die $!;
   print DATEI "\n\n################################################\n\n\nLogfileausschnitt ".$log_gestern.":\n________________________________________________\n\n";
   print DATEI @lines;
 close (DATEI);

 my $Arbeitsverzeichnis = getcwd();
 my $textfile = $Arbeitsverzeichnis."/log/DailyStatus.log";
#Senden
 system("/sbin/mailer send -i \"$textfile\" -s \"FHEM Statusmeldung\" -t \"bb\@rheos.com\" -c \"utf-8\"");
 fhem ("set DailyStatus Keine Statusnachrichten");
 Log 3, "Statusmeldung gesendet";
}
I love FHEM!

 

decade-submarginal