Files
Smart-Dashboard/homeMesh_DB-layout.sql
T
adminandClaude Opus 5 62a8af3fc6 Raeume ueber ihre feste Nummer: actors.room_id, Raum-Modal, Thermostat-Zweig
Geraete hingen ueber den Text "Etage/Raum" an ihrem Raum, das Raum-Modal
zerlegte "EG_Bad" am Unterstrich, und das Thermostat-Topic wurde aus Etage
und Name zusammengesetzt. Ein umbenannter Raum haette still alle Geraete,
seinen Temperaturregler und sein Heizsymbol verloren.

- actors.room (Text) -> actors.room_id, Fremdschluessel auf rooms, beim
  Loeschen eines Raums SET NULL. Alle 59 Zuordnungen uebernommen.
- automations.floor: ENUM(UG,EG,OG,AG) -> Verweis auf floors.
  Eine neue Etage kann damit auch Automatiken tragen.
- room.php nimmt ?room=<Nummer>; Solltemperatur geht an
  rooms.thermostat + /changeSetTemp.
- homeMQTT.js: Heizsymbol, Regler und Ist-Werte ueber mqttZweig(thermostat)
  statt mqttData.Raumtemp[Etage][Name].
- Raumvorschlaege in den Einstellungen: Messwerte unter dem Thermostat-
  Zweig eines Raums statt fest Raumtemp/<Etage>/<Name>.
- Schluessel in raumListe(), Katalog und Maske ist die Raumnummer als Text.

Geprueft gegen den Stand davor: Startseite gleich bis auf das Klickziel,
jede der 25 Kacheln oeffnet ihren eigenen Raum; Geraeteliste, Vorschlaege,
Editor-Katalog und die eigenen Geraete je Kachel gleich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 10:58:30 +02:00

384 lines
13 KiB
SQL

