diff --git a/js/solar/homeMQTT.js b/js/solar/homeMQTT.js index 0b953fb..f9bca9e 100644 --- a/js/solar/homeMQTT.js +++ b/js/solar/homeMQTT.js @@ -122,6 +122,12 @@ const homeSVG = { * 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. + * + * "negativ" dreht das Vorzeichen. Ein Zaehler zaehlt in der Richtung, in + * der er eingebaut ist - einer der beiden meldet den Bezug deshalb mit + * Minus. Das gehoert an die Anzeige und nicht an den Zaehler: die + * Automatiken und die Statistik lesen dieselbe Nachricht und rechnen mit + * dem Vorzeichen, das dort steht. */ kachelWert: function (mqttData, wert) { const roh = wert.wechselrichter @@ -138,6 +144,13 @@ const homeSVG = { return null; // noch keine vollstaendige Nachricht } } + if (wert.negativ) { + const zahl = Number(text); + if (text === "" || isNaN(zahl)) return null; + // "+ 0" macht aus -0 wieder 0: "-0 W" hat noch niemanden erfreut. + text = String(-zahl + 0); + } + // 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 diff --git a/js/solar/settings.js b/js/solar/settings.js index ff3efc4..1d88880 100644 --- a/js/solar/settings.js +++ b/js/solar/settings.js @@ -316,22 +316,29 @@ function kachelQuelle(wert) { * und aus drei Kuerzeln wuerden drei Zeilen. */ function kachelWertKurz(wert, kachel) { - if (wert.wechselrichter) { - const n = wert.wechselrichter.length; - return "Wechselrichter (" + n + ")"; - } - const treffer = katalogTreffer(wert); const einheit = wert.format === "leistung" ? "W/kW" : (wert.einheit || ""); - if (treffer) { + const treffer = wert.wechselrichter ? null : katalogTreffer(wert); + let text; + + if (wert.wechselrichter) { + text = "Wechselrichter (" + wert.wechselrichter.length + ")"; + } else if (treffer) { + // Das Geraet steht nur dabei, wenn es ein fremdes ist - im eigenen Raum + // waere es auf jeder Zeile dasselbe Wort. const fremd = !kachel || treffer.geraet.raum !== kachel.name; - return (fremd ? treffer.geraet.label + " · " : "") + treffer.wert.name + text = (fremd ? treffer.geraet.label + " · " : "") + treffer.wert.name + (einheit ? " " + einheit : ""); + } else { + const topic = wert.topic || ""; + const teile = topic.split("/"); + text = teile[teile.length - 1] || topic; + if (wert.pfad) text += " · " + wert.pfad; + if (einheit) text += " " + einheit; } - const topic = wert.topic || ""; - const teile = topic.split("/"); - let text = teile[teile.length - 1] || topic; - if (wert.pfad) text += " · " + wert.pfad; - return einheit ? text + " " + einheit : text; + + // Das Minus steht vorne, wie es auf der Kachel auch stuende - und zwar bei + // jeder Herkunft, deshalb erst hier und nicht in den drei Zweigen. + return wert.negativ ? "−" + text : text; } /** Eine Kachel im Modell finden. */ @@ -575,6 +582,10 @@ function kachelWertZeile(wert, i, kachel) { + '" + + '" + '" @@ -638,6 +649,7 @@ function kachelWertLesen(feldZeile) { } const icon = (hol("icon") || "").trim(); if (icon) wert.icon = icon; + if (hol("negativ")) wert.negativ = true; if (hol("gross")) wert.gross = true; return wert; } diff --git a/restricted/kacheln.php b/restricted/kacheln.php index 3654b95..b5e711e 100644 --- a/restricted/kacheln.php +++ b/restricted/kacheln.php @@ -17,6 +17,8 @@ * format "leistung" skaliert selbst zwischen W und kW * einheit sonst die Einheit, die hinter der Zahl steht * stellen Nachkommastellen (0-3) + * negativ das Vorzeichen umdrehen - fuer Zaehler, die verkehrt + * herum eingebaut sind * gross die Zahl steht gross auf der Kachel * icon Symbol vor der Zahl: der Name eines Bootstrap-Icons ohne * das "bi-" davor ("thermometer-half"). Erlaubt ist jedes, @@ -357,6 +359,9 @@ function kachelWertPruefen($wert, $nummer) } $sauber["icon"] = $icon; } + if (!empty($wert["negativ"])) { + $sauber["negativ"] = true; + } if (!empty($wert["gross"])) { $sauber["gross"] = true; }