upload file for predetermined alarms, closes #4

This commit is contained in:
Anika 2024-03-08 12:41:45 +01:00
parent 887c9f6635
commit 58f7ac960d
5 changed files with 100 additions and 4 deletions

29
app.py
View File

@ -1,6 +1,6 @@
import json
import subprocess
from flask import redirect, request, Flask, render_template, url_for
from flask import flash, redirect, request, Flask, render_template, url_for
from datetime import datetime, timedelta
@ -96,6 +96,33 @@ def alarm():
previousAlarms.append(data)
activeAlarms.remove(data)
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"]
activeAlarms.append({'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():

18
defaultAlarms.json Normal file
View File

@ -0,0 +1,18 @@
[
{
"time": "20:30",
"message": "Akkuwechsel"
},
{
"time": "21:00",
"message": "Feteneröffnung"
},
{
"time": "02:30",
"message": "Halber Preis"
},
{
"time": "03:00",
"message": "Fete vorbei"
}
]

View File

@ -18,10 +18,13 @@
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{{url_for('upload')}}">Upload</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('help')}}">Hilfe</a>
</li>
<li class="nav-item active">
<li class="nav-item">
<a class="nav-link" href="{{url_for('about')}}">About</a>
</li>
</ul>

View File

@ -6,18 +6,39 @@
<h2>Erste Schritte</h2>
<ul>
<li>Schreib was ins log</li>
<li>Lade deine vor-eingestellen Alarme hoch</li>
<li>Trag deinen ersten Alarm ein</li>
<ul>
<li>Reihenfolge ist relevant, sonst gibt's einen doppelten Alarm, sobald aus Gründen&trade; neu geladen wird</li>
<li>Schau, dass dein Endgerät nicht stumm geschaltet ist</li>
</ul>
<li>Das war's auch schon</li>
<li>In den Logs, siehst du die bereit geschriebenen Log-Einträge</li>
<li>Die anstehenden Alarme sind Alarme in der Zukunft, bei einem Neustart des Servers werden alle Alarme in der Zukunft <b>und</b> alle Alarme, die in den letzten 2 Minuten stattfinden sollten/stattgefunden haben.</li>
</ul>
<h2>How-To</h2>
<h5><u>Alarme hochladen</u></h5>
<p>
Die Datei zum hochladen, sollte folgenden Aufbau haben:
<pre>
[
{
"time": "HH:MM",
"message": "Alarm-Text"
},
{
"time": "HH:MM",
"message": "Alarm-Text"
}
]
</pre>
Es braucht eine Uhrzeit und eine Alarm Nachricht.
Als Datum wird heute genommen, außer der Zeitpunkt liegt in der Vergangenheit.
Dann wird der Alarm morgen zur angegeben Uhrzeit eingetragen.<br>
Falls ein separates Datumsfeld gewünscht ist, sagt Bescheid, ich sehe da ehrlich gesagt noch keine Notwendikeit.
</p>
<h5><u>Alarm eintragen</u></h5>
<p>
Es braucht eine Uhrzeit und eine alarm Nachricht. Wenn kein Datum eingetragen ist, wird heute genommen,
Es braucht eine Uhrzeit und eine Alarm Nachricht. Wenn kein Datum eingetragen ist, wird heute genommen,
außer der Zeitpunkt liegt in der Vergangenheit. Dann wird der Alarm morgen zur angegeben Uhrzeit eingetragen.
</p>
<h5><u>Log eintragen</u></h5>

27
templates/upload.html Normal file
View File

@ -0,0 +1,27 @@
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %} Upload {% endblock %}</h1>
<div>
Akzeptiert .json Dateien. Für den Aufbau der Datei, schau in der Hilfe.
</pre>
</div>
<form method="post" action="/upload" enctype="multipart/form-data">
<div class="form-group">
<div class="upload" >
<input type="file" name="alarmFile"
class="form-control"
value="{{ request.form['alarmFile'] }}"style="padding: 2mm; height: 1.2cm;"
accept=".json"></input>
<input type="submit" id="uploadAlarm" value="Hochladen" style="margin: 2mm;"/>
</div>
</div>
<script>
</script>
</form>
{% endblock %}