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;
}