Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

e3DC Entladesperrzeiten nutzen #13403

Closed
veiter555 opened this issue Apr 11, 2024 · 107 comments · Fixed by #13413
Closed

e3DC Entladesperrzeiten nutzen #13403

veiter555 opened this issue Apr 11, 2024 · 107 comments · Fixed by #13413
Assignees
Labels
enhancement New feature or request

Comments

@veiter555
Copy link

Describe the solution you'd like
Ich möchte im Schnelllademodus nicht, dass meine E3/DC Batterie entladen wird.

Anwendungsfall Bsp.: PHEV kommt um 19 Uhr Heim und muss schnell geladen werden da bis zum nächsten Morgen kein PV Überschuss vorhanden sein wird.
Allerdings möchte ich keine Energie aus der Haus-Batterie dafür verwenden (Batterieentladen sperren) oder die Batterienutzung nur bis zu einem bestimmten SOC zulassen (Rest der Batterieladung sollte das Haus später versorgen)

Zusätzlich wird die Batterie geschont durch Reduzierung der Tiefentladezyklen.

Über RSCP können Sperrzeiten übermittelt werden.
Es wäre super wenn EVCC das dynamisch anwenden könnte. Bsp. Fahrzeug läd - Min. Entlade SOC der E3/DC Batterie ist erreicht, der nicht durch Fahrzeug unterschritten werden soll. - Entladen der E3/DC Batterie wird gesperrt bis Fahrzeug fertig geladen ist und anschließend automatisch wieder entsperrt um die Batterie für die Hausversorgung wieder freizugeben.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

@mdkeil
Copy link
Contributor

mdkeil commented Apr 11, 2024

scheint über evcc aktuell nicht implementierbar zu sein. Einen Workaround über Homeassistent gibt es aber.

#10836

@andig
Copy link
Member

andig commented Apr 11, 2024

Es gibt keine Bibliothek für rscp. Das müsste also erstmal jemand entwickeln.

@andig andig closed this as completed Apr 11, 2024
@andig andig added the wontfix This will not be worked on label Apr 11, 2024
@mdkeil
Copy link
Contributor

mdkeil commented Apr 11, 2024

Wurde zumindest mal begonnen..
https://github.com/spali/go-rscp

@andig
Copy link
Member

andig commented Apr 11, 2024

Oh, thats nice. Not sure why I didn‘t find that. Would anybody be interested in integrating it? Maybe contact @spali in eschange for evcc token?

@andig andig reopened this Apr 11, 2024
@andig andig added enhancement New feature or request and removed wontfix This will not be worked on labels Apr 11, 2024
@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

Ich nutze aktuell dieses Projekt auf meinem Raspi, um das E3DC per MQTT ansprechen zu können: https://github.com/pvtom/rscp2mqtt

Damit lässt sich site/bufferSoc mit "Batterieentladung durch Wallbox" synchronisieren. Realisiert über eine HomeAutomation (FHEM), in die sowohl evcc als auch das E3DC System per MQTT eingebunden sind.
grafik

Man kann aber im E3DC System wie im Bild gezeigt auch einfach manuell einen Wert eintragen, das E3DC System bringt die Funktionalität, dass die Batterie durch die Wallbox nur bis zu einem definierten Soc entladen wird, bereits mit. 😉
Siehe auch meinen Wiki-Beitrag: https://github.com/evcc-io/evcc/wiki/docolli:-E3DC-S10E-Hauskraftwerk-&-Easy-Connect-Wallbox-11kW,-FHEM,-rscp2mqtt,-MyStrom-Wifi-Switch,-Nissan-Leaf-ZE1#wallbox

Wenn man Sperrzeiten nutzt, dann würde während der Wallboxladung die Batterie gar nichts mehr liefern, damit also auch der Hausverbrauch aus dem Netz kommen. Mit dieser Einstellung kommt NUR die Wallboxladung aus dem Netz, der Hausverbrauch kommt weiterhin aus der E3DC Batterie. 😎

@mdkeil
Copy link
Contributor

mdkeil commented Apr 12, 2024

Man kann aber im E3DC System wie im Bild gezeigt auch einfach manuell einen Wert eintragen, das E3DC System bringt die Funktionalität, dass die Batterie durch die Wallbox nur bis zu einem definierten Soc entladen wird, bereits mit.

Das wäre natürlich der elegantere Weg und würde sich mit den bereits implementierten Umsetzungen anderer Hersteller decken.. denn sobald dieser Wert auf den aktuellen SOC gesetzt wird, entspricht dies ja "hold battery". Ggfs ist dies ja bereits in go-rscp realisiert bzw. einfach zu erweitern, um in evcc ohne Umweg die Funktionalität umzusetzen.

Mit dieser Einstellung kommt NUR die Wallboxladung aus dem Netz, der Hausverbrauch kommt weiterhin aus der E3DC Batterie. 😎

