Skip to content

Commit b20a4e0

Browse files
committed
feat: added support for new messages in CSMS and CS
1 parent 9951a0a commit b20a4e0

File tree

12 files changed

+529
-98
lines changed

12 files changed

+529
-98
lines changed

ocpp2.1/battey_swap/battery_swap.go renamed to ocpp2.1/battery_swap/battery_swap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package battey_swap
1+
package battery_swap
22

33
import (
44
"github.com/lorenzodonini/ocpp-go/ocpp2.1/types"

ocpp2.1/battey_swap/profile.go renamed to ocpp2.1/battery_swap/profile.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package battey_swap
1+
package battery_swap
22

33
import (
44
"github.com/lorenzodonini/ocpp-go/ocpp"
@@ -11,7 +11,7 @@ type CSMSHandler interface {
1111

1212
// Needs to be implemented by Charging stations for handling messages part of the Battery Swap.
1313
type ChargingStationHandler interface {
14-
OnRequestBatterySwap(chargingStationID string, request *RequestBatterySwapRequest) (*RequestBatterySwapResponse, error)
14+
OnRequestBatterySwap(request *RequestBatterySwapRequest) (*RequestBatterySwapResponse, error)
1515
}
1616

1717
const ProfileName = "BatterySwap"

ocpp2.1/battey_swap/request_battery_swap.go renamed to ocpp2.1/battery_swap/request_battery_swap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package battey_swap
1+
package battery_swap
22

33
import (
44
"github.com/lorenzodonini/ocpp-go/ocpp2.1/types"

ocpp2.1/battey_swap/types.go renamed to ocpp2.1/battery_swap/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package battey_swap
1+
package battery_swap
22

33
import (
44
"github.com/lorenzodonini/ocpp-go/ocppj"

ocpp2.1/charging_station.go

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package ocpp21
22

33
import (
44
"fmt"
5+
"github.com/lorenzodonini/ocpp-go/ocpp2.1/battery_swap"
6+
"github.com/lorenzodonini/ocpp-go/ocpp2.1/der"
7+
"github.com/lorenzodonini/ocpp-go/ocpp2.1/v2x"
58
"reflect"
69

710
"github.com/lorenzodonini/ocpp-go/internal/callbackqueue"
@@ -44,6 +47,9 @@ type chargingStation struct {
4447
diagnosticsHandler diagnostics.ChargingStationHandler
4548
displayHandler display.ChargingStationHandler
4649
dataHandler data.ChargingStationHandler
50+
derHandler der.ChargingStationHandler
51+
batterySwapHandler battery_swap.ChargingStationHandler
52+
v2xHandler v2x.ChargingStationHandler
4753
responseHandler chan ocpp.Response
4854
errorHandler chan error
4955
callbacks callbackqueue.CallbackQueue
@@ -396,6 +402,41 @@ func (cs *chargingStation) TransactionEvent(t transactions.TransactionEvent, tim
396402
}
397403
}
398404

405+
func (cs *chargingStation) BatterySwap(request battery_swap.BatterySwapRequest, props ...func(request *battery_swap.BatterySwapRequest)) (*battery_swap.BatterySwapResponse, error) {
406+
//TODO implement me
407+
panic("implement me")
408+
}
409+
410+
func (cs *chargingStation) NotifyDERAlarm(request der.NotifyDERAlarmRequest, props ...func(request *der.NotifyDERAlarmRequest)) (*der.NotifyDERAlarmResponse, error) {
411+
//TODO implement me
412+
panic("implement me")
413+
}
414+
415+
func (cs *chargingStation) NotifyDERStartStop(request der.NotifyDERStartStopRequest, props ...func(request *der.NotifyDERStartStopRequest)) (*der.NotifyDERStartStopResponse, error) {
416+
//TODO implement me
417+
panic("implement me")
418+
}
419+
420+
func (cs *chargingStation) ReportDERControl(request der.ReportDERControlRequest, props ...func(request *der.ReportDERControlRequest)) (*der.ReportDERControlResponse, error) {
421+
//TODO implement me
422+
panic("implement me")
423+
}
424+
425+
func (cs *chargingStation) ClosePeriodicEventStream(id int, props ...func(request *diagnostics.ClosePeriodicEventStreamRequest)) (*diagnostics.ClosePeriodicEventStreamResponse, error) {
426+
//TODO implement me
427+
panic("implement me")
428+
}
429+
430+
func (cs *chargingStation) OpenPeriodicEventStream(periodicEventStream diagnostics.PeriodicEventStreamParams, props ...func(request *diagnostics.OpenPeriodicEventStreamRequest)) (*diagnostics.OpenPeriodicEventStreamResponse, error) {
431+
//TODO implement me
432+
panic("implement me")
433+
}
434+
435+
func (cs *chargingStation) NotifyPeriodicEventStream(periodicEventStream diagnostics.NotifyPeriodicEventStream, props ...func(request *diagnostics.NotifyPeriodicEventStream)) {
436+
//TODO implement me
437+
panic("implement me")
438+
}
439+
399440
func (cs *chargingStation) SetSecurityHandler(handler security.ChargingStationHandler) {
400441
cs.securityHandler = handler
401442
}
@@ -460,6 +501,18 @@ func (cs *chargingStation) SetDataHandler(handler data.ChargingStationHandler) {
460501
cs.dataHandler = handler
461502
}
462503

504+
func (cs *chargingStation) SetDerHandler(handler der.ChargingStationHandler) {
505+
cs.derHandler = handler
506+
}
507+
508+
func (cs *chargingStation) SetBatterySwapHandler(handler battery_swap.ChargingStationHandler) {
509+
cs.batterySwapHandler = handler
510+
}
511+
512+
func (cs *chargingStation) SetV2XHandler(handler v2x.ChargingStationHandler) {
513+
cs.v2xHandler = handler
514+
}
515+
463516
func (cs *chargingStation) SendRequest(request ocpp.Request) (ocpp.Response, error) {
464517
featureName := request.GetFeatureName()
465518
if _, found := cs.client.GetProfileForFeature(featureName); !found {
@@ -489,6 +542,27 @@ func (cs *chargingStation) SendRequest(request ocpp.Request) (ocpp.Response, err
489542
return asyncResult.r, asyncResult.e
490543
}
491544

545+
func (cs *chargingStation) SendEvent(request ocpp.Request) error {
546+
featureName := request.GetFeatureName()
547+
if _, found := cs.client.GetProfileForFeature(featureName); !found {
548+
return fmt.Errorf("feature %v is unsupported on charging station (missing profile), cannot send event", featureName)
549+
}
550+
551+
if featureName != diagnostics.NotifyPeriodicEventStreamFeat {
552+
return fmt.Errorf("feature %v is not valid, cannot send event", featureName)
553+
}
554+
555+
send := func() error {
556+
return cs.client.SendEvent(request)
557+
}
558+
err := cs.callbacks.TryQueue("main", send, func(confirmation ocpp.Response, err error) {})
559+
if err != nil {
560+
return fmt.Errorf("unable to queue event %v: %w", featureName, err)
561+
}
562+
563+
return nil
564+
}
565+
492566
func (cs *chargingStation) SendRequestAsync(request ocpp.Request, callback func(response ocpp.Response, err error)) error {
493567
featureName := request.GetFeatureName()
494568
if _, found := cs.client.GetProfileForFeature(featureName); !found {
@@ -512,18 +586,25 @@ func (cs *chargingStation) SendRequestAsync(request ocpp.Request, callback func(
512586
smartcharging.NotifyEVChargingScheduleFeatureName,
513587
diagnostics.NotifyEventFeatureName,
514588
diagnostics.NotifyMonitoringReportFeatureName,
589+
diagnostics.OpenPeriodicEventStream,
590+
diagnostics.ClosePeriodicEventStream,
591+
diagnostics.NotifyPeriodicEventStreamFeat,
515592
provisioning.NotifyReportFeatureName,
516593
firmware.PublishFirmwareStatusNotificationFeatureName,
517594
smartcharging.ReportChargingProfilesFeatureName,
518595
reservation.ReservationStatusUpdateFeatureName,
519596
security.SecurityEventNotificationFeatureName,
520597
security.SignCertificateFeatureName,
521598
availability.StatusNotificationFeatureName,
522-
transactions.TransactionEventFeatureName:
599+
transactions.TransactionEventFeatureName,
600+
battery_swap.BatterySwap,
601+
der.NotifyDERAlarm,
602+
der.NotifyDERStartStop:
523603
break
524604
default:
525605
return fmt.Errorf("unsupported action %v on charging station, cannot send request", featureName)
526606
}
607+
527608
// Response will be retrieved asynchronously via asyncHandler
528609
send := func() error {
529610
return cs.client.SendRequest(request)
@@ -706,6 +787,18 @@ func (cs *chargingStation) handleIncomingRequest(request ocpp.Request, requestId
706787
if cs.transactionsHandler == nil {
707788
supported = false
708789
}
790+
case der.ProfileName:
791+
if cs.derHandler == nil {
792+
supported = false
793+
}
794+
case battery_swap.ProfileName:
795+
if cs.batterySwapHandler == nil {
796+
supported = false
797+
}
798+
case v2x.ProfileName:
799+
if cs.v2xHandler == nil {
800+
supported = false
801+
}
709802
}
710803
if !supported {
711804
cs.notSupportedError(requestId, action)
@@ -796,6 +889,31 @@ func (cs *chargingStation) handleIncomingRequest(request ocpp.Request, requestId
796889
response, err = cs.firmwareHandler.OnUnpublishFirmware(request.(*firmware.UnpublishFirmwareRequest))
797890
case firmware.UpdateFirmwareFeatureName:
798891
response, err = cs.firmwareHandler.OnUpdateFirmware(request.(*firmware.UpdateFirmwareRequest))
892+
case diagnostics.AdjustPeriodicEventStream:
893+
response, err = cs.diagnosticsHandler.OnAdjustPeriodicEventStream(request.(*diagnostics.AdjustPeriodicEventStreamRequest))
894+
case diagnostics.GetPeriodicEventStream:
895+
response, err = cs.diagnosticsHandler.OnGetPeriodicEventStream(request.(*diagnostics.GetPeriodicEventStreamRequest))
896+
case der.ClearDERControl:
897+
response, err = cs.derHandler.OnClearDERControl(request.(*der.ClearDERControlRequest))
898+
case der.GetDERControl:
899+
response, err = cs.derHandler.OnGetDERControl(request.(*der.GetDERControlRequest))
900+
case der.SetDERControl:
901+
response, err = cs.derHandler.OnSetDERControl(request.(*der.SetDERControlRequest))
902+
case battery_swap.RequestBatterySwap:
903+
response, err = cs.batterySwapHandler.OnRequestBatterySwap(request.(*battery_swap.RequestBatterySwapRequest))
904+
case tariffcost.ChangeTransactionTariff:
905+
response, err = cs.tariffCostHandler.OnChangeTransactionTariff(request.(*tariffcost.ChangeTransactionTariffRequest))
906+
case tariffcost.GetTariffsFeatureName:
907+
response, err = cs.tariffCostHandler.OnGetTariffs(request.(*tariffcost.GetTariffsRequest))
908+
case tariffcost.SetDefaultTariffFeatureName:
909+
response, err = cs.tariffCostHandler.OnSetDefaultTariff(request.(*tariffcost.SetDefaultTariffRequest))
910+
case tariffcost.ClearTariffs:
911+
response, err = cs.tariffCostHandler.OnClearTariffs(request.(*tariffcost.ClearTariffsRequest))
912+
case v2x.AFRRSignal:
913+
response, err = cs.v2xHandler.OnAFRRSignal(request.(*v2x.AFRRSignalRequest))
914+
case v2x.NotifyAllowedEnergyTransfer:
915+
response, err = cs.v2xHandler.OnNotifyAllowedEnergyTransfer(request.(*v2x.NotifyAllowedEnergyTransferRequest))
916+
799917
default:
800918
cs.notSupportedError(requestId, action)
801919
return

0 commit comments

Comments
 (0)