Newan / ioBroker.easee

easee is a wallbox with an REST-API. This adapter for ioBroker can used to connect the wallbox with your home environment
MIT License
21 stars 8 forks source link

dynamicCircuitCurrentP1,2,3 bitte writeable #23

Closed TheSpirit closed 2 years ago

TheSpirit commented 3 years ago

Hi, ich habe gerade noch das hier gefunden https://github.com/fondberg/pyeasee/issues/35#issuecomment-760378451 von daher wäre es schon gut, wenn man auch die circuit dynamic currents schreiben könnte. für mich ist dies relevant, da ich pv Überschuss laden will. so kann ich am Anfang nur mit einer Phase laden und dann einfach auf drei umschalten wenn genügend ström da ist ohne den Phasenmodus "echt" wechseln zu müssen (der Phasenmodus soll ja auch nicht zu oft umgeschalten werden, da dieser auch in den Flash geschrieben wird). Danke für deine Tolle Arbeit

kbb444 commented 3 years ago

Hallo, ich würde mich dem voll und ganz anschließen: Ein fetter Dank @newman, super Sache! Tolle Arbeit! Und auch bzgl. des requests zu dynamicCircuitCurrentPx. Dies ist wohl auch der Weg, den die Kollegen um "evcc" gehen. Wäre super, wenn Du den Adapter dahingehend ertüchtigend würdest. Viele Grüße

Newan commented 3 years ago

/api/sites/{siteId}/circuits/{circuitId}/settings https://api.easee.cloud/index.html Steht ne 0 drin, frage ist was steht drin wenn die Phase umgeschaltet wird? Ich checke das mal

Newan commented 3 years ago

Testet mal 1.0.4 ;-)

TheSpirit commented 3 years ago

nachdem ich den adapter aus git installiert habe, wird mir als aktuell installierte version immer noch die 1.0.2 angezeigt. was mache ich da falsch?

TheSpirit commented 3 years ago

leider klappt es noch nicht. das problem ist wohl, das du ja die werte für dynamicCircuitCurrentP1,2,3 immer einzeln schreibst. das geht so nicht.

wenn ich das bei evcc richtig vestehe, müssen die drei werte auf einmal übergeben werden. sieher hier: https://github.com/andig/evcc/blob/master/charger/easee.go#L298

und wenn ich das in der api von easee richtig sehe, ist das auch so. siehe hier: https://api.easee.cloud/index.html

kbb444 commented 3 years ago

Ich lese das auch so, dass man einen Vektor {P1;P2;P3} übergeben muss. M.E. sollte immer ein inhaltlich passendes Tripel generiert werden, sodass es also nicht zur Änderung einzelner Phasenwerte kommt. Eine mögliche Umsetzung der Schreiboption könnte z.B. so aussehen...

  dynamicCirquitCurrentP1 schreibt:
  - falls .../config/phaseMode = 1 oder 2  -> Vektor (P1;0;0)
  - falls .../config/phaseMode = 3 -> log-Eintrag mit Hinweis auf Inhalt .../config/phaseMode und dynamicCirquitCurrentP3 als anzuwendende Option

  dynamicCirquitCurrentP2 wird nicht schreibend unterstützt 

  dynamicCirquitCurrentP3 schreibt:
  - falls .../config/phaseMode = 2 oder 3 -> Vektor (P3;P3;P3)
  - falls .../config/phaseMode = 1 -> log-Eintrag mit Hinweis auf Inhalt .../config/phaseMode und dynamicCirquitCurrentP1 als anzuwendende Option

Soweit wäre das Ganze erstmal an einen Charger gebunden (Die Objekte .../config/... sind ja Charger-abhängig). Theoretisch könnten dann innerhalb eines Cirquits zunächst mal verschiedene Datenstände "koexistieren". In praktischen Test sind dann so einige Fragen zu klären, z.B.:

Aber vielleicht sind die Anworten ja bereist in der community bekannt.

Zum Testen verfüge ich zwar über einen Cirquit mit 3 Geräten, bin auf aber ein "Leihfzg." angewiesen, aktuell ein 2-phasiger Plugin. Das wird mich zu gegebener Zeit also etwas einschränken.

TheSpirit commented 3 years ago

Ich finde das mit schreiben P1 oder P3 nicht so gut. Aber hab grad noch keine bessere Idee. Kann in iobroker ein Objekt ein Tripel sein, oder geht das in iobroker nicht (jedes Objekt hat nur einen value)?

