Aussengelaende wird die vierte Etage AG
Was draussen haengt, stand als Pseudo-Raum "aussen" in automations.php:
"Geraete, die zu keinem Raum der Wohnung gehoeren - Carport, Garage,
Regensensor". Das waren inzwischen sechzehn Geraete in einem einzigen Topf,
der groesste ueberhaupt - in der Geraeteauswahl des Editors standen die fuenf
Carport-Wechselrichter, das Sonnensegel und das Garagentor unsortiert
nebeneinander.
Jetzt ist das Aussengelaende eine Etage wie OG, EG und UG, mit eigenen
Raeumen: Carport, Veranda, Pergola, Terrasse, Garage und Garten. Die Namen
stammen von den Geraeten selbst - die Hoymiles heissen seit jeher "Carport
1-6" und "Veranda OG2-4". Die achtzehn Geraete sind verteilt (die beiden
Ventilsteuerungen hatten noch gar keinen Raum und stehen jetzt im Garten,
zusammen mit dem Regensensor, der ihre Automatiken ausloest); "Ohne Raum"
faellt damit von acht auf sechs, und die sind es zu Recht.
AG ist eine Etage ohne Grundriss. Ihre Raeume haben kein x/y, es gibt ja
kein Bild, auf das eine Kachel zeigen koennte - ein Raum ohne Position war
schon immer vorgesehen. Das Menue und das SVG richten sich deshalb nach der
neuen floorsWithPlan(), die Zuordnung und die Automatiken nach $floors.
Bekommt der erste AG-Raum eine Kachel, erscheint die Etage von selbst auch
im Menue; es gibt keine zweite Liste, die man nachziehen muesste.
Die Etagen standen bisher an sechs Stellen noch einmal im Code. Jetzt gibt
es genau eine Liste, $floors in rooms.php, und alles andere leitet sich ab:
* automations.php prueft gegen $floors statt gegen eine eigene Whitelist
* ajax/AutoAction.php baut seine Etagen-Auswahl daraus
* home.php baut Reiter und Inhaltsbereiche in einer Schleife statt
dreimal fast dasselbe HTML
* header.php baut die Menuepunkte daraus
* switchTab() in homeMQTT.js liest die Reiter aus der Seite, statt OG, EG
und UG sechsmal aufzuzaehlen
* refreshAutomations() ebenso - eine feste Liste haette die vierte Etage
still ausgelassen, die Tabelle waere ohne Fehlermeldung leer geblieben
Dazu die ausgeschriebenen Namen in $floorLabels: das Kuerzel steht in URLs,
SVG-Ids und im MQTT-Baum, "Aussengelaende" nur als Titel am Menuepunkt und
am Reiter.
In der Datenbank ist das Enum um 'AG' erweitert; header.php laedt rooms.php
jetzt selbst, weil es vor home.php eingebunden wird.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,10 +17,6 @@
|
||||
require_once(__DIR__ . "/mysql.php");
|
||||
require_once(__DIR__ . "/rooms.php");
|
||||
|
||||
// Geraete, die zu keinem Raum der Wohnung gehoeren - Carport, Garage,
|
||||
// Regensensor. Kein Raum in rooms.php, aber auch nicht "unzugeordnet".
|
||||
const RAUM_AUSSEN = "aussen";
|
||||
|
||||
/** Verbindung zur Geraete- und Automatik-Datenbank. */
|
||||
function meshDb()
|
||||
{
|
||||
@@ -220,12 +216,17 @@ function anzeigeName($name)
|
||||
}
|
||||
|
||||
/**
|
||||
* Waehlbare Raeume: die Raeume der Home-Ansicht plus "Aussen".
|
||||
* Waehlbare Raeume: die Raeume der Home-Ansicht.
|
||||
*
|
||||
* Einzige Quelle bleibt restricted/rooms.php - ein neuer Raum ist dort eine
|
||||
* Zeile und taucht hier automatisch auf. Der Schluessel ist "Etage/Raum",
|
||||
* weil "Bad" allein auf drei Etagen vorkommt.
|
||||
*
|
||||
* Frueher stand hier ein Pseudo-Raum "aussen" fuer alles, was zu keinem Raum
|
||||
* der Wohnung gehoert - Carport, Pergola, Garage, die Wechselrichter. Das war
|
||||
* ein einziger Topf mit sechzehn Geraeten. Inzwischen ist das Aussengelaende
|
||||
* die Etage AG mit eigenen Raeumen, und dieser Sonderfall ist keiner mehr.
|
||||
*
|
||||
* Etage und Raum stehen zusaetzlich einzeln daneben: die Geraeteauswahl im
|
||||
* Editor gruppiert nach der einen und sortiert nach dem anderen, und der
|
||||
* Schluessel soll dafuer nicht erst im JavaScript wieder auseinandergenommen
|
||||
@@ -243,11 +244,6 @@ function raumListe()
|
||||
"room" => $raum["mqtt"],
|
||||
];
|
||||
}
|
||||
// Aussen zaehlt als eigene Etage mit genau einem Raum: Carport, Garage und
|
||||
// Regensensor liegen auf keinem Stockwerk, sollen aber ihre eigene
|
||||
// Ueberschrift bekommen und nicht unter "Ohne Raum" fallen.
|
||||
$liste[] = ["key" => RAUM_AUSSEN, "label" => "Außen",
|
||||
"floor" => "Außen", "room" => ""];
|
||||
return $liste;
|
||||
}
|
||||
|
||||
@@ -521,7 +517,7 @@ function emptyAutomation($floor)
|
||||
"name" => "",
|
||||
// Aufgerufen wird der Editor immer aus einem Etagenreiter. Fehlt die
|
||||
// Angabe trotzdem, gilt dieselbe Etage wie auf der Startseite.
|
||||
"floor" => in_array($floor, ["UG", "EG", "OG"], true) ? $floor : "OG",
|
||||
"floor" => in_array($floor, $GLOBALS["floors"], true) ? $floor : "OG",
|
||||
"enabled" => true,
|
||||
"window_from" => "00:00",
|
||||
"window_to" => "23:59",
|
||||
@@ -624,7 +620,7 @@ function saveAutomation($data)
|
||||
throw new InvalidArgumentException("Bitte einen Namen vergeben.");
|
||||
}
|
||||
$floor = strval($data["floor"] ?? "");
|
||||
if (!in_array($floor, ["UG", "EG", "OG"], true)) {
|
||||
if (!in_array($floor, $GLOBALS["floors"], true)) {
|
||||
// Nicht stillschweigend auf "" zurueckfallen: die Automatik wuerde
|
||||
// dann in keinem der drei Reiter mehr auftauchen.
|
||||
throw new InvalidArgumentException("Bitte eine Etage wählen.");
|
||||
|
||||
Reference in New Issue
Block a user