NEWS
Strom Verbrauch und separat Überschuss berechnen
-
-
Hallo Paul53, hallo iob Forumleser,
ich habe nun einmal alle 3 oben beschrieben Blockly Varianten für einige Tage getestet und bin zu folgendem Ergebnis gekommen.
Das Blockly was ich am 13.06.23 hier als stabil befunden hatte brachte im weiteren Verlauf folgenden Fehler.
Am Morgen, sporadisch, wenn der Wechselrichter seine Arbeit wieder aufnahm machte der Datenpunkt für PV-Ertrag und Eigennutzung einen Sprung von oft über +190kWh und somit war die Ermittlung im Eimer.Am 23.06. hat Paul53 vorgeschlagen, danke dafür, den Trigger von "ist größer als letztes" auf "wurde geändert" zu setzen, fast zeitgleich kam noch ein Vorschlag den Sprung über einen Filter heraus zu bekommen.
Ich habe beide neuen Vorschläge umgesetzt mit folgendem Ergebnis.
Nur die Änderung des Triggers auf "wurde geändert" war erfolgreich. Die Werte Ertrag, Einspeisung und Eigennutzung wurden sauber mitgeschrieben.
Das Blockly mit dem Filter gab falsche Ergebnisse aus, zu wenig Einspeisung zu viel Eigennutzung. (Wäre ja schön gewesen wenn es so gewesen wäre )Anbei noch ein Beispielbild eines Tages.
Rechts die Aufzeichnung des Blocklys mit Filter über Sourceanalytics und links das Blockly mit dem Trigger "wurde geändert"
(also links die Aufzeichnung mit reproduzierbaren Ergebnissen)Ich hoffe meine bescheidenen Erfahrungen helfen vielleicht anderen interessierten weiter und nochmals danke an @paul53 für die tolle Blockly Vorlage.
Es grüßt euch Duffy
-
sorry, war im falschen Post
-
@peter-berg in wie vielen Threads zu ioBroker möchtest du noch um Unterstützung für externe Geräte mit Tasmota erfragen?
-
@duffy said in Strom Verbrauch und separat Überschuss berechnen:
Das Blockly läuft nun seit einigen Tagen sauber durch und funktioniert ausgezeichnet.
Ich stelle hier noch mal ein finalen Screenshot des Blocklys ein zum Nachbau, wenn da jemand interesse hat.Nochmals vielen dank an @paul53 dessen Verdienst das Blockly ist, ich habe es nur nach Bildern zusammengebaut. (Malen nach Zahlen eben )
LG Duffy
@duffy said in Strom Verbrauch und separat Überschuss berechnen:
Das Blockly läuft nun seit einigen Tagen sauber durch und funktioniert ausgezeichnet.
Ich stelle hier noch mal ein finalen Screenshot des Blocklys ein zum Nachbau, wenn da jemand interesse hat.Nochmals vielen dank an @paul53 dessen Verdienst das Blockly ist, ich habe es nur nach Bildern zusammengebaut. (Malen nach Zahlen eben )
LG Duffy
Prima, würde mich auch interessieren. Kannst Du mir das Script mailen? (willi.dennerlohr.de) Wäre toll.
MfG Willi -
Das skript:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="8QfIKsruysJpkfI_Laz=">Einspeiseenergie</variable> <variable id="SDbPbz:OQ}DXoHFlfr6;">PV_Ertrag</variable> </variables> <block type="variables_set" id="mbhzmxw}Olt:RED`$HM?" x="188" y="88"> <field name="VAR" id="8QfIKsruysJpkfI_Laz=">Einspeiseenergie</field> <value name="VALUE"> <block type="get_value" id="fv.Pyn+=XNj3mBR^O*y#"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.PV_Einspeisung.PV_Einspeisung_Wh</field> </block> </value> <next> <block type="comment" id="zB]aZ2A+Q7t}Zj)v/Mp0"> <field name="COMMENT">Leistung (W)</field> <next> <block type="on_ext" id="_s6W/4RK2_,Ax/VDHl=g"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id=".vLIJp|1X|EY%Ed2HG54"> <field name="oid">sonoff.0.Stromzähler.MT681_Power_cur</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="Ah1T+%Zg,Jwu12qd{clW"> <value name="IF0"> <block type="logic_compare" id="!}L8R}/%Elp$%K5Sl(9|"> <field name="OP">LT</field> <value name="A"> <block type="on_source" id="@I~zpvc}htlNbY?ce!NV"> <field name="ATTR">oldState.val</field> </block> </value> <value name="B"> <block type="math_number" id="[T?_,mrEXTI=ga^+u3N`"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="Oo~f?,+KUpsHqmTcN[WZ"> <field name="COMMENT">Energie Wh</field> <next> <block type="math_change" id="pTtl{hR/]%qAvX;A2Fz="> <field name="VAR" id="8QfIKsruysJpkfI_Laz=">Einspeiseenergie</field> <value name="DELTA"> <shadow type="math_number" id="Uk@[+;hZ(9z{7j!R!*)~"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="WX:QVL4gOAnA.cJH9H`x" inline="false"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="q*0#7)IKIdS}sN%W7tfw"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="BNX`[d!HLVfIwcXs86Ep"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="J)-A5vC7c^f~YA_D,D,?"> <field name="NUM">1</field> </shadow> <block type="on_source" id="gl7iH#}}_gADCuUu0y@8"> <field name="ATTR">oldState.val</field> </block> </value> <value name="B"> <shadow type="math_number" id="l{SbNq,AT{hE]hFEqSB2"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="alN.)HWWpj`ZQ~Rfl5@{"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="%(VU0;/9G!^AX,q%]9cr"> <field name="NUM">1</field> </shadow> <block type="on_source" id="y(?#xOCCF%vh.)x/JL~!"> <field name="ATTR">state.lc</field> </block> </value> <value name="B"> <shadow type="math_number" id="j=obz_-g%yDMlIBeJ^aH"> <field name="NUM">1</field> </shadow> <block type="on_source" id="TOgG)hcm*3c;`(IzwF`o"> <field name="ATTR">oldState.lc</field> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="@J,i[0seFL!841-ytv/]"> <field name="NUM">-3600000</field> </shadow> </value> </block> </value> <next> <block type="update" id="p+(#|mvOG}YZ0iHd9]PX"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Einspeisung.PV_Einspeisung_Wh</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_round" id="`p6;Gl}=kxuj.7[Ft;Qh"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id="sETaomKPsuK^N:/J5Xpp"> <field name="NUM">3.1</field> </shadow> <block type="variables_get" id="v6mCa0tEa)Q%VFC$ULdS"> <field name="VAR" id="8QfIKsruysJpkfI_Laz=">Einspeiseenergie</field> </block> </value> </block> </value> <next> <block type="comment" id="~Y5$,;#Tj$t)NCjk.%s9"> <field name="COMMENT">kWh</field> <next> <block type="update" id="SWrTagNZQwe(2KATCQS9"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Einspeisung.PV_Einspeisung_kWh</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_rndfixed" id="rJP5R]kttn]Ed$IWmVAl"> <field name="n">2</field> <value name="x"> <shadow type="math_number"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="s0df=%jV0^edxx?OPKbk"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="iF[Ynm5;JlzOvt3[R`I}"> <field name="VAR" id="8QfIKsruysJpkfI_Laz=">Einspeiseenergie</field> </block> </value> <value name="B"> <shadow type="math_number" id="j@Rsu6yq3w4Ti+ZJ7$V7"> <field name="NUM">1000</field> </shadow> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> <next> <block type="variables_set" id="Hq?}d)?smw_)GbI[X%_O"> <field name="VAR" id="SDbPbz:OQ}DXoHFlfr6;">PV_Ertrag</field> <value name="VALUE"> <block type="get_value" id="8eFA4h.5dy5i4BTB5mgW"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.PV_Ertrag.PV_Ertrag</field> </block> </value> <next> <block type="on_ext" id="39Zyh3,]?dT$Snl?%Iju"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="0BA(E[a8n0|p]kHrF(JB"> <field name="oid">opendtu.0.total.yieldtotal</field> </shadow> </value> <statement name="STATEMENT"> <block type="math_change" id="h%%#,jKHpq1uu*I+0M)H"> <field name="VAR" id="SDbPbz:OQ}DXoHFlfr6;">PV_Ertrag</field> <value name="DELTA"> <shadow type="math_number" id=":2|w+1{Z4wgjt.jm8/NV"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="z{iBC$3[A!q~q,p-qCWo"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="#cf[4jtT2a$7wH6ai.7/"> <field name="NUM">1</field> </shadow> <block type="on_source" id="`%4:X]97$%4iza!OkG5}"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <shadow type="math_number" id="u:0W0|1=v%?MyadaBn1H"> <field name="NUM">1</field> </shadow> <block type="on_source" id="LUhI|.bpz85EPa8ENhHx"> <field name="ATTR">oldState.val</field> </block> </value> </block> </value> <next> <block type="update" id="ag%ciS8dt92qUrV8Gu8%"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Ertrag.PV_Ertrag</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="ts63{FF??1N7X]~oPL{W"> <field name="VAR" id="SDbPbz:OQ}DXoHFlfr6;">PV_Ertrag</field> </block> </value> <next> <block type="update" id="(csCPu{!sQBEgT[`,XJ2"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Ersparnis.Ersparnis_kWh</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_rndfixed" id="%ZF=}T8DCk7,f%7twN~p"> <field name="n">2</field> <value name="x"> <shadow type="math_number" id="(RpiGL[FCghz3wNH28|!"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="?g*)8}Sn2{Nv7c^mv)(%"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="D3}dw(Z6W2`5HEyk[@Kb"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="cRRG5Xp/`uyu_%xjS;iN"> <field name="VAR" id="SDbPbz:OQ}DXoHFlfr6;">PV_Ertrag</field> </block> </value> <value name="B"> <shadow type="math_number" id="EDrD2WO$F#1Cw%|{U)7_"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="j+UCQApe[olx#Vbe8$Z:"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="p=^0~m8DpJCAliSe)5X3"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="qcbR.0#nEY0r0]PvzXsi"> <field name="VAR" id="8QfIKsruysJpkfI_Laz=">Einspeiseenergie</field> </block> </value> <value name="B"> <shadow type="math_number" id="gsLF;/(,M)2)utesU;o+"> <field name="NUM">1000</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="#T[Pl*fwLqYq*8EK}Nl)" disabled="true"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="`%((7Q{A2XMLeRy4xE29"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id=";UjjaW^%:SbBU]wPA^7G"> <field name="VAR" id="SDbPbz:OQ}DXoHFlfr6;">PV_Ertrag</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
Gruss Duffy
-
@duffy
ja, das wäre was ich bräuchte: Habe nur einen 1-Richtungszähler und würde gerne die Einspeisung ins Netz
dokumentieren, habe vonJave und Blockly leider keine Ahnung. Wäre toll wenn Du mir das Script zur Verfügung
stellen würdest.
Willi -
Hallo Willi,
Das was ich in den post gestellt habe ist das blockly skript.
Du musst den Text nur bei dir in ein Blockly importieren und dann die Datenpunkte auf deine Eigenen anpassen.
Alternativ kannst du dir das Blockly auch anhand der Screenshots zusammen puzzeln. (Ist halt umständlicher)
Eine andere Alternative ist mir noch nicht bekannt aber hier im Forum gibt es echte Profis die da vielleicht noch andere Wege kennen.
Gruss Duffy
Edit:
Bei Skripte auf das + klicken
dann Blockly klicken
Namen eingeben für das Blockly
OK Klicken
Im rechten Fenster auf Blöcke importieren klicken
dort den von mir im Post eingefügten Text rein kopieren
Importieren klicken
Dann deine Datenpunkte anpassen*.
*)Beachte, du musst auch noch eigene Datenpunkte anlegen in 0_userdata damit das Blockly da reinschreiben kann.
z.B.
0_userdata.0.PV_Ertrag.PV_Ertrag
0_userdata.0.PV_Ersparnis.Ersparnis_kWh
0_userdata.0.PV_Einspeisung.PV_Einspeisung_Wh
0_userdata.0.PV_Einspeisung.PV_Einspeisung_kWh -
@duffy Hallo Duffy, ich habe das Script jetzt nachgebaut und es mit meinen Datenpunkten verbunden. Es müsste funktionieren. Eine Fehlermeldung habe ich noch nicht erhalten. Allerdings habe ich noch keine Einträge in meinen Datenpunkten.
PV_Ertrag.PV_Ertrag
PV_Ersparnis.Ersparnis_kWh
PV_Einspeisung.PV_Einspeisung_Wh
PV_Einspeisung.PV_Einspeisung_kWhDas kann aber schon durchaus so sein, ich hatte es gestern abend eingeschaltet und bis heute keine siknifkante Sonneneinstahlung von der Solar Anlage. Und eben auch keinen Überschuss produziert.
Ich habe gesehen das du da was mit im Thema drin hast was du gepostet hast.
CurrentDay, PreviousDay, CurrentWeek; PreviousWeek, ec.
Ich möchte mir eine Historie bauen in der ich jeden einzelnen Tag, jede Woche, jeden Monat und das jeweilige Jahr abspeichern kann.
Geht das mit einem Zeitplan?Frank
-
@docemmetbrown sagte: jeden einzelnen Tag, jede Woche, jeden Monat und das jeweilige Jahr
Für Periodenwerte gibt es den Sourceanalytix-Adapter.
Man kann es auch mit Blockly machen. -
@paul53
Hallo Paul, hast du Erfahrungen mit dem Adapter. Ist der stabil? Den gibt es nicht unter der Stable Iobroker Oberfläche. Ich müsste dafür auf beta umstellen um den Adapter zu laden.Frank
-
@docemmetbrown sagte: hast du Erfahrungen mit dem Adapter. Ist der stabil?
Ich habe keine Erfahrung mit dem Adapter, aber viele andere Nutzer.
-
-
@duffy nein, leider keine Daten in den Datenpunkten vorhanden. Ich muss das noch einmal überprüfen
Frank
-
@duffy So, jetzt muss ich mich nochmal melden. Ich denke ich habe das Skript richtig nachgebaut. Kann man vielleicht am Screenshot sehen. Der zweite Screenshot zeigt die Werte die ich in den Objekten habe. Da stimmt was nicht. Man müsste die eingespeiste Enregie sehen können, da ich heute morgen wieder ins Netz eingespeist habe. Was ich nicht genau weis, ob die Datenpunkte die dafür nötig waren richtig gesetzt sind.
Ich hatte Lokalisiert: Von oben nach unten
Einspeiseenergie=PV_Einspeisung_Wh müsste stimmen
Falls Objekt, Objekt ID=Lesekopf Easymeter SML power_use_sum (Stomzähler Momentverbrauch) Müsste stimmen
PV_Einspeiseenergie_Wh
PV_Einspeiseenergie_kWh
PV_Ertrag
Das nächste Falls Objekt, ich weis nicht ob das richtig ist, kommt bei mir aus einem anderen Skript
Strom_Bezug_Tagesverbrauch=das wäre der Tagesverbrauch den ich von meinem Stromanbieter bezieheIst das richtig so? Oder wo ist der Fehler?
Hier sind die Screenshots.
Frank
-
@docemmetbrown Hallo Duffy, ich habe mir jetzt mal das Skript was du hochgeladen hast reingezogen. Da sind am ende noch 2 Blöcke drin die in dem fertigen Skript nicht vorkommen. Kann ich die löschen?
Frank
-
@docemmetbrown
Falsche Trigger-Datenpunkte: "Power_Use_Sum" hört sich nicht nach Leistung an. "Tagesverbrauch" enthält sicherlich nicht den kumulativen Zählwert.Falsche Variable links und es muss durch 1000 dividiert werden.
-
@paul53
Hallo Paul. Bei mir ist der Datenpunkt: "Power_Use_Sum" der momentverbrauch an Strom meines Stromzählers. Gemeint ist Summer aller Phasen im Momentanverbrauch KilowattFrank
-
@docemmetbrown sagte: Momentanverbrauch Kilowatt
Das Skript rechnet mit W. Der Wert wird negativ bei Einspeisung?
-
@docemmetbrown sagte: Tagesverbrauch den ich von meinem Stromanbieter beziehe
Ist das richtig so?Nein, es muss die von der PV erzeugte Energie (in kWh) in den Trigger.