E3DC: address session data request per wallbox index (#32172)

This commit is contained in:
andig 2026-07-26 16:29:02 +02:00 • committed by GitHub
parent aa7c685fb6
commit b66d6532ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -656,10 +656,27 @@ func (wb *E3dc) GetMaxCurrent() (float64, error) {
// getSessionData retrieves the session data container from WB_REQ_SESSION.
// Returns all session-related messages (energy, time, RFID, etc.).
// If no vehicle is connected, returns only WB_INDEX with no session data.
//
// The request carries the wallbox index as payload- an unscoped request is always
// answered for wallbox 0. WB_REQ_SESSION has no entry in go-rscp's datatype table,
// hence the explicit message.
func (wb *E3dc) getSessionData() ([]rscp.Message, error) {
res, err := wb.retrySend(*rscp.NewMessage(rscp.WB_REQ_SESSION, nil))
res, err := wb.retrySend(rscp.Message{
Tag: rscp.WB_REQ_SESSION,
DataType: rscp.UChar8,
Value: wb.id,
})
if err == nil {
err = rscpError(*res)
}
// fall back to the unscoped request if the device rejects the index
if err != nil {
return nil, err
wb.log.DEBUG.Printf("indexed session request failed: %v", err)
if res, err = wb.retrySend(*rscp.NewMessage(rscp.WB_REQ_SESSION, nil)); err != nil {
return nil, err
}
}
return rscpContainer(*res, 1)