Das kann ich mir nicht vorstellen, außer man verwendet die E3DC-eigene Wallbox.

@spali
Copy link

spali commented Apr 12, 2024

Oh, thats nice. Not sure why I didn‘t find that. Would anybody be interested in integrating it? Maybe contact @spali in eschange for evcc token?

@andig
What an honor. Feel free to integrate it. It was kind of a learning project for go from the need of my father who has this battery.
I tried to make it as reusable as possible also as library, but currently I only use it as command line utility for home assistant to control the battery. Don't know if anyone is using it as library, currently only know from the issues and discussions that the cmd utility is used.

The main problem is, that I could only implement and test on one battery model (Quattroporte). And had only the documentation of it (which is also not really up to date). It seems to have some differences of the "tags" (kind of register addressing) depending on the model. That's a point that should be worked on to support this in a clean way.

I would be happy if it would be used and even better if it would be enhanced. I can also add you as a member to the project if it goes to slow for some potential changes/fixes needed to integrate it.
I don't have much time currently due to the family.

I love the broad device support that evcc has. I only use it as a kind of api. i.e. to get the stats of my Fiat 500e. I abuse evcc just as a command line utility to parse the output. I know, evcc is meant as full blown control solution, but I would love to have it more easy to use it just to talk to my devices trough evcc without the controlling part (kind as a bridge). If this would be possible I could also imagine to hand the project over completely if it helps both projects.

@andig
Copy link
Member

andig commented Apr 12, 2024

Thanks @spali! Before we start anything complicated- I have no real clue how to test the library. What would be the minimal code to read grid, pv, battery power and battery soc? I'm lost how to use the Tags or which ones. If I have a basic understanding I could do a quick prototype, maybe to be continued by you.

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

Grid: EMS_POWER_GRID
PV: EMS_POWER_PV
Battery: EMS_POWER_BAT
Home: EMS_POWER_HOME
Battery Soc: EMS_BAT_SOC

I have a E3DC S10E for testing and I am happy to help integrate RSCP into evcc.

Check this file: https://github.com/spali/go-rscp/blob/master/rscp/tag.go

@andig
Copy link
Member

andig commented Apr 12, 2024

Please give it a try

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

Compilation is running...
How should a minimal config look like?

@veiter555
Copy link
Author

Thank you all for picking up my request.

Even got an idea to improve one step more but please don't enhance the mvp right away.

If i got it right, than the max power of the E3/DC battery could be set dynamicaly.

So the enhancement of my idea would be to set the max battery power dynamically to household consumption - pv power.

Therefore the whole charging energy would not come from the battery but household power need still would be provided from the battery.

Thank you so much for working on my idea.
I even would think to increase my sponsorship if this would be provided from your development community.

Veiter

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

Damn, I am running into compilation errors.
My system: Linux modbusproxy 6.1.60-0-virt #1-Alpine SMP PREEMPT_DYNAMIC Wed, 25 Oct 2023 15:45:31 +0000 i686 Linux

I am using the following command: env GOOS=linux GOARCH=386 make

But I am running into the following error:

npm run build

> build
> vite build

/root/evcc/node_modules/rollup/dist/native.js:38
        throw new Error(
              ^

Error: Your current platform "linux" and architecture "ia32" combination is not yet supported by the native Rollup build. Please use the WASM build "@rollup/wasm-node" instead.

The following platform-architecture combinations are supported:
android-arm
android-arm64
darwin-arm64
darwin-x64
linux-arm
linux-arm64
linux-arm64 (musl)
linux-riscv64
linux-x64
linux-x64 (musl)
win32-arm64
win32-ia32
win32-x64

If this is important to you, please consider supporting Rollup to make a native build for your platform and architecture available.
    at Object.<anonymous> (/root/evcc/node_modules/rollup/dist/native.js:38:8)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:169:29)
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

Any quick idea?
I am getting the same error if I use env GOOS=linux GOARCH=x64 make

@andig
Copy link
Member

andig commented Apr 12, 2024

Cross-compile from a different system. ia32- was ist das denn für ein Gruß aus der Vergangenheit?

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

Ich hatte evcc aber im Herbst auf genau diesem System bereits erfolgreich für 386 bzw. auch für arm (für meinen Raspi) kompiliert. Keine Ahnung, warum er jetzt meint für ia32 kompilieren zu müssen.
Ich habe vorhin das evcc Quellcode Verzeichniss komplett gelöscht und frisch geklont. Muss ich da noch wieder was installieren?

modbusproxy:~/evcc# go version
go version go1.22.2 linux/386
modbusproxy:~/evcc# apk list nodejs
nodejs-20.12.1-r0 x86 {nodejs} (MIT) [installed]

Liegt wohl daran, dass evcc 32bit Linux nicht mehr unterstützt, meine VM läuft aber auf einem kleinen 32bit Synology NAS...
Egal, baue evcc jetzt direkt auf meinem Windows Laptop. Ich habe jetzt eine evcc.exe zum Testen ! 😎

