first commit - V 1.0.0

This commit is contained in:
2025-08-03 14:38:21 +00:00
commit be4eb50796
3 changed files with 121 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
.venv
.env
archive
wetter_heute.png

1
last_date.txt Normal file
View File

@@ -0,0 +1 @@
2025-08-03

116
main.py Normal file
View File

@@ -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}")