NEWS
[GELÖST] Adapter für powerfox/poweropti Kunden-API
-
@joergh sagte in [GELÖST] Adapter für powerfox/poweropti Kunden-API:
Fast. current power ist soweit ich das sehe bei Einspeisung ins Netz negativ, korrekt?
Dann musst Du den Wert von Total power abziehen, nicht addieren...Genau, bei Einspeisung ist er negativ.
-
@uli977 sagte in [GELÖST] Adapter für powerfox/poweropti Kunden-API:
@joergh sagte in [GELÖST] Adapter für powerfox/poweropti Kunden-API:
Fast. current power ist soweit ich das sehe bei Einspeisung ins Netz negativ, korrekt?
Dann musst Du den Wert von Total power abziehen, nicht addieren...Genau, bei Einspeisung ist er negativ.
So stimmt's. Wenn Du das Skript startest, dann siehst Du unter dem Skript die Werte und kannst schauen ob es passt, aber das weisst Du sicher.
-
@joergh
Ja, das passt soweit.Die Frage ist nun, wie ich mit diesem Wert mein Lademanagement steure.
Wie gesagt, habe ja nur Copy/Past aus dem Forum gemacht.<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="Q16T?q8~$AAn_6kTmv;0">PVUeberschuss</variable> </variables> <block type="schedule" id="g@VTDVF!ITqmms9MfaQK" x="13" y="688"> <field name="SCHEDULE">*/30 * * * * *</field> <statement name="STATEMENT"> <block type="comment" id="}mf!lvr?*vs(gL8,sCDB"> <field name="COMMENT">wenn PV Überschuss größer als minimale Ladeleistung (6A) und ... setze DynamicChargerCurrent auf den Wert des PV Überschusses</field> <next> <block type="controls_if" id="USaIn^]_,9Hu%lXwCxO6"> <mutation elseif="2"></mutation> <value name="IF0"> <block type="logic_operation" id="4^bTJzMkiX4bsUPQt0eh"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="JzLK`UA)bCeG40=lmXoU"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="B}W{QYb|81k?`S/=ECd)"> <field name="ATTR">val</field> <field name="OID">tesla-motors.0.195908811726.charge_state.battery_level</field> </block> </value> <value name="B"> <block type="get_value" id="G%P}_1rjU.u+r(SoR]xd"> <field name="ATTR">val</field> <field name="OID">tesla-motors.0.195908811726.charge_state.charge_limit_soc</field> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="VYiA9H6ib8K(Etn%.$pz"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="]F4I4?MQ_5!MN;7%y7:`"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="KupbIOJF*),a]rj8h2{Y"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.config.dynamicChargerCurrent</field> </block> </value> <value name="B"> <block type="math_round" id="GyaC0)?c?)PkifnI~nIb"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="Mh7|MU*?4k.a[r(y9fQ+"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="e(RP`U*K?q%Dq]dCoX)0"> <field name="VAR" id="Q16T?q8~$AAn_6kTmv;0">PVUeberschuss</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="qEq%=`Q*y#Anw}z)_U91"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.voltage</field> </block> </value> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="*(1,-X9z:E%,s!DF20M`"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="br7sV[cC9gh?NM@iThF|"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="rG#i$L$L{rB=Tc7yl]zc"> <field name="ATTR">val</field> <field name="OID">javascript.0.Eigene_Datenpunkte.PV-Anlage.Manuelles_laden</field> </block> </value> <value name="B"> <block type="logic_boolean" id="yX88aLmmtZ?_%;/Qw{IA"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="CB2o00z`jNwUae(_@X7j"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="l$wnnb0CI*(#k=B6%r.1"> <field name="OP">GTE</field> <value name="A"> <block type="math_round" id="J$xe#H@V|txHZAvngU7y"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="B4Kk2^2Dc)7m3b9$aCX@"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="p7to*Y~dEazl.Twu!;Bb"> <field name="VAR" id="Q16T?q8~$AAn_6kTmv;0">PVUeberschuss</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="~@DxC/SRs=9ovDhDgLky"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.voltage</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="ky#N*m3c.u1^5r_|W-u%"> <field name="NUM">6</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="!F!)fs(+#aj`HX3C(Ob:"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="+|?O=_lzoJvS~#3r$H,e"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.chargerOpMode</field> </block> </value> <value name="B"> <block type="math_number" id="l$x2_~0g.Wm28:rl9]d^"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="=@=-.i9rGgAKV9Zl(C?^"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">MaximalerOutput gesetzt auf</field> </shadow> <block type="text_join" id="W7blcdUT%:rch~wNwn^B"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="YOR[Kfuc0z(}*I(z,Tq4"> <field name="TEXT">Setze Dynamic Chargercurrent auf: </field> </block> </value> <value name="ADD1"> <block type="math_round" id="v4{^F00eB$0|!f?q(9},"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="c4`1X?m6_/x.Cb8zHxwY"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="D_GQ(2HxqQqePlYd/0bd"> <field name="VAR" id="Q16T?q8~$AAn_6kTmv;0">PVUeberschuss</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="w[!*??5AI3[xz#(yp:wA"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.voltage</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="control" id="F=#O4/FTkyV|u4Pk%CN-"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.config.dynamicChargerCurrent</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_round" id="6{vr.J6oF4noVKk$1c)p"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="LuS,jzR?Vfa8-]a?29%5"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="SMSH9u2cAZ%25),[/P8U"> <field name="VAR" id="Q16T?q8~$AAn_6kTmv;0">PVUeberschuss</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="2[0^L:Ef4!+w_W#BP@AB"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.voltage</field> </block> </value> </block> </value> </block> </value> <next> <block type="controls_if" id="nV}]Nm+@-H$P(-$3z4Z5"> <value name="IF0"> <block type="logic_compare" id="S3zEm6IZ.$J+|oY7}M=P"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="3xs2164r-F[i[4vNHjJ~"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.chargerOpMode</field> </block> </value> <value name="B"> <block type="math_number" id="G5g%F{Y-B*k%$^kp9Y3-"> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="kA@z^z-Y#^E8t!euWR]5"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">MaximalerOutput gesetzt auf</field> </shadow> <block type="text_join" id="aHcl|ynpmwhsys^q+yCu"> <mutation items="1"></mutation> <value name="ADD0"> <block type="text" id="zYC,W4iU62pM;sa:g@Uw"> <field name="TEXT">PV Überschussladen</field> </block> </value> </block> </value> <next> <block type="toggle" id="u`UneuNKvv?rz!WO]P+Z"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.control.resume</field> <field name="WITH_DELAY">FALSE</field> </block> </next> </block> </statement> <next> <block type="comment" id="Y:IeeTk1PY%G}|I;tXUc"> <field name="COMMENT">wenn Timer aktiv, oder manuelles Laden (HomeKit Schalter) aktiv, setze DynamicChargerCurrent auf 16A und starte das Laden</field> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="|t3l%Xek)KE9(.!zW0}Z"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="p6.j5T5dQI;)Meg%cN3v"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="e]leR}V1kAhgsgvD@#a)"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.chargerOpMode</field> </block> </value> <value name="B"> <block type="math_number" id="P^7Y8MtCODr2cH:T5m|["> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="W~V{]DwwM:sC6nLSvD!b"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="169eRT[(zkJe.48U;%I6"> <field name="ATTR">val</field> <field name="OID">javascript.0.Eigene_Datenpunkte.PV-Anlage.Manuelles_laden</field> </block> </value> <value name="B"> <block type="logic_boolean" id="MgB/x7A*39k-MErlt-%p"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="debug" id="KNlZeu=M=:6?ss}QLmo4"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">MaximalerOutput gesetzt auf</field> </shadow> <block type="text_join" id="si0a6AJ^;(XXWUzu?dn5"> <mutation items="1"></mutation> <value name="ADD0"> <block type="text" id="96Z+l6~=IvE)*JrQI/RR"> <field name="TEXT">Timer/manuelles Laden gestartet</field> </block> </value> </block> </value> <next> <block type="control" id="|h$RlEm5.7/(pArE_1=7"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.config.dynamicChargerCurrent</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="`Jt$cfM2ii[Flrgw.lhD"> <field name="NUM">16</field> </block> </value> <next> <block type="control" id="Gf{qwN7HTvVi6+}(4Bj6"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.config.phaseMode</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="Pm}eg@$8JL75wQ?L]uL6"> <field name="NUM">2</field> </block> </value> <next> <block type="controls_if" id="UC4Hm90=ZjkQYcMh7/yP"> <value name="IF0"> <block type="logic_compare" id="--By$nYswNV9.|Q67F0o"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="VB5cVh`8qgNs@7Uc[T9Q"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.chargerOpMode</field> </block> </value> <value name="B"> <block type="math_number" id="?8F}/^+F=WEk9bQ`1Fx["> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="}LZB.P5#3c{T}sj?,e/}"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">MaximalerOutput gesetzt auf</field> </shadow> <block type="text_join" id="A[y!P[2ycj%{V*;,X@$="> <mutation items="1"></mutation> <value name="ADD0"> <block type="text" id="~6A$N$6)77%lUZ;}90Tc"> <field name="TEXT">Time Charging gestartet</field> </block> </value> </block> </value> <next> <block type="toggle" id="*nF,seb.9~,MYGcApij|"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.control.resume</field> <field name="WITH_DELAY">FALSE</field> </block> </next> </block> </statement> <next> <block type="comment" id="h^_~,rh{*$}z8~+QwcZj"> <field name="COMMENT">Nicht laden wenn kein Timer, kein PV Überschuss und Schalter aktiv</field> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_operation" id="t.ZQsd5dwG-GX6h}/fSK"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id=":R7h)p^SJINCc#}qXUb`"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="^HKuPw`kJ9n}^@hNbJ/["> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.chargerOpMode</field> </block> </value> <value name="B"> <block type="math_number" id="hKx]Ky*s5^.Gd{O[Dr?l"> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="14?!)gPnwp=YB]pL]wd/"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="|g7To#eLNnft|X5$S8.l"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="-#y0e,%xuHmTG3Ez::p:"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.chargerOpMode</field> </block> </value> <value name="B"> <block type="math_number" id="#Y+U0/,-r`[Wc;HID6e)"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="ND:F4=Vu#4L1z_lyLbjf"> <field name="OP">LT</field> <value name="A"> <block type="math_round" id="wPb*|R9{){l1(l];@47,"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="~6%xh:bxrmNVS#MZtdyi"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="9FZc:.?/I.m`:zGWHhn#"> <field name="VAR" id="Q16T?q8~$AAn_6kTmv;0">PVUeberschuss</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value" id="ivJF!k1_CEY_fRMuHbB9"> <field name="ATTR">val</field> <field name="OID">easee.0.EH806570.status.voltage</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="_l3sBZ5eZUIC[p80N?vX"> <field name="NUM">6</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO2"> <block type="debug" id="q{{9bogrx0V]SYy]:,_*"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">MaximalerOutput gesetzt auf</field> </shadow> <block type="text_join" id="*^R!DRnKV48d78]^__M|"> <mutation items="1"></mutation> <value name="ADD0"> <block type="text" id="m3*H9hFs.a|hwuTukm[Z"> <field name="TEXT">Pause Charging weil kein PV, kein Timer und kein manueller start</field> </block> </value> </block> </value> <next> <block type="control" id="]EZL_(YCp1fyalQ^0];A"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.config.dynamicChargerCurrent</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="}ajkeOA#iQmZHAZ4:T{["> <field name="NUM">16</field> </block> </value> <next> <block type="toggle" id="|klxCAStSy|^uGkv+}LO"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">easee.0.EH806570.control.pause</field> <field name="WITH_DELAY">FALSE</field> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </xml>
-
Das Skript ist ja sehr rudimentär, also musst Du im Prinzip ja nur die Berechnung des Überschusses einbauen, wie wir sie erstellt haben und dann die ganzen Steuerpunkte an Deine Wallbox anpassen, bzw. gibt es wohl einen Datenpunkt in dem Du einstellen kannst ob Du manuell laden möchtest. Also entweder anpassen oder Dein eigenes Skript einfach weiter ausbauen.
Die Berechnung für den Überschuss hast Du, jetzt durch die Spannung teilen und abrunden, dann hast Du den Ladestrom der zur Verfügung steht.
Dann kannst Du abfragen ob der Strom reicht, wenn ja, dann Laden starten, wenn nicht, dann Laden stoppen. Das macht im Grunde dieses Skript.Willst Du auch manuell laden, dann musst Du das halt auch mit berücksichtigen, denn Du willst ja dann den Strom nicht regeln oder zumindest nicht abschalten wenn er nicht reicht. Da gibt es verschiedene Varianten wie man das einrichten kann. Ich habe z.B. einen Modus bei dem er immer mindestens mit Minimum Strom lädt und einen bei dem er bei Unterschreiten des Minimum Strom pausiert, einen weiteren bei dem ich eine Zeit einstellen kann zu dem er den eingestellten Ladestand erreicht haben muss. Aber Letzteres ist dann schon etwas komplexer.
-
@joergh Da waren sie wieder meine Probleme - lach
Danke erstmal dass du so viel Geduld hast!
-
@uli977 Gerne.
Frag halt einfach wenn Dir was nicht klar ist. Wir können auch auf den Chat wechseln, da die Detailfragen vielleicht nicht alle interessieren...?
-
Ja, sehr gerne.... lass uns Chatten
-
Hallo,
ich plane den Powerfox Adapter zu überarbeiten, da dieser bei mir nicht richtig läuft.
Bekomme mehr oder weniger unzuverlässig Daten.Im Log tauchen immer wieder folgende Warnungen auf:
get state error: DB closed
get state error: Connection is closed.Habe mir daraufhin mal die Doku zur Adapterentwicklung und den Code der main.js des Powerfox Adapters angesehen. Der Code sieht irgendwie wild aus, im Vergleich zur Doku der Adapterentwicklung.
Möchte jetzt aber nicht bei Null anfangen, kann mir jemand einen oder mehrere Adapter nennen, die JSON Daten nach Login auf einer Website abrufen?
Freue mich auf jedes Feedback.
Danke
AxLED
-
Hallo @AxLED ,
super! Finde ich klasse, dass Du Dich da kümmern möchtest.
Ich würde als erstes mal checken, ob die Cloud von powerfox tatsächlich immer erreichbar ist, da habe ich nämlich die größten Zweifel. Ich glaube die wurschteln da öfters dran rum, machen maintenance etc. und dann sie einfach auch mal nicht erreichbar und deswegen die Fehlermeldungen....bevor Du Dir im Code einen Wolf suchst...
-
@joergh
Hallo zusammen,habe mich mal an der Überarbeitung des Adapters versucht: Adapter powerfox2
AxLED
-
@axled Ich habe den powerfox2-Adapter gestartet und Login-Daten korrekt hinterlegt. In den Objekten werden jedoch keinerlei Geräte angezeigt. Gibt es da ein Problem ?
-
@blebbens sagte in [GELÖST] Adapter für powerfox/poweropti Kunden-API:
Ich habe den powerfox2-Adapter gestartet
Zeig mal den Startvorgang aus dem log file.