103 lines
2.6 KiB
Python
103 lines
2.6 KiB
Python
'''
|
|
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)
|