Sägezahnladekurve bei preisbasiertem Laden mit Energy-charts

Fragen zur Nutzung, Features, usw..
Antworten
ID3Kay
Beiträge: 7
Registriert: Mo Jan 02, 2023 2:57 pm
Has thanked: 4 times
Been thanked: 2 times

Sägezahnladekurve bei preisbasiertem Laden mit Energy-charts

Beitrag von ID3Kay »

Hi,

Ich hatte heute Nacht folgendes Sägezahnmuster beim Laden (mal wieder), aber jetzt hab ich mir mal das main Log dazu geschnappt.
Sägezahn.png
(76.88 KiB) Noch nie heruntergeladen
Lademodus ist preisbasiertes Zielladen, Preisanbieter der generische Energy-charts. Software 2.1.5-Patch.2

Wenn ich das Log richtig lese, dann gibt es folgendes Verhalten. Alle 5 Minuten versucht die OpenWB, die Strompreise zu aktualisieren. Das klappt mal und mal klappt es nicht. Das sieht dann so aus:

Code: Alles auswählen

2024-11-11 04:15:01,958 - {modules.common.component_context:25} - {DEBUG:electricity tariff} - Update Komponente ['Energy-Charts']
2024-11-11 04:15:01,983 - {urllib3.connectionpool:973} - {DEBUG:electricity tariff} - Starting new HTTPS connection (1): api.energy-charts.info:443
2024-11-11 04:15:07,164 - {modules.common.fault_state:49} - {ERROR:electricity tariff} - Energy-Charts: FaultState FaultStateLevel.ERROR, FaultStr OSError None: Unbekannter Fehler None, Traceback: 
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.9/http/client.py", line 1347, in getresponse
    response.begin()
  File "/usr/lib/python3.9/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.9/http/client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.9/socket.py", line 704, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3.9/ssl.py", line 1241, in recv_into
    return self.read(nbytes, buffer)
  File "/usr/lib/python3.9/ssl.py", line 1099, in read
    return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 532, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 719, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 447, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 336, in _raise_timeout
    raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='api.energy-charts.info', port=443): Read timed out. (read timeout=5)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/www/html/openWB/packages/modules/common/configurable_tariff.py", line 27, in update
    tariff_state = self._component_updater()
  File "/var/www/html/openWB/packages/modules/electricity_tariffs/energycharts/tariff.py", line 36, in updater
    return TariffState(prices=fetch_prices(config.configuration))
  File "/var/www/html/openWB/packages/modules/electricity_tariffs/energycharts/tariff.py", line 25, in fetch_prices
    raw_prices = req.get_http_session().get(url).json()
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/var/www/html/openWB/packages/modules/common/req.py", line 16, in request
    return super().request(method, url, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 529, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='api.energy-charts.info', port=443): Read timed out. (read timeout=5)
wenn es klappt, dann habe ich hernach den Lademodus scheduled_charging mit submodus instant_charging:

Code: Alles auswählen

2024-11-11 04:20:11,183 - {control.chargepoint.chargepoint:682} - {INFO:MainThread} - LP 3, EV: Standard-Fahrzeug (EV-Nr.0): Theoretisch benötigter Strom 16A, Lademodus scheduled_charging, Submodus: Chargemode.INSTANT_CHARGING, Phasen: 3, Priorität: False, max. Ist-Strom: 6.04
Wenn es nicht klappt, dann bleibt der Lademodus auf scheduled_charging, wechselt aber den Submodus auf PV_charging

Code: Alles auswählen

2024-11-11 04:30:10,985 - {control.chargepoint.chargepoint:682} - {INFO:MainThread} - LP 3, EV: Standard-Fahrzeug (EV-Nr.0): Theoretisch benötigter Strom 6A, Lademodus scheduled_charging, Submodus: Chargemode.PV_CHARGING, Phasen: 3, Priorität: False, max. Ist-Strom: 15.52
Im gesamten Log lässt sich diese Korrelation nachverfolgen, Ich hab mal die relevanten Logeinträge herausgefiltert:
chargemode-energyprices.log
(176.98 KiB) 15-mal heruntergeladen


Da stellen sich mir zwei Fragen:
1) Warum müssen die Energy-Preise alle 5 Minuten abgeholt werden? Aus meiner Sicht sind die doch fix für die kommenden 24h, oder nicht?
2) Warum wird auf PV-Charging submode umgeschaltet, wenn die Preise nicht geholt werden können? Ok, könnte der Fallback sein, Preise unbekannt => safe-mode.
Bonus) Warum kann die Preisinfo überhaupt nicht gelesen werden? Read timeout kommt von der Gegenseite? Könnte das ein DDoS sein, weil alle Welt im 5-Minuten-Takt die Preise abholt?

