Der Editor las seine Geraete aus homeMesh, schrieb aber nach solarLog in
Tabellen, deren Fremdschluessel auf solarLog.actors/sensors zeigten. Jedes
INSERT lief damit gegen den Fremdschluessel - autoactionsSensors und
autoactionsActors sind deshalb leer geblieben, und die Aktor-Schleife war
ohnehin nie geschrieben worden.
Die Automatiken liegen jetzt in homeMesh neben dem Geraetemodell
(homeMesh_automations.sql). Eine Bedingung verweist mit einem einzigen
Fremdschluessel auf actor_states statt auf Geraet, State-URL und ein
unklares valID; Kommandoparameter stehen zeilenweise statt in vier festen
Spalten "Wert 1" bis "Wert 4". Verknuepft wird ueber group_no: gleiche
Nummer UND, verschiedene ODER, ausgewertet als any(all(gruppe)).
Im Editor ist eine Gruppe ein gerahmter Block mit eigenem "+ Bedingung",
dazwischen steht ODER - die Klammerung ist damit gezeichnet und nicht
vereinbart, und darunter steht derselbe Satz noch einmal in Worten. Die
Uebersicht zeigt ihn in der Spalte "Ausloeser" und ersetzt die bisher fest
verdrahtete Beispielzeile.
Nebenbei behoben: die Operator-Knoepfe schickten ihr innerHTML ("≠",
">") an eine Whitelist, die "!=" erwartete - jede Bedingung "ungleich"
wurde still zu "gleich". Ausgeblendete Wertfelder sendeten ihren Inhalt
trotzdem mit. Beides entfaellt, weil der Editor jetzt JSON aus einem
Modell schickt statt durchnummerierter Formularfelder.
Die vier Endpunkte fillSensorDD, fillActorDD, sensorDetails und
actorDetails entfallen: der Geraetekatalog reist einmal mit dem Editor
mit, statt je Bedingungszeile zwei Anfragen nachzuladen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
374 lines
12 KiB
SQL
374 lines
12 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'
|
|
) 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',
|
|
`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`),
|
|
ADD UNIQUE KEY `actor_id_2` (`actor_id`,`url`),
|
|
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`),
|
|
ADD UNIQUE KEY `command_id_2` (`command_id`,`url`),
|
|
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 */;
|