100 lines
4.1 KiB
SQL
100 lines
4.1 KiB
SQL
-- ============================================================
|
||
-- Heizungssteuerung – MySQL Datenbankschema
|
||
-- Auf dem externen MySQL-Server ausführen:
|
||
-- mysql -u root -p < schema.sql
|
||
-- ============================================================
|
||
|
||
CREATE DATABASE IF NOT EXISTS heizung
|
||
CHARACTER SET utf8mb4
|
||
COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE heizung;
|
||
|
||
-- ── Messwerte ────────────────────────────────────────────────
|
||
-- Wird alle 60 Sekunden vom Raspberry Pi befüllt
|
||
CREATE TABLE IF NOT EXISTS messungen (
|
||
id BIGINT NOT NULL AUTO_INCREMENT,
|
||
ts DATETIME NOT NULL COMMENT 'Zeitstempel der Messung',
|
||
|
||
-- Temperaturen
|
||
aussentemp DECIMAL(5,1) COMMENT 'Aussentemperatur °C',
|
||
vorlauf_ist DECIMAL(5,1) COMMENT 'Vorlauftemperatur gemessen °C',
|
||
vorlauf_soll DECIMAL(5,1) COMMENT 'Vorlauftemperatur Soll °C',
|
||
kessel_oben DECIMAL(5,1) COMMENT 'Pufferspeicher oben °C',
|
||
kessel_unten DECIMAL(5,1) COMMENT 'Pufferspeicher unten °C',
|
||
wohnung DECIMAL(5,1) COMMENT 'Raumtemperatur Wohnung °C',
|
||
abgas DECIMAL(5,1) COMMENT 'Abgastemperatur °C',
|
||
|
||
-- Regelung
|
||
stellung SMALLINT COMMENT 'Mischerstellung in Sekunden',
|
||
stellung_proz DECIMAL(5,1) COMMENT 'Mischerstellung in Prozent',
|
||
mischeron TINYINT(1) COMMENT '1 = Mischer/Heizkreis aktiv',
|
||
abweichung DECIMAL(5,1) COMMENT 'Vorlauf Soll-Ist Abweichung °C',
|
||
|
||
-- Einstellungen (Snapshot zum Zeitpunkt der Messung)
|
||
neigung DECIMAL(4,2) COMMENT 'Heizkurven-Neigung',
|
||
rtsoll TINYINT COMMENT 'Raumsoll-Temperatur °C',
|
||
misch_begin TINYINT COMMENT 'Einschalt-Schwelle Aussentemperatur °C',
|
||
nachtabs TINYINT COMMENT 'Nachtabsenkung °C',
|
||
|
||
PRIMARY KEY (id),
|
||
INDEX idx_ts (ts),
|
||
INDEX idx_ts_vorlauf (ts, vorlauf_ist, vorlauf_soll)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||
COMMENT='Periodische Messwerte der Heizungssteuerung';
|
||
|
||
-- ── Parameteränderungen ──────────────────────────────────────
|
||
-- Wird bei jeder Änderung über die Weboberfläche befüllt
|
||
CREATE TABLE IF NOT EXISTS parameter_aenderungen (
|
||
id INT NOT NULL AUTO_INCREMENT,
|
||
ts DATETIME NOT NULL COMMENT 'Zeitstempel der Änderung',
|
||
parameter VARCHAR(50) NOT NULL COMMENT 'Name des Parameters',
|
||
alter_wert VARCHAR(50) COMMENT 'Alter Wert',
|
||
neuer_wert VARCHAR(50) NOT NULL COMMENT 'Neuer Wert',
|
||
|
||
PRIMARY KEY (id),
|
||
INDEX idx_ts (ts),
|
||
INDEX idx_parameter (parameter)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||
COMMENT='Protokoll aller Parameteränderungen über die Weboberfläche';
|
||
|
||
-- ── Datenbank-Benutzer anlegen ───────────────────────────────
|
||
-- Anpassen: 'heizung_pw' durch ein sicheres Passwort ersetzen
|
||
-- '192.168.%.%' auf die eigene Netzwerkadresse einschränken
|
||
CREATE USER IF NOT EXISTS 'heizung'@'192.168.%.%'
|
||
IDENTIFIED BY 'heizung_pw';
|
||
|
||
GRANT SELECT, INSERT ON heizung.messungen
|
||
TO 'heizung'@'192.168.%.%';
|
||
|
||
GRANT SELECT, INSERT ON heizung.parameter_aenderungen
|
||
TO 'heizung'@'192.168.%.%';
|
||
|
||
FLUSH PRIVILEGES;
|
||
|
||
-- ── Nützliche Beispiel-Abfragen ──────────────────────────────
|
||
/*
|
||
-- Letzten 24 Stunden anzeigen (1-Minuten-Auflösung)
|
||
SELECT ts, aussentemp, vorlauf_ist, vorlauf_soll, stellung_proz
|
||
FROM messungen
|
||
WHERE ts >= NOW() - INTERVAL 24 HOUR
|
||
ORDER BY ts DESC;
|
||
|
||
-- Tagesstatistik
|
||
SELECT
|
||
DATE(ts) AS tag,
|
||
AVG(aussentemp) AS aussen_mittel,
|
||
MIN(aussentemp) AS aussen_min,
|
||
MAX(vorlauf_ist) AS vorlauf_max,
|
||
SUM(mischeron) / COUNT(*) * 100 AS heizung_aktiv_prozent
|
||
FROM messungen
|
||
GROUP BY DATE(ts)
|
||
ORDER BY tag DESC;
|
||
|
||
-- Letzte Parameteränderungen
|
||
SELECT ts, parameter, alter_wert, neuer_wert
|
||
FROM parameter_aenderungen
|
||
ORDER BY ts DESC
|
||
LIMIT 20;
|
||
*/
|