mirror of
https://github.com/KevinMidboe/patlite-tower-lights-controller.git
synced 2025-10-29 09:40:29 +00:00
63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
import sqlite3
|
|
from contextlib import closing
|
|
|
|
DB_FILE = 'lights.db'
|
|
DEFAULT_LIGHTS = ['green', 'orange', 'red']
|
|
|
|
|
|
def connect():
|
|
"""Get a new connection to the database."""
|
|
return sqlite3.connect(DB_FILE)
|
|
|
|
|
|
def setup_database():
|
|
"""Initializes the database and sets default states for lights."""
|
|
with closing(connect()) as conn:
|
|
with conn:
|
|
conn.execute('''
|
|
CREATE TABLE IF NOT EXISTS light_state (
|
|
name TEXT PRIMARY KEY,
|
|
state INTEGER NOT NULL CHECK (state IN (0, 1))
|
|
)
|
|
''')
|
|
|
|
# Insert default lights with state=0 if they do not exist
|
|
for light in DEFAULT_LIGHTS:
|
|
conn.execute('''
|
|
INSERT OR IGNORE INTO light_state (name, state)
|
|
VALUES (?, 0)
|
|
''', (light,))
|
|
|
|
|
|
def ensure_database():
|
|
"""Ensures the DB is initialized. Safe to call multiple times."""
|
|
setup_database()
|
|
|
|
|
|
def set_light_state(name, state):
|
|
ensure_database()
|
|
with closing(connect()) as conn:
|
|
with conn:
|
|
conn.execute('''
|
|
INSERT INTO light_state (name, state)
|
|
VALUES (?, ?)
|
|
ON CONFLICT(name) DO UPDATE SET state = excluded.state
|
|
''', (name, state))
|
|
|
|
|
|
def get_light_state(name):
|
|
ensure_database()
|
|
with closing(connect()) as conn:
|
|
cur = conn.cursor()
|
|
cur.execute('SELECT state FROM light_state WHERE name = ?', (name,))
|
|
row = cur.fetchone()
|
|
return row[0] if row else 0
|
|
|
|
|
|
def get_all_states():
|
|
ensure_database()
|
|
with closing(connect()) as conn:
|
|
cur = conn.cursor()
|
|
cur.execute('SELECT name, state FROM light_state')
|
|
return dict(cur.fetchall())
|