Add full LLM configuration section to the setup page with provider dropdown, model/API key fields for cloud providers (Anthropic, OpenAI, Gemini), and endpoint/model fields for Ollama. API keys are encrypted with AES-256-GCM and stored in the database.
116 lines
4.3 KiB
SQL
116 lines
4.3 KiB
SQL
CREATE TABLE IF NOT EXISTS profiles (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE,
|
|
latitude REAL NOT NULL,
|
|
longitude REAL NOT NULL,
|
|
timezone TEXT NOT NULL DEFAULT 'Europe/Berlin',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS rooms (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
profile_id INTEGER NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
area_sqm REAL NOT NULL,
|
|
ceiling_height_m REAL NOT NULL DEFAULT 2.5,
|
|
floor INTEGER NOT NULL DEFAULT 0,
|
|
orientation TEXT NOT NULL DEFAULT 'N',
|
|
shading_type TEXT NOT NULL DEFAULT 'none',
|
|
shading_factor REAL NOT NULL DEFAULT 1.0,
|
|
ventilation TEXT NOT NULL DEFAULT 'natural',
|
|
ventilation_ach REAL NOT NULL DEFAULT 0.5,
|
|
window_fraction REAL NOT NULL DEFAULT 0.15,
|
|
shgc REAL NOT NULL DEFAULT 0.6,
|
|
insulation TEXT NOT NULL DEFAULT 'average',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS occupants (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
room_id INTEGER NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
|
|
count INTEGER NOT NULL DEFAULT 1,
|
|
activity_level TEXT NOT NULL DEFAULT 'sedentary',
|
|
vulnerable INTEGER NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS devices (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
room_id INTEGER NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
device_type TEXT NOT NULL,
|
|
watts_idle REAL NOT NULL DEFAULT 0,
|
|
watts_typical REAL NOT NULL DEFAULT 0,
|
|
watts_peak REAL NOT NULL DEFAULT 0,
|
|
duty_cycle REAL NOT NULL DEFAULT 1.0,
|
|
schedule TEXT NOT NULL DEFAULT '{}',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ac_units (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
profile_id INTEGER NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
ac_type TEXT NOT NULL DEFAULT 'portable',
|
|
capacity_btu REAL NOT NULL,
|
|
has_dehumidify INTEGER NOT NULL DEFAULT 0,
|
|
efficiency_eer REAL NOT NULL DEFAULT 10.0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ac_room_assignments (
|
|
ac_id INTEGER NOT NULL REFERENCES ac_units(id) ON DELETE CASCADE,
|
|
room_id INTEGER NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (ac_id, room_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS forecasts (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
profile_id INTEGER NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
timestamp TEXT NOT NULL,
|
|
temperature_c REAL,
|
|
humidity_pct REAL,
|
|
wind_speed_ms REAL,
|
|
cloud_cover_pct REAL,
|
|
precipitation_mm REAL,
|
|
sunshine_min REAL,
|
|
pressure_hpa REAL,
|
|
dew_point_c REAL,
|
|
apparent_temp_c REAL,
|
|
condition TEXT,
|
|
source TEXT NOT NULL,
|
|
fetched_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
UNIQUE(profile_id, timestamp, source)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS warnings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
profile_id INTEGER NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
warning_id TEXT NOT NULL UNIQUE,
|
|
event_type TEXT,
|
|
severity TEXT,
|
|
headline TEXT,
|
|
description TEXT,
|
|
instruction TEXT,
|
|
onset TEXT,
|
|
expires TEXT,
|
|
fetched_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS toggles (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
profile_id INTEGER NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
active INTEGER NOT NULL DEFAULT 0,
|
|
activated_at TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS llm_settings (
|
|
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
provider TEXT NOT NULL DEFAULT 'none',
|
|
model TEXT NOT NULL DEFAULT '',
|
|
endpoint TEXT NOT NULL DEFAULT '',
|
|
api_key_enc TEXT NOT NULL DEFAULT '',
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|