''' Webseiten auf citysensor prüfen Täglich morgens um 07:20 (mit Hilfe des cron) prüfen, ob die 3 citysensor-Seiten (Lärm, Multigeiger und Feinstaub) erreichbar sind. Wenn nicht, eine Meldung per E-Mail absetzen *** Versiongeschichte V 1.0.0 2025-08-03 rxf - erste laufende Version ''' VERSION = "1.0.0" VDATE = "2025-08-04" import requests import os, smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from dotenv import load_dotenv # ----------------------- # Einstellungen # ----------------------- # 1. Optional: Lade .env, falls vorhanden (nur wenn lokal vorhanden) env_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(env_path): load_dotenv(dotenv_path=env_path) print("⚙️ .env-Datei geladen") else: print("⚙️ Keine .env-Datei gefunden, verwende Docker-/Systemvariablen") # E-Mail-Konfiguration EMAIL_ABSENDER = os.getenv("GMX_EMAIL") EMAIL_EMPFÄNGER = "rexfue@gmail.com" SMTP_SERVER = "smtp.gmx.com" SMTP_PORT = 465 SMTP_USER = os.getenv("GMX_EMAIL") SMTP_PASS = os.getenv("GMX_PASSWORD") print(f"Citysensor-Check\r\nVersion {VERSION} vom {VDATE}") alleOK = True load_dotenv() # ----------------------- # E-Mail senden # ----------------------- def sendmail(s,b): msg = MIMEMultipart() msg["From"] = EMAIL_ABSENDER msg["To"] = EMAIL_EMPFÄNGER msg["Subject"] = s msg.attach(MIMEText(b, "plain")) try: with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server: server.login(SMTP_USER, SMTP_PASS) server.send_message(msg) print("📧 Benachrichtigungs-Mail gesendet.") except Exception as e: print(f"❌ Fehler beim Senden der Mail: {e}") # ----------------------- # Fehler melden # ----------------------- def meldError(u, e): global alleOK print(f"❌ Fehler beim Abrufen von {urls[i]} ({e})") body = f"{u} ist nicht erreichbar" subject = f"⚠️ {u} antwortet nicht! {e}" sendmail(subject, body) alleOK = False # ----------------------- # Webseiten checken # ----------------------- urls = [ "https://laerm.citysensor.de", "https://multigeiger.citysensor.de", "https://feinstaub.citysensor.de" ] for i in range(len(urls)): try: res = requests.get(urls[i]) if res.status_code != 200: meldError(urls[i],"") except: meldError(urls[i],"Exception") if alleOK: print("Alle 3 erreichbar") body = "Gut so" subject = "✅ citysensor.de ist OK" sendmail(subject, body)