hdering / homematic_verbrauchszaehler Goto Github PK
View Code? Open in Web Editor NEWMittels ioBroker Javascript Stromzähler protokollieren
Mittels ioBroker Javascript Stromzähler protokollieren
Hallo zusammen,
vielleicht eine sehr dumme Frage. Muss man die Datenpunkte für die Leistung (W) oder Verbrauch angebeben (kWh)?
Fehler:
Fehler beim Auslesen des Datums. Eventuell falsche Syntax? null (Error:TypeError: Cannot read property 'match' of null)
Danke für das nette Skript! Falls Du das weiterentwickeln willst (ich kann das leider nicht...), würde ich mir einen 2-Tarifzähler wünschen. Ich habe hier von 22:00h bis 07:59h einen anderen Tarif als von 08:00h bis 21:59h. Ach ja, und Grundpreis ist hier täglich, also Tage/Monat abhängig.
Nochmal: Dankeschön, so wie es ist, der Rest ist purer Traum :-)
Hallo hdering,
vielen Dank für die tolle neue Version. Ich denke, in Zeile 32 muss es:
var enable_Grundpreis = true;
statt
var enable_Grundpreis_einberechnen = true;
heissen, oder?
Kannst Du mir noch sagen, wie man den Pfad in der Instanz von Strom in Verbrauchszaehler umbenennen kann?
Beste Grüße
Peer
Hi,
Wen man mehr als 9 Tage/Wochen/quartale/monate/jahre bewahren möchte kommt der object baum ein wenig durcheinander.
Es währe schön wen alle werte unter 10 eine 0 bekommen würde:
Tag_01
Monat_01
Usw
Dan bleibt der object baum auch in reihenfolge und kommt nicht durcheinander:
Tag_2 ist nämlich grösser als Tag_10
Ich habe versucht, dass Script zu nutzen und sehe einige Syntax und Deklarationsfehler.
z.B.
var instance
newdate
grundpreis_tag = _grundpreis;
grundpreis_woche = _grundpreis * 7;
grundpreis_monat = _grundpreis * 30;
grundpreis_quartal = _grundpreis * 90;
grundpreis_jahr = _grundpreis * 365;
_unit = default_unit;
_unit_kilo = default_unit_kilo;
Nach Korrektur scheint das Script zu laufen.
Hallo hdring,
vielen Dank für Dein tolles Script. Leider bekomme ich es irgendwie nicht richtig zum Laufen.
Hier die Fehlermeldungen meines Logs:
`javascript.0 | 2018-03-28 16:29:45.615 | error | at Object. (script.js.Strom.Verbrauch:389:4) |
---|---|---|---|
javascript.0 | 2018-03-28 16:29:45.615 | error | at run (script.js.Strom.Verbrauch:244:23) |
javascript.0 | 2018-03-28 16:29:45.614 | error | at entferneDatenpunkt (script.js.Strom.Verbrauch:399:15) |
javascript.0 | 2018-03-28 16:29:45.614 | error | Error in callback: TypeError: Cannot read property 'indexOf' of undefined |
javascript.0 | 2018-03-28 16:29:45.611 | info | script.js.Strom.Verbrauch: vor der Aufbereitung: undefined |
javascript.0 | 2018-03-28 16:29:45.611 | info | script.js.Strom.Verbrauch: Einheit: Wh |
javascript.0 | 2018-03-28 16:29:45.610 | info | script.js.Strom.Verbrauch: alter Wert: 9625.099991 |
javascript.0 | 2018-03-28 16:29:45.610 | info | script.js.Strom.Verbrauch: neuer Wert: 9665.199997 |
javascript.0 | 2018-03-28 16:29:45.610 | info | script.js.Strom.Verbrauch: device name: NEQ0862843 |
javascript.0 | 2018-03-28 16:29:45.610 | info | script.js.Strom.Verbrauch: device ID: hm-rpc.1.NEQ0862843 |
javascript.0 | 2018-03-28 16:29:45.609 | info | script.js.Strom.Verbrauch: channel Name: NEQ0862843:1 |
javascript.0 | 2018-03-28 16:29:45.609 | info | script.js.Strom.Verbrauch: channel ID: hm-rpc.1.NEQ0862843.1 |
javascript.0 | 2018-03-28 16:29:45.609 | info | script.js.Strom.Verbrauch: Name: undefined |
javascript.0 | 2018-03-28 16:29:45.608 | info | script.js.Strom.Verbrauch: id: hm-rpc.1.NEQ0862843.1.ENERGY_COUNTER |
javascript.0 | 2018-03-28 16:29:45.608 | info | script.js.Strom.Verbrauch: Beschreibung: undefined |
javascript.0 | 2018-03-28 16:29:45.608 | info | script.js.Strom.Verbrauch: Gewerk: undefined |
javascript.0 | 2018-03-28 16:29:45.607 | info | script.js.Strom.Verbrauch: RegExp-Funktion ausgelöst |
javascript.0 | 2018-03-28 16:29:45.607 | info | script.js.Strom.Verbrauch: -------- Strommesser --------- |
javascript.0 | 2018-03-28 16:29:45.597 | info | script.js.Strom.Verbrauch: ------------ ENDE ------------ |
javascript.0 | 2018-03-28 16:29:45.597 | info | script.js.Strom.Verbrauch: Stromverbrauch und -kosten (Stromhauptzaehler) aktualisiert` |
Hast Du eine Idee, woran das liegen könnte?
Danke im Voraus für Deine Mühen...
Peer
Erst einmal vielen Dank für das Script!
Funktioniert soweit auch, es werden jedoch, sobald ich mehr als zwei Datenpunkte anlege, Fehler ausgegeben:
javascript.0 | 24450 | 2021-12-11 18:39:14.518 | error | at processImmediate (internal/timers.js:461:21) |
---|---|---|---|---|
javascript.0 | 24450 | 2021-12-11 18:39:14.517 | error | at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5706:41) |
javascript.0 | 24450 | 2021-12-11 18:39:14.516 | error | at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29) |
javascript.0 | 24450 | 2021-12-11 18:39:14.516 | error | at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1082:38) |
javascript.0 | 24450 | 2021-12-11 18:39:14.516 | error | at Object. (script.js.klima.stromzaehler:226:25) |
javascript.0 | 24450 | 2021-12-11 18:39:14.515 | error | at run (script.js.klima.stromzaehler:365:55) |
javascript.0 | 24450 | 2021-12-11 18:39:14.515 | error | Error in callback: TypeError: Cannot read property 'toFixed' of null |
javascript.0 | 24450 | 2021-12-11 18:38:07.167 | error | at processImmediate (internal/timers.js:461:21) |
javascript.0 | 24450 | 2021-12-11 18:38:07.166 | error | at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5706:41) |
javascript.0 | 24450 | 2021-12-11 18:38:07.166 | error | at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29) |
javascript.0 | 24450 | 2021-12-11 18:38:07.166 | error | at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1082:38) |
javascript.0 | 24450 | 2021-12-11 18:38:07.165 | error | at Object. (script.js.klima.stromzaehler:226:25) |
javascript.0 | 24450 | 2021-12-11 18:38:07.165 | error | at run (script.js.klima.stromzaehler:365:55) |
javascript.0 | 24450 | 2021-12-11 18:38:07.164 | error | Error in callback: TypeError: Cannot read property 'toFixed' of null |
javascript.0 | 24450 | 2021-12-11 18:38:00.503 | error | at processImmediate (internal/timers.js:461:21) |
javascript.0 | 24450 | 2021-12-11 18:38:00.500 | error | at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5706:41) |
javascript.0 | 24450 | 2021-12-11 18:38:00.499 | error | at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29) |
javascript.0 | 24450 | 2021-12-11 18:38:00.499 | error | at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1082:38) |
javascript.0 | 24450 | 2021-12-11 18:38:00.498 | error | at Object. (script.js.klima.stromzaehler:226:25) |
javascript.0 | 24450 | 2021-12-11 18:38:00.494 | error | at run (script.js.klima.stromzaehler:365:55) |
javascript.0 | 24450 | 2021-12-11 18:38:00.494 | error | Error in callback: TypeError: Cannot read property 'toFixed' of null |
javascript.0 | 24450 | 2021-12-11 18:37:51.998 | error | at processImmediate (internal/timers.js:461:21) |
javascript.0 | 24450 | 2021-12-11 18:37:51.997 | error | at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5706:41) |
javascript.0 | 24450 | 2021-12-11 18:37:51.995 | error | at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29) |
Meine config sieht so aus:
`var eigeneDatenpunkte = [
[ 'sonoff.0.server-watt.ENERGY_Total', 'Stromzaehler.Server', 'kWh', 'kWh' ],
[ 'sonoff.0.trockner.ENERGY_Total', 'Stromzaehler.Trockner', 'kWh', 'kWh' ],
[ 'sonoff.0.waschmaschine.ENERGY_Total', 'Stromzaehler.Waschmaschine', 'kWh', 'kWh' ],
[ 'sonoff.0.flower.ENERGY_Total', 'Stromzaehler.Flower', 'kWh', 'kWh' ],
[ 'sonoff.0.kette.ENERGY_Total', 'Stromzaehler.Kette', 'kWh', 'kWh' ],
[ 'sonoff.0.fenster.ENERGY_Total', 'Stromzaehler.Fenster', 'kWh', 'kWh' ],
[ 'sonoff.0.tv.ENERGY_Total', 'Stromzaehler.TV', 'kWh', 'kWh' ],
];`
Hallo,
wenn ich den Tageszählerstand auf 18000kwh stelle und dann das Skript den neuen Wert 18000001wh bekommt, dann wird der Tagesverbrauch auf -17999999 gestellt?
Um gesamt Verbrauch eines Haushalts protokollieren zu können währe es super wen man nicht nur Strom sonder auch Gaswerke mit diesem Script protokollieren könnte.
Die Logic währe gleich nur nicht in kWh sondern m3
Hallo.
Erst einmal Danke für das tolle Script. Generell funktioniert es. Wie kann denn Pushover zum Versenden von Messages verwendet werden?
Danke
Hey,
erstmal vielen Dank für das Script. Das hilft mir schon sehr den Verbrauch unserer Wärmepumpe ordentlich zu protokollieren.
Wo wir dann schon beim Thema wären, die Wärmepumpe wird via HT / NT Zähler gezählt, ich weiß das das nen riesen Unterschied zu normalen Zählern macht, aber evtl. hast du ja Mal Zeit und Lust sowas umzusetzen.
HI,
wie kann ich das Ablesedatum einpflegen damit der Jahreszähler etc wieder zurück gesetzt wird?
Danke
Tobias
Script 1:1 übernommen und datenpunkte Manuel eingesetzt, nur die kumulierten werte werden übertragen alle anderen beiden lehr
Datenpunkte:
`
var eigeneDatenpunkte = [
// Beispiel:
// ['Datenpunkt', 'Aliasname', 'Einheit' ],
// [ 'hm-rpc.2.NEQ0861663.1.ENERGY_COUNTER', 'Stromzaehler:1.ENERGY_COUNTER' ],
// [ 'javascript.1.MeinePower', 'MeinSonoff' ],
// [ 'javascript.1.MeinePower2', 'Sonoff.MeinZweiterSonoff' ],
[ 'smartmeter.0.1-0:1_8_2.value', 'Stroom_Afname_piek', 'kWh' ],
[ 'smartmeter.0.1-0:1_8_1.value', 'Stroom_Afname_Dal', 'kWh' ],
[ 'smartmeter.0.1-0:2_8_2.value', 'Stroom_Levering_Piek', 'kWh' ],
[ 'smartmeter.0.1-0:2_8_1.value', 'Stroom_Levering_Dal', 'kWh' ],
[ 'smartmeter.0.0-1:24_3_0.value7', 'Gasverbruik', 'm3' ],
];
`
Wert aus dem Zähler:
Werte als Ausgabe vom script:
Ich bringe es nicht zum laufen, wo definiere ich im skript von wo die zählerdaten denn überhaupt kommen. ich habe ein shelly der mir die wh liefert (in iobroker)... aber wie bringe ich das in das skript?
danke cainam
@hdering
Vielen Dank für das super skript!
Könntest folgende schönheitskorrektut noch einfügen:
Den ack status auf true setzen, wenn die Werte aktualisiert werden. Dadurch werden die Werte der Objekt in ioBroker grün angezeigt und nicht rot, wie es heute ist.
Dazu musst du nur bei den setState(id, value, true) noch ein "true" hinzufügen.
Hallo
Super Script. Vielen dank dafür.
wollte nur mitteilen, dass das Script auch mit AVM-Steckdosen, die im ioBroker mit eingebunden sind, funktionieren, wenn diese über "eigene Datenpunkte" hinzu gefügt wurden. Ich hab 2 DECT- und zwei Powerlinesteckdosen mit drin. Selbst diese vier werden mit geloggt.
Einziger Nachteil, den ich gefunden habe. Bei einem neuen Tag werden die Daten des aktuellen Tages erst in Tag 1 (gestern) geschrieben, wenn der Verbraucher ein war und wieder neu Leistung gemessen wurde. Könnte man das nicht so bauen, dass die Daten nachts automatisch rüber geschrieben werden und der aktuelle Tag automatisch wieder auf 0 ist und nicht erst, wenn der Verbraucher das erste mal eingeschalten wird. Habe ja ein paar Steckdosen mit Verbrauchern, die nicht jeden Tag laufen.
Denke mal, dass dies bei Wochen, Quartalen, Monaten und Jahren genau so ist.
Erst mal vielen Dank für dein Script.
ich bin im Moment auf der Suche nach einem ausfallsicheren Script, da das jetzige leider nach einen Neustart die Werte verliert.
Das ist ungünstig.
Was ich mir wünschen würde.
Speicherung des vorherigen Tages, Woche, Monat und Jahr.
Also den Wert kurz vor Mitternacht eben rüberschicken auf vorheriger Tag usw.
Das kann man dann schön mit History loggen.
Mal schauen ob ich meine WMBus Wärmemengenzähler auch integrieren kann.
Gruß
Wen man das script benutzt für einen Strom oder gaszähler stimmen die basis werte nicht.
Das problem:
Wer den folgenden Fehler im log hat:
error: sql.0 Cannot delete DELETE FROM iobroker.undefined WHERE ....
kann das verhindern in dem ihr die Funktion enableHistory
wie folget ändert:
function enableHistory(geraet, zeitraum) {
if (instance_history !== '') {
let kostenObj = getObject(instanz + pfad + geraet + '.Kosten.' + zeitraum);
if (!kostenObj || !kostenObj.common || !kostenObj.common.custom || !kostenObj.common.custom[instance_history]) {
sendTo(instance_history, 'enableHistory', {
id: instanz + pfad + geraet + '.Kosten.' + zeitraum,
options: {
changesOnly: true,
debounce: 0,
retention: 31536000,
changesRelogInterval: 0,
changesMinDelta: 0,
storageType: "Number"
}
}, function (result) {
if (result.error) {
if (logging) log("Fehler beim Aktivieren von History: " + result.error);
}
});
}
let verbrauchObj = getObject(instanz + pfad + geraet + '.Verbrauch.' + zeitraum);
if (!verbrauchObj || !verbrauchObj.common || !verbrauchObj.common.custom || !verbrauchObj.common.custom[instance_history]) {
sendTo(instance_history, 'enableHistory', {
id: instanz + pfad + geraet + '.Verbrauch.' + zeitraum,
options: {
changesOnly: true,
debounce: 0,
retention: 31536000,
changesRelogInterval: 0,
changesMinDelta: 0,
storageType: "Number"
}
}, function (result) {
if (result.error) {
if (logging) log("Fehler beim Aktivieren von History: " + result.error);
}
});
}
let zaehlerstandObj = getObject(instanz + pfad + geraet + '.Zaehlerstand.' + zeitraum);
if (!zaehlerstandObj || !zaehlerstandObj.common || !zaehlerstandObj.common.custom || !zaehlerstandObj.common.custom[instance_history]) {
sendTo(instance_history, 'enableHistory', {
id: instanz + pfad + geraet + '.Zaehlerstand.' + zeitraum,
options: {
changesOnly: true,
debounce: 0,
retention: 31536000,
changesRelogInterval: 0,
changesMinDelta: 0,
storageType: "Number"
}
}, function (result) {
if (result.error) {
if (logging) log("Fehler beim Aktivieren von History: " + result.error);
}
});
}
}
}
Damit wird sql nur aktiviert, sofern der Datenpunkt noch nicht aktiviert ist und somit kommt auch die fehlermeldung nicht mehr
Dieses Script funktioniert nicht mehr, wenn es in ioBroker mit Adapater Javascript ab Version 5.x eingesetzt wird!
Ein kleiner Fehler, der schnell korrigiert werden kann:
Zeile 127:
Falsch:
var cacheSelectorStateEnergyCounter =
Richtig ohne "$":
var cacheSelectorStateEnergyCounter = $('channel[state.id=*.ENERGY_COUNTER]');
Dev, könntest du das bitte unbedingt anpassen?
Hallo
ich weiß nicht, ob das Skript noch optimiert wird, aber wenn ja, dann bitte in der Zeile 509 und 528 den code anpassen.
Original:
if(getState(instanz + pfad + geraet + '.Verbrauch._' + zeitraum + '.' + zeitraum + '_' + j)) {
Folgende Änderung einfügen:
if(existsState(instanz
+ pfad + geraet + '.Verbrauch.' + zeitraum + '.' + zeitraum + '' + j)) {`
mit "getState" wird im Log eine Warnung ausgegeben die man mit "existsState" vermeiden kann.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.