5 changed files with 88 additions and 0 deletions
@ -0,0 +1,9 @@ |
|||
# příprava projektu |
|||
|
|||
Příkazy pro přípravu a instalaci základní knihovny pro API server |
|||
|
|||
`python -m venv .venv` |
|||
|
|||
`.venv\Scripts\activate` |
|||
|
|||
`pip install flask` |
@ -0,0 +1,60 @@ |
|||
from flask import Flask, render_template, request, abort |
|||
import os |
|||
from datetime import datetime |
|||
|
|||
app = Flask(__name__) |
|||
|
|||
TEPLOTA_FILE = "teplota.txt" |
|||
VLHKOST_FILE = "vlhkost.txt" |
|||
|
|||
def appendToFile(file,value): |
|||
try: |
|||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
|||
with open(file,"a") as f: |
|||
f.write(f"{timestamp},{value}") |
|||
return True |
|||
except Exception as e: |
|||
print(f"Chyba při zápisu do souboru {file}:{e}") |
|||
return False |
|||
|
|||
def readLastLine(filename): |
|||
try: |
|||
with open(filename,"r") as f: |
|||
lines = f.readlines() |
|||
for line in reversed(lines): |
|||
stripped_line = line.strip() |
|||
if stripped_line: |
|||
parts = stripped_line.split(",") |
|||
if len(parts) == 2: |
|||
return parts[1] |
|||
else: |
|||
return stripped_line |
|||
return "žádná data" |
|||
except FileNotFoundError: |
|||
return "Soubor nenalezen" |
|||
except Exception as e: |
|||
print(f"Chyba při čtení souboru {filename}:{e}") |
|||
return "Chyba čtení" |
|||
|
|||
@app.route("/") |
|||
def index(): |
|||
last_temp = readLastLine(TEPLOTA_FILE) |
|||
last_hum = readLastLine(VLHKOST_FILE) |
|||
return render_template("index.html",last_t = last_temp,last_h=last_hum) |
|||
|
|||
@app.route("/api/teplota/<int:value>", methods=["GET","POST"]) |
|||
def record_t(value): |
|||
if appendToFile(TEPLOTA_FILE,value): |
|||
return f"Teplota {value}°C uložena",200 |
|||
else: |
|||
return "Chyba při ukládání teploty", 500 |
|||
|
|||
@app.route("/api/vlhkost/<int:value>", methods=["GET","POST"]) |
|||
def record_h(value): |
|||
if appendToFile(VLHKOST_FILE,value): |
|||
return f"vlhkost {value}°C uložena",200 |
|||
else: |
|||
return "Chyba při ukládání teploty", 500 |
|||
|
|||
if __name__ == "__main__": |
|||
app.run(debug=True, host="0.0.0.0", port=5000) |
@ -0,0 +1,17 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<title>Document</title> |
|||
</head> |
|||
<body> |
|||
<h1>Test API zapisovače</h1> |
|||
|
|||
<div class="current-data"> |
|||
<h2>poslední naměřený data</h2> |
|||
<p>Teplota: {{last_t}}°C</p> |
|||
<p>Vhkost: {{last_h}}%</p> |
|||
</div> |
|||
</body> |
|||
</html> |
@ -0,0 +1 @@ |
|||
2025-04-10 11:38:17,23 |
@ -0,0 +1 @@ |
|||
2025-04-10 11:38:30,80 |
Loading…
Reference in new issue