from flask import Flask, request, render_template, jsonify, g import paho.mqtt.client as mqtt import mysql.connector import json app = Flask(__name__) # Globale variabelen kobuki_message = "" latest_image = None # Globale MQTT setup def on_message(client,userdata, message): global kobuki_message, latest_image if message.topic == "kobuki/data": kobuki_message = str(message.payload.decode("utf-8")) # with app.app_context(): # sensor_data() # Sla de data op in de database elif message.topic == "kobuki/cam": latest_image = message.payload # Create an MQTT client instance mqtt_client = mqtt.Client() mqtt_client.username_pw_set("server", "serverwachtwoordofzo") mqtt_client.connect("localhost", 1884, 60) mqtt_client.loop_start() mqtt_client.subscribe("kobuki/data") mqtt_client.on_message = on_message # this line needs to be under the function definition otherwise it can't find which function it needs to use # Database connectie-functie def get_db(): if 'db' not in g: # 'g' is specifiek voor een request en leeft zolang een request duurt g.db = mysql.connector.connect( host="127.0.0.1", port=3306, user="admin", password="kobuki", database="kobuki" ) return g.db # Sluit de database na elke request @app.teardown_appcontext def close_db(error): db = g.pop('db', None) if db is not None: db.close() @app.route('/') def index(): return render_template('index.html') @app.route('/control', methods=["GET", "POST"]) def control(): if request.authorization and request.authorization.username == 'ishak' and request.authorization.password == 'kobuki': return render_template('control.html') else: return ('Unauthorized', 401, {'WWW-Authenticate': 'Basic realm="Login Required"'}) @app.route('/data', methods=['GET']) def data(): return kobuki_message @app.route('/move', methods=['POST']) def move(): data = request.get_json() direction = data.get("direction") # Verstuur de richting via MQTT if direction: mqtt_client.publish("home/commands", direction) db_connection = get_db() cursor = db_connection.cursor() sql_command = "INSERT INTO command (command) VALUES (%s)" cursor.execute(sql_command, (direction,)) db_connection.commit() cursor.close() db_connection.close() print(f"check: {data}") return jsonify({"status": "success", "direction": direction}) @app.route("/database") def database(): db = get_db() cursor = db.cursor() cursor.execute("SELECT * FROM kobuki_data") rows = cursor.fetchall() cursor.close() return str(rows) # def sensor_data(): # data = request.get_json() # db = get_db() # cursor = db.cursor() # sql_sensor = "INSERT INTO kobuki_data (name, value) VALUES (%s)" # sensor_data_tuples = [(name, float(value))for name, value in data.items()] # cursor.executemany(sql_sensor, sensor_data_tuples) # db.commit() # cursor.close() if __name__ == '__main__': app.run(debug=True, port=5000)