kbb444 commented 3 years ago

Kann ich leider nicht beantworten, denke aber nicht, dass es geht. Man könnte aber neue Objekte definieren, die dann nur schreibend bedatet werden, z.B. dynamicCirquitCurrentP100 und ...P333 (Bedeutung analog ...) Ist zwar auch nicht selbsterklärend, aber zumindest überschneidungsfrei. Vielleicht gibt's auch bessere Ansätze zum Namen.

TheSpirit commented 3 years ago

Das wäre doch mal eine test wert

Newan commented 3 years ago

leider klappt es noch nicht. das problem ist wohl, das du ja die werte für dynamicCircuitCurrentP1,2,3 immer einzeln schreibst. das geht so nicht.

wenn ich das bei evcc richtig vestehe, müssen die drei werte auf einmal übergeben werden. sieher hier: https://github.com/andig/evcc/blob/master/charger/easee.go#L298

und wenn ich das in der api von easee richtig sehe, ist das auch so. siehe hier: https://api.easee.cloud/index.html

POST ​/api​/sites​/{siteId}​/circuits​/{circuitId}​/settings Set Circuit Settings

Set circuit settings of a site. Rate limited at max 20 request per minute. Please only specify keys you want to change. Endpoint handles partial JSON objects and will give a 400 response if it does not understand the request. Will only forward values for dynamicCircuitCurrentP1, P2, P3 to device if new value != old value

Konnte gestern auf der testbox p1=0, p2=10 p3=0 setzen. Was da net gehen soll k.a? Pyeasee kannst auch jede Phase einzeln setzen. Ob das die Sinn macht dies zu tun muss ja jeder selbst wissen

TheSpirit commented 3 years ago

Versuch mal p1=10, p2=10 p3=10 Das hat bei mir nicht geklappt. konnte es zwar setzen, aber nachdem er es von der Box wieder gelesen hatte, war wieder nur einer der drei auf 10 und der Rest wieder auf 0

kbb444 commented 3 years ago

Ich kann mit der 1.0.4 jeden Kanal einzeln setzen. Gleichzeitig werden aber die beiden anderen Px auf Null gesetzt. Ein sequentielles Setzen ist also nicht möglich, weil immer 2 Kanäle Null sind. Passt also zu den Versuchen von TheSpirit. Und noch eines: Teilweise musste ich den Wert 3x setzen bis er bestätigt wurde usw. s.o. In den anderen bis zu 2 Fällen (vor der Bestätigung), wurde der vorherige Wert von der Cloud wieder auf das Objekt zurückgeschrieben. Das Rücksetzen (3x40A) war bei mir über einen Neustart des Adapters mittels EASEE-App erfolgreich.

Newan commented 3 years ago

Ok danke fürs Feedback, bau was ein das er alle 3 werte setzt

TheSpirit commented 3 years ago

gibt es schon was neues?

Newan commented 3 years ago

Werde es so realisieren, das wenn eine Phase geschrieben wird, der Adapter 200ms wartet und dann alle 3 Phasen sendet. Somit habt ihr die Möglichkeit über script immer alle Phasen auf einmal zu senden.

TheSpirit commented 3 years ago

d.h. wenn ich nur einen wert ändere, werden die anderen beiden automatisch mit 0 gesendet (bzw. alle drei mit den jeweiligen werten; xx/0/0). fasse ich aber alle drei Phasen an, werden alle werte auf einmal geschickt (xx/yy/zz). hört sich gut an. Danke

Scotty-89 commented 3 years ago

hey zusammen,

sorry ich konnte nicht ganz folgen aber der Plan ist jetzt, da ein Wechsel und somit schreiben von config.phaseMode immer in den Speicher geht uns somit diesen langfristig zerstören könnte, den phaseMode dauerhaft auf = 3 zu stellen ? oder 2 für Auto ?. und dann auch wenn nur einphasig geladen werden soll das über die Parameter config.dynamicCircuitCurrentP1 ... zu "steuern" ?

also bswp für einphasiges Laden: config.phaseMode = 3 config.dynamicCircuitCurrentP1 = 6 (6-16) config.dynamicCircuitCurrentP2 = 0 config.dynamicCircuitCurrentP3 = 0

für dreiphasiges Laden: config.phaseMode = 3 config.dynamicCircuitCurrentP1 = 16 (6-16) config.dynamicCircuitCurrentP2 = 16 (6-16) config.dynamicCircuitCurrentP3 = 16 (6-16)

