Einstellungen -> Grundriss: Etagen, Raeume und Kacheln am Plan pflegen

Neuer Reiter mit Plan-Editor: Etagen anlegen, umbenennen, sortieren,
loeschen und als Standard markieren; Grundrissbild hochladen; Raeume mit
Name, Kuerzel und Thermostat-Zweig anlegen und bearbeiten; Kacheln im Plan
ziehen oder einen Raum ohne Kachel mit "Platzieren" und einem Klick setzen.
Loest tools/kachelpositionen.php ab - Raster, Geisterkachel und die
Umrechnung Mitte -> linke obere Ecke sind von dort uebernommen.

- restricted/grundriss.php: alle Pruefungen und Schreibzugriffe. Eine
  Etage mit Raeumen oder Automatiken laesst sich nicht loeschen, die
  Ablehnung nennt die Namen. Raeume loeschen laesst ihre Geraete ohne Raum.
- Grundrissbilder nach tiles/grundriss/ (beschreibbar, nicht im Git),
  nur PNG/JPEG/WebP, am Inhalt geprueft; SVG bewusst nicht. Prüfsumme im
  Dateinamen, alte hochgeladene Bilder werden weggeraeumt.
- ajax/settings.php: ?action=grundriss und sieben POST-Aktionen, jede
  antwortet mit dem ganzen neuen Stand.
- "Werte" springt in den Reiter Home-Kacheln und oeffnet die Kachel;
  Home-Kacheln und Geraete laden nach einer Grundriss-Aenderung nach.
- Startseite ohne Etage mit platziertem Raum: Hinweis auf die
  Einstellungen statt einer leeren Zeichenflaeche.
- README: Grundriss als Inhalt statt Code, neue Dateien und Endpunkte,
  Reihenfolge der Schema-Dateien fuer ein neues Haus.

Backend mit einer Probe-Etage durchgespielt (auch Fehlerfaelle, Upload,
Aufraeumen); Oberflaeche auf einer Probeseite mit echten Daten und
Zeiger-Ereignissen geprueft: Ziehen, Antippen, Platzieren, neuer Raum.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 11:11:10 +02:00
co-authored by Claude Opus 5
parent 62a8af3fc6
commit 8d626abc6d
12 changed files with 1365 additions and 255 deletions
+38 -3
View File
@@ -32,6 +32,7 @@ require_once(__DIR__ . "/skodaKeys.php");
*/
$reiter = [
["id" => "preise", "titel" => "Preise", "symbol" => "bi-currency-euro"],
["id" => "grundriss", "titel" => "Grundriss", "symbol" => "bi-house"],
["id" => "kacheln", "titel" => "Home-Kacheln", "symbol" => "bi-grid-1x2"],
["id" => "geraete", "titel" => "Geräte", "symbol" => "bi-house-gear"],
["id" => "fahrzeug", "titel" => "Fahrzeug", "symbol" => "bi-ev-front"],
@@ -128,6 +129,39 @@ try {
<?php endforeach; ?>
<?= reiterFlaecheZu() ?><!-- /Preise -->
<!-- ================================================== Grundriss ==== -->
<!-- Etagen, Räume und wo ihre Kacheln sitzen. Stand bis September 2026
als Tabelle in restricted/rooms.php; jetzt in homeMesh.floors und
homeMesh.rooms, gepflegt hier. Den Inhalt zeichnet
js/solar/grundriss.js aus ajax/settings.php?action=grundriss. -->
<?= reiterFlaecheAuf("grundriss", $reiterOpt) ?>
<div class="row">
<div class="col-12 col-xxl-11">
<div class="card mb-4" id="grundrissKarte">
<div class="card-header pb-2 pt-2">
<h3 class="card-title"><i class="bi bi-house me-2"></i>Etagen und Räume</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" id="grundrissNeuLaden" title="Neu laden">
<i class="bi bi-arrow-counterclockwise"></i>
</button>
</div>
</div>
<div class="card-body">
<p class="text-secondary small mb-3">
Jede Etage hat ein Grundrissbild, darauf sitzen die Kacheln ihrer Räume.
Ein Raum ohne Kachel ist trotzdem ein Raum: Geräte lassen sich ihm
zuordnen, er erscheint nur nicht im Plan. Was auf einer Kachel steht,
wird unter „Home-Kacheln“ eingestellt.
</p>
<div id="grundrissFlaeche">
<p class="text-secondary small mb-0">Wird geladen …</p>
</div>
</div>
</div>
</div>
</div>
<?= reiterFlaecheZu() ?><!-- /Grundriss -->
<!-- ================================================ Home-Kacheln ==== -->
<!-- Der Inhalt kommt aus js/solar/settings.js: eine Karte je Etage, darin
je Raum eine Zeile mit ihren Werten. Gezeichnet wird aus dem Modell,
@@ -149,9 +183,10 @@ try {
<div class="card-body">
<p class="text-secondary small mb-3">
Jede Kachel im Grundriss zeigt bis zu drei Messwerte. Ohne eigene
Angabe sind das die Werte aus <code>restricted/rooms.php</code>
bei Räumen mit Thermostat Soll, Ist und Feuchte. Was hier gesetzt
wird, gilt stattdessen; „Standard“ nimmt es wieder zurück.
Angabe sind das bei Räumen mit Thermostat Soll, Ist und Feuchte,
sonst nur der Name. Was hier gesetzt wird, gilt stattdessen;
„Standard“ nimmt es wieder zurück. Wo Kacheln sitzen und welcher
Raum ein Thermostat hat, steht unter „Grundriss“.
</p>
<div id="kachelListe">
<p class="text-secondary small mb-0">Wird geladen …</p>