NEWS
Stromzählerscript PV Anlage Finanzamt in Json oder html
-
@ArnoD habs geändert
-
@smartboart
Habe mal eine Frage, wie berechnest du eigentlich den Strompreis ohne Grundpreis? oder hast du keinen Grundpreis -
Steuerlich richtig wäre doch folgende Berechnung:
StromPreis =(NettoGrundpreis / (nBezugZaehlerNeu+EigenverbrauchNeu))+ NettoStrompreis
Entnahme = Math.round((EigenverbrauchNeu*StromPreis)100)/100;
UstAnmeldung = Math.round((Entnahme/100MWST)*100)/100; -
Habe es mal geändert falls du es übernehmen willst:
// Hausstromverbrauch aktuell berechnen ************************************************************************** createState('Test.Stromzaehler.Zaehlerstaende.NetzbezugAlt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('Test.Stromzaehler.Zaehlerstaende.NetzeinspeisungAlt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('Test.Stromzaehler.Zaehlerstaende.SolarproduktionAlt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('Test.Stromzaehler.Zaehlerstaende.Mehrwertsteuersatz', 16, {name: 'aktueller Mehrwertsteuersatz', type: 'number', unit: '%' }); createState('Test.Stromzaehler.Zaehlerstaende.Nettostrompreis', 0.2638, {name: 'Strompreis netto pro kwh', type: 'number', unit: '€' }); createState('Test.Stromzaehler.Zaehlerstaende.NettoGrundpreis', 8.5, {name: 'Grundpreis netto pro Monat', type: 'number', unit: '€' }); const idJson = 'Test.Stromzaehler.Zaehlerstaende.JsonTable'; var debug = true; //Math.round((ProduktionGesamt-EinspeisungGesamt)*100)/100,true,200 ); // Zählerstände Monatlich um 23:55 speichern für Finanzamt schedule("0 0 1 * *", function() { if (debug)log('Schedule für Monatliche Berechnung fürs Finanzamt aktiv'); var nBezugZaehlerAktuell = Math.floor(getState('hm-rpc.0.QEQ0337064.1.IEC_ENERGY_COUNTER').val); var nEinspeiseZaehlerAktuell = Math.floor(getState('hm-rpc.0.QEQ0337064.2.IEC_ENERGY_COUNTER').val); var PvZaehlerAktuell=Math.floor(getState('hm-rpc.0.QEQ0337042.1.IEC_ENERGY_COUNTER').val); var MWST = getState('Test.Stromzaehler.Zaehlerstaende.Mehrwertsteuersatz').val; var NettoStrompreis = getState('Test.Stromzaehler.Zaehlerstaende.Nettostrompreis').val; var NettoGrundpreis = getState('Test.Stromzaehler.Zaehlerstaende.NettoGrundpreis').val; var nBezugZaehlerAlt = getState('Test.Stromzaehler.Zaehlerstaende.NetzbezugAlt').val; var nEinspeiseZaehlerAlt = getState('Test.Stromzaehler.Zaehlerstaende.NetzeinspeisungAlt').val; var PvZaehlerAlt=getState('Test.Stromzaehler.Zaehlerstaende.SolarproduktionAlt').val; var nBezugZaehlerNeu = nBezugZaehlerAktuell - nBezugZaehlerAlt; var nEinspeiseZaehlerNeu = nEinspeiseZaehlerAktuell - nEinspeiseZaehlerAlt; var PvZaehlerNeu = PvZaehlerAktuell - PvZaehlerAlt; var EigenverbrauchNeu = PvZaehlerNeu - nEinspeiseZaehlerNeu; var AutarkieNeu = Math.round(EigenverbrauchNeu / ((nBezugZaehlerNeu+EigenverbrauchNeu)/100)); var StromPreis = (NettoGrundpreis/(nBezugZaehlerNeu+EigenverbrauchNeu))+NettoStrompreis; var Entnahme = Math.round((EigenverbrauchNeu*StromPreis)*100)/100; var UstAnmeldung = Math.round((Entnahme/100*MWST)*100)/100; // Datum vom Vortag berechnen var jetzt = new Date(); var Theute = jetzt.getDate(); var Tgestern = new Date(); Tgestern.setDate(Theute-1); var DatumAkt=((Tgestern.getDate())+'.'+ (Tgestern.getMonth()+1) +'.'+ Tgestern.getFullYear()); var MonatAkt=(Tgestern.getMonth()+1); setState('Test.Stromzaehler.Zaehlerstaende.NetzeinspeisungAlt',nEinspeiseZaehlerAktuell); setState('Test.Stromzaehler.Zaehlerstaende.NetzbezugAlt',nBezugZaehlerAktuell); setState('Test.Stromzaehler.Zaehlerstaende.SolarproduktionAlt',PvZaehlerAktuell); if(debug)setTimeout(function(){log('Json aktualisiert ' + JSON.stringify(arr))},200); // für Json aufbereiten let obj = {}; // 12 Spalten obj.Datum = DatumAkt; obj.Einspeisung = nEinspeiseZaehlerNeu + ' kWh'; obj.Netzbezug = nBezugZaehlerNeu + ' kWh'; obj.Solarproduktion = PvZaehlerNeu + ' kWh'; obj.Eigenverbrauch = EigenverbrauchNeu + ' kWh'; obj.Autarkie = AutarkieNeu + ' %'; obj.Netzeinspeisezähler = nBezugZaehlerAktuell + ' kWh'; obj.Netzbezugszähler = nEinspeiseZaehlerAktuell + ' kWh'; obj.PVzähler = PvZaehlerAktuell + ' kWh'; obj.Privatentnahme = Entnahme + ' €'; obj.Ust = UstAnmeldung + ' €'; obj.Mwst = MWST + ' %' obj.Strompreis = StromPreis + ' €/kWh'; let arr = []; if(existsState(idJson)) arr = JSON.parse(getState(idJson).val); arr.push(obj); if(arr.length > 12) arr.shift; if(existsState(idJson)) setState(idJson, JSON.stringify(arr), true); else createState(idJson, JSON.stringify(arr), {type: 'string'}); });
-
@ArnoD ja hast du richtig erkannt.. Im Moment habe ich noch einen Tarif ohne Grundpreis... Das wird bestimmt aber bei mir auch bald ein Thema,da ich mir nicht vorstellen kann, dass die mich in dem Tarif lassen werden.. Vermutlich nach vertragsablauf wird das akut..
Aber wenn du dafür ne Lösung gefunden hast.. Nehme ich die natürlich auch gleich mit..
Mit 0 € wird die Formel glaube ich nicht funktionieren...
Müsste das in vis konfigurierbar machen.. Mit und ohne Grundpreis.. Denke ein boolean zusätzlich mit ner if erledigt das im Handumdrehen..
Ahh Sollte auch ohne gehen if 0 tuts bestimmt auch...
super... -
Komme heute aber nicht mehr dazu... Vlt. In der Mittagspause morgen. Brennt ja nicht an und du hast es ja schon hier eingestellt.. Ist ja nur ein spezieller Fall für mich den ich hier noch abbilden möchte..
-
@ArnoD sagte in Stromzählerscript PV Anlage Finanzamt in Json oder html:
StromPreis =(NettoGrundpreis / (nBezugZaehlerNeu+EigenverbrauchNeu))+ NettoStrompreis
Im Beitrag hast es noch richtig...
im Script unten hast du + NettoGrundpreis....
Habe das Script oben angepasst... mit ner if Bedingung...
meinst du wird sollten der Tabelle nen Timeout / bisschen Zeit geben bis die Variablen alle Sicher berechnet wurden?
-
@smartboart sagte in Stromzählerscript PV Anlage Finanzamt in Json oder html:
@ArnoD sagte in Stromzählerscript PV Anlage Finanzamt in Json oder html:
StromPreis =(NettoGrundpreis / (nBezugZaehlerNeu+EigenverbrauchNeu))+ NettoStrompreis
Im Beitrag hast es noch richtig...
im Script unten hast du + NettoGrundpreis....
Habe das Script oben angepasst... mit ner if Bedingung...
meinst du wird sollten der Tabelle nen Timeout / bisschen Zeit geben bis die Variablen alle Sicher berechnet wurden?
Ja hast recht ist ein Kopierfehler, Danke.
Etwas Zeit schadet nie, haben es ja nicht eilig die Umsatzsteuer zu zahlen
Du hast mich aber mit dem aufzeichnen der Kosten noch auf eine Idee gebracht.
Würde gerne den Gewinn bzw. Einsparung in einer Spalte aufsummieren, ist einfach schön zu sehen wie die Summe steigt. -
@ArnoD ja gute Idee... Warum nicht gleich ne amotisierungseechnung mit rein packen? Nen konfigteil für Investitionskosten mit rein packen.
-
@smartboart Das wäre dann perfekt. Denke nur das es dann zu viele Daten sind die man manuell eingeben muss, aber wir können es ja mal versuchen.
-
Was müsste da alles mit rein ?
Kaufpreis Netto - Förderung - AfA - Monatliche Einsparung Strom nach Abzug USt + Versicherung und Wartungskosten Netto -
@smartboart
AfA geht nicht weil sich die bei jedem anders auswirkt, dafür müsste es noch eine Position Einsparung Einkommenssteuer pro Jahr geben. -
@ArnoD sagte in Stromzählerscript PV Anlage Finanzamt in Json oder html:
@smartboart
AfA geht nicht weil sich die bei jedem anders auswirkt, dafür müsste es noch eine Position Einsparung Einkommenssteuer pro Jahr geben.ja ich hatte mit der AFA glück, im mai bezahlt konnte ich das fürs volle jahr ansetzen..
das würde es einfach machen... Aber im Prinzip ist ja nur das 1. und das letzte Jahr hier unterschiedlich. evtl. kann man das auch mit nem konfigteil lösen...- jahr , die jahre dazwischen und letztes jahr..
-
@ArnoD sagte in Stromzählerscript PV Anlage Finanzamt in Json oder html:
Was müsste da alles mit rein ?
Kaufpreis Netto - Förderung - AfA - Monatliche Einsparung Strom nach Abzug USt + Versicherung und Wartungskosten Nettovlt. noch zusätzlich investitionen ( hatte z.B nen Tastkopf Smartmeter und ein Modbus Meßgerät gekauft ) evtl Anlagenerweiterung. Bei mir passen noch 2 panels drauf und ne Batterie findet auch noch platz...
-
hi @smartboart
ich habe dein Script natürlich auch am laufen.
Jetzt war endlich der Monatswechsel und ich war gespannt was passiert.
Mir ist aber schon aufgefallen, dass er bei mir das Object für den Json-String nicht anlegt.
Wie erwartet.....immer noch nichts.
NetbezugAlt, NetzeinspeisungAlt und SolarproduktionAlt wurden aber sauber gespeichert.Ich habe dann heute versucht das Script nochmal neu reinzubringen und bekommen jetzt einige Fehler im Log.
anbei mein Script:// Hausstromverbrauch aktuell berechnen ************************************************************************** createState('PVAnlage.Stromzaehler.Zaehlerstaende.NetzbezugAlt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('PVAnlage.Stromzaehler.Zaehlerstaende.NetzeinspeisungAlt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('PVAnlage.Stromzaehler.Zaehlerstaende.SolarproduktionAlt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('PVAnlage.Stromzaehler.Zaehlerstaende.Mehrwertsteuersatz', 16, {name: 'aktueller Mehrwertsteuersatz', type: 'number', unit: '%' }); createState('PVAnlage.Stromzaehler.Zaehlerstaende.Nettostrompreis', 0.2638, {name: 'Strompreis netto pro kwh', type: 'number', unit: '€' }); createState('PVAnlage.Stromzaehler.Zaehlerstaende.NettoGrundpreis', 10, {name: 'Grundpreis netto pro Monat', type: 'number', unit: '€' }); const idJson = 'PVAnlage.Stromzaehler.Zaehlerstaende.JsonTable'; var debug = true; //Math.round((ProduktionGesamt-EinspeisungGesamt)*100)/100,true,200 ); // Zählerstände Monatlich um 23:55 speichern für Finanzamt schedule("* * * * *", function() { if (debug)log('Schedule Monatliche Berechnung fürs Finanzamt aktiv'); var nBezugZaehlerAktuell = Math.floor(getState('sonoff.0.IR-Lesekopf.STROM_Bezug').val); var nEinspeiseZaehlerAktuell = Math.floor(getState('sonoff.0.IR-Lesekopf.STROM_Einspeisung').val); var PvZaehlerAktuell=Math.floor(getState('sourceanalytix.0.modbus__0__holdingRegisters__40068_PV_Leistung.Meter_Readings.Current_Reading'/*12288 E3dc Lieferung Summe*/).val);; var MWST = getState('PVAnlage.Stromzaehler.Zaehlerstaende.Mehrwertsteuersatz').val; var NettoStrompreis = getState('PVAnlage.Stromzaehler.Zaehlerstaende.Nettostrompreis').val; var NettoGrundpreis = getState('PVAnlage.Stromzaehler.Zaehlerstaende.NettoGrundpreis').val; var nBezugZaehlerAlt = getState('PVAnlage.Stromzaehler.Zaehlerstaende.NetzbezugAlt').val; var nEinspeiseZaehlerAlt = getState('PVAnlage.Stromzaehler.Zaehlerstaende.NetzeinspeisungAlt').val; var PvZaehlerAlt=getState('PVAnlage.Stromzaehler.Zaehlerstaende.SolarproduktionAlt').val; var nBezugZaehlerNeu = nBezugZaehlerAktuell - nBezugZaehlerAlt; var nEinspeiseZaehlerNeu = nEinspeiseZaehlerAktuell - nEinspeiseZaehlerAlt; var PvZaehlerNeu = PvZaehlerAktuell - PvZaehlerAlt; var EigenverbrauchNeu = PvZaehlerNeu - nEinspeiseZaehlerNeu; var AutarkieNeu = Math.round(EigenverbrauchNeu / ((nBezugZaehlerNeu+EigenverbrauchNeu)/100)); if(NettoGrundpreis > 0 ) var StromPreis = (NettoGrundpreis/(nBezugZaehlerNeu+EigenverbrauchNeu))+ NettoStrompreis; if(NettoGrundpreis === 0 ) var Strompreis = NettoStrompreis; var Entnahme = Math.round((EigenverbrauchNeu*StromPreis)*100)/100; var UstAnmeldung = Math.round((Entnahme/100*MWST)*100)/100; // Datum vom Vortag berechnen var jetzt = new Date(); var Theute = jetzt.getDate(); var Tgestern = new Date(); Tgestern.setDate(Theute-1); var DatumAkt=((Tgestern.getDate())+'.'+ (Tgestern.getMonth()+1) +'.'+ Tgestern.getFullYear()); var MonatAkt=(Tgestern.getMonth()+1); setTimeout(function(){ setState('PVAnlage.Stromzaehler.Zaehlerstaende.NetzeinspeisungAlt',nEinspeiseZaehlerAktuell); setState('PVAnlage.Stromzaehler.Zaehlerstaende.NetzbezugAlt',nBezugZaehlerAktuell); setState('PVAnlage.Stromzaehler.Zaehlerstaende.SolarproduktionAlt',PvZaehlerAktuell); if(debug)setTimeout(function(){log('Json aktualisiert ' + JSON.stringify(arr))},200); // für Json aufbereiten let obj = {}; // 12 Spalten obj.Datum = DatumAkt; obj.Einspeisung = nEinspeiseZaehlerNeu + ' kWh'; obj.Netzbezug = nBezugZaehlerNeu + ' kWh'; obj.Solarproduktion = PvZaehlerNeu + ' kWh'; obj.Eigenverbrauch = EigenverbrauchNeu + ' kWh'; obj.Autarkie = AutarkieNeu + ' %'; obj.Netzeinspeisezähler = nBezugZaehlerAktuell + ' kWh'; obj.Netzbezugszähler = nEinspeiseZaehlerAktuell + ' kWh'; obj.PVzähler = PvZaehlerAktuell + ' kWh'; obj.Privatentnahme = Entnahme + ' €'; obj.Ust = UstAnmeldung + ' €'; obj.Mwst = MWST + ' %' obj.StrompreisGesamt = StromPreis + ' €/kWh'; obj.Strompreis = NettoStromPreis + ' €/kWh'; obj.Grundgebüren = NettoGrundpreis + ' €/Monat' let arr = []; if(existsState(idJson)) arr = JSON.parse(getState(idJson).val); arr.push(obj); if(arr.length > 12) arr.shift; if(existsState(idJson)) setState(idJson, JSON.stringify(arr), true); else createState(idJson, JSON.stringify(arr), {type: 'string'}); },2000); });
Und hier noch die Fehler im Log von Heute:
javascript.0 2020-09-01 09:39:02.204 error (591) at processTimers (internal/timers.js:492:7) javascript.0 2020-09-01 09:39:02.204 error (591) at listOnTimeout (internal/timers.js:551:17) javascript.0 2020-09-01 09:39:02.204 error (591) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2001:34) javascript.0 2020-09-01 09:39:02.204 error (591) at Object.<anonymous> (script.js.VIS-Script.PV-Stromzaehler:63:78) javascript.0 2020-09-01 09:39:02.203 error (591) Error in callback: ReferenceError: Cannot access 'arr' before initialization javascript.0 2020-09-01 09:39:02.004 error (591) at processTimers (internal/timers.js:492:7) javascript.0 2020-09-01 09:39:02.004 error (591) at listOnTimeout (internal/timers.js:551:17) javascript.0 2020-09-01 09:39:02.004 error (591) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2001:34) javascript.0 2020-09-01 09:39:02.004 error (591) at Object.<anonymous> (script.js.VIS-Script.PV-Stromzaehler:86:22) javascript.0 2020-09-01 09:39:02.003 error (591) Error in callback: ReferenceError: NettoStromPreis is not defined javascript.0 2020-09-01 09:40:02.235 error (591) at processTimers (internal/timers.js:492:7) javascript.0 2020-09-01 09:40:02.235 error (591) at listOnTimeout (internal/timers.js:551:17) javascript.0 2020-09-01 09:40:02.235 error (591) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2001:34) javascript.0 2020-09-01 09:40:02.235 error (591) at Object.<anonymous> (script.js.VIS-Script.PV-Stromzaehler:63:78) javascript.0 2020-09-01 09:40:02.234 error (591) Error in callback: ReferenceError: Cannot access 'arr' before initialization
Irgendeine Idee wo ich ansetzen kann?
Danke schon mal -
@Abyss sagte in Stromzählerscript PV Anlage Finanzamt in Json oder html:
NettoStrompreis
ja...scheint ein Schreibfehler zu sein...
NettoStromPreis und NettoStrompreislass das script einfach mal mit minütlichem Trigger laufen, dann kannst es kontrollieren ob es macht was es soll.
der json string wird erst angelegt wenn er zum 1. mal gefüllt wird...das hat aber bei dir zu Problemen geführt weil der Schreibfehler das verhinderte.
Den json string kannst dann bearbeiten um deinen Eintrag für letzten Monat zu haben...hab den Rechtschreibfehler oben korrigiert...
-
Hey @smartboart, sehr interessant ich habe mal einen reminder fuer mich gemacht ob man es eventueel in SA integrieren könnten da einige Elementen hiervon dort bereits enthalten sind.
https://github.com/iobroker-community-adapters/ioBroker.sourceanalytix/issues/185
Cheers,
Dutch
-
danke dir. Machmal is es so einfach.
Jetzt scheint es zu laufen und hat mir auch den Json angelegt.Danke.
-
kleine Anmerkung noch von meiner Seite.
In Zeile 70 in deinem Script fehlen die Klammern nach dem arr.shift
Dadurch funktioniert die Begrenzung der Arrayeinträge nicht.if(arr.length > 15) arr.shift();
-
@Abyss habs oben angepasst..
und auf 12 monate geändert.
Ich habe es bei mir aber raus genommen. lasse es über die gesamte laufzeit laufen..