Closed DerAndereAndi closed 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.
Same behaviour like @vheat discribed on my setup:
start evcc
connection to Elli WB established for 10 min.
connection lost for 10 min,
connection re-established for 10 min.
and so on.
[eebus ] TRACE 2022/06/13 15:06:52 send: {"connectionHello":[{"phase":"ready"},{"waiting":60000}]}
[eebus ] TRACE 2022/06/13 15:06:52 recv: {"connectionHello":[{"phase":"ready"},{"waiting":60000}]}
[eebus ] TRACE 2022/06/13 15:16:53 close client 2c9533cb90ea87886e93154ec206f2961696a4e5 connection
[eebus ] TRACE 2022/06/13 15:16:53 !! onDisconnect invoked on ski 2c9533cb90ea87886e93154ec206f2961696a4e5
[eebus ] TRACE 2022/06/13 15:16:53 error processing incoming message: timeout
[eebus ] TRACE 2022/06/13 15:17:02 !! status: charger reported as disconnected
[lp-1 ] ERROR 2022/06/13 15:17:02 charger: charger reported as disconnected
[eebus ] TRACE 2022/06/13 15:26:53 send: {"connectionHello":[{"phase":"ready"},{"waiting":60000}]}
[eebus ] TRACE 2022/06/13 15:26:53 recv: {"connectionHello":[{"phase":"ready"},{"waiting":60000}]}
[eebus ] TRACE 2022/06/13 15:36:54 error processing incoming message: timeout
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?
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
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.
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.
...dann machen wir hier zu?
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.