Wechselrichter ueber ihren Namen, Symbole auf den Kacheln
Carport EG und Veranda OG zeigen jetzt ihre PV-Leistung. Der SolarManager legt die Hoymiles unter solarManager/inverters0, /inverters1 und so fort ab - die Nummer ist eine Position in einer Liste und sagt nichts darueber, welches Dach gemeint ist. Ein fest eingetragenes "inverters3" waere stillschweigend falsch, sobald sich die Reihenfolge aendert. Deshalb sucht wechselrichterWert() ueber invertersN/name und summiert die genannten auf. Das ist eine dritte Art, an einen Wert zu kommen - neben Topic und JSON-Pfad -, aber sie bleibt auf einen Schluessel und eine Funktion beschraenkt, und der gewoehnliche Weg ist unberuehrt. Findet sie keinen der Namen, schreibt sie die vorhandenen in die Konsole; sonst stuende nur ein Strich auf der Kachel und niemand wuesste, woran es liegt. tileTopics() unterschied bisher nicht und machte aus dem fehlenden Topic ein "/#" - eine Anmeldung auf einen leeren Zweig. Dazu Symbole vor den Zahlen. "0 W" allein sagt nicht, ob geladen, erzeugt oder verbraucht wird, und die Einheit beantwortet das nicht. Die Icons kommen als Schrift und nicht als Pfad: css/bootstrap-icons.min.css ist ohnehin eingebunden, und SVG-Text darf dieselbe Schriftfamilie benutzen wie HTML. Die Codepunkte stehen in kachelIcon() mit dem Namen daneben, abgeschrieben aus genau dieser CSS. Wegen font-display:block bleiben die Symbole bis zum Laden der Schriftdatei unsichtbar - die Werte stehen so lange ohnehin auf einem Strich. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+52
-2
@@ -72,9 +72,59 @@ const homeSVG = {
|
||||
* schneidet Nachkommastellen ab; ohne Angabe bleibt der Text so, wie das
|
||||
* Geraet ihn meldet.
|
||||
*/
|
||||
/**
|
||||
* Die Leistung benannter Wechselrichter, aufsummiert.
|
||||
*
|
||||
* Der SolarManager legt sie unter solarManager/inverters0, /inverters1
|
||||
* und so fort ab - die Nummer ist eine Position in einer Liste und sagt
|
||||
* nichts darueber, welches Dach gemeint ist. Deshalb wird ueber
|
||||
* invertersN/name gesucht: aendert sich die Reihenfolge, findet die
|
||||
* Kachel ihren Wechselrichter trotzdem, statt stillschweigend das
|
||||
* falsche Dach anzuzeigen.
|
||||
*/
|
||||
wechselrichterWert: function (mqttData, wert) {
|
||||
const zweig = mqttData["solarManager"];
|
||||
if (!zweig) return null;
|
||||
|
||||
const gesucht = wert.wechselrichter;
|
||||
const feld = wert.feld || "p_AC";
|
||||
let summe = 0;
|
||||
const gefunden = [];
|
||||
const vorhanden = [];
|
||||
|
||||
for (const schluessel in zweig) {
|
||||
if (!schluessel.startsWith("inverters")) continue;
|
||||
const wr = zweig[schluessel];
|
||||
if (!wr || typeof wr.name === "undefined") continue;
|
||||
const name = String(wr.name);
|
||||
vorhanden.push(name);
|
||||
if (gesucht.indexOf(name) === -1) continue;
|
||||
if (typeof wr[feld] === "undefined") continue;
|
||||
summe += Number(wr[feld]);
|
||||
gefunden.push(name);
|
||||
}
|
||||
|
||||
if (!gefunden.length) {
|
||||
// Ein Name, den es nicht gibt, ergaebe sonst nur einen Strich auf
|
||||
// der Kachel und keinen Hinweis, woran es liegt.
|
||||
if (vorhanden.length && !homeSVG.gemeldet[gesucht.join("|")]) {
|
||||
homeSVG.gemeldet[gesucht.join("|")] = true;
|
||||
console.warn("Kachel: kein Wechselrichter namens " + gesucht.join(", ")
|
||||
+ ". Vorhanden sind: " + vorhanden.join(", "));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return summe;
|
||||
},
|
||||
|
||||
/** Merkt sich gemeldete Namen, damit die Konsole nicht zulaeuft. */
|
||||
gemeldet: {},
|
||||
|
||||
kachelWert: function (mqttData, wert) {
|
||||
const roh = homeSVG.ausTopic(mqttData, wert.topic);
|
||||
if (typeof roh === "undefined") return null;
|
||||
const roh = wert.wechselrichter
|
||||
? homeSVG.wechselrichterWert(mqttData, wert)
|
||||
: homeSVG.ausTopic(mqttData, wert.topic);
|
||||
if (roh === null || typeof roh === "undefined") return null;
|
||||
let text = String(roh);
|
||||
if (wert.pfad) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user