ioc-invicta/web/mqttHandler.py

87 lines
2.5 KiB
Python

from flask_mqtt import Mqtt
from flask import Blueprint, request, render_template, flash
import json
mqtt = Mqtt()
bp = Blueprint("mqtt", __name__, url_prefix="/")
from .db import get_db
@bp.route("/song", methods=("GET", "POST"))
def song():
db = get_db()
ids = db.cursor().execute("SELECT DISTINCT device_id FROM data").fetchall()
if request.method == "POST":
device_id = request.form["device_id"]
data = request.form["song"]
error = ""
if not device_id:
error = "device_id required"
if error:
flash(error)
return render_template("data/song.html", data=enumerate(ids))
j = {"device_id": device_id, "song": data}
msg = json.dumps(j)
mqtt.publish("buzzer", str.encode(msg))
print(msg)
flash("Song is playing")
return render_template("data/song.html", data=enumerate(ids))
return render_template("data/song.html", data=enumerate(ids))
@bp.route("/oled", methods=("GET", "POST"))
def oled():
db = get_db()
ids = db.cursor().execute("SELECT DISTINCT device_id FROM data").fetchall()
if request.method == "POST":
device_id = request.form["device_id"]
data = request.form["text"]
error = ""
if not device_id:
error = "device_id required"
if error:
flash(error)
return render_template("data/oled.html", data=enumerate(ids)), 400
j = {"device_id": device_id, "text": data}
msg = json.dumps(j)
mqtt.publish("oled", str.encode(msg))
print(msg)
flash("OK")
return render_template("data/oled.html", data=enumerate(ids))
return render_template("data/oled.html", data=enumerate(ids))
@bp.route("/led", methods=("GET", "POST"))
def led():
db = get_db()
ids = db.cursor().execute("SELECT DISTINCT device_id FROM data").fetchall()
if request.method == "POST":
device_id = request.form["device_id"]
data = request.form["period"]
error = ""
if not device_id:
error = "device_id required"
if error:
flash(error)
return render_template("data/led.html", data=enumerate(ids)), 400
j = {"device_id": device_id, "period": data}
msg = json.dumps(j)
mqtt.publish("led", str.encode(msg))
print(msg)
flash("OK")
return render_template("data/led.html", data=enumerate(ids))
return render_template("data/led.html", data=enumerate(ids))