Wäre es nicht sinnvoller, nur den Fallback eintreten zu lassen, wenn man keine Preisinfo hat? Also weder aktuelle noch gecachte?
bios
Beiträge: 6
Registriert: Fr Sep 30, 2022 7:32 pm
Has thanked: 1 time
Been thanked: 2 times

Re: Sägezahnladekurve bei preisbasiertem Laden mit Energy-charts

Beitrag von bios »

Hello,

habe auch in unregelmäßigen Abständen diesen Fehler:

Code: Alles auswählen

2024-11-11 19:40:08,326 - {modules.common.fault_state:49} - {ERROR:electricity tariff} - Energy-Charts: FaultState FaultStateLevel.ERROR, FaultStr OSError None: Unbekannter Fehler None, Traceback: 
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.9/http/client.py", line 1347, in getresponse
    response.begin()
  File "/usr/lib/python3.9/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.9/http/client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.9/socket.py", line 704, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3.9/ssl.py", line 1241, in recv_into
    return self.read(nbytes, buffer)
  File "/usr/lib/python3.9/ssl.py", line 1099, in read
    return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 532, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 719, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 447, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 336, in _raise_timeout
    raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='api.energy-charts.info', port=443): Read timed out. (read timeout=5)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/www/html/openWB/packages/modules/common/configurable_tariff.py", line 27, in update
    tariff_state = self._component_updater()
  File "/var/www/html/openWB/packages/modules/electricity_tariffs/energycharts/tariff.py", line 39, in updater
    return TariffState(prices=fetch_prices(config.configuration))
  File "/var/www/html/openWB/packages/modules/electricity_tariffs/energycharts/tariff.py", line 28, in fetch_prices
    raw_prices = req.get_http_session().get(url).json()
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/var/www/html/openWB/packages/modules/common/req.py", line 16, in request
    return super().request(method, url, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 529, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='api.energy-charts.info', port=443): Read timed out. (read timeout=5)

Und dann startet die Ladung, obwohl der eingestellte Preis gar nicht unterschritten wurde. Sieht dann zB. so aus:
Screenshot 2024-11-11 211925.png
Screenshot 2024-11-11 211925.png (45.46 KiB) 134 mal betrachtet
Wenn ich Anbieter auf aWATTar umstelle, dann scheint es ohne Probleme zu funktionieren. Muss ich aber noch länger beobachten.
b3n
Beiträge: 30
Registriert: Mi Mai 11, 2022 10:05 pm
Has thanked: 3 times
Been thanked: 1 time

Re: Sägezahnladekurve bei preisbasiertem Laden mit Energy-charts

Beitrag von b3n »

Bei mir tritt dieses Verhalten auch auf, tatsächlich so:
5 Minuten nach jeder vollen Stunde wird für ca. 5 Minuten geladen.
Wenn der Preis unter der Grenze liegt gehts weiter, wenn er drüber liegt wird wieder gestoppt.
Entsprechend sieht auch das Ladeprotokoll aus.

So jedenfalls funktioniert das preisbasierte laden mit Energy-Charts leider nicht sinnvoll.


Beginn Ende Dauer Energie
17.11.2024, 19:33:41 17.11.2024, 19:34:32 00:00 0,06
17.11.2024, 19:35:31 17.11.2024, 19:40:23 00:04 0,81
17.11.2024, 19:55:20 17.11.2024, 21:00:12 01:04 11,14
17.11.2024, 21:05:31 17.11.2024, 21:15:23 00:09 1,68
17.11.2024, 21:25:20 17.11.2024, 21:30:32 00:05 0,83
17.11.2024, 21:55:20 17.11.2024, 22:05:23 00:10 1,69
17.11.2024, 22:55:20 17.11.2024, 23:05:23 00:10 1,69
17.11.2024, 23:10:21 17.11.2024, 23:20:22 00:09 1,7
17.11.2024, 23:45:20 17.11.2024, 23:50:22 00:05 0,83
18.11.2024, 00:00:21 18.11.2024, 00:25:22 00:24 4,25
18.11.2024, 00:30:20 18.11.2024, 00:45:23 00:15 2,55
18.11.2024, 00:50:21 18.11.2024, 00:55:32 00:05 0,84
18.11.2024, 01:00:21 18.11.2024, 01:05:23 00:04 0,82
18.11.2024, 01:10:20 18.11.2024, 01:15:23 00:04 0,83
18.11.2024, 01:25:20 18.11.2024, 01:40:23 00:15 2,53
18.11.2024, 01:50:20 18.11.2024, 01:55:22 00:04 0,85
18.11.2024, 02:00:10 18.11.2024, 05:00:05 02:59 7,67
Antworten