@andig
Copy link
Member

andig commented Apr 12, 2024

Wenn man Sperrzeiten nutzt, dann würde während der Wallboxladung die Batterie gar nichts mehr liefern, damit also auch der Hausverbrauch aus dem Netz kommen. Mit dieser Einstellung kommt NUR die Wallboxladung aus dem Netz, der Hausverbrauch kommt weiterhin aus der E3DC Batterie. 😎

@docolli guter Strom schlechter Strom? Wie soll das denn gehen?

@andig
Copy link
Member

andig commented Apr 12, 2024

Liegt wohl daran, dass evcc 32bit Linux nicht mehr unterstützt

Fehlermeldung lesen. Mir evcc hat das rein gar nichts zu tun.

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

@docolli guter Strom schlechter Strom? Wie soll das denn gehen?

Die guten grünen Elektronen fürs Haus kommen aus der Batterie und die bösen schwarzen Elektronen für die Wallbox kommen aus dem Netz. 🤣
Spaß beiseite: So kann man (zumindest bilanziell) den Hausverbrauch weiterhin aus der Batterie (also PV-Strom) decken während die Wallboxladung läuft, schont den Hausakku. Und der Hausverbrauch während der Wallboxladung kommt nicht auch aus dem Netz, erhöht also den Eigenverbrauch.

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

Liegt wohl daran, dass evcc 32bit Linux nicht mehr unterstützt

Fehlermeldung lesen. Mir evcc hat das rein gar nichts zu tun.

Schon klar! Habe inzwischen evcc unter Windows am laufen, wie muss denn die config.yaml für die meters aussehen, damit ich die RSCP Verbindung testen kann?

So klappts leider nicht:

meters:
- type: template
  template: e3dc-2
  usage: grid
  address: 192.168.1.121
  port: 5033
  username: xxx
  password: xxx
  key: xxx
  name: grid1

[main ] FATAL 2024/04/12 21:58:17 cannot create meter 'grid1': cannot create meter type 'template': template not found: e3dc-2

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

So, jetzt habe ich das verstanden, so klappt die Verbindung:

meters:
- type: e3dc-2
  usage: grid
  address: 192.168.1.121
  port: 5033
  username: xxx
  password: xxx
  key: xxx
  name: grid1
- type: e3dc-2
  usage: pv
  address: 192.168.1.121
  port: 5033
  username: xxx
  password: xxx
  key: xxx
  name: pv1
- type: e3dc-2
  usage: battery
  address: 192.168.1.121
  port: 5033
  username: xxx
  password: xxx
  key: xxx
  name: battery1
  capacity: 13.1 # in kWh
ime="2024-04-12T22:13:30+02:00" level=info msg="Connecting to 192.168.1.121:5033"
time="2024-04-12T22:13:30+02:00" level=info msg="successfully connected to 192.168.1.121:5033"
time="2024-04-12T22:13:30+02:00" level=info msg="hiding auth request for security, use debug >= 99 to debug authentication"
time="2024-04-12T22:13:30+02:00" level=info msg="successfully authenticated (level: AUTH_LEVEL_USER)"
[site  ] ERROR 2024/04/12 22:13:30 pv 1 power: message at index 0: EMS_POWER_PV: tag is not a request tag
time="2024-04-12T22:13:30+02:00" level=info msg="Connecting to 192.168.1.121:5033"
time="2024-04-12T22:13:30+02:00" level=info msg="successfully connected to 192.168.1.121:5033"
time="2024-04-12T22:13:30+02:00" level=info msg="hiding auth request for security, use debug >= 99 to debug authentication"
time="2024-04-12T22:13:30+02:00" level=info msg="successfully authenticated (level: AUTH_LEVEL_USER)"
[site  ] ERROR 2024/04/12 22:13:31 battery 1 power: message at index 0: EMS_POWER_BAT: tag is not a request tag

Das klappt so nicht mit diesen Tags! Aber das kann ich selber im Code ändern und testen. Morgen dann, jetzt ist Feierabend!

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

War leicht im Code zu sehen, du musst REQ ergänzen:

	switch m.usage {
	case templates.UsageGrid:
		tag = rscp.EMS_REQ_POWER_GRID
	case templates.UsagePV:
		tag = rscp.EMS_REQ_POWER_PV
	case templates.UsageBattery:
		tag = rscp.EMS_REQ_POWER_BAT
	default:
		return 0, api.ErrNotAvailable
	}

Jetzt kommen Werte, aber das GUI passt noch nicht, vermutlich weil die negativ sind:

[site  ] DEBUG 2024/04/12 22:21:22 pv power: 0W
[site  ] DEBUG 2024/04/12 22:21:22 battery soc: 59%
[site  ] DEBUG 2024/04/12 22:21:22 battery power: -402W
[site  ] DEBUG 2024/04/12 22:21:22 grid meter: 2W
[site  ] DEBUG 2024/04/12 22:21:22 site power: -300W

