Ich habe mir jetzt ein neues Skript gebaut, dass direkt aus den Objekten von Sourceanalytix eine HTML Tabelle erstellt. Diese funktioniert auch ganz gut, obwohl ich da bestimmt noch ein paar Verbesserungen durchführen werde.
Falls es jemanden interessiert:
// Erstelle ein HTML-Objekt im Verzeichnis 0_userdata.0.test
/*
* >>>>>>> Hier Eingabewerte <<<<<<<
*/
var anzeigeName = 'Computer';
var verzeichnisSave = '0_userdata.0.HTML.StromverbrauchComputer';
var verzeichnisPfad = 'sourceanalytix.0.0_userdata__0__Energiezaehler__Computer';
// 1 für "consumed", 2 für delivered
var methode = 2;
//>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<
createState(verzeichnisSave, {
type: 'string',
common: {
name: 'HTML-Objekt',
role: 'html',
read: true,
write: false,
},
native: {},
});
//schedule("*/30 * * * *", async function () {
on({ id: [].concat(['0_userdata.0.TabellenHTMLAktualisieren']), change: "any" }, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
// Jahresvariablen
var aktuellesDatum = new Date(),
jahr = aktuellesDatum.getFullYear(),
vorJahr = jahr - 1;
// Gesamtvariable
var GesamtJetzt = 0,
GesamtVorher = 0,
GesamtKostenJetzt = 0,
GesamtKostenVorher = 0;
/*
* Hier den Spaltennamen eingeben
*/
// Erstelle den HTML-Code für die Tabelle
var tableHTML = '<table><thead><tr><th>' + anzeigeName + '</th><th>Dieses Jahr</th><th>Letztes Jahr</th><th>Kosten</th></tr></thead><tbody>';
var names = "";
for (var i = 1; i <= 12; i++) {
var month = (i < 10) ? "0" + i : i;
if (i == 1) {
names = "January";
} else if (i == 2) {
names = "February";
} else if (i == 3) {
names = "March";
} else if (i == 4) {
names = "April";
} else if (i == 5) {
names = "May";
} else if (i == 6) {
names = "June";
} else if (i == 7) {
names = "July";
} else if (i == 8) {
names = "August";
} else if (i == 9) {
names = "September";
} else if (i == 10) {
names = "October";
} else if (i == 11) {
names = "November";
} else if (i == 12) {
names = "December";
}
/*
* Hier den Quellpfad angeben
*/
if (methode == 1) {
var valueThisYear = getState(verzeichnisPfad + '.' + jahr + ".consumed.months." + month + "_" + names).val;
var cost = valueThisYear * 0.33;
GesamtJetzt += valueThisYear;
var valueLastYear = getState(verzeichnisPfad + '.' + vorJahr + ".consumed.months." + month + "_" + names).val;
var costLast = valueLastYear * 0.33;
GesamtVorher += valueLastYear;
GesamtKostenJetzt += cost;
tableHTML += '<tr><td>' + i + '</td><td>' + valueThisYear + '</td><td>' + valueLastYear + '</td><td>' + cost.toFixed(2) + ' | ' + costLast.toFixed(2) + '</td></tr>';
} else if (methode == 2) {
var valueThisYear = getState(verzeichnisPfad + '.' + jahr + ".delivered.months." + month + "_" + names).val;
var cost = valueThisYear * 0.33;
GesamtJetzt += valueThisYear;
var valueLastYear = getState(verzeichnisPfad + '.' + vorJahr + ".delivered.months." + month + "_" + names).val;
GesamtVorher += valueLastYear;
var costLast = valueLastYear * 0.33;
GesamtKostenJetzt += cost;
tableHTML += '<tr><td>' + i + '</td><td>' + valueThisYear + '</td><td>' + valueLastYear + '</td><td>' + cost.toFixed(2) + ' | ' + costLast.toFixed(2) + '</td></tr>';
}
}
// Zwei Nachkommastellen
GesamtJetzt = Math.round(GesamtJetzt * 100) / 100;
GesamtVorher = Math.round(GesamtVorher * 100) / 100;
GesamtKostenJetzt = Math.round(GesamtKostenJetzt * 100) / 100;
GesamtKostenVorher = GesamtVorher * 0.33;
GesamtKostenVorher = Math.round(GesamtKostenVorher * 100) / 100;
tableHTML += '<tr><td>' + "Ge" + '</td><td>' + GesamtJetzt + '</td><td>' + GesamtVorher + '</td><td>' + GesamtKostenJetzt + ' | ' + GesamtKostenVorher + '</td></tr>';
tableHTML += '</tbody></table>';
/*
* Hier den Speicherpfad angeben (2x)
*/
// Schreibe den HTML-Code in den HTML-Objektzustand als Zeichenfolge
setState(verzeichnisSave, { val: tableHTML, ack: true });
// Lese den HTML-Code als Zeichenfolge
var tableHTMLString = getState(verzeichnisSave).val;
// Gib den HTML-Code in der Konsole aus
// console.log(tableHTMLString);
});