Files
Heizung/schema.sql
T
2026-04-15 17:05:07 +02:00

100 lines
4.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 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;
*/