evcc-io / eebus

(Partial) Implementation of the EEBUS protocol in Go
Other
20 stars 7 forks source link

Elli charger times out 10 minutes after last EEBUS message without an EV plugged in #3

Closed DerAndereAndi closed 2 years ago

DerAndereAndi commented 2 years ago

Currently the Elli charger times out and closes the connection exactly 10 minutes after the last EEBUS message was sent. This happens mainly when no EV is connected, as the heartbeat messages are sent only to the EV entity in SPINE Version 1.1.

Nearly 10 minutes after that connection close, the mDNS entry is published again and the connection starts from scratch. This is 20 minutes after the first mDNS discovery (TTL).

This looks like an issue with the Elli EEBUS stack, but needs to be verified. I don't know anything in the spec that requires the HEMS to periodically sends a message, but maybe I just haven't noticed this part in the spec yet.

Thanks to @vheat for noticing this.

DerAndereAndi commented 2 years ago

The Websocket ping message are send on our end.

To not wait the second 10 minutes, I can try to figure out how to try a reconnection right after the connection got closed.

drkx2k19 commented 2 years ago

Same behaviour like @vheat discribed on my setup:

andig commented 2 years ago

Einzig merkwürdig sind eigentlich die 10min zwischen disconnect und neuem Versuch. Da müssten wir im Zweifel schneller sein. Und natürlich die Frage warum die Verbindung überhaupt abbricht, noch dazu ohne goodbye notification.

Irgendwie scheint das alles in einem 10min Raster zu passieren?

DerAndereAndi commented 2 years ago
  1. 10 Minuten keine SPINE Kommandos ausgetauscht -> Timeout von Elli. Wenn es halt nichts auszutauschen gibt, ist das ne ziemlich ... ungewöhnliche Reaktion. -> Abwarten was Elli sagt.
  2. Die nächste 10 Minuten Lücke danach hängt mit dem TTL des mDNS Eintrages zusammen und ist eben nicht genau 10 Minuten nach 1. Das ist ein Zufall hier.

Ich baue diesen Mechanismus gerade um, um beides etwas besser abzufangen. Die Hauptursache ist aber Punkt 1, d.h. ich kann momentan nur einen Workaround für die Situation machen

DerAndereAndi commented 2 years ago

Die neuesten Änderungen in https://github.com/evcc-io/evcc/pull/3608/commits/7a60193852beae5d394e908d417e12efeb690f33 und dem dazugehörigen https://github.com/evcc-io/eebus/pull/2/commits/166ce977216ebf341f8f1fd553b0d4963e096999 verbessern das Handling.

Es wird bei disconnect sofort mit den bekannten Gerätedaten eine neue Verbindung aufgebaut. Falls das nicht funktioniert, wird erneuert nach Geräten gesucht bis alle registrierten Geräte irgendwann gefunden und verbunden werden.

Auch getestet mit dem Fall dass das Koppeln in der Wallbox aufgehoben wird.

DerAndereAndi commented 2 years ago

Habe hier jetzt noch einen Workaround eingebaut damit es zu keinem Timeout kommt: https://github.com/evcc-io/eebus/pull/2/commits/20321d115da351a8cffdc957597e5f88a2d00bc6

Bei meinen Tests hier funktioniert das und tut auch nicht weh. Da das Verhalten nur durch ein Software-Update der Elli Wallbox geändert werden kann, und dies Monate dauern kann, ist dieser Workaround notwendig.

Zusammen mit den vorherigen Änderungen zum besseren/schnelleren Re-connect sollte das Problem jetzt sehr gut im Griff sein. Würde vorschlagen das Ticket hier zu schließen.

andig commented 2 years ago

...dann machen wir hier zu?