grafik

@andig
Copy link
Member

andig commented Apr 12, 2024

Welche? Alle falschrum?

@andig
Copy link
Member

andig commented Apr 12, 2024

@spali können wir das Logging einfangen? Logger als Interface? Ich hab spontan im Code nix gefunden. Und wird da wirklich bei jedem einzelnen Request eine Connection aufgemacht a 3 Log lines?

@docolli
Copy link
Contributor

docolli commented Apr 12, 2024

grafik
Zumindest den Batteriewert sieht er als Ladung an, obwohl jetzt um diese Zeit natürlich entladen wird.
Auch Netzbezug (grid) ist falschherum, wenn ich das mit dem evcc mit Modbusanbindung vergleiche.

@andig
Copy link
Member

andig commented Apr 23, 2024

Muss das bei normal/hold resettet werden? Wie- einfach auf 0 stellen?

@docolli
Copy link
Contributor

docolli commented Apr 23, 2024

Wann läuft denn evcc in Charge rein? Wann löst evcc eine Ladung der Hausbatterie aus? Ich verstehe den Sinn des Zustands noch nicht so ganz.

@andig
Copy link
Member

andig commented Apr 23, 2024

Spielt doch für die Frage keine Rolle? Aktuell nur über die Kommandozeile oder wenn Du mit #10814 spielen willst.

@docolli
Copy link
Contributor

docolli commented Apr 23, 2024

Ich möchte schon einigermaßen verstehen was das Ziel ist, dann kann ich versuchen spezifischere Infos zu geben. 😉

Zurück zu deiner Frage mit Reset des Zustands:
Wenn eine Sperre gesetzt ist, so sind sowohl die Lade- als auch die Entladeleistung limitiert. Da wir bei "Hold" nur die Entladeleistung auf einen fixen Wert setzen und bei "Normal" mit dem Entsperrbefehl deaktivieren, sollte das Ladelimit immer auf dem maximal möglichen Wert stehen. Also kann das E3DC System auch bei aktivierter Entladeleistungslimitierung mit maximaler Leistung laden.
Also wenn die Batterie gerade geladen wird und wir setzen durch Hold ein Entladelimit, sollte das keine Auswirkungen haben.
Auch wenn die Batterie während der Ladung in den Modus Normal reinläuft, hat der Reset der Limits sehr wahrscheinliche keine Auswirkung aufs Laden.

@andig
Copy link
Member

andig commented Apr 23, 2024

Ich verstehe nur Bahnhof. Sichergestellt sein muss, dass bei Charge -> Normal das Zwangsladen beendet wird. Wäre vllt. gut das zu testen ;)

@docolli
Copy link
Contributor

docolli commented Apr 23, 2024

Ja sorry, habs ja selber kaum verstanden mit Ladelimit / Entladelimit usw. und wann welches Limit aktiv ist und wieder auf den Default Wert vom System gesetzt wird... 😂

Ich schau mal, wie ich das Zwangsladen bei E3DC unterbrechen kann. Geht aber erst morgen Abend wieder, für heute darf ich keine Ladung mehr starten.

@docolli
Copy link
Contributor

docolli commented Apr 24, 2024

Testung Unterbrechung der manuellen Ladung.

  1. Setzen von Limits, Entladen -> 500W, Laden -> 750W
./e3dc '[["EMS_REQ_SET_POWER_SETTINGS",[["EMS_POWER_LIMITS_USED","Bool",1],["EMS_MAX_DISCHARGE_POWER","Int8",500],["EMS_MAX_CHARGE_POWER","Int8",750]]]]'
{"EMS_SET_POWER_SETTINGS":{"EMS_RES_POWER_LIMITS_USED":0,"EMS_RES_MAX_CHARGE_POWER":1,"EMS_RES_MAX_DISCHARGE_POWER":1}}
  1. Abfrage der gesetzen Werte (zur Kontrolle)
./e3dc '[["EMS_REQ_GET_POWER_SETTINGS","None","Nil"]]' | jq
{
  "EMS_GET_POWER_SETTINGS": {
    "EMS_POWER_LIMITS_USED": true,
    "EMS_MAX_CHARGE_POWER": 750,
    "EMS_MAX_DISCHARGE_POWER": 500,
    "EMS_DISCHARGE_START_POWER": 65,
    "EMS_POWERSAVE_ENABLED": true,
    "EMS_WEATHER_REGULATED_CHARGE_ENABLED": false,
    "EMS_WEATHER_FORECAST_MODE": 0
  }
}
  1. Start manuelle Ladung von 1000Wh (Mein System erlaubt laut Web Portal 0 bis 4500Wh)
