@iobaer
Das sind meine Änderungen am original Script
* Skript Name: Shelly-Verbrauch
* Skript Version: 1.60
* Erstell-Datum: 08. Oktober 2021 | Update: 20. Juli 2022 | Override Functions by SpacerX 26.09.2022 (Zeile 402)
Ab Zeile 402 sieht mein Skript dann so aus.
Die Funktionen die einer Änderung bedurften werden einfach überschrieben. So muss ich nicht Quer durch den Code Änderungen vornehmen und bei Updates kann ich schnell anpassen.
Ich habe die Hinweise mal im Code belassen.
Zu beachten ist, es so angepasst ist das die Tageswerte um 23:59 Uhr, Wochenwerte am Sonntag um 23:59 Uhr, Monatswerte am letzten Tag des Monats um 23:59 Uhr und Jahreswerte am 31 Dez. um 23:59.
In Zeile 409 wird dann der Userdatenpunkt definiert.
/*
* Override Functions
* @autor 2022 SpacerX <spacerx@rbe-base.de>
* Überschreibt Funktionen um Datenpunkte unter 0_userdata.0 zu erstellen
*
*** START SpacerX ***/
// Userdatenpunkt
var userdir = "0_userdata.0."; // Abschließender Punkt !!! WICHTIG !!!
/**
* Letzten des Monats berechnen.
* @param {Date} oHeute
*/
function letzterDesMonats(oHeute) {
return new Date(oHeute.getFullYear(), oHeute.getMonth() + 1, 0).getDate();
}
//Override at row 48
// Shelly Verbrauch aktualisieren - nachts um 23:59 Uhr
function shelly_vebrauch_tag() {
// Nochmals das Tagesupdate durchlaufen, damit die restlichen Werte gelesen werden
shelly_verbrauch_update();
// Datumsvariable
var heute = new Date();
// Heute zu Gestern verschieben. Täglich um 23:59 Uhr
verschiebe_verbrauch_objekt("heute", "gestern");
log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
// aktuelle Woche in letzte Woche verschieben. Am Sonntag um 23:59 Uhr
if (heute.getDay() === 0) { /*line changed by spacerx (Sonntag=0, Montag=1)*/
verschiebe_verbrauch_objekt("diese_woche", "letzte_woche");
log("Shelly Verbrauch: Werte für diese und letzte Woche aktualisiert!");
}
// aktueller Monat in letzten Monat verschieben. Am letzten des Monats um 23:59 Uhr
if (heute.getDate() === letzterDesMonats(heute)) { /*line changed by spacerx*/
verschiebe_verbrauch_objekt("dieser_monat", "letzter_monat");
log("Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!");
}
// aktuelles Jahr in letztes Jahr verschieben. Am letzten Tag des Jahres um 23:59 Uhr
if (heute.getDate() === letzterDesMonats(heute) && heute.getMonth() === 11) { /*line changed by spacerx (Jan=0, Dez=11)*/
verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
}
}
//Override at row 254
//Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
function verschiebe_verbrauch_objekt(von, nach) {
$('state[id=' + userdir + datenpunkt + '*.*.' + von + ']').each(function (id, i) { /*line changed by spacerx*/
// Temporärer Gruppen-Datenpunkt
var tmp_dp = id.slice(0, -(von.length));
var verbrauch = getState(id).val;
if (verbrauch != null) {
setState(tmp_dp + nach, verbrauch, true);
}
// Setze "von" zurück
setState(id, 0, true);
});
}
//Override at row 267
// Funktion um die aktuellen Namen des Shelly abzuholen
function aktualisiere_namen() {
if (typeof extendObject === "function") {
shellyDpsName.each(function (id, i) {
if (existsState(id)) {
setState(shelly_DP_Name(id), String(getState(id).val), true);
extendObject(shelly_DP_Name_Main(id), { /*line changed by spacerx*/
common: {
name: String(getState(id).val),
desc: String(getState(id).val)
},
type: "channel"
});
}
});
}
}
//Override at row 377
function shelly_DP(dp, extended = false) {
dp = dp.split(".");
dp = userdir + datenpunkt + dp[2] + "." + dp[3]; /*line changed by spacerx*/
if (extended) {
dp = dp + "_Returned.";
} else {
dp = dp + ".";
}
return dp;
}
//Override at row 387
function shelly_DP_Name(dp) {
dp = dp.split(".");
dp = userdir + datenpunkt + dp[2] + "." + dp[3]; /*line changed by spacerx*/
return dp;
}
//Override at row 392
function shelly_DP_Name_Main(dp) {
dp = dp.split(".");
dp = userdir + datenpunkt + dp[2]; /*line changed by spacerx*/
return dp;
}
/*** END SpacerX ***/
// Erster Start und Initialisierung
shelly_verbrauch_erster_start();
// Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
schedule('*/15 * * * *', shelly_verbrauch_update);
/*** START Edit SpacerX ***/
// Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
//schedule('0 0 * * *', shelly_vebrauch_tag);
// Nachts um 23:59 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
schedule('59 23 * * *', shelly_vebrauch_tag);
/*** END Edit SpacerX ***/
Warum Aktualisierung um 23:59 Uhr und nicht 0:00 Uhr?
Ganz einfach, in InfluxDB gehört 0:00 Uhr schon zum nächsten Tag.