Files
wetterserver/app/main.py

127 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'''
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.1.1 2025-09-13 rxf
- In der Email auch noch den esprimo erwähnen
V 1.1.0 2025-08-05 rxf
- wird nun nicht mehr im Portainer verwaltet sondern
mit den script run_wetterserver.sh direct vom System-Cron
aufgerufen
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.1.1"
VDATE = "2025-09-13"
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} (Check läuft auf esprimo)"
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}")