From 399d8e498d5785311e9be2b58caedb4584c872f4 Mon Sep 17 00:00:00 2001 From: Simon Zeyer Date: Sun, 9 Aug 2026 11:09:51 +0000 Subject: [PATCH] Add Divera messaging functionality and API keys to environment configuration --- .env.dev | 4 ++- Dockerfile | 3 ++ app/exchange_connect.py | 1 + app/hooks.py | 70 ++++++++++++++++++++++++++++++++++++++++- docker-compose.yaml | 2 ++ 5 files changed, 78 insertions(+), 2 deletions(-) diff --git a/.env.dev b/.env.dev index 4c846c8..8aa5343 100644 --- a/.env.dev +++ b/.env.dev @@ -12,4 +12,6 @@ alarminator_api="" alarminator_token="" alarminator_zvies_use_PEALGRP="False" printer=DEFAULT -print_num=0 \ No newline at end of file +print_num=0 +DIVERA_MESSANGER_API_KEY="" +DIVERA_ALARMER_API_KEY="" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index bbd0798..c018731 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,9 @@ ENV alarminator_zvies_use_PEALGRP="False" ENV print_num=0 ENV printer="DEFAULT" ENV REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt +ENV DIVERA_MESSANGER_API_KEY="" +ENV DIVERA_ALARMER_API_KEY="" +ENV MAPS_API_KEY="" COPY *.deb / diff --git a/app/exchange_connect.py b/app/exchange_connect.py index 5d4a394..e961eb8 100644 --- a/app/exchange_connect.py +++ b/app/exchange_connect.py @@ -50,6 +50,7 @@ def run(): webhook(parsed_body) alarminator_api(parsed_body) cups_print(parsed_body,m.body) + divera_messenger(parsed_body) pass def folder_event_subscriber(folder: Folder): diff --git a/app/hooks.py b/app/hooks.py index 1f1f877..bade85e 100644 --- a/app/hooks.py +++ b/app/hooks.py @@ -6,6 +6,8 @@ from weasyprint import HTML from requests.adapters import Retry import uuid import subprocess +import datetime +import time retries = Retry(total=5, backoff_factor=0.1, @@ -151,4 +153,70 @@ def cups_print(parsed_body: dict, body: str): logging.error("cups_print", e) finally: if os.path.exists(fname): - os.remove(fname) \ No newline at end of file + os.remove(fname) + + +def divera_messenger(parsed_body: dict): + # /api/v2/alarms + # message-channels?accesskey=XXX + + try: + api = "https://app.divera247.com/api/v2/" + messenger_api_token = os.environ.get('DIVERA_MESSANGER_API_KEY') if os.environ.get('DIVERA_MESSANGER_API_KEY') else "" + alarmer_api_token = os.environ.get('DIVERA_ALARMER_API_KEY') if os.environ.get('DIVERA_ALARMER_API_KEY') else "" + if messenger_api_token != "": + if 'ALARMDEPESCHE' in parsed_body: # sendAlarm triggern + if 'Einsatzmittelliste' in parsed_body: + + zveis = [] + message = "Alarmierte Einsatzmittel:\n" + for r in parsed_body['Einsatzmittelliste']: + if r['Typ'] == 'PEALGRP': + zveis.append(r['Ressourcen']) + message +='\n'.join(zveis) + if 'Zusatztext zum Ort' in parsed_body: + message += "\n\nZusatztext zum Ort:\n"+parsed_body['Zusatztext zum Ort'] + if 'Zusatztext zum Objekt' in parsed_body: + message += "\n\nZusatztext zum Objekt:\n"+parsed_body['Zusatztext zum Objekt'] + + logging.info("GET zu {}alarms?accesskey=XXX".format(api)) + s = requests.Session() + s.mount('https://', requests.adapters.HTTPAdapter(max_retries=retries)) + start = datetime.datetime.now() + message_channel_id = None + alarm_id = None + alarm_text = None + while message_channel_id is None and datetime.datetime.now() < start + datetime.timedelta(minutes=1): + r = s.get("{}alarms?accesskey={}".format(api, messenger_api_token)) + r_json = r.json() + if 'items' in r_json.get('data',{}): + for item in r_json.get('data',{})['items']: + if str(r_json['data']['items'][item]['foreign_id']) == str(parsed_body['Auftragsnummer']): + logging.info("EinsatzNr {} in Divera gefunden, sende Nachricht...".format(r_json['data']['items'][item]['foreign_id'])) + message_channel_id = r_json['data']['items'][item]['message_channel_id'] + alarm_id = r_json['data']['items'][item]['id'] + alarm_text = r_json['data']['items'][item]['text'] + if message_channel_id is None or alarm_id is None: + time.sleep(20) + + if alarmer_api_token != "": + if alarm_text is None: + alarm_text = "" + r = s.put("{}alarms/{}?accesskey={}".format(api, alarm_id, alarmer_api_token),json={ + "Alarm": { + "text": alarm_text+"\n\n"+message, + } + }) + + + if message_channel_id: + r = s.post("{}messages?accesskey={}".format(api, messenger_api_token),json={ + "Message": { + "message_channel_id": str(message_channel_id), + # "parent_id": 0, + "text": message, + } + }) + pass + except Exception as e: + logging.error("divera_messenger", e) diff --git a/docker-compose.yaml b/docker-compose.yaml index a32dee9..195d776 100755 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -21,6 +21,8 @@ services: - alarminator_zvies_use_PEALGRP=${alarminator_zvies_use_PEALGRP} - printer=${printer} - print_num=${print_num} + - DIVERA_MESSANGER_API_KEY=${DIVERA_MESSANGER_API_KEY} + - DIVERA_ALARMER_API_KEY=${DIVERA_ALARMER_API_KEY} volumes: - ./cups:/etc/cups - ./cupsd.conf.txt:/etc/cups/cupsd.conf