Einstellungsseite: Reiter, Kachelwerte und Geraeteliste
Die Einstellungen bestanden aus einer einzigen langen Spalte mit den Preistabellen. Sie bekommt Reiter, und darin zwei neue Flaechen: was die Kacheln der Startseite anzeigen, und welche Geraete es ueberhaupt gibt. Reiter gab es vorher dreimal in drei Ausfuehrungen - die Etagen ueber den Automatismen mit eigenem switchTab(), die Geraetegruppen im Raum-Modal mit eigener CSS-Klasse, und die Einstellungsseite noch einmal anders. Jetzt baut restricted/reiter.php alle drei; umgeschaltet wird von Bootstrap, den offenen Reiter merkt reiterMerken() in der Adresse. Kachelwerte: was auf einer Kachel steht, stand fest in rooms.php. Die neue Tabelle kachelWerte (solarLog_kacheln.sql) ueberschreibt das je Raum, die Maske waehlt die Messwerte aus demselben Katalog wie der Automatik-Editor - nach Etage sortiert, die Geraete des eigenen Raums oben. Fehlt die Tabelle, zeigt jede Kachel weiter ihre Vorgabe. Geraete: die Zuordnung Geraet -> Raum war ein Modal, erreichbar ueber ein Zahnrad neben den Automatismen. Sie ist eine Einstellung und steht jetzt dort, zusammen mit dem, was fehlte: seit wann ein Geraet nichts mehr meldet, in welchen Automatiken es steckt, und ein Loeschknopf. Letzterer ist noetig, weil der Suchlauf nichts loescht - er legt an und frischt auf, damit die Automatiken ihre Zustands-Ids behalten; ein abgebautes Geraet bliebe sonst fuer immer stehen. Geloescht wird nur, was in keiner Automatik vorkommt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+104
-4
@@ -2,10 +2,15 @@
|
||||
/**
|
||||
* Einstellungsseite: Parameter, die von Hand gepflegt werden.
|
||||
*
|
||||
* Bisher sind das die Preistabellen aus restricted/costs.php. Die Seite ist
|
||||
* als Sammlung von Karten angelegt - eine Karte je Thema. Kommt spaeter ein
|
||||
* weiterer Parameter dazu, kommt er als eigene Karte hinzu, ohne dass die
|
||||
* vorhandenen etwas davon merken.
|
||||
* Gegliedert in Reiter, einer je Thema - Preise und die Anzeigewerte der
|
||||
* Home-Kacheln. Die Liste $reiter unten ist die einzige Stelle, die davon
|
||||
* weiss: ein neues Thema ist ein Eintrag dort plus der Inhalt, alles Uebrige
|
||||
* (Navigation, Umschalten, Merken des Reiters in der Adresse) ergibt sich
|
||||
* daraus. Vorher stand jedes Thema als Karte untereinander; bei drei Themen
|
||||
* waere die Seite ein Scrollband geworden.
|
||||
*
|
||||
* Innerhalb eines Reiters bleibt es bei Karten - eine je Tabelle bzw. je
|
||||
* Etage.
|
||||
*
|
||||
* Die Zeilen zeichnet js/solar/settings.js aus dem Modell, das hier
|
||||
* eingebettet wird - dieselbe Arbeitsteilung wie im Automatik-Editor. Sonst
|
||||
@@ -15,6 +20,22 @@
|
||||
* die Felder dort muessen dieselben sein.
|
||||
*/
|
||||
require_once(__DIR__ . "/costs.php");
|
||||
require_once(__DIR__ . "/kacheln.php");
|
||||
require_once(__DIR__ . "/reiter.php");
|
||||
|
||||
/*
|
||||
* Die Reiter. Reihenfolge ist Anzeigereihenfolge; der erste ist der offene,
|
||||
* solange die Adresse nichts anderes sagt (#kacheln).
|
||||
*/
|
||||
$reiter = [
|
||||
["id" => "preise", "titel" => "Preise", "symbol" => "bi-currency-euro"],
|
||||
["id" => "kacheln", "titel" => "Home-Kacheln", "symbol" => "bi-grid-1x2"],
|
||||
["id" => "geraete", "titel" => "Geräte", "symbol" => "bi-house-gear"],
|
||||
];
|
||||
// "merken": der offene Reiter steht in der Adresse und uebersteht ein
|
||||
// Neuladen - siehe reiterMerken() in js/solar/common.js.
|
||||
$reiterOpt = ["name" => "einstellung", "merken" => true, "klasse" => "mb-3"];
|
||||
$reiterOpt["aktiv"] = reiterAktiv($reiter, $reiterOpt);
|
||||
|
||||
$reihen = preisReihen();
|
||||
$daten = [];
|
||||
@@ -50,6 +71,13 @@ try {
|
||||
<?php if ($fehler): ?>
|
||||
<div class="alert alert-danger">Die Einstellungen sind nicht erreichbar: <?= htmlspecialchars($fehler) ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Reiter. Welcher offen ist, merkt sich die Adresse (#kacheln) -
|
||||
ein Neuladen nach dem Speichern landet damit wieder dort. -->
|
||||
<?= reiterLeiste($reiter, $reiterOpt) ?>
|
||||
|
||||
<div class="tab-content">
|
||||
<?= reiterFlaecheAuf("preise", $reiterOpt) ?>
|
||||
<?php foreach ($reihen as $key => $reihe): ?>
|
||||
<?php $breiten = preisSpalten($reihe["felder"]); ?>
|
||||
<div class="row">
|
||||
@@ -94,6 +122,78 @@ try {
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?= reiterFlaecheZu() ?><!-- /Preise -->
|
||||
|
||||
<!-- ================================================ 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,
|
||||
das ajax/settings.php?action=kacheln liefert - dieselbe Arbeits-
|
||||
teilung wie bei den Preisen. -->
|
||||
<?= reiterFlaecheAuf("kacheln", $reiterOpt) ?>
|
||||
<div class="row">
|
||||
<div class="col-12 col-xxl-9">
|
||||
<div class="card mb-4" id="kachelKarte">
|
||||
<div class="card-header pb-2 pt-2">
|
||||
<h3 class="card-title"><i class="bi bi-grid-1x2 me-2"></i>Werte auf den Kacheln</h3>
|
||||
<div class="card-tools">
|
||||
<button type="button" class="btn btn-tool" id="kachelNeuLaden"
|
||||
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 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.
|
||||
</p>
|
||||
<div id="kachelListe">
|
||||
<p class="text-secondary small mb-0">Wird geladen …</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?= reiterFlaecheZu() ?><!-- /Home-Kacheln -->
|
||||
|
||||
<!-- ===================================================== Geräte ==== -->
|
||||
<!-- Die Zuordnung Gerät -> Raum lag vorher als Modal auf der Home-Seite.
|
||||
Sie gehört hierher: sie wird selten geändert, sie ist eine
|
||||
Einstellung, und hier ist Platz für das, was daneben gehört - wie
|
||||
lange ein Gerät nichts mehr gemeldet hat, in welchen Automatiken es
|
||||
steckt, und der Weg, eine Karteileiche loszuwerden. -->
|
||||
<?= reiterFlaecheAuf("geraete", $reiterOpt) ?>
|
||||
<div class="row">
|
||||
<div class="col-12 col-xxl-10">
|
||||
<div class="card mb-4" id="geraeteKarte">
|
||||
<div class="card-header pb-2 pt-2">
|
||||
<h3 class="card-title"><i class="bi bi-house-gear me-2"></i>Geräte und Räume</h3>
|
||||
<div class="card-tools">
|
||||
<button type="button" class="btn btn-tool" id="geraeteNeuLaden" title="Neu laden">
|
||||
<i class="bi bi-arrow-counterclockwise"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="text-secondary small mb-3">
|
||||
Der Raum ordnet die Geräteliste im Automatik-Editor und bestimmt,
|
||||
welche Messwerte bei einer Home-Kachel oben stehen. Er wird von Hand
|
||||
vergeben und bleibt bei einem neuen Suchlauf erhalten – der Suchlauf
|
||||
legt nur an und aktualisiert, er löscht nichts. Abgebaute Geräte
|
||||
bleiben deshalb stehen, bis sie hier entfernt werden.
|
||||
</p>
|
||||
<div id="geraeteListe">
|
||||
<p class="text-secondary small mb-0">Wird geladen …</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?= reiterFlaecheZu() ?><!-- /Geräte -->
|
||||
</div><!-- /tab-content -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--end::App Content-->
|
||||
|
||||
Reference in New Issue
Block a user