diff --git a/README.md b/README.md index 3b38b41..a2597b1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,20 @@ # gimmiCoffee -## Das ist ein tolles Prog Proj. \ No newline at end of file +## Flash server für einfache kommunikation mit dem ESP. +### server.py definiert das routing und die rückgaben u.a. auch die befehle die gespeichert werden die von der webseite kommenspäter erfolgt hier auch die auswertung ob die kaffeemaschiene bereit ist usw. + +### templates sind die webseiten, welche wir zurückgeben hier nur index.js später werden das vielleicht mehrere. + +### static sind die subfiles für die html seiten z.B. ist hier js und css also die funtkionen der webseite und das styling so muss man nicht alles ins html knüppeln ist so n bissi cooler. + +# Funktioniert an ende wie? +## ein static server mit offener ip und offenem Port 80 hostet auf localhost:3060 den server per nginx und proxy_pass wird der localhost an die öffentlichkeit übermittelt (eine doman kann man wenn man will dazwischenschalkten um nicht die ip eingeben zu müssen.) + +## zuletzt fragt der esp regelmäßig den nun öffentlichen zugänglichen Server nach Befehlen an und wenn der server welche hat wird er sie dem esp zurückgeben, wenn er keine hat gibt er ihm 'null'. + +## klingt kompliziert ist aber die einfachste möglichkeit. + +### die Zeilen code halten sich auch in grenzen. + +### von hier aus ist nun auch eine möglichkeit mit echtem SQL server sqlite oder mongoDB möglich, da dieser server sowohl selbst als sql server fungieren kann sqlite dateien sind hier sowieso kein problem und https:// verbindungen sind für echtes python auch kein problem mehr. + diff --git a/server.py b/server.py new file mode 100644 index 0000000..e5f7fbc --- /dev/null +++ b/server.py @@ -0,0 +1,29 @@ +from flask import Flask, request, jsonify, render_template + +app = Flask(__name__) +pending_command = None + +@app.route('/') +def index(): + return render_template('index.html') # Lädt templates/index.html + +@app.route('/send') +def send_command(): + global pending_command + befehl = request.args.get('befehl') + if befehl: + pending_command = befehl + return f"Befehl '{befehl}' gespeichert." + return "Kein Befehl angegeben.", 400 + +@app.route('/fetch') +def fetch_command(): + global pending_command + if pending_command: + cmd = pending_command + pending_command = None + return jsonify({'befehl': cmd}) + return jsonify({'befehl': None}) + +if __name__ == '__main__': + app.run(host='127.0.0.1', port=3060) diff --git a/static/script.js b/static/script.js new file mode 100644 index 0000000..05df481 --- /dev/null +++ b/static/script.js @@ -0,0 +1,14 @@ +document.getElementById('befehlForm').addEventListener('submit', function(event) { + event.preventDefault(); // Seite nicht neu laden! + + const befehl = document.getElementById('befehl').value; + + fetch(`/send?befehl=${encodeURIComponent(befehl)}`) + .then(response => response.text()) + .then(text => { + document.getElementById('status').textContent = text; + }) + .catch(err => { + document.getElementById('status').textContent = 'Fehler beim Senden.'; + }); +}); diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..5b8b303 --- /dev/null +++ b/static/style.css @@ -0,0 +1,12 @@ +body { + font-family: sans-serif; + padding: 2rem; + background-color: #f4f4f4; +} + +form { + background: #fff; + padding: 1rem; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0,0,0,0.1); +} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..f9ec985 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,21 @@ + + + + + ESP Steuerung + + + +

ESP8266 Fernsteuerung

+ +
+ + + +
+ +

+ + + +