Raeume ohne Kachel: Kueche EG und die beiden Technikraeume

Die Zuordnung der restlichen Geraete lief gegen eine Luecke im Raummodell:
rooms.php kannte nur Raeume, die eine Kachel im Grundriss haben - also
Raeume mit Thermostat. Die Kueche im EG hat keines, und die Stromzaehler
und der Wasserzaehler sitzen in Technikraeumen, die dort ebenfalls fehlten.

Ein Raum ohne x/y ist jetzt trotzdem ein Raum: Geraete lassen sich ihm
zuordnen, er erscheint nur nicht im Grundriss. roomsOnFloor() liefert
weiterhin nur Raeume mit Kachel - alles, was zeichnet oder aktualisiert,
geht darueber -, allRooms() liefert fuer die Zuordnung alle. Die
Aktualisierungsschleife im Browser bekommt ausdruecklich nur die
Kachel-Raeume; ein Raum ohne Position haette dort keine Elemente zu fuellen.

Neu eingetragen: EG/Kueche, EG/Technik, UG/Technik.

Damit sind 49 der 54 Geraete einem Raum zugeordnet. Offen bleiben mit
Absicht: Alarm (hausweit), Zeitpunkt (gerechnet), Thermostat EG
Unkonfiguriert (laut eigenem Namen) und die beiden Dachfenster, deren Raum
noch niemand genannt hat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-31 16:33:34 +02:00
co-authored by Claude Opus 5
parent 4b47372015
commit bed1884b04
3 changed files with 35 additions and 5 deletions
+1 -1
View File
@@ -225,7 +225,7 @@ function anzeigeName($name)
function raumListe()
{
$liste = [];
foreach ($GLOBALS["rooms"] as $raum) {
foreach (allRooms() as $raum) {
$liste[] = [
"key" => $raum["floor"] . "/" . $raum["mqtt"],
"label" => $raum["floor"] . " · " . $raum["mqtt"],
+1 -1
View File
@@ -199,7 +199,7 @@
<script>
// Raumtabelle aus restricted/rooms.php - homeMQTT.js aktualisiert darueber
// die SVG-Kacheln, ohne die Raeume noch einmal aufzufuehren.
const homeRooms = <?= json_encode($rooms) ?>;
const homeRooms = <?= json_encode(roomsWithTile()) ?>;
<?php if ($_GET["floor"] != "OG" && in_array($_GET["floor"], $floors)): ?>
document.addEventListener('readystatechange', function () {
if (event.target.readyState === 'complete') {
+33 -3
View File
@@ -10,7 +10,14 @@
* floor Etage; bestimmt zugleich den Zweig Raumtemp/<floor>/
* mqtt Name des Raums im MQTT-Baum: Raumtemp/<floor>/<mqtt>/...
* id Kürzel in den SVG-Element-IDs: <floor>_tmp_<id>, <floor>_<id>_heater
* x, y Position der Kachel im SVG (viewBox 400x300)
* x, y Position der Kachel im SVG (viewBox 400x300) - fehlt bei Räumen
* ohne Kachel
*
* Ein Raum ohne x/y ist trotzdem ein Raum: Geräte lassen sich ihm zuordnen
* (siehe die Spalte actors.room und den Zuordnungsdialog in der Karte
* "Automatismen"), er erscheint nur nicht als Kachel im Grundriss. Das
* betrifft Räume ohne Thermostat - die Küche im EG, die Technikräume -,
* deren Kachel eine Temperatur anzeigen würde, die niemand misst.
*/
// Reihenfolge im Menü und in der Anzeige; OG ist die Standardetage.
@@ -27,15 +34,38 @@ $rooms = [
["floor" => "EG", "mqtt" => "Schlafen", "id" => "schlafen", "x" => 235, "y" => 80],
["floor" => "EG", "mqtt" => "Bad", "id" => "bad", "x" => 253, "y" => 130],
["floor" => "EG", "mqtt" => "Magdalena", "id" => "buero", "x" => 258, "y" => 180],
["floor" => "EG", "mqtt" => "Kueche", "id" => "kueche"],
["floor" => "EG", "mqtt" => "Technik", "id" => "technik"],
["floor" => "UG", "mqtt" => "Buero", "id" => "buero", "x" => 140, "y" => 140],
["floor" => "UG", "mqtt" => "Bad", "id" => "bad", "x" => 210, "y" => 80],
["floor" => "UG", "mqtt" => "Kueche", "id" => "kueche", "x" => 190, "y" => 195],
["floor" => "UG", "mqtt" => "Technik", "id" => "technik"],
];
/** Räume einer Etage, in der Reihenfolge der Tabelle. */
/**
* Räume einer Etage, die eine Kachel im Grundriss haben.
*
* Alles, was zeichnet oder aktualisiert, geht hierüber - ein Raum ohne
* Position hätte keine Stelle im SVG und keine Elemente, die sich füllen
* liessen.
*/
function roomsOnFloor($floor)
{
return array_values(array_filter($GLOBALS["rooms"], function ($room) use ($floor) {
return $room["floor"] == $floor;
return $room["floor"] == $floor && isset($room["x"]);
}));
}
/** Alle Räume, auch die ohne Kachel - für die Geräte-Zuordnung. */
function allRooms()
{
return $GLOBALS["rooms"];
}
/** Nur die Räume mit Kachel, für die Aktualisierungsschleife im Browser. */
function roomsWithTile()
{
return array_values(array_filter($GLOBALS["rooms"], function ($room) {
return isset($room["x"]);
}));
}