first commit - V 1.0.0
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.venv
|
||||||
|
.env
|
||||||
|
archive
|
||||||
|
wetter_heute.png
|
||||||
1
last_date.txt
Normal file
1
last_date.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
2025-08-03
|
||||||
116
main.py
Normal file
116
main.py
Normal 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}")
|
||||||
|
|
||||||
Reference in New Issue
Block a user