verstehe ich das korrekt ? was ist dann mit dem Parameter easee.0.EHTZSSUL.config.dynamicChargerCurrent ?? aktuell verwenden wir ja diesen beim einphasigen laden ...

Sorry für die Dummen nachfragen ;)

kbb444 commented 3 years ago

Deine Fragen sind m.E. mangels Testmöglichkeit jetzt noch nicht abschließend zu beantworten. Für die Nutzer von "dynamicChargerCurrent" ändert sich natürlich nichts. Ansonsten wird die Box nach meiner Einschätzung - also vorbehaltlich des Verhaltens der Box im Test - im Modus "2" gefahren. Das Umschalten 1P/3P soll durch die Box erfolgen, setzt aber voraus, dass diese den Wunsch anhand der Bedatung von dynamicCircuitCurrentPx erkennt. Das ist im Test zu klären. Falls nicht, wird die Box wohl in Modus "3" gestellt, auch für 1P-Laden. EVCC zeigt, dass einer von beiden Wegen zum gewünschten Ergebnis führen wird. Bis auf die phaseMode sind Deine beiden Listen also "der Plan". Ich gehe weiter davon aus, dass "dynamicChargerCurrent" auf den gleichen Wert wie dynamicCircuitCurrentP1 gestellt werden muss, da ansonsten vermutlich kein Ladevorgang stattfindet. Aber auch das muss im Test geklärt werden.

Heini1985 commented 2 years ago

Hallo zusammen, ich würde gerne meine easse mit dynamicCircuitCurrentP1,P2,P3 steuern und Phasenumschaltung dauerhaft auf Automatischen Modus lassen. So macht es EV Autocharge auch. Wie stelle ich es an der Box dynamicCircuitCurrentP1,P2,P3 zu übergeben damit diese nicht überschrieben werden. ich habe noch nie eigen Objekte im iObroker angelegt.

Kann einer von euch mir helfen?

Oder wird es einen Update vom Easse Adapter geben damit man die variablen im Blockly setzen kann und diese übergeben werden.

installierter Adapter 1.0.3 (1.0.4 habe ich noch nicht gefunden)

Ich habe eine Easse Home ein PV mit 8,34kWp, einen Powerfox Poweropti und eine Zor R135 (Zoe 2)

Heini1985 commented 2 years ago

Hallo zusammen zur Zeit verwende ich die Phasen Umschaltung. Aber das sollte man ja nicht zu oft mache da diese in flash geschrieben wird. Wo finde ich den Adapter 1.0.4 Und kann ich dann die dynamicCirtuitCurrent Pxmit blockly setzen?

Danke

kbb444 commented 2 years ago

Die 1.0.4 erhälst Du, wenn Du den aktuellen Master über Github installierst. 1.0.4 schreibt aber nur die Phase, deren Topic Du gewählt hast. Die restlichen Phasen werden seitens der Cloud dann implizit mit "0" geschrieben (...P1-> Phase1, 0, 0). Das Thema ist also noch nicht fertig (s.o.). Ich habe bei mir als Zwischenlösung die /opt/iobroker/node_modules/iobroker.easee/main.js so geändert, dass ...P1 Phase1/0/0, ...P2 Phase1/2/0 und ...P3 Phase1/2/3 schreibt. Die Zielkonfiguration von newman sieht aber anders aus und macht so auch mehr Sinn. Ist eben nur ein workarround. main.js.gz

Heini1985 commented 2 years ago

Danke für die Antwort Ich habe jetzt den 1.0.4 drauf und werde mit denen Main Mal rumprobieren.

Falls es etwas neues gibt bitte Posten.

Ich lade aktuell wieder über EV Autocharge aber das ist nicht so flexibel.

Gruß

Heini1985

Heini1985 commented 2 years ago

Danke kbb444 jetzt funktionier mein Überschussladen so wie ich es wollte.

wenn kein PV Überschuss: dynamicChargerCurrent = 0A dynamicCircuitCurrentP3 = 0A

Wallboxmodus =2 Laden 1P: dynamicChargerCurrent = StromX dynamicCircuitCurrentP1 = StromX

Laden 3P: dynamicChargerCurrent = StromX dynamicCircuitCurrentP3 = StromX

Funktioniert Super

Danke

kbb444 commented 2 years ago

