157 lines
5.6 KiB
Python
157 lines
5.6 KiB
Python
import json
|
|
import subprocess
|
|
from flask import flash, redirect, request, Flask, render_template, url_for
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
activeAlarms = dict()
|
|
previousAlarms = dict()
|
|
logs = list()
|
|
preprocessed = False
|
|
alarmIndex = 0
|
|
|
|
def preprocess():
|
|
|
|
print('start init alarms and logs')
|
|
#versuch beide files zu laden, wenn das fehlschlägt, initiiere beide files als json
|
|
try:
|
|
alarmsFile = json.load(open('alarms.json'))
|
|
logsFile = json.load(open('logs.json'))
|
|
except:
|
|
alarmsFile = list()
|
|
logsFile = list()
|
|
json.dump(alarmsFile, open('alarms.json','w'), indent=2)
|
|
json.dump(logsFile, open('logs.json','w'), indent=2)
|
|
# schreib alle alarme im File in previousAlarms, wenn sie älter als 2 mins sind
|
|
# alle anderen in active alarms
|
|
for (alarm) in alarmsFile:
|
|
if datetime.strptime(alarmsFile[alarm]['datetime'],"%d.%m.%Y %H:%M") <= datetime.now()-timedelta(minutes=2):
|
|
previousAlarms[alarm] = alarmsFile[alarm]
|
|
else:
|
|
activeAlarms[alarm] = alarmsFile[alarm]
|
|
global alarmIndex
|
|
if(int(alarm)>alarmIndex):
|
|
alarmIndex = int(alarm)
|
|
# lies alle log aus dem file ein
|
|
for log in logsFile:
|
|
logs.append(log)
|
|
global preprocessed
|
|
preprocessed = True
|
|
print("init of alarms and logs done")
|
|
|
|
@app.route("/", methods=('GET', 'POST'))
|
|
def index():
|
|
# wenn die logs leer sind, gehen wir davon aus, dass noch nicht initialisiert wurde
|
|
# alarme werden gedoppelt, sollten schon welche da sein
|
|
if not preprocessed:
|
|
preprocess()
|
|
|
|
return render_template('index.html', logs = logs, alarms = activeAlarms, previousAlarms=previousAlarms)
|
|
|
|
@app.route('/setAlarm', methods=('GET', 'POST'))
|
|
def setAlarm():
|
|
if request.method == 'POST':
|
|
# wenn Datum leer:
|
|
# default Datum ist heute
|
|
# wenn heute + angegebene Uhrzeit vor jetzt ist -> Alarm für morgen zu der Uhrzeit gesetzt
|
|
if request.form['date'] !="" and request.form['time']!="":
|
|
time = datetime.strptime(request.form['date']+' '+request.form['time'], "%Y-%m-%d %H:%M")
|
|
elif request.form['date'] == "":
|
|
time = datetime.combine(datetime.today(),datetime.strptime(request.form['time'], "%H:%M").time())
|
|
if time<datetime.now():
|
|
time = time + timedelta(days=1)
|
|
content = request.form['alarmMessage']
|
|
global alarmIndex
|
|
alarmIndex += 1
|
|
activeAlarms[alarmIndex]({'datetime':datetime.strftime(time,"%d.%m.%Y %H:%M"),'message':content})
|
|
|
|
# ja, wir schreiben einfach das ganze File neu, ist aber einfacher
|
|
allAlarms = activeAlarms+previousAlarms
|
|
with open('alarms.json', 'w') as f:
|
|
json.dump(allAlarms, f, indent=2)
|
|
|
|
# Closing file
|
|
f.close()
|
|
return redirect(url_for('index'))
|
|
|
|
@app.route('/sendLog', methods=('GET', 'POST'))
|
|
def sendLog():
|
|
if request.method == 'POST':
|
|
content = request.form['logMessage']
|
|
log = {'datetime':datetime.now().strftime("%d.%m.%Y %H:%M"),'message':content}
|
|
logs.append(log)
|
|
with open('logs.json', 'w') as f:
|
|
json.dump(logs, f, indent=2)
|
|
|
|
# Closing file
|
|
f.close()
|
|
|
|
return redirect(url_for('index'))
|
|
|
|
@app.route('/alarms', methods=('GET','POST'))
|
|
def alarm():
|
|
# needs update to dict
|
|
if request.method == 'GET':
|
|
return json.dumps(activeAlarms)
|
|
|
|
if request.method == 'POST':
|
|
print('ALARM')
|
|
subprocess.call(['mpv','./alarm.mp3'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
data = json.loads(request.data.decode('UTF-8'))
|
|
previousAlarms.append(data)
|
|
activeAlarms.remove(data)
|
|
return redirect(url_for('index'))
|
|
|
|
@app.route('/deletealarm', methods=('GET','POST'))
|
|
def deleteAlarm():
|
|
if request.method == 'POST':
|
|
id = request.data.decode('UTF-8')
|
|
alarm = activeAlarms[id]
|
|
previousAlarms[id] = alarm
|
|
activeAlarms.pop(id)
|
|
return redirect(url_for('index'))
|
|
|
|
@app.route('/upload', methods=('GET','POST'))
|
|
def upload():
|
|
# if upload successful back to index
|
|
# else show error und bleib auf der Seite
|
|
if request.method == 'POST':
|
|
# try:
|
|
data = json.load(request.files['alarmFile'].stream)
|
|
for alarm in data:
|
|
print(alarm)
|
|
time = datetime.combine(datetime.today(),datetime.strptime(alarm["time"], "%H:%M").time())
|
|
if time<datetime.now():
|
|
time = time + timedelta(days=1)
|
|
content = alarm["message"]
|
|
global alarmIndex
|
|
alarmIndex += 1
|
|
activeAlarms[str(alarmIndex)] = {'datetime':datetime.strftime(time,"%d.%m.%Y %H:%M"),'message':content}
|
|
# ja, wir schreiben einfach das ganze File neu, ist aber einfacher
|
|
with open('alarms.json', 'w') as f:
|
|
json.dump(activeAlarms, f, indent=2)
|
|
|
|
# Closing file
|
|
f.close()
|
|
return redirect(url_for('index'))
|
|
# except:
|
|
# print("error :(")
|
|
# return render_template('upload.html', uploadFailed=True)
|
|
return render_template('upload.html', uploadFailed=True)
|
|
|
|
@app.route('/processAlarm')
|
|
def processAlarm():
|
|
return render_template('alarms.html', alarms=activeAlarms)
|
|
|
|
@app.route('/processpAlarm')
|
|
def processpAlarm():
|
|
return render_template('palarms.html', previousAlarms=previousAlarms)
|
|
|
|
@app.route("/help")
|
|
def help():
|
|
return render_template('help.html')
|
|
@app.route("/about")
|
|
def about():
|
|
return render_template('about.html') |