./e3dc '[["EMS_REQ_START_MANUAL_CHARGE","UInt32",1000]]' | jq
{
  "EMS_START_MANUAL_CHARGE": true
}

-> Es wird geladen mit ~750W.

  1. Abfrage der Werte (zur Kontrolle)
./e3dc '[["EMS_REQ_GET_MANUAL_CHARGE","None","Nil"]]' | jq
{
  "EMS_GET_MANUAL_CHARGE": {
    "16777278": 1000,
    "EMS_MANUAL_CHARGE_START_COUNTER": 1713979605597,
    "EMS_MANUAL_CHARGE_ACTIVE": true,
    "EMS_MANUAL_CHARGE_ENERGY_COUNTER": 0.1222253535,
    "EMS_MANUAL_CHARGE_LASTSTART": "2024-04-24T17:26:45.597996Z"
  }
}

-> Der Tag 16777278 gibt die manuell zu ladende Energiemenge in Wh an, der Tag EMS_MANUAL_CHARGE_ENERGY_COUNTER hat wieder bei 0 angefangen und gibt somit die aktuell manuell geladene Energiemenge an.

  1. Versuch des Abbruchs der manuellen Ladung durch Senden von "0"
./e3dc '[["EMS_REQ_START_MANUAL_CHARGE","UInt32",0]]' | jq
{
  "EMS_START_MANUAL_CHARGE": true
}
  1. Ladung wurden unterbrochen!
./e3dc '[["EMS_REQ_GET_MANUAL_CHARGE","None","Nil"]]' | jq
{
  "EMS_GET_MANUAL_CHARGE": {
    "16777278": 0,
    "EMS_MANUAL_CHARGE_START_COUNTER": 1713979605597,
    "EMS_MANUAL_CHARGE_ACTIVE": false,
    "EMS_MANUAL_CHARGE_ENERGY_COUNTER": 8.225446666666663,
    "EMS_MANUAL_CHARGE_LASTSTART": "2024-04-24T17:26:45.597996Z"
  }
}
  1. Weitere Ladung ist nun nicht mehr möglich, das "1x in 24h" Laden ist wieder aufgebraucht. Morgen wieder...
 ./e3dc '[["EMS_REQ_START_MANUAL_CHARGE","UInt32",500]]' | jq
{
  "EMS_START_MANUAL_CHARGE": false
}

PS: Das Entladelimit von 500W greift auch:
grafik

PPS: den Tag 16777278 würde ich "EMS_MANUAL_CHARGE_ENERGY" benennen, aber ich bin nicht E3DC😉

@andig
Copy link
Member

andig commented Apr 25, 2024

Supi. Also müssen wir bei Normal/Hold zusätzlich [["EMS_REQ_START_MANUAL_CHARGE","UInt32",0]] senden, ggf. nachdem wir den Bedarf vorher über [["EMS_REQ_GET_MANUAL_CHARGE","None","Nil"]] abgefragt haben. Ich würde erstmal versuchen, das pauschal zu schicken.

@spali
Copy link

spali commented Apr 25, 2024

Supi. Also müssen wir bei Normal/Hold zusätzlich [["EMS_REQ_START_MANUAL_CHARGE","UInt32",0]] senden, ggf. nachdem wir den Bedarf vorher über [["EMS_REQ_GET_MANUAL_CHARGE","None","Nil"]] abgefragt haben. Ich würde erstmal versuchen, das pauschal zu schicken.

Achtung "Nil" heisst für dich in dem Fall nil. Da hat @docolli json, json string und go nil ein wenig durcheinander gebracht.
PS: DateType: rscp.None ignoriert die Value... von dem her funktionierts trotzdem, sollte aber bei dem Datentyp immer nil sein. Bzw. für @docolli null in json.

Und wenn wir schon dabei sind... zumindestens nach meinen Tests (siehe Kommentar):

	EMS_MAX_CHARGE_POWER:                     Uint32, // documented as Int32, but requires Uint32
	EMS_MAX_DISCHARGE_POWER:                  Uint32, // documented as Int32, but requires Uint32

E3DC frisst es zu mindestens in meinem Fall nur mit Uint32 auch wenn die Antwort wieder rum ein Int32 ist....
Würde auch erklären wieso @docolli bei seinen Tests kein Erfolg hatte.

@andig
Copy link
Member

andig commented Apr 25, 2024

BatteryCharge ist jetzt auch drin und könnte mittels

evcc meter --help

getestet werden. Die Werte werden jetzt einfach immer gesetzt und nicht abgefragt.

@spali
Copy link

spali commented Apr 25, 2024

@andig @docolli

PPS: den Tag 16777278 würde ich "EMS_MANUAL_CHARGE_ENERGY" benennen, aber ich bin nicht E3DC😉

v0.2.0-beta5 kenn nun auch diesen Tag mit deinem Namen.
Datentyp spuckt meiner Uint32 zurück, habe ich ensprechend eingetragen: https://github.com/spali/go-rscp/blob/9ee4bc6c03c13167b1f0eb30e9ffc5c009346285/rscp/tag_datatype.go#L104

