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>
72 lines
3.3 KiB
PHP
72 lines
3.3 KiB
PHP
<?php
|
|
/*
|
|
* Einzige Quelle für die Räume der Home-Ansicht.
|
|
*
|
|
* Aus dieser Tabelle entstehen sowohl die SVG-Kacheln in home.php als auch
|
|
* die Aktualisierungsschleife in js/solar/homeMQTT.js (die Tabelle wird dafür
|
|
* als JSON in die Seite geschrieben). Ein neuer oder umbenannter Raum ist
|
|
* damit eine Zeile hier statt drei Stellen im Code.
|
|
*
|
|
* 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) - 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.
|
|
$floors = ["OG", "EG", "UG"];
|
|
|
|
$rooms = [
|
|
["floor" => "OG", "mqtt" => "Wohnzimmer", "id" => "wozi", "x" => 180, "y" => 140],
|
|
["floor" => "OG", "mqtt" => "KiZi", "id" => "kizi", "x" => 130, "y" => 80],
|
|
["floor" => "OG", "mqtt" => "Schlafzimmer", "id" => "schlafen", "x" => 235, "y" => 70],
|
|
["floor" => "OG", "mqtt" => "Bad", "id" => "bad", "x" => 260, "y" => 120],
|
|
["floor" => "OG", "mqtt" => "Buero", "id" => "buero", "x" => 265, "y" => 175],
|
|
["floor" => "EG", "mqtt" => "Wohnzimmer", "id" => "wozi", "x" => 185, "y" => 150],
|
|
["floor" => "EG", "mqtt" => "Florian", "id" => "kizi", "x" => 130, "y" => 90],
|
|
["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, 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 && 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"]);
|
|
}));
|
|
}
|