Eine Frage: Wechselst Du direkt zwischen 1P und 3P oder pausierst du den Ladevorgang vor der Änderung des Phasenmodua? Auf jedem Fall schon mal danke für's Testen...

Heini1985 commented 2 years ago

Hallo kbb444

ich habe beides ausprobiert ohne Pause und mit Pause.
Ohne Pause funktioniert es auch aber das Auto verschluckt sich und bricht den Ladevorgang ab.

Ich pausiere und dann setze ich die Strome. Danach mit Resume starte ich die Ladung wieder.

Heini1985 commented 2 years ago

Hallo Zusammen ein kleines Update zum Test.

Ich habe festgestellt das man den Strom nicht über dynamicCircuitCurrentPX einstellen muss sondern nur mit .dynamicChargerCurrent.

  1. Ich mache es so das ich meinen PV Überschuss nehme und damit den Strom berechne (I1P=P/U)
  2. Abhängig von dem PV Überschuss und draus resultierendem Strom (I1P> 16A) teile ich den Strom durch 3( I3P= I1P/3) für 3 Phasen Ladung
  3. Wenn der Strom I1P zwischen >6 und <16A ist. setze ich dynamicCircuitCurrentP1 =16A und den .dynamicChargerCurrent= I1P
  4. Strate ich die Ladung durch Strart (mit Resume überschreibt er den dynamicChargerCurrent mit 32A und lädt mit 16A)
  5. Wird der Strom I1P > 16A und der I3P >6A dann pausiere ich die Ladung. setze ich dynamicCircuitCurrentP3 =16A und den .dynamicChargerCurrent= I3P
  6. Strate ich die Ladung durch Strart
  7. wenn kein PV Überschuss vorhanden dann pausiere ich die Ladung bis wider die Sonne scheint.

ich hoffe ich konnte etwas helfen. ich werde meinen Blockly Skript benutzen und noch dran Pfeilen.

Viele Grüße Heini1985

Newan commented 2 years ago

Habe 1.0.4 neu erstellt. Bitte neu installieren und testen!

Heini1985 commented 2 years ago

Ich habe die neue ver. 1.0.4 installiert.

Ich habe festgestellt das man alle 3 PX setzen muss um ein 100% Ergebnis zu bekommen.

Setzt man nur P3 (händisch) werden die anderen mit 0 überschreiben genau so bei P2 und P1. Setzt man aber alle drei PX variablen innerhalb 500ms (im Skript) z.B P1=16; P2 =16; P3 =16 oder P1=16; P2 =16; P3 =0 funktioniert es

Das heißt für mich das ich in meinem Skript immer alle drei PX setzten muss.

Danke fürs Update Newman

Viele Grüße Heini1985

Newan commented 2 years ago

Ich habe die neue ver. 1.0.4 installiert.

Ich habe festgestellt das man alle 3 PX setzen muss um ein 100% Ergebnis zu bekommen.

Setzt man nur P3 (händisch) werden die anderen mit 0 überschreiben genau so bei P2 und P1. Setzt man aber alle drei PX variablen innerhalb 500ms (im Skript) z.B P1=16; P2 =16; P3 =16 oder P1=16; P2 =16; P3 =0 funktioniert es

Das heißt für mich das ich in meinem Skript immer alle drei PX setzten muss.

Danke fürs Update Newman

Viele Grüße Heini1985

Genauso habe ich die Anforderung verstanden und umgesetzt

Newan, ohne m :-)

Heini1985 commented 2 years ago

Hallo jetzt wollte ich meinen Skript ausprobieren aber eassee adapter war zwar grün hat aber keine daten übergeben dann habe ich den Adapter neu installiert jetzt habe ich Kar keine Objekte mehr im iobriker (siehe Bild)

image

ist es bei mir nur oder hat ein anderer das Problem

Heini1985

Heini1985 commented 2 years ago

ich habe bei Easee auf der seit geschaut und etwas gefunden.

zurzeit wird etwas an der API gemacht von 9:00- 21:00

Heini1985

Newan commented 2 years ago

Kann das hier geschlossen werden?

kbb444 commented 2 years ago

Funktioniert wie gewünscht. Vielen Dank! Kann aus meiner Sicht also geschlossen werden.

Heini1985 commented 2 years ago

Von meiner sicht kann es auch geschlossen werden Danke für deine Mühe. Super gemacht.

Danke für den Adapter

Heini1985