NEWS
Script zur Berechnung des Eigenverbrauchs
-
Hallo,
vielleicht kann mir einer leicht auf die Sprünge helfen. Ich versuche aus den Angaben von aktueller PV-Leistung, Netzeinspeisung und Netzbezug den Eigenverbrauch zu berechnen.
vorhandene Objekte:
sowie ein globales Objekt = Eigenverbrauch
Die Formel müsste lauten: Wenn PV-Leistung größer 0 dann Eigenverbrauch = PV-Leistung - Netzeinspeisung
Leider haperts an meinen Javascript-Kenntnissen.
(VB.net wäre kein Problem <- bitte nicht prügeln)
Viele Grüße
Marco
-
Hallo Marco, kann ich dir heute oder morgen machen. Sind die werte Zahlen oder Strings?
Welche Ordnerstruktur soll herauskommen?
/PVAnlage/Eigenverbrauch
Und für die Schönheit: welche Einheit?
Gruß
Pix
Gesendet von meinem iPhone mit Tapatalk
-
Hallo Pix,
die Zahlen sind Werte, die Ordnerstruktur wäre okay. Mir würde aber schon einfach ein kleiner Anfang genügen. Möchte hier niemand in Arbeit stürzen.
Einheit würde ich weglassen, so kann ich mit den Werten später noch kalkulieren.
Vielen Dank und viele Grüße
Marco
-
Hallo Marco,
@Marcolotti:Zahlen sind Werte ` das war mir eh klar! :lol:
Da ich den Adapter mit den entsprechenden Werten nicht habe, konnte ich das Skript nicht testen. Ich bin einfach davon ausgegangen, dass alle Werte reine Zahlen sind und ich keine Strings umwandeln musste.
/* PV Eigenverbrauch Skript errechnet den Eigenverbrauch aus den Daten des modbus Adapters erstellt: 09.11.2015 von Pix */ // Objekt erstellen createState('PV_Anlage.Eigenverbrauch',0, { name: 'PV-Anlage: Eigenverbrauch', desc: 'Eigenverbrauch = PV-Leistung - Einspeisung', read: true, write: true, type: 'number', unit: 'kWh' }); var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung', idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung', idEigenverbrauch = 'PV_Anlage.Eigenverbrauch'; // Berechnung mit aktuellen Daten, wenn Leistung >0 on({ id: idPVLeistung, change: 'ne', valGt: 0 }, function (data) { var einspeisung = getState(idEinspeisung).val, eigenverbrauch; // zu errechnen eigenverbrauch = data.newState.val - einspeisung; log('PV-Anlage - Eigenverbrauch: ' + eigenverbrauch + 'kWh'); setState(idEigenverbrauch, eigenverbrauch); });
Ein neues Objekt wird erstellt und konfiguriert (Einheit kWh - ist das richtig?),
die komplizierten Objektnamen mit der Adapterinstanz vorneweg werden in "leichtere" Variablen id*** gespeichert,
der Datenpunkt PV_Leistung wird überwacht (wenn Änderung und neuer Wert > 0, dann Berechnung mit aktuellen Zahlen ausführen und in State schreiben).
Drittletzte Zeile (log****) kannst du später auskommentieren oder löschen, sonst müllt sie dir bei jeder Änderung der PV-Leistung das log zu.
Die Einheit kWh ist nicht als Text im Objekt gespeichert. Du kannst also trotzdem weiter mit dem Wert rechnen.
Gib mir bescheid, ob es läuft.
Gruß
Pix
-
Hallo Pix,
habe das Script eben eingebaut und es funktioniert hervorragend.
An dich ein großes Dankeschön!
Gruß Marco
2858_blue.jpg
2858_view_multiroom.txt -
interessant wäre auch der tägliche Verbrauch bzw. Produktion. Dazu müsste 1x pro Tag der Zählerstand abgespeichert werden und am nächsten Tag zur selben Zeit die DIfferenz gebildet werden. @ Pix : wie würdest Du dies lösen? (ggf. in Anlehnung an obiges Skript)
Gruss
Beat
-
Bei mir wird das schon aus dem energymeter ausgelesen. Um Mitternacht startet ein Programm in der ccu und setzt den aktuellen Gesamtverbrauch in die Variable "Verbrauchgestern".
Gesendet von meinem HTC One_M8 mit Tapatalk
-
@Marcolotti mein Energiemessgerät akkumuliert den Verbrauch fortlaufend. Eine CCU läuft hier auch nicht (mehr). Deshalb würde sich ein script in iobroker gut eignen.
-
Hallo starfish,
ich bin selbst noch in der Entwicklung eines solchen Skripts. Zur Zeit läuft die Testphase und es hat sich ein Problem ergeben. Ich nutze neben EM1000 Zwischensteckern (sehr solide) noch die HM-Zwischenstecker mit Leistungsmessung. Leider verlieren die ihren Zählerstand bei Stromausfall oder beim Ausstecken. Deshalb brauche ich noch eine Funktion, die in solch einem Fall (z.B. aktueller Zähler < Zähler Mitternacht) die Berechnung umstellt. Leider ist es nicht möglich, den Datenpunkt im Gerät wieder auf den alten Zustand zu setzen.
Sonst kannst du eine Variable anlegen für den Tageszähler und täglich um 0Uhr mit dem aktuellen Zählerstand füllen. Dann zur Anzeigen einfach gespeicherten Tageszählerstand vom aktuellen Zählerstand abziehen, ohne das in eine Variable zu schreiben (Berechnung mit VIS-bindings direkt in VIS). Natürlich kann das Javascript-Skript diesen Wert auch wieder in eine weitere Variable schreiben (Tagesverbrauch) und auf Wunsch mit dem Preis multiplizieren (Tageskosten/Ertrag bei Verkauf). Geht auch für die Woche, den Monat, das Quartal, das Jahr. Ich habe das alles bei 6 verschiedenen Strommessgeräten gemacht und es ist recht kompliziert geworden. Und wie gesagt, jetzt stehe ich vor einem Problem: Die Daten sind Futsch, da die HM-Stromzähler ihren internen Zähler genullt haben.
Die beste Lösung wäre es, wenn ich die History-Daten direkt einlesen könnte. Das geht aber noch nicht. Vielleicht klappt das noch vor dem Jahreswechsel. Bis dahin heißt es warten.
Gruß
Pix
-
@pix:Hallo Marco,
@Marcolotti:Zahlen sind Werte ` das war mir eh klar! :lol:
Da ich den Adapter mit den entsprechenden Werten nicht habe, konnte ich das Skript nicht testen. Ich bin einfach davon ausgegangen, dass alle Werte reine Zahlen sind und ich keine Strings umwandeln musste.
/* PV Eigenverbrauch Skript errechnet den Eigenverbrauch aus den Daten des modbus Adapters erstellt: 09.11.2015 von Pix */ // Objekt erstellen createState('PV_Anlage.Eigenverbrauch',0, { name: 'PV-Anlage: Eigenverbrauch', desc: 'Eigenverbrauch = PV-Leistung - Einspeisung', read: true, write: true, type: 'number', unit: 'kWh' }); var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung', idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung', idEigenverbrauch = 'PV_Anlage.Eigenverbrauch'; // Berechnung mit aktuellen Daten, wenn Leistung >0 on({ id: idPVLeistung, change: 'ne', valGt: 0 }, function (data) { var einspeisung = getState(idEinspeisung).val, eigenverbrauch; // zu errechnen eigenverbrauch = data.newState.val - einspeisung; log('PV-Anlage - Eigenverbrauch: ' + eigenverbrauch + 'kWh'); setState(idEigenverbrauch, eigenverbrauch); });
Ein neues Objekt wird erstellt und konfiguriert (Einheit kWh - ist das richtig?),
die komplizierten Objektnamen mit der Adapterinstanz vorneweg werden in "leichtere" Variablen id*** gespeichert,
der Datenpunkt PV_Leistung wird überwacht (wenn Änderung und neuer Wert > 0, dann Berechnung mit aktuellen Zahlen ausführen und in State schreiben).
Drittletzte Zeile (log****) kannst du später auskommentieren oder löschen, sonst müllt sie dir bei jeder Änderung der PV-Leistung das log zu.
Die Einheit kWh ist nicht als Text im Objekt gespeichert. Du kannst also trotzdem weiter mit dem Wert rechnen.
Gib mir bescheid, ob es läuft.
Gruß
Pix `
Hi,
ich würde auch gerne meinen Eigenverbrauch berechnen. Habe aber das Problem das ich keinen Datenpunkt````
modbus.0.inputRegisters.30867_EinspeisungOb ich Energie Einspeise oder Beziehe kann ich nur am "Vorzeichen" meiner Wirkleistung erkennen. Bei Bezug ist der Wert "positiv" und bei Einspeisung "negativ" (- als Vorzeichen). Wenn ich das Script jetzt so übernehme und nur den Punkt:
var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung',
gegen meinen Datenpunkt Wirkleistung ersetze:
modbus.3.holdingRegisters.20498_Wirkenergie_Total
Bleibt der neu angelegte Datenpunkt "Eigenverbrauch" auf "0" stehen obwohl ich ja aktuell Bezug/Verbrauch habe. Kann mir bitte jemand helfen das Script entsprechend zu ändern? Ich kann leider kein Javascript und habe aktuell keinen Schimmer warum bei Eigenverbrauch nichts angezeigt wird. Vielen Dank Mirko