from flask import Flask, jsonify, request from datetime import datetime, timedelta import random app = Flask(__name__) # "Databáze" v paměti mereni_db = [] next_id = 1 def generuj_mereni(cas=None): global next_id mereni = { "id": next_id, "cas": cas or datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "teplota": round(random.uniform(19.0,30.0),1), "vlhkost": round(random.uniform(35.0,75.0),1) } next_id += 1 mereni_db.append(mereni) return mereni def naplnit_historii(pocet=50): ted = datetime.now() for i in range(pocet, 0, -1): cas = (ted - timedelta(seconds=i*5)).strftime("%Y-%m-%d %H:%M:%S") generuj_mereni(cas) naplnit_historii(50) # API Endpointy @app.route("/") def index(): """Hlavní stránka - info o API""" return jsonify({ "nazev":"Fake IoT API Server", "popis": "Simulace IoT zařízení", "endpointy":{ "GET /api/mereni": "Poslední měření (+ ?novy=true pro generovani noveho)", "GET /api/mereni/historie": "Historie meření (?pocet=50)", "GET /api/stats": "Statistiky", "POST /api/mereni": "Příjem nového měření (JSON: teplota, vlhkost)" } }) @app.route("/api/mereni", methods=["GET"]) def get_mereni(): """ Vrátí poslední měření ?novy=true -> vygeneruje nové nahodné měření """ if request.args.get("novy") == "true": nove = generuj_mereni() return jsonify(nove),201 if mereni_db: return jsonify(mereni_db[-1]) return jsonify({"chyba":"Zadna data"}),404 @app.route("/api/mereni/historie",methods=["GET"]) def get_historie(): """Vrátí posledních N měření. Default = 50""" pocet = request.args.get("pocet",50,type=int) data = mereni_db[-pocet:] return jsonify({ "pocet":len(data), "mereni":data }) @app.route("/api/stats",methods=["GET"]) def get_stats(): """Vrátí statistiky - prumer, min, max""" if not mereni_db: return jsonify({"chyba":"Zadne data"}), 404 teploty = [m["teplota"] for m in mereni_db] vlhkosti = [m["vlhkost"] for m in mereni_db] return jsonify({ "pocet_mereni": len(mereni_db), "teplota": { "prumer": round(sum(teploty)/len(teploty),1), "min": min(teploty), "max": max(teploty), }, "vlhost": { "prumer": round(sum(vlhkosti)/len(vlhkosti),1), "min": min(vlhkosti), "max": max(vlhkosti), } }) @app.route("/api/mereni",methods=["POST"]) def post_mereni(): data = request.get_json() return jsonify({"status":"ok","mereni":"(data)"}) # SPUŠTĚTNÍ if __name__ == "__main__": print("-"*50) print("Fake API Server") print("http://localhost:5001") print(" Data v paměti, po vypnutí data zmizí") print("-"*50) print("Endpointy:") print("GET /api/mereni - posledni mereni") print("GET /api/mereni?novy=true - nove mereni") print("GET /api/mereni/historie - historie(?pocet=50)") print("GET /api/stats - Statistiky") print("POST /api/mereni - příjem dat (JSON)") app.run(host="0.0.0.0",port=5001,debug=True)