From be4eb50796cd1fb20f42312fb39f29088aa598c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reinhard=20X=2E=20F=C3=BCrst?= Date: Sun, 3 Aug 2025 14:38:21 +0000 Subject: [PATCH] first commit - V 1.0.0 --- .gitignore | 4 ++ last_date.txt | 1 + main.py | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 .gitignore create mode 100644 last_date.txt create mode 100644 main.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3ee32 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.venv +.env +archive +wetter_heute.png diff --git a/last_date.txt b/last_date.txt new file mode 100644 index 0000000..b3a9045 --- /dev/null +++ b/last_date.txt @@ -0,0 +1 @@ +2025-08-03 \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..813c5b1 --- /dev/null +++ b/main.py @@ -0,0 +1,116 @@ +''' +Wetterserver auf der Sternwarte überprüfen + +Täglich morgens um 07:10 (mit Hilfe des cron) wird die Datei 'tempday.png' von sternwarte-welzheim.de geholt und gechecked, +ob sie neuer ist als die von gestern. Dazu wird das Datum in der PNG-Datei verglichen. +Falls es das gleiche Datum ist, wird eine E-Mail an rexfue@gmail.com gesendet. + +*** Versiongeschichte + +V 1.0.0 2025-08-03 rxf + - erste laufende Version + +''' + +import requests +from PIL import Image +import pytesseract +from datetime import datetime +import re, os, smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from dotenv import load_dotenv + + +# ----------------------- +# Einstellungen +# ----------------------- + +# Tesseract Pfad (nur für Windows nötig) +# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # <– Passe an, falls nötig + +# 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") + +load_dotenv() + +# ----------------------- +# Grafik herunterladen +# ----------------------- + +url = "https://sternwarte-welzheim.de/wetter/tempday.png" +res = requests.get(url) +if res.status_code != 200: + print("❌ Fehler beim Abrufen des Bildes") + exit(1) + +with open("wetter_heute.png", "wb") as f: + f.write(res.content) + +# ----------------------- +# OCR und Datumserkennung +# ----------------------- + +img = Image.open("wetter_heute.png") +text = pytesseract.image_to_string(img, lang='deu') + +match = re.search(r'\d{4}\-\d{2}\-\d{2}', text) +if not match: + print("⚠️ Kein Datum im Bild gefunden!") + exit(1) + +heutiges_datum = match.group(0) +print(f"🕵️ Erkanntes Datum: {heutiges_datum}") + +# ----------------------- +# Vergleich mit vorherigem +# ----------------------- + +letztes_datum = None +if os.path.exists("last_date.txt"): + with open("last_date.txt", "r") as f: + letztes_datum = f.read().strip() + +sendit = False + +if heutiges_datum == letztes_datum: + print("⚠️ Keine neue Grafik – Datum gleich wie gestern.") + body = f"Die Wettergrafik auf {url} wurde anscheinend nicht aktualisiert.\nErkanntes Datum: {heutiges_datum}" + subject = "⚠️ Wetterserver steht!" + sendit = True + +else: + sendit = True + print("✅ Neue Grafik erkannt.") + body = f"Die Wettergrafik auf {url} ist aktuell" + subject = "Wetterserver OK!" + with open("last_date.txt", "w") as f: + f.write(heutiges_datum) + + # Grafik archivieren + archivname = f"wetter_{datetime.today().strftime('%Y-%m-%d')}.png" + os.rename("wetter_heute.png", os.path.join("archive", archivname)) + +# ----------------------- +# E-Mail senden +# ----------------------- +if sendit: + msg = MIMEMultipart() + msg["From"] = EMAIL_ABSENDER + msg["To"] = EMAIL_EMPFÄNGER + msg["Subject"] = subject + msg.attach(MIMEText(body, "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}") +