Draeger-Handyalarm-Bridge/main.py

91 lines
3.8 KiB
Python
Raw Normal View History

2024-07-07 08:02:01 +00:00
REGEX = r'SDS_ILS_BEGINN(#D#Leitstelle:\s+)(.*)(m|o|i)(RTW|NAW|KTW) (.*) \$GPSN(.*)E(.*)SDS_ILS_ENDE'
from dotenv import load_dotenv
2024-07-07 08:22:18 +00:00
import requests
2024-07-07 08:02:01 +00:00
import imaplib
import email
from email.header import decode_header
import os
import time
from helpers import get_draeger_json, read_pdf
2024-07-07 08:02:01 +00:00
load_dotenv(override=True)
# Konfigurationsparameter
IMAP_SERVER = os.environ.get("IMAP_SERVER", default=None)
EMAIL_ACCOUNT = os.environ.get("EMAIL_ACCOUNT", default=None)
EMAIL_PASSWORD = os.environ.get("EMAIL_PASSWORD", default=None)
MAILBOX = os.environ.get("MAILBOX", default=None)
CHECK_INTERVAL = int(os.environ.get("CHECK_INTERVAL", default=None)) # in Sekunden
SAVE_FOLDER = os.environ.get("SAVE_FOLDER", default=None)
2024-07-07 08:22:18 +00:00
DRAEGER_API_KEY = os.environ.get("DRAEGER_API_KEY", default=None)
2024-07-10 08:08:13 +00:00
HEALTHCHECK_URL = os.environ.get("HEALTHCHECK_URL", default=None)
2024-07-07 08:02:01 +00:00
def check_email():
try:
mail = imaplib.IMAP4_SSL(IMAP_SERVER)
mail.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
mail.select(MAILBOX)
status, messages = mail.search(None, 'UNSEEN SUBJECT "Nachricht von DLRG Stuttgart"')
2024-07-07 08:02:01 +00:00
try:
mail_ids = messages[0].split()
2024-07-07 08:02:01 +00:00
for mail_id in mail_ids:
status, msg_data = mail.fetch(mail_id, '(RFC822)')
for response_part in msg_data:
if isinstance(response_part, tuple):
msg = email.message_from_bytes(response_part[1])
subject, encoding = decode_header(msg["Subject"])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding if encoding else 'utf-8')
2024-07-07 08:02:01 +00:00
from_ = msg.get("From")
print(f'Neue E-Mail von {from_} mit Betreff: {subject}')
for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename = part.get_filename()
if filename:
filepath = os.path.join(SAVE_FOLDER, filename)
with open(filepath, 'wb') as f:
f.write(part.get_payload(decode=True))
if filename.endswith('.pdf'):
pdf_text = read_pdf(filepath)
r = requests.post('https://einsatzmeldesystem.de/ems/inbound/deployment/universal/', json=get_draeger_json(pdf_text))
print(r.status_code)
print(r.json())
except Exception as e:
data = {}
data["apiKey"] = DRAEGER_API_KEY
r = requests.post('https://einsatzmeldesystem.de/ems/inbound/deployment/universal/', json=data)
r = requests.get(HEALTHCHECK_URL + "?status=down&msg=Can not parse data. Alarming with empty data&ping=")
print(r.status_code)
2024-07-07 08:02:01 +00:00
mail.logout()
except Exception as e:
print(f'Fehler: {e}')
r = requests.get(HEALTHCHECK_URL + "?status=down&msg=Can not connect to mail server&ping=")
print(r.status_code)
2024-07-07 08:02:01 +00:00
if __name__ == "__main__":
while True:
check_email()
2024-07-10 08:08:13 +00:00
r = requests.get(HEALTHCHECK_URL + "?status=up&msg=OK&ping=")
2024-07-10 08:08:13 +00:00
print(r.status_code)
2024-07-07 08:02:01 +00:00
time.sleep(CHECK_INTERVAL)