V 1.1.0 Aufruf via System-Cron

This commit is contained in:
rxf
2025-08-05 15:38:12 +00:00
parent 015495e374
commit 33b731c59f
7 changed files with 44 additions and 50 deletions

123
app/main.py Normal file
View File

@@ -0,0 +1,123 @@
'''
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.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.0"
VDATE = "2025-08-05"
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}")

10
app/requirements.txt Normal file
View File

@@ -0,0 +1,10 @@
certifi==2025.8.3
charset-normalizer==3.4.2
dotenv==0.9.9
idna==3.10
packaging==25.0
pillow==11.3.0
pytesseract==0.3.13
python-dotenv==1.1.1
requests==2.32.4
urllib3==2.5.0