Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[solved] Automatisierter eMail-Versand / LogFiles
#1
Edit:
Download Logmailer-Plugin:
https://github.com/harryberlin/repositor....logmailer

[August 2016]
Nach der Installation des Plugins könnt ihr die default.py wie folgt bearbeiten, damit die Logfiles an die von Euch festgelegte Adresse gesendet werden:

Spoiler!

Code:
nano /home/osmc/.kodi/addons/plugin.script.logmailer/default.py


unter # eMail-Adressen (Sender/Empfaenger) [Zeile 65 ff]
Code:
Hostname = "BMWRaspControl"
mailReceiver = 'net@net.net'
full_file_path = ''
bei mailReceiver die eMail-Adresse eintragen, an die das Logfile gesendet werden soll.
Und unter full_file_path tragt ihr /home/osmc/.kodi/temp/kodi.log ein.
Mit STRG + X, Y, ENTER alles abspeichern, fertig. Jetzt funktionieren die unter der Kodi-GUI gesetzten Settings für Mode 0 "BMWRaspControl".


Hallo,

Idee:
Zusendung einer eMail mit für den User relevanten Informationen (in diesem Beispiel die CPU Temperatur bei Überschreitung eines selbst festgelegten Werts).
Zukünftig denkbar wäre bspw. die Zusendung der Log-Dateien oder ähnliche Dinge in regelmäßigen Abständen. --> erledigt (s. Logmailer-Plugin)

Verwendetes Setup:
Raspberry Pi 2 (Modell B), Image v1.8
Internetverbindung über mobilen Hotspot/Tethering (HUAWEI mobile WiFi / Verwendung des Smartphones)

Umsetzung (ein möglicher Weg):
Per SSH auf Pi aufschalten und nachfolgende Codes nacheinander im Terminal abarbeiten:

Spoiler!
Code:
sudo apt-get update && sudo apt-get upgrade -y

sudo apt-get install cron -y

sudo reboot -n

Erneut via SSH aufschalten
Code:
cd /home/osmc

nano cpu-temp-warning.py

Im nun geöffneten leeren Dokument nachfolgenden Quellcode einfügen. Dazu den Code vollständig markieren, kopieren und mit einem Rechtsklick im SSH-Fenster einfügen (Vorgang ist etwas verzögert, also einen kurzen Moment warten).

Spoiler!
Code:
#!/usr/bin/python

# Skript zum Versenden einer eMail bei Ueberschreitung einer selbstbestimmten max. Temperatur der CPU
# unter Verwendung von "/sys/class/thermal/thermal_zone0/temp"
# In Anlehnung an das Skript von Jan Karres, einsehbar unter:
# https://jankarres.de/2013/12/raspberry-pi-ueberwachen-mit-monitoring/
# angepasst von @Soheyl - http://www.bmwraspcontrol.de/board

# Um das Skript alle 5 Minuten ausfuehren zulassen, nachfolgende Zeile in die User-Crontab mit Aufruf von "crontab -e" eintragen:
# */5 * * * * /usr/bin/python /home/osmc/cpu-temp-warning.py >/dev/null 2>&1
# Die letzte Zeile der Crontab MUSS mit einer Leerzeile oder einem # enden!

# Falls eMails nicht gesendet werden, dann Hinweis in Zeile fuer TLS beachten!

# cpu-temp-warning.py

import os
import smtplib
import time
from email.mime.text import MIMEText

# Main-Settings
Hostname = "BMWRaspControl"

# eMail-Adressen (Sender/Empfaenger)
mailSender = "Sender@Provider.de"
mailReceiver = "Empfaenger@Provider.de"

# SMTP-Ausgangsserver (Sender)
smtpUser = "Sender@Provider.de"
smtpPassword = "AccountPasswort"
smtpHost = "smtp.provider.de"
smtpPort = 587
   
# Warning
criticalTemp = 55 # in degree celsius/centigrade

###############################################################################
# Time/Date Recording
date = "%02i.%02i.%04i" % (int(time.localtime()[2]), int(time.localtime()[1]), int(time.localtime()[0]))
time = "%02i:%02i:%02i" % (int(time.localtime()[3]), int(time.localtime()[4]), int(time.localtime()[5]))

def getCPUtemp():
   #res = os.popen('vcgencmd measure_temp').readline() # Befehl ist auskommentiert und wird hier nicht genutzt, da dabei zu hohe CPU-Last verursacht wird!
   #return(res.replace("temp=","").replace("'C\n","")) # bezieht sich auf vorherige Zeile, daher ebenfalls auskommentiert!
   with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
       content = f.read().splitlines()
       return round(float(content[0]) / 1000.0, 2)
tempFloat = float(getCPUtemp())

def getCPUfreq():
   with open('/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq', 'r') as f:
       content = f.read().splitlines()
       return float(content[0]) / 1000.0
