diff --git a/ajax/room.php b/ajax/room.php index 36c6ee7..508fe1a 100644 --- a/ajax/room.php +++ b/ajax/room.php @@ -54,7 +54,10 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { if (($_GET["action"] ?? "") === "temp") { // Bewusst derselbe Weg wie im alten Thermostat-Modal: das Topic // Raumtemp///changeSetTemp. - $raum = preg_replace('/[^A-Za-z0-9_]/', '', strval($body["room"] ?? "")); + // Das Leerzeichen muss durch: Raumnamen wie "Carport EG" haben + // eines, und ohne es findet der Vergleich weiter unten den Raum + // nicht mehr. + $raum = preg_replace('/[^A-Za-z0-9_ ]/', '', strval($body["room"] ?? "")); $temp = intval($body["temp"] ?? 0); if ($temp < 10 || $temp > 30) { raumAntwort(["error" => "Temperatur außerhalb 10–30 °C."], 400); @@ -78,7 +81,13 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { // --- Inhalt des Modals ---------------------------------------------------- -$schluessel = preg_replace('/[^A-Za-z0-9_]/', '', strval($_GET["room"] ?? "")); +// Das Leerzeichen gehoert zu den erlaubten Zeichen. Ohne es wurde aus +// "AG_Carport EG" ein "AG_CarportEG", und der Vergleich gegen die +// gespeicherte Zuordnung "AG/Carport EG" ging ins Leere - das Modal meldete +// dann "Diesem Raum ist noch nichts zugeordnet". Aufgefallen ist es erst mit +// dem Aussengelaende: dort haben sechs von neun Raeumen ein Leerzeichen im +// Namen, auf den anderen Etagen keiner von achtzehn. +$schluessel = preg_replace('/[^A-Za-z0-9_ ]/', '', strval($_GET["room"] ?? "")); $teile = explode("_", $schluessel, 2); $etage = $teile[0] ?? ""; $name = $teile[1] ?? ""; diff --git a/assets/img/AG.png b/assets/img/AG.png index de12909..1c87df6 100644 Binary files a/assets/img/AG.png and b/assets/img/AG.png differ diff --git a/restricted/rooms.php b/restricted/rooms.php index 5fd1a65..690c4bc 100644 --- a/restricted/rooms.php +++ b/restricted/rooms.php @@ -85,10 +85,13 @@ $rooms = [ "einheit" => "W", "stellen" => 0, "gross" => true], ["topic" => "wasser/main/value", "einheit" => "m³", "stellen" => 1], ]], - // Außengelände: noch ohne x/y, es gibt ja keinen Lageplan, auf den eine - // Kachel zeigen könnte. Zuordnen und Automatiken anlegen geht trotzdem - - // dafür zählt allein, dass der Raum hier steht. Kommt der Lageplan, sind - // es zwei Zahlen je Zeile, gemessen mit tools/kachelpositionen.php. + // Außengelände: der Grundriss ist ein freigestelltes Rendering des + // Grundstücks (assets/img/AG.png). Die Kachelpositionen sind darauf + // eingemessen; nachklicken geht mit tools/kachelpositionen.php. + // + // Messwerte nur, wo es etwas zu messen gibt: die beiden Wallboxen und + // der Regen. Veranda, Terrasse und Pergola tragen ihren Namen - dort + // haengen Licht und Rollladen, und die zeigt das Raum-Modal. // // Die Namen stammen von den Geräten selbst: die Hoymiles heißen seit jeher // "Carport 1-6" und "Veranda OG2-4", das Sonnensegel sitzt an der Pergola. @@ -96,7 +99,14 @@ $rooms = [ // Etagen. Die Wattpilot der EG-Partei steht dagegen in der Garage, siehe // restricted/config.php; am Carport OG haengt der go-e Charger. ["floor" => "AG", "mqtt" => "Carport EG", "id" => "carport_eg", "x" => 156, "y" => 214, "werte" => []], - ["floor" => "AG", "mqtt" => "Carport OG", "id" => "carport_og", "x" => 38, "y" => 155, "werte" => []], + // Am Carport OG haengt der go-e Charger. Die Ladeleistung ist das + // Einzige, was sich hier messen laesst - und sie beantwortet die Frage, + // die man sich vor dem Carport stellt: laedt gerade jemand? + ["floor" => "AG", "mqtt" => "Carport OG", "id" => "carport_og", "x" => 38, "y" => 155, + "werte" => [ + ["topic" => "solarManager/evPowerOG", "einheit" => "W", "stellen" => 0, + "gross" => true], + ]], // Veranda und Terrasse gibt es zweimal, je Wohnpartei eine. In der // Draufsicht laege das obere Paar genau auf dem unteren - deshalb die // Schraegsicht, siehe restricted/aussenplan.php. @@ -105,10 +115,24 @@ $rooms = [ ["floor" => "AG", "mqtt" => "Terrasse EG", "id" => "terrasse_eg", "x" => 212, "y" => 160, "werte" => []], ["floor" => "AG", "mqtt" => "Terrasse OG", "id" => "terrasse_og", "x" => 205, "y" => 122, "werte" => []], ["floor" => "AG", "mqtt" => "Pergola", "id" => "pergola", "x" => 339, "y" => 108, "werte" => []], - ["floor" => "AG", "mqtt" => "Garage", "id" => "garage", "x" => 103, "y" => 134, "werte" => []], + // In der Garage steht die Wattpilot der EG-Partei, siehe fahrzeuge() in + // restricted/config.php. Ohne Kuerzel im Topic ist das die EG-Wallbox. + ["floor" => "AG", "mqtt" => "Garage", "id" => "garage", "x" => 103, "y" => 134, + "werte" => [ + ["topic" => "solarManager/evPower", "einheit" => "W", "stellen" => 0, + "gross" => true], + ]], // Der Garten ist kein Bauteil wie die anderen, aber ein Ort: hier haengen // der Regensensor und die beiden Ventilsteuerungen. - ["floor" => "AG", "mqtt" => "Garten", "id" => "garten", "x" => 288, "y" => 180, "werte" => []], + ["floor" => "AG", "mqtt" => "Garten", "id" => "garten", "x" => 288, "y" => 180, + "werte" => [ + // gatherRainData.py im SolarManager legt auf Wetter/Regen ein JSON + // mit tage1 bis tage7 und dem Stand des Sammlers. "tage1" ist der + // laufende Tag - die Zahl, die man im Garten wissen will. Ein + // laengeres Fenster ist ein geaenderter Pfad und sonst nichts. + ["topic" => "Wetter/Regen", "pfad" => "tage1", "einheit" => "mm", + "stellen" => 1, "gross" => true], + ]], ]; /**