Hallo Community,
ich habe mal eine Frage zum nachfolgenden Script.
Damit wird von einem Hoymiles Wechselrichter der Tageswert ermittelt (da die OpenDTU Abends ohne Sonne den Tagesertrag auf 0 Watt stellt).
Es wird also mit einem anderen Script regelmäßig in die influxdb geschrieben und untenstehendes Script liest dann für den laufenden Tag die Werte und speichert die in einem Datenpunkt für die VIS.
Das läuft den ganzen Tag perfekt.
Nur am Folgetag werden die Daten des Vortages gelesen (anstatt vom aktuellen Tag) und in der Viso dargestellt. Ich habe also früh morgens bei Sonnenaufgang den Ertrag des Vortages und darauf wird dann summiert.
Stoppe / Starte ich das Script passt es sofort und er holt sich die Werte des aktuellen Tages.
Der Trigger ist übrigens, wenn die openDTU den Gesamtertrag aktualisiert.
Ich habe mal bei der Instanz für javascript.0 einen nächtlichen Neustart eingestellt (um 0.02 Uhr), dann passt es auch - aber dafür verhalten sich dann andere Scripte merkwürdig (z.B. funktioniert der Nachlauf der Rolläden nicht sofort). Also auch keine Lösung.
Hier mal das Ergebnis aus der influxdb, Measurement = "mqtt.0.1164a00982dd.0.yieldday".
Von gestern Abend bis zur Abschaltung (0) und weiter heute morgen.
Also alles da wie es soll, wie ich finde.
1722968266507000000 true system.adapter.mqtt.0 0 8430
1722968271505000000 true system.adapter.mqtt.0 0 8431
1722968816513000000 true system.adapter.mqtt.0 0 8440
1722968821509000000 true system.adapter.mqtt.0 0 8441
1722969636516000000 true system.adapter.mqtt.0 0 8450
1722969641518000000 true system.adapter.mqtt.0 0 8451
1722972361587000000 true system.adapter.mqtt.0 0 8456
1722972397824000000 true system.adapter.mqtt.0 0 0
1723004701279000000 true system.adapter.mqtt.0 0 9
1723004706308000000 true system.adapter.mqtt.0 0 10
1723005571282000000 true system.adapter.mqtt.0 0 19
1723005576283000000 true system.adapter.mqtt.0 0 20
1723006056281000000 true system.adapter.mqtt.0 0 28
1723006061337000000 true system.adapter.mqtt.0 0 30
var result;
var tagesertragmin = 0;
var tagesertragmax = 0;
//schedule("* * * * *", async () => {
on({ id: 'mqtt.0.1164a00982dd.0.yieldtotal' /* BKW01/1164a00982dd/0/yieldtotal */, change: 'ne' }, async (obj) => {
let value = obj.state.val;
let oldValue = obj.oldState.val;
getHistory('influxdb.0', {
id: 'mqtt.0.1164a00982dd.0.yieldday',
start: /* start of day */ (() => { const d = new Date(); d.setHours(2, 5, 0, 0); return d.getTime(); })(),
end: /* end of day */ (() => { const d = new Date(); d.setHours(23, 59, 00, 0); return d.getTime(); })(),
aggregate: 'max',
removeBorderValues: true
},
async (err, result) => {
for (var i = 0; i < result.length; i++) {
let tagesertragmax = parseFloat(result[i].val);
if (tagesertragmax > tagesertragmin) {
tagesertragmin = tagesertragmax;
tagesertragwert = tagesertragmax;
//console.log(tagesertragmax);
}
}
if (tagesertragwert > 0) {
setState("0_userdata.0.BKW01.BKW01_Ertrag_aktueller_Tag",tagesertragwert);
console.log(tagesertragwert);
}
});
});
Hat dazu jemand eine Idee?
Danke für eure Unterstützung,
Elmar