freqFloat = float(getCPUfreq())

if (tempFloat > criticalTemp):
   server = smtplib.SMTP(smtpHost, smtpPort)
   server.starttls() # If TLS authentication is not required, set a hash at the beginning of this line
   server.login(smtpUser, smtpPassword)

   value = "Hallo, " + "\n" + "\n" + "die aktuelle Temperatur des Raspberry Pi liegt bei " + str(tempFloat) + " Grad Celsius" + "\n" + "bei einer eingestellten CPU-Frequenz von " + str(freqFloat) + " MHz." + "\n" + "\n" + "Diese Werte wurden am " + date + " um " + time + " Uhr ermittelt." + "\n" + "\n" + "Kuehlen Sie das Geraet aktiv herunter oder schalten Sie es aus, um eventuelle Schaeden zu vermeiden!" + "\n" + "\n" + "__________________________" + "\n" + "Es handelt sich hierbei um eine automatisch generierte E-Mail, die von Ihrem Raspberry Pi (" + Hostname + ") gesendet worden ist."
   msg = MIMEText(value)
   msg['Subject'] = "[WARNUNG] RPi Temperatur zu hoch!!" # + str(tempFloat) + " Grad!"
   msg['From'] = mailSender
   msg['To'] = mailReceiver
   server.sendmail(mailSender, mailReceiver, msg.as_string())
   server.quit()


Anschließend die notwendigen Eintragungen im Skript unter # eMail-Adressen und # SMTP-Ausgangsserver machen. 
Habe dafür eine neue eMail-Adresse extra für den Pi angelegt. Bei Verwendung einer vorhandenen eMail-Adresse bedenken, dass das AccountPasswort im Klartext eingegeben und abgespeichert wird!!
 
Danach mit STRG + X, Y, ENTER abspeichern.

Damit das Skript alle 5 Minuten ausgeführt wird, die Temperatur überwacht und bei Überschreitung der eingestellten kritischen Temperatur (hier 55°C) eine eMail versendet, wird nachfolgender Eintrag in die User-Crontab getätigt:

Spoiler!
User-Crontab aufrufen:
Code:
crontab -e

Cronjob eintragen:
Code:
*/5 * * * * /usr/bin/python /home/osmc/cpu-temp-warning.py >/dev/null 2>&1

Bitte unbedingt darauf achten, dass sich am Ende der Crontab noch eine Leerzeile oder ein # befindet! Ansonsten arbeitet die Crontab nicht!
Mit STRG + X, Y, ENTER abspeichern und beenden.

Um zu testen, ob das Skript funktioniert criticalTemp = 20 setzen. 
Dann python cpu-temp-warning.py im Terminal ausführen. Jetzt solltet ihr eine eMail vom Pi bekommen haben.

Möchtet ihr feststellen, ob die Crontab korrekt arbeitet, dann die Temperatur bei 20°C beibehalten, entweder 5 Minuten warten und sehen, ob eine eMail ankommt. Alternativ innerhalb der Crontab das    /5   entfernen und abspeichern. Jetzt sollte Euch jede Minute eine eMail zugeschickt werden.


Bezüglich der LogFiles könnte man den Inhalt derer in eine Datei schreiben lassen und diese (oder vllt auch die LogDateien direkt?) dann bei Reboot, einmal wöchentlich oder auch bei Bedarf manuell (wie auch immer man möchte) via eMail an sich selbst senden. Das war zumindest mein Gedanke. Falls Euch etwas anderes/sinnvolleres einfallen sollte, dann meldet Euch.

Beste Grüße
Soheyl

P.s.:
Verwandtes Thema:
http://www.bmwraspcontrol.de/board/showt...php?tid=13

@b3m3
Könnte man beim nächsten Image die Crontab vllt direkt integrieren? Dann könnte man Cronjobs für regelmäßige Updates einfügen und entsprechende Skripte schreiben, die diese Updates im Hintergrund ausführen.
Falls es (aktuell) keine Verwendung dafür gibt, dann ist das auch nicht tragisch - die Installation von Cron ist ja schnell gemacht Wink
Danke
_________________
RPi 2 - Modell B -- Image v1.8 + IBusCommunicator-Addon
Zitieren


Nachrichten in diesem Thema
[solved] Automatisierter eMail-Versand / LogFiles - von Soheyl - 12.08.2016, 18:32
RE: Automatisierter eMail-Versand - von Soheyl - 12.08.2016, 20:52
RE: Automatisierter eMail-Versand - von Soheyl - 12.08.2016, 21:16
RE: Automatisierter eMail-Versand - von Soheyl - 14.08.2016, 11:06
RE: Automatisierter eMail-Versand - von Soheyl - 14.08.2016, 11:49

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste