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 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 00:04:27 +02:00
co-authored by Claude Opus 5
parent 3073c5afdb
commit 7c646c5aee
2 changed files with 31 additions and 13 deletions
+24 -8
View File
@@ -64,14 +64,6 @@ const homeSVG = {
}, mqttData); }, 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. * Die Leistung benannter Wechselrichter, aufsummiert.
* *
@@ -120,6 +112,17 @@ const homeSVG = {
/** Merkt sich gemeldete Namen, damit die Konsole nicht zulaeuft. */ /** Merkt sich gemeldete Namen, damit die Konsole nicht zulaeuft. */
gemeldet: {}, 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) { kachelWert: function (mqttData, wert) {
const roh = wert.wechselrichter const roh = wert.wechselrichter
? homeSVG.wechselrichterWert(mqttData, wert) ? homeSVG.wechselrichterWert(mqttData, wert)
@@ -135,6 +138,19 @@ const homeSVG = {
return null; // noch keine vollstaendige Nachricht 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))) { if (typeof wert.stellen === "number" && text !== "" && !isNaN(Number(text))) {
text = Number(text).toFixed(wert.stellen); text = Number(text).toFixed(wert.stellen);
} }
+7 -5
View File
@@ -13,7 +13,9 @@
* x, y Position der Kachel im SVG (viewBox 400x300) - fehlt bei Räumen * x, y Position der Kachel im SVG (viewBox 400x300) - fehlt bei Räumen
* ohne Kachel * ohne Kachel
* werte Was auf der Kachel steht: bis zu drei Messwerte, jeder mit * 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 * einheit und stellen (Nachkommastellen). Fehlt der Eintrag, sind
* es die drei Thermostatwerte - Soll, Ist, Feuchte - wie bisher. * es die drei Thermostatwerte - Soll, Ist, Feuchte - wie bisher.
* Eine leere Liste heisst: kein Messwert, die Kachel trägt nur * Eine leere Liste heisst: kein Messwert, die Kachel trägt nur
@@ -111,14 +113,14 @@ $rooms = [
"werte" => [ "werte" => [
["wechselrichter" => ["Carport 1-6", "Carport 7-12", "Carport 13-16", ["wechselrichter" => ["Carport 1-6", "Carport 7-12", "Carport 13-16",
"Carport 17-19"], "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 // Am Carport OG haengt der go-e Charger. Die Ladeleistung ist das
// Einzige, was sich hier messen laesst - und sie beantwortet die Frage, // Einzige, was sich hier messen laesst - und sie beantwortet die Frage,
// die man sich vor dem Carport stellt: laedt gerade jemand? // die man sich vor dem Carport stellt: laedt gerade jemand?
["floor" => "AG", "mqtt" => "Carport OG", "id" => "carport_og", "x" => 72, "y" => 154, ["floor" => "AG", "mqtt" => "Carport OG", "id" => "carport_og", "x" => 72, "y" => 154,
"werte" => [ "werte" => [
["topic" => "solarManager/evPowerOG", "einheit" => "W", "stellen" => 0, ["topic" => "solarManager/evPowerOG", "format" => "leistung",
"icon" => "ev-station"], "icon" => "ev-station"],
]], ]],
// Veranda und Terrasse gibt es zweimal, je Wohnpartei eine. In der // Veranda und Terrasse gibt es zweimal, je Wohnpartei eine. In der
@@ -136,7 +138,7 @@ $rooms = [
// Veranda OG diese Wechselrichter: // Veranda OG diese Wechselrichter:
// //
// ["wechselrichter" => ["Veranda OG2-4", "Veranda UG/OG1"], // ["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 EG", "id" => "veranda_eg", "werte" => []],
["floor" => "AG", "mqtt" => "Veranda OG", "id" => "veranda_og", "werte" => []], ["floor" => "AG", "mqtt" => "Veranda OG", "id" => "veranda_og", "werte" => []],
["floor" => "AG", "mqtt" => "Terrasse EG", "id" => "terrasse_eg", "x" => 229, "y" => 158, "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. // restricted/config.php. Ohne Kuerzel im Topic ist das die EG-Wallbox.
["floor" => "AG", "mqtt" => "Garage", "id" => "garage", "x" => 131, "y" => 135, ["floor" => "AG", "mqtt" => "Garage", "id" => "garage", "x" => 131, "y" => 135,
"werte" => [ "werte" => [
["topic" => "solarManager/evPower", "einheit" => "W", "stellen" => 0, ["topic" => "solarManager/evPower", "format" => "leistung",
"icon" => "ev-station"], "icon" => "ev-station"],
]], ]],
// Der Garten ist kein Bauteil wie die anderen, aber ein Ort: hier haengen // Der Garten ist kein Bauteil wie die anderen, aber ein Ort: hier haengen