Skip to content

Commit

Permalink
Ocpp: make sure central system always responds to chargepoint requests (
Browse files Browse the repository at this point in the history
  • Loading branch information
andig authored Sep 23, 2024
1 parent 9dc383a commit 034b324
Showing 1 changed file with 34 additions and 20 deletions.
54 changes: 34 additions & 20 deletions charger/ocpp/cs_core.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ocpp
import (
"github.com/lorenzodonini/ocpp-go/ocpp1.6/core"
"github.com/lorenzodonini/ocpp-go/ocpp1.6/firmware"
"github.com/lorenzodonini/ocpp-go/ocpp1.6/types"
)

// cp actions
Expand All @@ -17,12 +18,17 @@ func (cs *CS) OnAuthorize(id string, request *core.AuthorizeRequest) (*core.Auth
}

func (cs *CS) OnBootNotification(id string, request *core.BootNotificationRequest) (*core.BootNotificationConfirmation, error) {
cp, err := cs.ChargepointByID(id)
if err != nil {
return nil, err
if cp, err := cs.ChargepointByID(id); err == nil {
return cp.OnBootNotification(request)
}

return cp.OnBootNotification(request)
res := &core.BootNotificationConfirmation{
CurrentTime: types.Now(),
Interval: 60,
Status: core.RegistrationStatusPending, // not accepted during startup
}

return res, nil
}

func (cs *CS) OnDataTransfer(id string, request *core.DataTransferRequest) (*core.DataTransferConfirmation, error) {
Expand All @@ -44,39 +50,47 @@ func (cs *CS) OnHeartbeat(id string, request *core.HeartbeatRequest) (*core.Hear
}

func (cs *CS) OnMeterValues(id string, request *core.MeterValuesRequest) (*core.MeterValuesConfirmation, error) {
cp, err := cs.ChargepointByID(id)
if err != nil {
return nil, err
if cp, err := cs.ChargepointByID(id); err == nil {
return cp.OnMeterValues(request)
}

return cp.OnMeterValues(request)
return new(core.MeterValuesConfirmation), nil
}

func (cs *CS) OnStatusNotification(id string, request *core.StatusNotificationRequest) (*core.StatusNotificationConfirmation, error) {
cp, err := cs.ChargepointByID(id)
if err != nil {
return nil, err
if cp, err := cs.ChargepointByID(id); err == nil {
return cp.OnStatusNotification(request)
}

return cp.OnStatusNotification(request)
return new(core.StatusNotificationConfirmation), nil
}

func (cs *CS) OnStartTransaction(id string, request *core.StartTransactionRequest) (*core.StartTransactionConfirmation, error) {
cp, err := cs.ChargepointByID(id)
if err != nil {
return nil, err
if cp, err := cs.ChargepointByID(id); err == nil {
return cp.OnStartTransaction(request)
}

res := &core.StartTransactionConfirmation{
IdTagInfo: &types.IdTagInfo{
Status: types.AuthorizationStatusAccepted,
},
}

return cp.OnStartTransaction(request)
return res, nil
}

func (cs *CS) OnStopTransaction(id string, request *core.StopTransactionRequest) (*core.StopTransactionConfirmation, error) {
cp, err := cs.ChargepointByID(id)
if err != nil {
return nil, err
if cp, err := cs.ChargepointByID(id); err == nil {
cp.OnStopTransaction(request)
}

res := &core.StopTransactionConfirmation{
IdTagInfo: &types.IdTagInfo{
Status: types.AuthorizationStatusAccepted, // accept old pending stop message during startup
},
}

return cp.OnStopTransaction(request)
return res, nil
}

func (cs *CS) OnDiagnosticsStatusNotification(id string, request *firmware.DiagnosticsStatusNotificationRequest) (confirmation *firmware.DiagnosticsStatusNotificationConfirmation, err error) {
Expand Down

0 comments on commit 034b324

Please sign in to comment.