import os import requests from datetime import datetime from flask import Flask, request, Response import telegram from telegrambot.credentials import bot_token, bot_user_name,URL from telegrambot.bot import get_response global bot global sven_chat_id global TOKEN global use_telegram global use_ntfy global ntfy_server global ntfy_topic ### TELEGRAM SETTINGS use_telegram = False TOKEN = bot_token sven_chat_id = 72665258 bot = telegram.Bot(token=TOKEN) ### NTFY SETTINGS use_ntfy = True ntfy_server = "https://ntfy.hinz.casa" ntfy_topic = "haeusle" ntfy_auth = "aGFldXNsZTpzdm9saGkwNQ==" UPLOAD_FOLDER = '/home/sven/haeusle-uploads' app = Flask(__name__) @app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() print("got text message :", text) response = get_response(text) if use_telegram: bot.sendMessage(chat_id=chat_id, text=chat_id, reply_to_message_id=msg_id) return 'ok' @app.route('/setwebhook', methods=['GET', 'POST']) def set_webhook(): s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) if s: return "webhook setup ok" else: return "webhook setup failed" # https://haeusle.server.name/event?event=eventname @app.route('/event') def receive_event(): event = request.args.get('event') if event == "motion_detection": msg = sendEventNotification(event="motion_detection") elif event == "doorbell_button": msg = sendEventNotification(event="doorbell_button") elif event == "face_recognition": msg = sendEventNotification(event="face_recognition") return "

Event


" + msg app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER @app.route('/upload', methods=['GET', 'POST']) def upload_file(): # Upload process if request.method == 'POST': # Processing the image file if 'image_file' in request.files or "doorbell_button" in request.files or "motion_detection" in request.files: if 'motion_detection' in request.files: upload_type = 'motion_detection' elif "doorbell_button" in request.files: upload_type = 'doorbell_button' elif "face_recognition" in request.files: upload_type = 'face_recognition' else: upload_type = 'image_file' imageFile = request.files[upload_type] ext = imageFile.filename.split(".")[-1] now = datetime.now() new_filename = now.strftime("%Y-%m-%d_%H:%M:%S") path = os.path.join(app.config['UPLOAD_FOLDER'], upload_type, new_filename) # add original file extension if len(ext) > 1: path = path + "." + ext # Create Upload directory if not exists try: os.stat(os.path.dirname(path)) except: os.mkdir(os.path.dirname(path)) imageFile.save(path) sendImageNotification(image_path=path, upload_type=upload_type) return path else: return 'Unexpected POST command' return 'ok' # Url response if nothing is posted return '''

Upload new File

''' def sendImageNotification(image_path="", upload_type=""): file_ok = False file_types = [".jpg", ".gif", ".jpeg", ".png"] if os.path.isfile(image_path): for file_type in file_types: if file_type == "." + image_path.split(".")[-1].lower(): file_ok = True break if file_ok: if upload_type == "doorbell_button": if use_telegram: bot.sendPhoto(chat_id=sven_chat_id, photo=open(image_path,'rb'), disable_notification=False) if use_ntfy: ntfyAttachmentMessage(msg="Jemand hat geklingelt!", file_path=image_path) elif upload_type == "motion_detection": if use_telegram: bot.sendPhoto(chat_id=sven_chat_id, photo=open(image_path,'rb'), disable_notification=True) if use_ntfy: ntfyAttachmentMessage(msg="Bewegung erkannt.", file_path=image_path) elif upload_type == "face_recognition": if use_ntfy: ntfyAttachmentMessage(msg="Person erkannt.", file_path=image_path) else: if use_telegram: bot.sendPhoto(chat_id=sven_chat_id, photo=open(image_path,'rb'), disable_notification=True) if use_ntfy: ntfyAttachmentMessage(msg="Neues Foto.", file_path=image_path) return True return False def sendEventNotification(event="", location="door"): no_notification = False if event == "doorbell_button": event_msg = "Türklingel: Jemand wartet" elif event == "motion_detection": event_msg = "Bewegungsmelder: Jemand ist am Hauseingang" no_notification = True if len(event_msg) > 1: if use_telegram: bot.sendMessage(chat_id=sven_chat_id, text=event_msg, disable_notification=no_notification) if use_ntfy: ntfyTextMessage(msg=event_msg) return event_msg return False def ntfyAttachmentMessage(msg="", file_path=False, url=False): requests.put(ntfy_server + "/" + ntfy_topic, data=open(file_path, 'rb'), headers={ "Filename": file_path.split("/")[-1], "Authorization": "Basic " + ntfy_auth }) def ntfyTextMessage(msg="", url=False): requests.post(ntfy_server + "/" + ntfy_topic, data=msg.encode('utf-8'), headers={ "Authorization": "Basic " + ntfy_auth }) @app.route('/') def index(): return("Hello, World") if __name__ == "__main__": app.run(debug=True, host='0.0.0.0', threaded=True)