Hat man im Smarthome Verbrauchswerte, wie z.B. Stromzählerstand, Gasverbrauch, integriert, ist es sinnvoll die Daten regelmäßig aufzubereiten bzw. zu protokollieren. Interessant sind beispielsweise Stunden- und Tagesverbräuche, um einfach und schnell eine optische Auswertung über Diagramme erstellen zu können. Die Berechnung basiert auf dem Momentanzählerstand, der in ioBroker in einem Objekt aktualisiert und gespeichert wird.

Stromverbrauch stündlich und täglich protokollieren

Stromverbrauch stündlich und täglich protokollieren

Das Script ermittelt dann zu jeder vollen Stunde, nach jedem Tag, nach jedem Monat und nach jedem Jahr die Differenz zum Vorwert und speichert dieses als Verbrauch für diesen Zeitraum in einer Variablen bzw. einem Objekt in ioBroker ab. Um die Historie zu speichern, müssen wir lediglich für dieses Objekt die Historisierung einschalten.

Historie Stromverbrauch Tag

Historie Stromverbrauch Tag

Hier das entsprechende Script für ioBroker:

var cronH           = "0 * * * *";
var cronD           = "59 23 * * *";
var cronW           = "0 0 * * 1";
var cronM           = "0 0 1 * *";
var idHAGTotH       = "javascript.0.Stromzähler.tmp.Total-h";
var idHAGTotD       = "javascript.0.Stromzähler.tmp.Total-d";
var idHAGTotW       = "javascript.0.Stromzähler.tmp.Total-w";
var idHAGTotM       = "javascript.0.Stromzähler.tmp.Total-m";
var idHAGTotal      = "smartmeter.0.1-0:1_8_0__255.value";               /*Stromverbrauch insgesammt*/
var idHAGZielH      = "javascript.0.Stromzähler.Hour";
var idHAGZielD      = "javascript.0.Stromzähler.Day";
var idHAGZielW      = "javascript.0.Stromzähler.Week";
var idHAGZielM      = "javascript.0.Stromzähler.Month";
var debug           = false;
var DPArray         = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM];
var DPUnit          = "kWh";
DPArray.forEach(function(wert, index, array) {
    var DPType = wert.split(".");
    var DPDescr = "Power consumption of " + (DPType[DPType.length - 1]);
 
    if(index > 3) DPUnit = "Wh";
    createState(wert, 0, {
        name: DPDescr,
        desc: DPDescr,
        type: 'number',
        unit: DPUnit,
        role: 'value'
    });
});
function haupt (VorId, ZielId) {
    var nVorwert = getState(VorId).val;
    var nAktuell = getState(idHAGTotal).val;
    var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
    setState(ZielId, nDiff, true);
    if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
    var shandler = on ({id: ZielId, change: 'any'}, function(data) {
        setState(VorId, (nAktuell*10)/10, true);
        unsubscribe(shandler); 
    });
}
// regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronH, function () {
    haupt(idHAGTotH, idHAGZielH);
});
schedule(cronD, function () {
    haupt(idHAGTotD, idHAGZielD);
});
schedule(cronW, function () {
    haupt(idHAGTotW, idHAGZielW);
});
schedule(cronM, function () {
    haupt(idHAGTotM, idHAGZielM);
});