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