diff --git a/charger/e3dc.go b/charger/e3dc.go index bc30993ab..c51bc8996 100644 --- a/charger/e3dc.go +++ b/charger/e3dc.go @@ -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)