Ejemplo n.º 1
0
def device_add():
    res = {"status": None, "msg": None}
    mac = request.args["mac"] if "mac" in request.args else ""
    pin = request.args["pin"] if "pin" in request.args else "0000"

    if mac and BTCtl().macPattern.match(mac):
        dev = Hub().findDevice(mac)
        if dev is None:
            BTCtl().remove(mac)
            idx = Hub().addDevice(mac, pin)
            dev = Hub().findDevice(idx)
            if dev is not None:
                try:
                    Hub().addEvent("setup", dev, 0)
                    res["status"] = True
                    res["msg"] = idx
                except Exception as ex:
                    Logger().write(ex, tag="EXCEPT")
                    Hub().removeDevice(idx)
                    res["status"] = False
                    res["msg"] = "Failed to setup device"
            else:
                res["status"] = False
                res["msg"] = "Failed to add device"
        else:
            res["status"] = False
            res["msg"] = "Device is already paired"
    else:
        res["status"] = False
        res["msg"] = "Mac address is required"

    return jsonify(res)
Ejemplo n.º 2
0
def send_main():
    def getLast(obj, tag):
        return obj["history"][-1][tag] if len(obj["history"]) != 0 else ""

    devs = {
        i: {
            "mac": dev["mac"],
            "pin": dev["pin"],
            "history": len(dev["history"]),
            "hum": getLast(dev, "hum"),
            "light": getLast(dev, "light"),
            "temp": getLast(dev, "temp"),
            "water": getLast(dev, "water")
        }
        for i, dev in Hub().devices.items()
    }
    evts = {
        i: {
            "type": ev.name.capitalize(),
            "dev": Hub().findDeviceID(ev.dev["mac"]),
            "time": dt.fromtimestamp(ev.time).strftime("%H:%M:%S %d/%m/%Y")
        }
        for i, ev in Hub().events.items()
    }

    return render_template("index.html", devices=devs, events=evts)
Ejemplo n.º 3
0
def event_remove():
    res = {"status": None, "msg": None}
    idx = request.args["id"] if "id" in request.args else -1

    ev = Hub().findEvent(idx)
    if ev is not None:
        res["status"] = Hub().removeEvent(idx)
        res["msg"] = "OK" if res["status"] else "Failed to remove event"
    else:
        res["status"] = False
        res["msg"] = "There is no such event"

    return jsonify(res)
Ejemplo n.º 4
0
def device_water():
    res = {"status": None, "msg": None}
    idx = request.args["id"] if "id" in request.args else ""

    dev = Hub().findDevice(idx)
    if dev is not None:
        res["status"] = True
        res["msg"] = Hub().addEvent("water", dev, 0)
    else:
        res["status"] = False
        res["msg"] = "There is no such device"

    return jsonify(res)
Ejemplo n.º 5
0
def device_remove():
    res = {"status": None, "msg": None}
    idx = request.args["id"] if "id" in request.args else ""

    dev = Hub().findDevice(idx)
    if dev is not None:
        res["status"] = Hub().removeDevice(idx)
        res["msg"] = "OK" if res["status"] else "Failed to remove device"
    else:
        res["status"] = False
        res["msg"] = "There is no such device"

    return jsonify(res)
Ejemplo n.º 6
0
def events():
    res = {"status": None, "msg": None}
    events = Hub().events.items()

    res["status"] = True
    res["msg"] = {
        i: {
            "id": Hub().findDeviceID(ev["dev"]["mac"]),
            "type": ev["name"],
            "time": ev["time"],
            "repeat": ev["repeat"]
        }
        for i, ev in events
    }

    return jsonify(res)
Ejemplo n.º 7
0
def devices():
    res = {"status": None, "msg": None}
    devices = Hub().devices.items()

    res["status"] = True
    res["msg"] = {i: d["mac"] for i, d in devices}

    return jsonify(res)
Ejemplo n.º 8
0
def event_add():
    res = {"status": None, "msg": None}
    idx = request.args["id"] if "id" in request.args else ""
    ev = request.args["type"].lower() if "type" in request.args else ""
    time = int(request.args["time"]) if "time" in request.args else 0
    repeat = int(request.args["repeat"]) if "repeat" in request.args else None

    dev = Hub().findDevice(idx)
    if dev is not None:
        if ev in event_types.keys():
            res["status"] = True
            res["msg"] = Hub().addEvent(ev, dev, time, repeat)
        else:
            res["status"] = False
            res["msg"] = "Event type must be either 'refresh' or 'water'"
    else:
        res["status"] = False
        res["msg"] = "There is no such device"

    return jsonify(res)
Ejemplo n.º 9
0
def device_last():
    res = {"status": None, "msg": None}
    idx = request.args["id"] if "id" in request.args else ""

    dev = Hub().findDevice(idx)
    if dev is not None:
        data = dev["history"]

        if len(data) != 0:
            res["status"] = True
            res["msg"] = data[-1]
        else:
            res["status"] = False
            res["msg"] = "The history is empty. Refresh the device"
    else:
        res["status"] = False
        res["msg"] = "There is no such device"

    return jsonify(res)
Ejemplo n.º 10
0
        res["msg"] = "OK" if res["status"] else "Failed to remove event"
    else:
        res["status"] = False
        res["msg"] = "There is no such event"

    return jsonify(res)


if __name__ == "__main__":
    Logger("hub")
    Logger().write("[!] SmartHub is booting", tag="BOOT")
    WF = WiFiCtl()

    Logger().write("[!] Checking Wi-Fi connection", tag="BOOT")
    ip = WF.check()
    if ip is False:
        Logger().write(
            "[!] Wi-Fi network is not available. Please setup Wi-Fi network using Bluetooth CLI with PIN '%s'"
            % BTCtl().pin,
            tag="BOOT")

    while ip is False:
        ip = WF.check()
        sleep(1)
    Logger().write("[!] Connected to Wi-Fi network with ip address '%s'" % ip,
                   tag="BOOT")

    Logger().write("[!] SmartHub has started", tag="BOOT")
    Hub().start()
    App.run(host="0.0.0.0")