diff --git a/monitor.py b/monitor.py index d5b8ecd..9145dad 100644 --- a/monitor.py +++ b/monitor.py @@ -26,6 +26,9 @@ ALERT_EMAIL = os.getenv("ALERT_EMAIL", SMTP_USER) # Standard: an sich selbst last_alert_time = None ALERT_COOLDOWN = int(os.getenv("ALERT_COOLDOWN", "3600")) # 1 Stunde zwischen Alarmen +last_daily_report_date = None +DAILY_REPORT_HOUR = int(os.getenv("DAILY_REPORT_HOUR", "8")) # 8:00 Uhr morgens + def send_alert_email(subject, message): """Sendet eine E-Mail-Benachrichtigung.""" @@ -96,6 +99,55 @@ def send_recovery_email(): ) +def send_daily_report(): + """Sendet einen täglichen Positiv-Bericht um 8:00 Uhr.""" + global last_daily_report_date + + now = datetime.now() + today = now.date() + + # Prüfen, ob heute schon ein Bericht gesendet wurde + if last_daily_report_date == today: + return # Heute wurde bereits berichtet + + # Prüfen, ob es bereits 8:00 Uhr oder später ist + if now.hour < DAILY_REPORT_HOUR: + return # Noch nicht 8:00 Uhr + + try: + msg = MIMEMultipart() + msg['From'] = SMTP_USER + msg['To'] = ALERT_EMAIL + msg['Subject'] = "✅ CameraSave: Täglicher Status-Bericht" + + body = f""" +CameraSave Täglicher Status-Bericht +==================================== + +Das CameraSave-System läuft normal und überwacht weiterhin Ihre Kameras. + +Status: ✅ Aktiv +Zeit: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} +Server: {os.uname().nodename if hasattr(os, 'uname') else 'Unknown'} + +Dieser Bericht wird einmal täglich automatisch versendet. +Bei Problemen erhalten Sie eine separate Alarm-E-Mail. +""" + msg.attach(MIMEText(body, 'plain')) + + server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) + server.starttls() + server.login(SMTP_USER, SMTP_PASS) + server.send_message(msg) + server.quit() + + last_daily_report_date = today + print(f"📧 Täglicher Status-Bericht gesendet an {ALERT_EMAIL}") + + except Exception as e: + print(f"❌ Fehler beim Versand des täglichen Berichts: {e}") + + def main(): """Hauptschleife des Monitoring.""" print("🔍 CameraSave Monitor gestartet") @@ -118,6 +170,8 @@ def main(): # System ist wieder online send_recovery_email() was_down = False + # Täglichen Positiv-Bericht senden + send_daily_report() else: print(f"[{timestamp}] ❌ {status}") if not was_down: