init py server

This commit is contained in:
derlole
2025-04-14 08:29:20 +00:00
parent fb5df93da5
commit 7e8b74ffd4
5 changed files with 94 additions and 1 deletions

View File

@@ -1,3 +1,20 @@
# gimmiCoffee # gimmiCoffee
## Das ist ein tolles Prog Proj. ## 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.

29
server.py Normal file
View File

@@ -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)

14
static/script.js Normal file
View File

@@ -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.';
});
});

12
static/style.css Normal file
View File

@@ -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);
}

21
templates/index.html Normal file
View File

@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>ESP Steuerung</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>ESP8266 Fernsteuerung</h1>
<form id="befehlForm">
<label for="befehl">Befehl:</label>
<input type="text" id="befehl" name="befehl" required>
<button type="submit">Senden</button>
</form>
<p id="status"></p>
<script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>