-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: 192.168.179.174:3310
-- Erstellungszeit: 30. Aug 2026 um 16:22
-- Server-Version: 11.3.2-MariaDB-1:11.3.2+maria~ubu2204
-- PHP-Version: 8.2.17
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Datenbank: `homeMesh`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `actors`
--
CREATE TABLE `actors` (
`id` int(11) NOT NULL,
`type` varchar(50) NOT NULL COMMENT 'Gerätetyp z.B. RollerShutter',
`name` varchar(70) NOT NULL COMMENT 'Name des Geräts',
`url` varchar(100) NOT NULL COMMENT 'Tahoma Device URL',
`room_id` int(11) DEFAULT NULL COMMENT 'Raum (rooms.id, siehe homeMesh_grundriss.sql). Wird von Hand vergeben und deshalb vom Discovery nicht angefasst - der Upsert setzt nur type und name.'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
--
-- Daten für Tabelle `actors`
--
INSERT INTO `actors` (`id`, `type`, `name`, `url`) VALUES
(1, 'LOGIC', 'Zeitpunkt', 'Logic');
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `actor_commands`
--
CREATE TABLE `actor_commands` (
`id` int(11) NOT NULL,
`actor_id` int(11) NOT NULL COMMENT 'Referenz zum Aktor',
`command_name` varchar(100) NOT NULL COMMENT 'Name des Commands z.B. setPosition, open, close',
`command_url` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `actor_states`
--
CREATE TABLE `actor_states` (
`id` int(11) NOT NULL,
`actor_id` int(11) NOT NULL COMMENT 'Referenz zum Aktor',
`state_name` varchar(100) NOT NULL COMMENT 'Name des State z.B. core:ClosureState',
`state_type` int(11) DEFAULT NULL COMMENT 'State-Typ Code aus Tahoma API',
`current_value` varchar(255) DEFAULT NULL COMMENT 'Aktueller Wert des State',
`unit` varchar(20) DEFAULT NULL COMMENT 'Einheit falls vorhanden',
`url` varchar(255) DEFAULT NULL COMMENT 'MQTT Topic oder URL zum State',
`value_path` varchar(120) DEFAULT NULL COMMENT 'Pfad in die Nutzlast, wenn sich mehrere Messwerte ein Topic teilen: der go-eCharger schickt sechzehn Zahlen als JSON-Feld auf einem Topic. Schreibweise [3], ssid, foo[0].bar. NULL = ganze Nutzlast',
`last_updated` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`possible_values` text NOT NULL COMMENT 'JSON array with possible enum values.'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
--
-- Daten für Tabelle `actor_states`
--
INSERT INTO `actor_states` (`id`, `actor_id`, `state_name`, `state_type`, `current_value`, `unit`, `url`, `last_updated`, `possible_values`) VALUES
(1, 1, 'Uhrzeit', 5, '13:45', NULL, 'time', '2026-03-16 18:16:44', ''),
(2, 1, 'Datum', 8, '20.03.2026', NULL, 'date', '2026-03-16 18:16:44', ''),
(3, 1, 'Sonnenaufgang', 7, '00:00', NULL, 'sunrise', '2026-03-16 18:16:44', ''),
(4, 1, 'Sonnenuntergang', 7, '00:00', NULL, 'sunset', '2026-03-16 18:16:44', '');
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `command_parameters`
--
CREATE TABLE `command_parameters` (
`id` int(11) NOT NULL,
`command_id` int(11) NOT NULL COMMENT 'Referenz zum Command',
`parameter_name` varchar(100) NOT NULL COMMENT 'Name des Parameters z.B. position',
`parameter_type` varchar(50) DEFAULT NULL COMMENT 'Datentyp z.B. integer, string',
`min_value` decimal(10,2) DEFAULT NULL COMMENT 'Minimaler Wert (falls numerisch)',
`max_value` decimal(10,2) DEFAULT NULL COMMENT 'Maximaler Wert (falls numerisch)',
`possible_values` text DEFAULT NULL COMMENT 'JSON Array mit möglichen Werten (für Enums)',
`url` varchar(255) DEFAULT NULL COMMENT 'MQTT Topic oder URL zum Parameter'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `sensors`
--
CREATE TABLE `sensors` (
`id` int(11) NOT NULL,
`type` varchar(50) NOT NULL COMMENT 'Sensortyp z.B. TemperatureSensor',
`name` varchar(70) NOT NULL COMMENT 'Name des Sensors',
`url` varchar(100) NOT NULL COMMENT 'Tahoma Device URL'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `sensor_states`
--
CREATE TABLE `sensor_states` (
`id` int(11) NOT NULL,
`sensor_id` int(11) NOT NULL COMMENT 'Referenz zum Sensor',
`state_name` varchar(100) NOT NULL COMMENT 'Name des State z.B. core:TemperatureState',
`state_type` int(11) DEFAULT NULL COMMENT 'State-Typ Code aus Tahoma API',
`current_value` varchar(255) DEFAULT NULL COMMENT 'Aktueller Wert des State',
`unit` varchar(20) DEFAULT NULL COMMENT 'Einheit z.B. °C, %, lux',
`url` varchar(255) DEFAULT NULL COMMENT 'MQTT Topic oder URL zum State',
`last_updated` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `state_types`
--
CREATE TABLE `state_types` (
`id` int(11) NOT NULL,
`type` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Daten für Tabelle `state_types`
--
INSERT INTO `state_types` (`id`, `type`) VALUES
(6, 'array'),
(0, 'bool'),
(8, 'date'),
(9, 'datetime'),
(7, 'deltatime'),
(2, 'float'),
(1, 'integer'),
(3, 'string'),
(5, 'time'),
(4, 'undefined');
-- --------------------------------------------------------
--
-- Stellvertreter-Struktur des Views `view_actors_with_commands`
-- (Siehe unten für die tatsächliche Ansicht)
--
CREATE TABLE `view_actors_with_commands` (
`actor_id` int(11)
,`actor_name` varchar(70)
,`actor_type` varchar(50)
,`actor_url` varchar(100)
,`command_id` int(11)
,`command_name` varchar(100)
,`parameter_name` varchar(100)
,`parameter_type` varchar(50)
,`min_value` decimal(10,2)
,`max_value` decimal(10,2)
,`possible_values` text
);
-- --------------------------------------------------------
--
-- Stellvertreter-Struktur des Views `view_all_devices`
-- (Siehe unten für die tatsächliche Ansicht)
--
CREATE TABLE `view_all_devices` (
`device_category` varchar(6)
,`id` int(11)
,`type` varchar(50)
,`name` varchar(70)
,`url` varchar(100)
);
-- --------------------------------------------------------
--
-- Stellvertreter-Struktur des Views `view_sensors_with_states`
-- (Siehe unten für die tatsächliche Ansicht)
--
CREATE TABLE `view_sensors_with_states` (
`sensor_id` int(11)
,`sensor_name` varchar(70)
,`sensor_type` varchar(50)
,`sensor_url` varchar(100)
,`state_name` varchar(100)
,`state_type` int(11)
,`current_value` varchar(255)
,`unit` varchar(20)
,`last_updated` timestamp
);
-- --------------------------------------------------------
--
-- Struktur des Views `view_actors_with_commands`
--
DROP TABLE IF EXISTS `view_actors_with_commands`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `view_actors_with_commands` AS SELECT `a`.`id` AS `actor_id`, `a`.`name` AS `actor_name`, `a`.`type` AS `actor_type`, `a`.`url` AS `actor_url`, `ac`.`id` AS `command_id`, `ac`.`command_name` AS `command_name`, `cp`.`parameter_name` AS `parameter_name`, `cp`.`parameter_type` AS `parameter_type`, `cp`.`min_value` AS `min_value`, `cp`.`max_value` AS `max_value`, `cp`.`possible_values` AS `possible_values` FROM ((`actors` `a` left join `actor_commands` `ac` on(`a`.`id` = `ac`.`actor_id`)) left join `command_parameters` `cp` on(`ac`.`id` = `cp`.`command_id`)) ORDER BY `a`.`id` ASC, `ac`.`id` ASC, `cp`.`id` ASC ;
-- --------------------------------------------------------
--
-- Struktur des Views `view_all_devices`
--
DROP TABLE IF EXISTS `view_all_devices`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `view_all_devices` AS SELECT 'actor' AS `device_category`, `actors`.`id` AS `id`, `actors`.`type` AS `type`, `actors`.`name` AS `name`, `actors`.`url` AS `url` FROM `actors`union all select 'sensor' AS `device_category`,`sensors`.`id` AS `id`,`sensors`.`type` AS `type`,`sensors`.`name` AS `name`,`sensors`.`url` AS `url` from `sensors` order by `device_category`,`name` ;
-- --------------------------------------------------------
--
-- Struktur des Views `view_sensors_with_states`
--
DROP TABLE IF EXISTS `view_sensors_with_states`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `view_sensors_with_states` AS SELECT `s`.`id` AS `sensor_id`, `s`.`name` AS `sensor_name`, `s`.`type` AS `sensor_type`, `s`.`url` AS `sensor_url`, `ss`.`state_name` AS `state_name`, `ss`.`state_type` AS `state_type`, `ss`.`current_value` AS `current_value`, `ss`.`unit` AS `unit`, `ss`.`last_updated` AS `last_updated` FROM (`sensors` `s` left join `sensor_states` `ss` on(`s`.`id` = `ss`.`sensor_id`)) ORDER BY `s`.`id` ASC, `ss`.`id` ASC ;
--
-- Indizes der exportierten Tabellen
--
--
-- Indizes für die Tabelle `actors`
--
ALTER TABLE `actors`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `url` (`url`),
ADD KEY `idx_actors_type` (`type`);
--
-- Indizes für die Tabelle `actor_commands`
--
ALTER TABLE `actor_commands`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `actor_id_2` (`actor_id`,`command_name`),
ADD KEY `actor_id` (`actor_id`),
ADD KEY `idx_actor_commands_name` (`command_name`);
--
-- Indizes für die Tabelle `actor_states`
--
ALTER TABLE `actor_states`
ADD PRIMARY KEY (`id`),
-- Auf den Namen und nicht auf die URL, aus demselben Grund wie bei
-- command_parameters: korrigiert ein Modul die URL eines Messwerts, soll
-- die vorhandene Zeile geaendert werden. Am URL-Schluessel entstand
-- stattdessen eine zweite Zeile, und die alte blieb ohne URL zurueck.
ADD UNIQUE KEY `actor_id_2` (`actor_id`,`state_name`),
ADD KEY `actor_id` (`actor_id`),
ADD KEY `idx_actor_states_name` (`state_name`),
ADD KEY `state_type` (`state_type`);
--
-- Indizes für die Tabelle `command_parameters`
--
ALTER TABLE `command_parameters`
ADD PRIMARY KEY (`id`),
-- Auf den Namen und nicht auf die URL: Parameter ohne URL (WLED traegt
-- alles in der Kommando-Vorlage) haetten dort NULL, und eine NULL
-- kollidiert in MySQL nie - ON DUPLICATE KEY UPDATE griff nicht und jeder
-- Discovery-Lauf legte die Parameter erneut an.
ADD UNIQUE KEY `command_id_2` (`command_id`,`parameter_name`),
ADD KEY `command_id` (`command_id`);
--
-- Indizes für die Tabelle `sensors`
--
ALTER TABLE `sensors`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `url` (`url`),
ADD KEY `idx_sensors_type` (`type`);
--
-- Indizes für die Tabelle `sensor_states`
--
ALTER TABLE `sensor_states`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `sensor_id_2` (`sensor_id`,`url`),
ADD KEY `sensor_id` (`sensor_id`),
ADD KEY `idx_sensor_states_name` (`state_name`);
--
-- Indizes für die Tabelle `state_types`
--
ALTER TABLE `state_types`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `type` (`type`);
--
-- AUTO_INCREMENT für exportierte Tabellen
--
--
-- AUTO_INCREMENT für Tabelle `actors`
--
ALTER TABLE `actors`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT für Tabelle `actor_commands`
--
ALTER TABLE `actor_commands`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT für Tabelle `actor_states`
--
ALTER TABLE `actor_states`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT für Tabelle `command_parameters`
--
ALTER TABLE `command_parameters`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT für Tabelle `sensors`
--
ALTER TABLE `sensors`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT für Tabelle `sensor_states`
--
ALTER TABLE `sensor_states`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Constraints der exportierten Tabellen
--
--
-- Constraints der Tabelle `actor_commands`
--
ALTER TABLE `actor_commands`
ADD CONSTRAINT `fk_actor_commands_actor` FOREIGN KEY (`actor_id`) REFERENCES `actors` (`id`) ON DELETE CASCADE;
--
-- Constraints der Tabelle `actor_states`
--
ALTER TABLE `actor_states`
ADD CONSTRAINT `fk_actor_states_actor` FOREIGN KEY (`actor_id`) REFERENCES `actors` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `fk_type_states_type` FOREIGN KEY (`state_type`) REFERENCES `state_types` (`id`) ON DELETE CASCADE;
--
-- Constraints der Tabelle `command_parameters`
--
ALTER TABLE `command_parameters`
ADD CONSTRAINT `fk_command_parameters_command` FOREIGN KEY (`command_id`) REFERENCES `actor_commands` (`id`) ON DELETE CASCADE;
--
-- Constraints der Tabelle `sensor_states`
--
ALTER TABLE `sensor_states`
ADD CONSTRAINT `fk_sensor_states_sensor` FOREIGN KEY (`sensor_id`) REFERENCES `sensors` (`id`) ON DELETE CASCADE;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;