From 7c646c5aee7ce894e1ed1433a7381d80c1e6873d Mon Sep 17 00:00:00 2001 From: Moirtz Wagner Date: Sat, 5 Sep 2026 00:04:27 +0200 Subject: [PATCH] Leistungen auf den Kacheln skalieren mit: unter 1 kW in W, darueber in kW Nicht nachgebaut, sondern powerToString() aus common.js benutzt. Sie macht genau das schon, und die Solarseite formatiert dieselben Zahlen damit - eine eigene Regel hier haette bedeutet, dass dieselbe Wallbox an zwei Stellen verschieden gerundet dasteht. common.js wird im Fuss vor den seitenweisen Skripten geladen, steht homeMQTT.js also zur Verfuegung. Ersetzt wird nur das Trennzeichen: auf der Kachel steht ein schmales Leerzeichen zwischen Zahl und Einheit, im Rest der Anwendung ein gewoehnliches. Betroffen sind Garage, Carport OG und Carport EG. Der Regen im Garten bleibt bei Einheit und Nachkommastelle - Millimeter skalieren nicht. Nebenbei: mein Einschub von wechselrichterWert() hatte den Kommentarblock von kachelWert() von seiner Funktion getrennt, er stand seitdem ueber der falschen. Zurueckgesetzt und um die beiden neuen Schluessel ergaenzt. Geprueft mit dem echten Code im Browser: 0 -> "0 W", 999 -> "999 W", 1234 -> "1.23 kW", 12340 -> "12.3 kW"; die Summe der vier Carport-Hoymiles ergibt 1.23 kW und laesst einen fuenften Wechselrichter richtigerweise draussen. Co-Authored-By: Claude Opus 5 --- js/solar/homeMQTT.js | 32 ++++++++++++++++++++++++-------- restricted/rooms.php | 12 +++++++----- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/js/solar/homeMQTT.js b/js/solar/homeMQTT.js index 0ca0866..6fefb04 100644 --- a/js/solar/homeMQTT.js +++ b/js/solar/homeMQTT.js @@ -64,14 +64,6 @@ const homeSVG = { }, mqttData); }, - /** - * Einen Kachelwert lesen und hinschreiben. - * - * "pfad" ist gesetzt, wenn das Geraet mehrere Werte in einer einzigen - * JSON-Nachricht schickt - die beiden Shelly-Zaehler tun das. "stellen" - * schneidet Nachkommastellen ab; ohne Angabe bleibt der Text so, wie das - * Geraet ihn meldet. - */ /** * Die Leistung benannter Wechselrichter, aufsummiert. * @@ -120,6 +112,17 @@ const homeSVG = { /** Merkt sich gemeldete Namen, damit die Konsole nicht zulaeuft. */ gemeldet: {}, + /** + * Einen Kachelwert lesen und hinschreiben. + * + * Woher der Wert kommt, sagt entweder "topic" oder "wechselrichter". + * "pfad" ist gesetzt, wenn das Geraet mehrere Werte in einer einzigen + * JSON-Nachricht schickt - die beiden Shelly-Zaehler tun das. + * + * Wie er dasteht, sagt entweder "format" oder das Paar aus "einheit" und + * "stellen": "stellen" schneidet Nachkommastellen ab, ohne Angabe bleibt + * der Text so, wie das Geraet ihn meldet. + */ kachelWert: function (mqttData, wert) { const roh = wert.wechselrichter ? homeSVG.wechselrichterWert(mqttData, wert) @@ -135,6 +138,19 @@ const homeSVG = { return null; // noch keine vollstaendige Nachricht } } + // Leistungen skalieren mit: unter tausend Watt in W, darueber in kW. + // powerToString() aus common.js macht genau das und wird auf der + // Solarseite fuer dieselben Zahlen benutzt - eine eigene Regel hier + // haette bedeutet, dass dieselbe Wallbox an zwei Stellen verschieden + // gerundet dasteht. + if (wert.format === "leistung") { + const zahl = Number(text); + if (text === "" || isNaN(zahl)) return null; + // Ersetzt wird nur das Trennzeichen: auf der Kachel steht ein + // schmales Leerzeichen, im Rest der Anwendung ein gewoehnliches. + return powerToString(zahl).replace(" ", " "); + } + if (typeof wert.stellen === "number" && text !== "" && !isNaN(Number(text))) { text = Number(text).toFixed(wert.stellen); } diff --git a/restricted/rooms.php b/restricted/rooms.php index 45203ea..ab11236 100644 --- a/restricted/rooms.php +++ b/restricted/rooms.php @@ -13,7 +13,9 @@ * x, y Position der Kachel im SVG (viewBox 400x300) - fehlt bei Räumen * ohne Kachel * werte Was auf der Kachel steht: bis zu drei Messwerte, jeder mit - * topic, optional pfad (Schlüssel in einer JSON-Nachricht), + * topic (oder wechselrichter, siehe Carport), optional pfad + * (Schlüssel in einer JSON-Nachricht) und entweder format + * ("leistung" skaliert selbst zwischen W und kW) oder dem Paar * einheit und stellen (Nachkommastellen). Fehlt der Eintrag, sind * es die drei Thermostatwerte - Soll, Ist, Feuchte - wie bisher. * Eine leere Liste heisst: kein Messwert, die Kachel trägt nur @@ -111,14 +113,14 @@ $rooms = [ "werte" => [ ["wechselrichter" => ["Carport 1-6", "Carport 7-12", "Carport 13-16", "Carport 17-19"], - "feld" => "p_AC", "einheit" => "W", "stellen" => 0, "icon" => "sun"], + "feld" => "p_AC", "format" => "leistung", "icon" => "sun"], ]], // 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" => 72, "y" => 154, "werte" => [ - ["topic" => "solarManager/evPowerOG", "einheit" => "W", "stellen" => 0, + ["topic" => "solarManager/evPowerOG", "format" => "leistung", "icon" => "ev-station"], ]], // Veranda und Terrasse gibt es zweimal, je Wohnpartei eine. In der @@ -136,7 +138,7 @@ $rooms = [ // Veranda OG diese Wechselrichter: // // ["wechselrichter" => ["Veranda OG2-4", "Veranda UG/OG1"], - // "feld" => "p_AC", "einheit" => "W", "stellen" => 0, "icon" => "sun"] + // "feld" => "p_AC", "format" => "leistung", "icon" => "sun"] ["floor" => "AG", "mqtt" => "Veranda EG", "id" => "veranda_eg", "werte" => []], ["floor" => "AG", "mqtt" => "Veranda OG", "id" => "veranda_og", "werte" => []], ["floor" => "AG", "mqtt" => "Terrasse EG", "id" => "terrasse_eg", "x" => 229, "y" => 158, "werte" => []], @@ -146,7 +148,7 @@ $rooms = [ // restricted/config.php. Ohne Kuerzel im Topic ist das die EG-Wallbox. ["floor" => "AG", "mqtt" => "Garage", "id" => "garage", "x" => 131, "y" => 135, "werte" => [ - ["topic" => "solarManager/evPower", "einheit" => "W", "stellen" => 0, + ["topic" => "solarManager/evPower", "format" => "leistung", "icon" => "ev-station"], ]], // Der Garten ist kein Bauteil wie die anderen, aber ein Ort: hier haengen