V 1.1.0 Aufruf via System-Cron
This commit is contained in:
123
app/main.py
Normal file
123
app/main.py
Normal 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
10
app/requirements.txt
Normal 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
|
||||
Reference in New Issue
Block a user