119 lines
3.2 KiB
Python
119 lines
3.2 KiB
Python
'''
|
||
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.1 2025-08-04 rxf
|
||
- kleine Textverbesserunegen
|
||
- keine Archivierung
|
||
|
||
V 1.0.0 2025-08-03 rxf
|
||
- erste laufende Version
|
||
|
||
'''
|
||
VERSION = "1.0.1"
|
||
VDATE = "2025-08-04"
|
||
|
||
|
||
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
|
||
|
||
|
||
# -----------------------
|
||
# 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")
|
||
|
||
print(f"Wetterserver-Check\r\nVersion {VERSION} vom {VDATE}")
|
||
|
||
# -----------------------
|
||
# 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 hängt!"
|
||
sendit = True
|
||
|
||
else:
|
||
sendit = True
|
||
print("✅ Neue Grafik erkannt.")
|
||
body = f"Die Wettergrafik auf {url} ist aktuell: {heutiges_datum}"
|
||
subject = "✅ Wetterserver OK!"
|
||
with open("last_date.txt", "w") as f:
|
||
f.write(heutiges_datum)
|
||
|
||
# -----------------------
|
||
# 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}")
|
||
|