@@ -2,6 +2,9 @@ package ocpp21
22
33import (
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+
399440func (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+
463516func (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+
492566func (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