2026. június 14., vasárnap

Okos otthon pythonban

import sqlite3
from flask import Flask, jsonify, request

app = Flask(__name__)

DB = "smart_home.db"


def init_db():
    conn = sqlite3.connect(DB)
    cur = conn.cursor()

    cur.execute("""
    CREATE TABLE IF NOT EXISTS devices(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        type TEXT,
        state TEXT
    )
    """)

    conn.commit()
    conn.close()


def add_device(name, dtype):

    conn = sqlite3.connect(DB)
    cur = conn.cursor()

    cur.execute(
        "INSERT INTO devices(name,type,state) VALUES(?,?,?)",
        (name, dtype, "OFF")
    )

    conn.commit()
    conn.close()


def get_devices():

    conn = sqlite3.connect(DB)
    cur = conn.cursor()

    cur.execute("SELECT * FROM devices")

    rows = cur.fetchall()

    conn.close()

    return rows


def set_state(device_id, state):

    conn = sqlite3.connect(DB)
    cur = conn.cursor()

    cur.execute(
        "UPDATE devices SET state=? WHERE id=?",
        (state, device_id)
    )

    conn.commit()
    conn.close()


@app.route("/")
def home():

    devices = []

    for d in get_devices():
        devices.append({
            "id": d[0],
            "name": d[1],
            "type": d[2],
            "state": d[3]
        })

    return jsonify(devices)


@app.route("/device/add", methods=["POST"])
def device_add():

    data = request.json

    add_device(
        data["name"],
        data["type"]
    )

    return {"status": "ok"}


@app.route("/device/<int:device_id>/on")
def turn_on(device_id):

    set_state(device_id, "ON")

    return {"status": "ON"}


@app.route("/device/<int:device_id>/off")
def turn_off(device_id):

    set_state(device_id, "OFF")

    return {"status": "OFF"}


if __name__ == "__main__":

    init_db()

    if len(get_devices()) == 0:

        add_device("Nappali lámpa", "light")
        add_device("Hálószoba lámpa", "light")
        add_device("Kazán", "heater")

    app.run(
        host="0.0.0.0",
        port=8123
    )

Nincsenek megjegyzések:

Megjegyzés küldése