NEWS
Auswertung für smartmeter
-
Eine Neu Version steht hier verfügbar:
Aktuelle Version: 0.10a
Changelog:
0.10 - Es wird ein neuer Datenpunkt "Today" erzeugt. Dort wird stündlich der Verbrauch seit Mitternacht geschrieben. So erkennt man z.B. ob man weniger oder mehr Strom als am Tag zuvor verbraucht hat.
ToDo: * Begrenzung der Nachkommastellen und Rundung der Werte
- Berechnung der Werte für aktuelle Woche, aktuellen Monat. (Falls gewünscht)
Skript:
! ````
// NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt v 0.10
//
! var cronH = "0 * * * *";
var cronD = "59 23 * * *";
var cronW = "0 0 * * 1";
var cronM = "0 0 1 * ";
! var idHAGTotH = "javascript.0.Stromzähler.Hager.tmp.Total-h";
var idHAGTotD = "javascript.0.Stromzähler.Hager.tmp.Total-d";
var idHAGTotW = "javascript.0.Stromzähler.Hager.tmp.Total-w";
var idHAGTotM = "javascript.0.Stromzähler.Hager.tmp.Total-m";
var idHAGTotal = "smartmeter.0.1-0:1_8_0255.value"; /Stromverbrauch insgesammt/
var idHAGZielH = "javascript.0.Stromzähler.Hager.Hour";
var idHAGZielD = "javascript.0.Stromzähler.Hager.Day";
var idHAGZielW = "javascript.0.Stromzähler.Hager.Week";
var idHAGZielM = "javascript.0.Stromzähler.Hager.Month";
var idHAGZielT = "javascript.0.Stromzähler.Hager.Today";
var debug = false;
! var DPArray = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM, idHAGZielT];
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, SetN) {
var nVorwert = getState(VorId).val;
var nAktuell = getState(idHAGTotal).val;
//var nDiff = ((nAktuell * 10) - (nVorwert * 10)) / 10; // Geaendert am 21.01.2019
var nDiff = parseFloat(nAktuell) - parseFloat(nVorwert); // Geaendert am 21.01.2019
setState(ZielId, nDiff, true);
if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
if(SetN) {
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, true);
haupt(idHAGTotD, idHAGZielT, false);
});
schedule(cronD, function () {
haupt(idHAGTotD, idHAGZielD, true);
});
schedule(cronW, function () {
haupt(idHAGTotW, idHAGZielW, true);
});
schedule(cronM, function () {
haupt(idHAGTotM, idHAGZielM, true);
});
! ````
Funktionsweise:Das Skript erzeugt Datenpunkte:
<u>Hour</u> - Verbrauch der letzten Stunde in Wh
<u>Day</u> - Verbrauch des letzten Tages in Wh
<u>Week</u> - Verbrauch der letzten Woche in Wh
<u>Month</u> - Verbrauch des letzten Monats in Wh
<u>Today</u> - Heutiger Verbrauch (seit 00:00) bis zu letzten vollen Stunde gemessen.
Erklärung:
Die Werte werden immer nach dem ersten vollen Zyklus geschrieben. Was am Anfang zu Verwirrung führen kann. D.h. z.B.
10:12 - Installation und Start des Skriptes
11:00 - Datenpunkt Hour bleibt leer, Datenpunkt Total-h wird geschrieben
12:00 - Datenpunkt Hour wird geschrieben. Der erster Wert erscheint.
Das gleiche Gilt auch für den Tag, Woche und Monat. z.B
11.02. - Installation und Start des Skriptes
01.03. um 00:00 - Datenpunkt Month bleibt leer, Datenpunkt Total-m wird geschrieben
02.04. um 00:00 - Datenpunkt Month wird geschrieben. Der Wert für den vergangenen Monat erscheint
Und immer schön die Datenpunkte speichern. Man will doch mit Flot schöne Diagramme erstellen.
Fragen, Kritik und Kommentare sind herzlich willkommen.
-
Könnte man den Monatsverbrauch nicht auch aus den Summen der Tages oder Wochenverbrauchs berechnen, dann müsste man nicht so lange warten? Denke viel ungenauer wirds damit auch nicht.
-
Hi a200,
find ich gut das es für das script einen eigenen thread gibt.
Ich mach hier mal weiter, der Grund warum ich nach dem script für Minuten gefragt habe ist folgender:
Ich meine das du nicht recht hast wenn du schreibst , der Datenpunkt smartmeter.0.1-0:16_7_0*255.value ist der aktuelle Verbrauch.
Das ist der berechnete Verbrauch zwischen Bezug und Einspeisung!! Ich hatte bereits ein Diagramm am laufen und dacht mir "ui suppi genau was ich will" bis ich am nächsten tag sah das der chart einen wert von (minus) -5000 W anzeigt.
Mein ziel ist , das ich ein Diagramm hab in dem ich den aktuellen Verbrauch sehe. Da ich mit iob zwei zweirichtungszähler verwalte kommt dann das script viermal zum Einsatz, für zweimal Einspeisung und zweimal Bezug.
Für meine restlichen 10 Stromzähler hab ich derzeit noch ein anderes script im Einsatz.In diesem hab ich den ersten zweirichtungszähler auch drin um die Daten mit deinem script zu vergleichen, im Bild das Objekt Strom-Bezug Haus.
Ich hab jetzt die Objekte gelöscht und das script durch das obige ersetzt ,mal sehen wie es sich verhält, vielleicht hab ich ja was zerschossen
1342_bildschirmfoto_2017-02-12_um_08.42.08.png
1342_bildschirmfoto_2017-02-12_um_08.45.24.png -
Kannst du aus dieser Fehler Meldung was lesen?
at TCP.onread (net.js:548:20) host. 2017-02-12 19:00:00.826 error at Socket.Readable.push (_stream_readable.js:134:10) host. 2017-02-12 19:00:00.826 error at readableAddChunk (_stream_readable.js:176:18) host. 2017-02-12 19:00:00.826 error at Socket.emit (events.js:188:7) host. 2017-02-12 19:00:00.826 error at emitOne (events.js:96:13) host. 2017-02-12 19:00:00.826 error at Socket. (/opt/iobroker/node_modules/redis/index.js:274:27) host. 2017-02-12 19:00:00.826 error at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:560:12) host. 2017-02-12 19:00:00.826 error at JavascriptRedisParser.returnReply (/opt/iobroker/node_modules/redis/index.js:192:18) host. 2017-02-12 19:00:00.826 error at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:828:9) host. 2017-02-12 19:00:00.826 error at return_pub_sub (/opt/iobroker/node_modules/redis/index.js:789:18) host. 2017-02-12 19:00:00.826 error at RedisClient.emit (events.js:194:7) host. 2017-02-12 19:00:00.826 error at emitThree (events.js:116:13) host. 2017-02-12 19:00:00.826 error at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:92:25) host. 2017-02-12 19:00:00.826 error at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2866:37) host. 2017-02-12 19:00:00.826 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:252:17) host. 2017-02-12 19:00:00.826 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:580:17) host. 2017-02-12 19:00:00.826 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3161:17) host. 2017-02-12 19:00:00.826 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:584:47 host. 2017-02-12 19:00:00.826 error TypeError: Cannot read property 'callback' of undefined host. 2017-02-12 19:00:00.823 error pmessage io.javascript.0.Stromzähler.Hager.Hour {"val":255.70000000006985,"ack":true,"ts":1486922400817,"q":0,"from":"system.adapter.javascript.0","lc":1486922400817} Cannot read property 'callback'
-
Kannst du aus dieser Fehler Meldung was lesen?
at TCP.onread (net.js:548:20) host. 2017-02-12 19:00:00.826 error at Socket.Readable.push (_stream_readable.js:134:10) host. 2017-02-12 19:00:00.826 error at readableAddChunk (_stream_readable.js:176:18) host. 2017-02-12 19:00:00.826 error at Socket.emit (events.js:188:7) host. 2017-02-12 19:00:00.826 error at emitOne (events.js:96:13) host. 2017-02-12 19:00:00.826 error at Socket. (/opt/iobroker/node_modules/redis/index.js:274:27) host. 2017-02-12 19:00:00.826 error at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:560:12) host. 2017-02-12 19:00:00.826 error at JavascriptRedisParser.returnReply (/opt/iobroker/node_modules/redis/index.js:192:18) host. 2017-02-12 19:00:00.826 error at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:828:9) host. 2017-02-12 19:00:00.826 error at return_pub_sub (/opt/iobroker/node_modules/redis/index.js:789:18) host. 2017-02-12 19:00:00.826 error at RedisClient.emit (events.js:194:7) host. 2017-02-12 19:00:00.826 error at emitThree (events.js:116:13) host. 2017-02-12 19:00:00.826 error at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:92:25) host. 2017-02-12 19:00:00.826 error at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2866:37) host. 2017-02-12 19:00:00.826 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:252:17) host. 2017-02-12 19:00:00.826 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:580:17) host. 2017-02-12 19:00:00.826 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3161:17) host. 2017-02-12 19:00:00.826 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:584:47 host. 2017-02-12 19:00:00.826 error TypeError: Cannot read property 'callback' of undefined host. 2017-02-12 19:00:00.823 error pmessage io.javascript.0.Stromzähler.Hager.Hour {"val":255.70000000006985,"ack":true,"ts":1486922400817,"q":0,"from":"system.adapter.javascript.0","lc":1486922400817} Cannot read property 'callback' ```` `
Leider nicht. Da müsste einer von den ioBroker Spezialisten sagen, was diese Fehlermeldung bedeutet. Dann kann ich sagen ob es am Script liegt. Nichtsdestotrotz will ich demnächst die unschöne double Berechnung der Zahlen abstellen.
-
Könnte man den Monatsverbrauch nicht auch aus den Summen der Tages oder Wochenverbrauchs berechnen, dann müsste man nicht so lange warten? Denke viel ungenauer wirds damit auch nicht. `
Nein. Du kannst den Gesamtverbrauch eines Monats erst dann berechnen, wenn ein ganzer Monat (vom ersten bis zum letzten eines Monats) auch vergangen ist. Vorher nicht. Ich kann noch einen neuen Datenpunkt: Aktueller Monat bzw. aktuelle Woche berechnen. Funktioniert so ähnlich wie Today. D.h. Der Verbrauch sein dem 1. eines Monats bzw. seit Montag einer Woche um 0:00 bis heute.
Dort würden schon Werte landen noch bevor die komplette Periode abgelaufen ist, allerdings werden die Werte im ersten Monat / ersten Woche nicht korrekt sein (können).
Wenn also noch ein paar Leute sich melden, dass Sie die Funktion haben wollen, dann werde ich sie auch einbauen.
LG,
-
Bitte das JS posten. sieht für mich nach nem Fehler beim subscribe aus!
-
Bitte das JS posten. sieht für mich nach nem Fehler beim subscribe aus! `
Schau mal in ersten Posting ist ein Spoiler! -
Also es wäre nicht schlecht ein Objekt zu haben -> Stromverbrauch Monatsanfang bis heute [emoji6]
Gruß
Adrian
Gesendet von iPhone mit Tapatalk Pro
-
Also es wäre nicht schlecht ein Objekt zu haben -> Stromverbrauch Monatsanfang bis heute [emoji6]
Gruß
Adrian
Gesendet von iPhone mit Tapatalk Pro `
Willst du es testen? -
Klar, warum nicht [emoji3]
Gesendet von iPhone mit Tapatalk Pro
-
Klar, warum nicht [emoji3]
Gesendet von iPhone mit Tapatalk Pro `
Testen habe ich gesagt, also keine Garantie.1. kopiere den Wert deinen aktuellen Gesamtverbrauches in die Datenpunkte Total-m und Total-w
2. benutze die unten stehende Version 0.11b
zu nächsten vollen Stunde werden die Datenpunkte CurrentWeek und CurrentMonth gefüllt.
Falls du eigenen Pfad zu den Datenpunkten hast, dann brauchst du diese nur einmal anpassen (PathToDP).
Warte auf deine Freigabe!
! ````
// NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt v 0.11
//
! var AktWoche = true; // Berechnung des Wertes: Aktuelle Woche ein-/ausschalten
var AktMonat = true; // Berechnung des Wertes: Aktueller Monat ein-/ausschalten
var PathToDP = "javascript.0.Stromzähler.Hager."; // Pfad zum Datenpunkt
! var cronH = "0 * * * *";
var cronD = "59 23 * * *";
var cronW = "0 0 * * 1";
var cronM = "0 0 1 * ";
! var idHAGTotH = PathToDP + "tmp.Total-h";
var idHAGTotD = PathToDP + "tmp.Total-d";
var idHAGTotW = PathToDP + "tmp.Total-w";
var idHAGTotM = PathToDP + "tmp.Total-m";
var idHAGTotal = PathToDP + "smartmeter.0.1-0:1_8_0255.value"; /Stromverbrauch insgesammt/
var idHAGZielH = PathToDP + "Hour";
var idHAGZielD = PathToDP + "Day";
var idHAGZielW = PathToDP + "Week";
var idHAGZielM = PathToDP + "Month";
var idHAGZielT = PathToDP + "Today";
var idHAGZielCW = PathToDP + "CurrentWeek";
var idHAGZielCM = PathToDP + "CurrentMonth";
! var debug = false;
! var DPArray = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM, idHAGZielT, idHAGZielCW, idHAGZielCM];
var DPUnit = "Wh";
! 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, SetN) {
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);
if(SetN) {
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, true);
haupt(idHAGTotD, idHAGZielT, false);
if(AktWoche) haupt(idHAGTotW, idHAGZielCW, false);
if(AktMonat) haupt(idHAGTotM, idHAGZielCM, false);
});
! schedule(cronD, function () {
haupt(idHAGTotD, idHAGZielD, true);
});
! schedule(cronW, function () {
haupt(idHAGTotW, idHAGZielW, true);
});
! schedule(cronM, function () {
haupt(idHAGTotM, idHAGZielM, true);
}); -
Testen habe ich gesagt, also keine Garantie. `
Dann teste ich mal
Hab dein Script mal übernommen und schaue was passiert
Gruß
Adrian
-
Hallo a200
irgendwas ist komisch….
warum ist das eine Minus Zahl? Soll das so sein? oder habe ich was falsch gemacht?
Gruß
Adrian
-
Hallo a200
irgendwas ist komisch….
Screenshot 2017-02-13 18.21.32.png
warum ist das eine Minus Zahl? Soll das so sein? oder habe ich was falsch gemacht?
Gruß
Adrian `
aus
var idHAGTotal = PathToDP + "smartmeter.0.1-0:1_8_0*255.value"; /Stromverbrauch insgesammt/
mach
var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /Stromverbrauch insgesammt/
Ein fataler Fehler! Die aktueller Wert konnte nicht ausgelesen werden! Etwas zu viel Cut&Paste
Kopiere vorher den aktuellen Wert in Total-d und Total-h
Danach sollte es gehen.
-
Welchen Wert meinst du denn genau!? Den Gesamten Verbrauch!?
Gesendet von iPhone mit Tapatalk Pro
-
Welchen Wert meinst du denn genau!? Den Gesamten Verbrauch!?
Gesendet von iPhone mit Tapatalk Pro `
Ja. Gesamtverbrauch. -
aus
var idHAGTotal = PathToDP + "smartmeter.0.1-0:1_8_0*255.value"; /Stromverbrauch insgesammt/
mach
var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /Stromverbrauch insgesammt/
Ein fataler Fehler! Die aktueller Wert konnte nicht ausgelesen werden! Etwas zu viel Cut&Paste
Kopiere vorher den aktuellen Wert in Total-d und Total-h
Danach sollte es gehen. `
Habe gerade angepasst…. schauen wir mal ob das Ganze jetzt funktioniert
Gruß
Adrian
-
Ich warte.
-
Und? Die volle Stunde ist um.