@docolli
Copy link
Contributor

docolli commented Apr 26, 2024

Die Powerlimits können wir konfigurierbar machen, es braucht aber einen Defaultwert. Welchen?

Nachdem die E3DC RSCP Implementation endlich läuft und wir die Batterieentladung kontrollieren können (aktuell setzt du die auf 0), möchte ich hierauf wieder zurück kommen. Können wir die Powerlimits konfigurierbar machen? 😉😎

@andig
Copy link
Member

andig commented Apr 26, 2024

Welche Limits willst du denn konfigurieren? Es wird doch gar keins verwendet?!

@docolli
Copy link
Contributor

docolli commented Apr 26, 2024

Das Entladelimit wird auf 0W gesetzt, das könnte man z. B. auch auf 500W setzen, so würde die Batterie weiterhin entladen werden und so den mittleren Hausverbrauch unterstützen. So könnte man erreichen, dass die Batterie am nächsten Morgen ziemlich leer ist und wieder genügend PV Überschuss aufnehmen kann.

@veiter555
Copy link
Author

Geht das auch, dass das Entladelimit dynamisch angepasst wird? Auf (Haushaltsverbrauch - PV Leistung) natürlich nur während ein Fahrzeug geladen wird und das alle 20 - 60 sec. anzupassen? (Dann wird quasi die Wallboxladung mit einer gewissen Unschärfe ausgeblendet bei der Batterieentladung. Das wäre aber absolut akzeptabel. PS: geht ja nicht um jedes Elektron sondern am Ende um kWh 😉

@andig
Copy link
Member

andig commented Apr 26, 2024

Was ist der Unterschied zwischen gutem und schlechtem Strom? Warum braucht die Batteriesteuerung wenn man so ein Enladelimit such einfach fix extern setzen könnte? Ich denke nicht, dass wir das tun wollen.

@veiter555
Copy link
Author

Es gibt 2 Gründe dafür:

  1. die Hausbatterie soll durch das Fahrzeug nicht zusätzlich belastet werden und dadurch schneller altern da das Fahrzeug in jedem Fall beim Schnell Laden die maximale Entladeleistung anfordert bis auf 0% SOC
  2. Fleet Customer mit Ladeabrechnung über Fleetmanager. Da soll die PV Energy für den Haushalt zur Verfügung stehen und nicht für den Fleetmanager

Ich hoffe die Use Case Erläuterung verdeutlicht den Anwendungsfall etwas besser bzgl. Trennung zwischen Lade Energiemenge und Haushaltsverbrauch. Es geht hier also nicht um grüne und schwarze Elektronen sondern um Energiemengen und wie die abgerechnet werden.

@andig
Copy link
Member

andig commented Apr 26, 2024

Ich habs nicht verstanden. Da da saber auch nix mit e3dc zu tun hat gerne neues Issue dazu.

@veiter555
Copy link
Author

@andig genau das war die initiale Idee E3DC beim Laden des Fahrzeugs zu sperren, dass die Batterie nicht durch das Fahrzeug entladen wird.

Eine Einstellung der maximalen Entladeleistung E3DC (Hausverbrauch minus PV Erzeugung) und dynamische Nachführung alle 30sec. Würde genau das sicher stellen.

Also keine neue Idee sonder nur Konkretisierung des Kundennutzens.

Ihr habt da die letzten beiden Wochen einen echt super job gemacht und mit dem was ich gelesen habe ist es denk ich möglich das so umsetzen zu können.

Vielen Dank Euch allen!

@docolli
Copy link
Contributor

docolli commented Apr 27, 2024

Ich denke hier ist in evcc einfach für versch. Batteriesysteme der "kleinste gemeinsame Nenner" implementiert worden und das ist die Entladesperre. Vermutlich bieten einige Systeme nur an per true/false diese zu setzen, ein Entladelimit ist nicht vorgesehen. Um konsistent zu bleiben, muss unser E3DC sich dieser Implementierung beugen, auch wenn es an dieser Stelle mehr Funktionalität bieten würde.
Wenn, dann müsste man ein Entladelimit für alle Batteriesysteme implementieren, so wäre auch die Doku zu neuen Parametern konsistent und müsste nicht unterscheiden für welches Batteriesystem welche Parameter möglich sind und was sie bedeuten. Das erhöht die Einsteigshürde für evcc enorm und bedeutet dann auch mehr Supportaufwand.
Ein dynamisches Entladelimit, das sich am aktuellen Hausverbrauch orientiert ist natürlich cool und ich verstehe den Anwendungsfall. Aber das muss fürs E3DC System nicht in evcc implementiert werden, das kann das HKW bereits von sich aus! Siehe ganz oben einen meiner ersten Posts. Einzig eine Synchronisation von bufferSoc und EMS_REQ_SET_WB_DISCHARGE_BAT_UNTIL wäre hier noch das i-Tüpfelchen:

./e3dc '[["EMS_REQ_SET_WB_DISCHARGE_BAT_UNTIL","Int32",80]]' | jq
{
  "EMS_SET_WB_DISCHARGE_BAT_UNTIL": true
}

./e3dc '[["EMS_REQ_GET_WB_DISCHARGE_BAT_UNTIL","None","Nil"]]' | jq
{
  "EMS_GET_WB_DISCHARGE_BAT_UNTIL": 80
}

Aber dass kann man, wenn man mag, auch über eine externe Lösung implementieren.

Als Kompromiss, würde ich vorschlagen, dass man bei BatteryHold das Entladelimit nicht fix im Code auf "0" setzt, sondern einen Parameter einführt, über den der Nutzer vorgeben kann, wieviel Leistung die Batterie bei einem WB Ladevorgang (wenn die Batterie von evcc gesperrt wird) noch abgeben darf. Gerne darf der Default-Wert hier "0" sein, dann haben wir die Entladesperre wie bei anderen Systemen, wenn der Nutzer den Parameter nicht konfiguriert hat.

@docolli
Copy link
Contributor

docolli commented Apr 27, 2024

Ziehe ich meine reine "evcc User mit E3DC System und E3DC Wallbox" Brille auf und denke nicht an andere Batteriesysteme, würde ich in e3dc.go bei BatteryHold folgende Befehle ans E3DC System schicken, damit es in den dynamischen Entladelimitmodus wechselt und bis bufferSoc der E3DC Wallbox maximale Leistung aus der Batterie liefert, danach nur noch den aktuellen Hausverbrauch.

 ./e3dc '[["EMS_REQ_SET_BATTERY_BEFORE_CAR_MODE","UInt8",0]]' | jq
{
  "EMS_SET_BATTERY_BEFORE_CAR_MODE": 0
}

 
 ./e3dc '[["EMS_REQ_SET_BATTERY_TO_CAR_MODE","UInt8",1]]' | jq
{
  "EMS_SET_BATTERY_TO_CAR_MODE": 1
}
 
 
 ./e3dc '[["EMS_REQ_SET_WALLBOX_ENFORCE_POWER_ASSIGNMENT","Bool",true]]' | jq
{
  "EMS_SET_WALLBOX_ENFORCE_POWER_ASSIGNMENT": true
}


./e3dc '[["EMS_REQ_SET_WB_DISCHARGE_BAT_UNTIL","UChar8",80]]' | jq
{
  "EMS_SET_WB_DISCHARGE_BAT_UNTIL": true
}

Aber das kann sich jeder E3DC User selbst im HKW so einrichten und die Entladesperre in evcc einfach nicht aktivieren.
So werde ich es bei mir halten, auch wenn ich gerne hier bei der Implementierung der Entladesperre mithelfe. 😉

@veiter555 Edit: Aber dann MUSS die Wallbox über den evcc Modbusproxy eingebunden werden. Man könnte das wiederum von evcc aus prüfen, aber um die IP-Adresse der Wallbox im HKW abzufragen benötigt man wieder den Index der Wallbox im RSCP Universum, welches der User konfigurieren muss....
Ach es wird dann einfach zu kompliziert. 🙈 Sorry...
Das kann und sollte der User selber nach Anleitung konfigurieren, wenn bei ihm die Voraussetzungen passen bzw. eingerichtet sind. Das ist dann was für die Doku, aber nicht für den Code.

Ein konfigurierbares Entladelimit ist hier das Beste, was mit vertretbarem Aufwand erreichbar ist.

@veiter555
Copy link
Author

Vielen Danke Euch, dass ist nachvollziehbar. Vielen Dank für die Implementierung der Entladesperre, dass hilft sehr viel.

VG Veiter

@kwitt21
Copy link

kwitt21 commented May 3, 2024

Zunächst ein herzliches Dankeschön für die Umsetzung dieses Features! Ich hatte mir zwischenzeitlich auch mit dem von EVCC gesetzten MQTT Flag und eigener Automatisierung beholfen aber so ist es natürlich deutlich komfortabler!

Eine Frage habe ich noch zu dem "battery" Parameter, dieser löst bei mir eine Fehlermeldung aus wenn ich ihn setze:
[main ] FATAL 2024/05/03 12:25:42 cannot create meter 'battery3': cannot create meter type 'template': cannot create meter type 'e3dc-rscp': not a slice looking for BAT_SPECIFICATION

Hier die Konfiguration:
- type: template template: e3dc-rscp usage: battery host: hauskraftwerk.lokal user: *** password: *** key: *** port: 5033 battery: 17.4 dischargelimit: 500 name: battery3

Hintergrund:
Die von EVCC ausgelesen/angegebenen 19.2kWh Kapazität sind der brutto Wert, ich hätte aber gerne die "echten" 17.4 kWh netto gesetzt.

@docolli
Copy link
Contributor

docolli commented May 3, 2024

battery ist nicht die Kapazität, sondern die ID des abzufragenden Batteriestapels. Am besten weglassen, dann wird Default=0 verwendet.

Wir sind dran, die Abfrage umzubauen, vielleicht passt das dann auch besser für dich.
Siehe #13687

@andig Sollten wir capacity wieder einführen? Wenn gesetzt, wird dieser Wert genommen, sonst wie jetzt Abfrage des Wertes aus dem E3DC System.

@kwitt21
Copy link

kwitt21 commented May 3, 2024

@docolli
Besten Dank für die schnelle Aufklärung!

Beim S10X sieht es in meinem Beispiel wie folgt aus:
Angabe Datenblatt: 18kWh brutto, 17.4kWh netto
Kapazität via RSCP Schnittstelle: 19.152kWh brutto

Den "capacity" Parameter habe ich hier im Thread schon gesehen und dachte er wäre vielleicht in "battery" umbenannt worden. Schön wäre es natürlich einen solchen Parameter zu haben aber letztlich natürlich auch eine Frage wie oft er überhaupt genutzt würde.

Ich hänge mich vielleicht mal in den #13687 Thread rein denn am schönsten wäre es die aktuell von E3DC errechnete netto Kapazität angezeigt zu bekommen. Die schwankt nämlich ziemlich :-)

@docolli
Copy link
Contributor

docolli commented May 3, 2024

Wo siehst du die von E3DC berechnete Netto Kapazität? Im Web Portal? Ich kenne bei mir nur die 13,1kWh.

@kwitt21
Copy link

kwitt21 commented May 3, 2024

@docolli
Wenn man direkt am Hauskraftwerk in die Notstromeinstellungen geht sind dort 4 Vorschläge für auszuwählende Werte. Der zweite davon ist exakt 10% der aktuellen netto Kapazität. Und wie gesagt, diese schwankt ziemlich, bei meinem relativ neuen System zwischen 16,6kWh und 17,4kWh, bei einem Nachbarn mit identischem Setup ist der untere Wert sogar bereits auf 14kWh gefallen (da steht demnächst mal ein Batterietraining an).

Wie man an diesen "echten" netto Wert via RSCP rankommt habe ich noch nicht geschaut. Ich muss mal sämtliche Werte in RSCPGui durchforsten, eventuell findet sich da was.

e3dc

@docolli
Copy link
Contributor

docolli commented May 3, 2024

Bei mir sind es aktuell 1105Wh. Über RSCP2MQTT bekomme ich aus dem System verschiedenste Werte.
Dort gibt es rscp2mqtt:e3dc/battery/design_capacity = 256 Ah
Dann rscp2mqtt:e3dc/battery/specified_capacity = 13107 Wh
Dann rscp2mqtt:e3dc/battery/usable_capacity = 215,82 Ah

Setze ich design und usable capacity ins Verhältnis komme ich auf 84,3%. Multipliziere ich das mit specified, so komme ich auf 13107 Wh*0,843 = 11049 Wh. Das passt zum Wert beim 10% Knopf.

Das System kalibriert sich, wenn möglich, 1x Woche (Entladen auf 0%). Passiert meistens im Winter, wenn man mal so viel verbraucht dass der Soc unterhalb der Notstromreserve fällt. Dann wird wohl usable_capacity neu berechnet.
Wenn du magst, kannst du also mit einer HA Dir selber eine Überwachung der tatsächlichen Kapazität bauen. evcc ruft diesen Wert nur 1x beim Start ab, damit die Batterieanzeige einen Wert zum Anzeigen und Berechnen der ungefähren Restmenge hat.

@kwitt21
Copy link

kwitt21 commented May 3, 2024

@docolli
Besten Dank für Deine detaillierte Ausführung! Ja, den netto Wert kann bzw. muss man sich selbst errechnen, über die RSCP Schnittstelle kann man es leider nicht direkt auslesen. Eventuell bastel ich mir da tatsächlich was um den Verlauf dokumentieren zu können.

Dass EVCC den Wert nur einmal beim Start ausliest ist ein gute Info, dann macht es tatsächlich keinen Sinn dort auf schwankende netto Werte zu reagieren. Vielleicht wäre der "capacity" Parameter doch wieder interessant.

Zur Kalibrierung, die Hochvoltsysteme (wie das S10X) machen das nicht mehr automatisch. Das Ganze ist mit den Eisen Phosphat Akkus wohl auch nicht so einfach bzw. deren Kapazität anhand der Spannung zu bestimmen.

Die usable_capacity ändert sich bei mir mehrfach täglich ebenso wie die 10% Anzeige direkt am Hauskraftwerk (letztere sogar teilweise wenn man auf die Anzeige schaut).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants