@ullij
Hi, das war es nicht wonach ich suchte. Ich habe es jetzt herausgefunden.
Ich habe es jetzt so gelöst, dass ich
einen Datenpunkt im Format number angelegt habe und in InfluxDB speichern lasse
im Skript bei jedem Aufruf alle historischen Daten lösche
im Skript 24 Daten (prozentualer Verbrauch zu dieser Tageszeit) speichere (und das "from" des Datenpunkts missbrauche um meinen eigenen Text/Beschreibung zu dem entsprechenden Wert/Verbrauch zu speichern)
in Grafana sowohl das "from" als auch "value" in einem Table anzeigen lasse (und die echte Zeit ausblende)
So siehts jetzt in Grafana aus:
33fb0238-980e-4184-8c43-78926abfa18f-grafik.png
Das ist das Skript (JS-export vom blockly):
Spoiler
var wert, ende, anfang, wert_prozentual, stundenanalyse, anzahl_datensaetze, i, result, zeit, stunde, j, zeitstempel, ursprung;
function listsRepeat(value, n) {
var array = [];
for (var i = 0; i < n; i++) {
array[i] = value;
}
return array;
}
// Statistik nach Tageszeit sortiert
// Timeshift in Tagen [0]
ende = parseFloat((new Date().getTime())) - parseFloat(0) * 86400000;
// Dauer in Tage [7]
anfang = parseFloat(ende) - parseFloat(7) * 86400000;
wert_prozentual = listsRepeat(0, 24);
sendTo("influxdb.0", "getHistory", {
"id": 'javascript.0.energycounter.ec_pulses',
"options": {start: anfang, end: ende, aggregate: "none"}
}, async function (result) {
stundenanalyse = listsRepeat(0, 24);
anzahl_datensaetze = getAttr(result, 'result').length;
var i_end = parseFloat(anzahl_datensaetze) - 1;
var i_inc = 1;
if (0 > i_end) {
i_inc = -i_inc;
}
for (i = 0; i_inc >= 0 ? i <= i_end : i >= i_end; i += i_inc) {
// .val=value .ts=timestamp
zeit = getAttr(result, (['result.',i,'.ts'].join('')));
stunde = getDateObject(zeit).getHours();
// Analyse in welcher Stunde des Tages der Energiepuls kam
stundenanalyse[((parseFloat(stunde) + 1) - 1)] = parseFloat(stundenanalyse[((parseFloat(stunde) + 1) - 1)]) + 1;
}
console.log((['Tagesstatistik vom ',formatDate(getDateObject(anfang), "JJJJ.MM.TT SS:mm:ss.sss"),' bis ',formatDate(getDateObject(ende), "JJJJ.MM.TT SS:mm:ss.sss")].join('')));
for (i = 0; i <= 23; i++) {
wert = stundenanalyse[((parseFloat(i) + 1) - 1)];
wert_prozentual[((parseFloat(i) + 1) - 1)] = Math.round((parseFloat((parseFloat(wert) / anzahl_datensaetze)) * 100)*10)/10;
console.log(([i,' Uhr: ',wert_prozentual[((parseFloat(i) + 1) - 1)],' %'].join('')));
}
// Jetzt wird die Statistik in InfluxDB geschrieben
sendTo("influxdb.0", "deleteAll", {
"id": 'javascript.0.test.statistiker'
});
for (j = 0; j <= 23; j++) {
zeitstempel = parseFloat(1685311202800) + parseFloat(j) * 60000;
wert = wert_prozentual[((parseFloat(j) + 1) - 1)];
console.log(('Ergebnis der Anbfrage: ' + String(wert)));
ursprung = String(('' + j)) + ' Uhr';
sendTo("influxdb.0", "storeState", {
"id": 'javascript.0.test.statistiker',
"state": {ts: zeitstempel, val: wert, ack: false, from: ursprung}
}, async function (result) {
// Rückmeldung von influxDB ausgeben:
});
}
});
Die zwei Queries in Grafana:
SELECT "from" FROM "autogen"."javascript.0.test.statistiker" WHERE $timeFilter
SELECT "value" FROM "autogen"."javascript.0.test.statistiker" WHERE $timeFilter
Und hier die anderen Einstellungen (overrides und transformations) in Grafana:
ea635dd2-270a-4690-8e64-e19f069e4483-grafik.png
Wieso schreibe ich das so ausführlich? Vielleicht ist es ja auch für andere Leute interessant:
Grafana zur Visualisierung der Iobroker-Daten zu nutzen -> Grafana kann man auf dem PC installieren und so Ressourcen beim Iobroker-Rechner (zB Raspberry 1b bei mir) sparen
Beliebigen Text (zB. der letzte Emailabsender, die letzte Zeile der Iobroker-Log-Datei oder einen Zufallstext zur Begrüßung) im Grafana-Dashboard anzuzeigen (ist im Skript die Kategorie zB. "7 Uhr")
Viel Spass damit! 🙂