Skip to content

Commit 5f91b10

Browse files
committed
Add safeguard if EventCBs are nil
1 parent 15bf236 commit 5f91b10

File tree

16 files changed

+83
-65
lines changed

16 files changed

+83
-65
lines changed

usecases/cem/cevc/events.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ func (e *CEVC) evTimeSeriesDescriptionDataUpdate(payload spineapi.EventPayload)
114114
return
115115
}
116116

117-
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateEnergyDemand)
117+
if e.EventCB != nil {
118+
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateEnergyDemand)
119+
}
118120

119121
_, err = e.TimeSlotConstraints(payload.Entity)
120122
if err != nil {
@@ -128,16 +130,18 @@ func (e *CEVC) evTimeSeriesDescriptionDataUpdate(payload spineapi.EventPayload)
128130
return
129131
}
130132

131-
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataRequestedPowerLimitsAndIncentives)
133+
if e.EventCB != nil {
134+
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataRequestedPowerLimitsAndIncentives)
135+
}
132136
}
133137

134138
// the load control limit data of an EV was updated
135139
func (e *CEVC) evTimeSeriesDataUpdate(payload spineapi.EventPayload) {
136-
if _, err := e.ChargePlan(payload.Entity); err == nil {
140+
if _, err := e.ChargePlan(payload.Entity); err == nil && e.EventCB != nil {
137141
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateChargePlan)
138142
}
139143

140-
if _, err := e.ChargePlanConstraints(payload.Entity); err == nil {
144+
if _, err := e.ChargePlanConstraints(payload.Entity); err == nil && e.EventCB != nil {
141145
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateTimeSlotConstraints)
142146
}
143147
}
@@ -152,19 +156,23 @@ func (e *CEVC) evIncentiveTableDescriptionDataUpdate(payload spineapi.EventPaylo
152156
}
153157

154158
// check if we are required to update the plan
155-
if e.evCheckIncentiveTableDescriptionUpdateRequired(payload.Entity) {
159+
if e.evCheckIncentiveTableDescriptionUpdateRequired(payload.Entity) && e.EventCB != nil {
156160
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataRequestedIncentiveTableDescription)
157161
}
158162
}
159163

160164
// the incentive table constraint data of an EV was updated
161165
func (e *CEVC) evIncentiveTableConstraintsDataUpdate(payload spineapi.EventPayload) {
162-
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateIncentiveTable)
166+
if e.EventCB != nil {
167+
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateIncentiveTable)
168+
}
163169
}
164170

165171
// the incentive table data of an EV was updated
166172
func (e *CEVC) evIncentiveTableDataUpdate(payload spineapi.EventPayload) {
167-
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateIncentiveTable)
173+
if e.EventCB != nil {
174+
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateIncentiveTable)
175+
}
168176
}
169177

170178
// check timeSeries descriptions if constraints element has updateRequired set to true

usecases/cem/evcc/events.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,16 @@ func (e *EVCC) evConnected(payload spineapi.EventPayload) {
116116
}
117117
}
118118

119-
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvConnected)
119+
if e.EventCB != nil {
120+
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvConnected)
121+
}
120122
}
121123

122124
// an EV was disconnected
123125
func (e *EVCC) evDisconnected(payload spineapi.EventPayload) {
124-
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvDisconnected)
126+
if e.EventCB != nil {
127+
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvDisconnected)
128+
}
125129
}
126130

127131
// the configuration key description data of an EV was updated
@@ -141,13 +145,13 @@ func (e *EVCC) evConfigurationDataUpdate(payload spineapi.EventPayload) {
141145
filter := model.DeviceConfigurationKeyValueDescriptionDataType{
142146
KeyName: util.Ptr(model.DeviceConfigurationKeyNameTypeCommunicationsStandard),
143147
}
144-
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) {
148+
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
145149
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateCommunicationStandard)
146150
}
147151

148152
// Scenario 3
149153
filter.KeyName = util.Ptr(model.DeviceConfigurationKeyNameTypeAsymmetricChargingSupported)
150-
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) {
154+
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
151155
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateAsymmetricChargingSupport)
152156
}
153157
}
@@ -156,7 +160,7 @@ func (e *EVCC) evConfigurationDataUpdate(payload spineapi.EventPayload) {
156160
// the operating state of an EV was updated
157161
func (e *EVCC) evOperatingStateDataUpdate(payload spineapi.EventPayload) {
158162
if deviceDiagnosis, err := client.NewDeviceDiagnosis(e.LocalEntity, payload.Entity); err == nil {
159-
if _, err := deviceDiagnosis.GetState(); err == nil {
163+
if _, err := deviceDiagnosis.GetState(); err == nil && e.EventCB != nil {
160164
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateIdentifications)
161165
}
162166
}
@@ -166,7 +170,7 @@ func (e *EVCC) evOperatingStateDataUpdate(payload spineapi.EventPayload) {
166170
func (e *EVCC) evIdentificationDataUpdate(payload spineapi.EventPayload) {
167171
if evIdentification, err := client.NewIdentification(e.LocalEntity, payload.Entity); err == nil {
168172
// Scenario 4
169-
if evIdentification.CheckEventPayloadDataForFilter(payload.Data) {
173+
if evIdentification.CheckEventPayloadDataForFilter(payload.Data) && e.EventCB != nil {
170174
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateIdentifications)
171175
}
172176
}
@@ -176,7 +180,7 @@ func (e *EVCC) evIdentificationDataUpdate(payload spineapi.EventPayload) {
176180
func (e *EVCC) evManufacturerDataUpdate(payload spineapi.EventPayload) {
177181
if evDeviceClassification, err := client.NewDeviceClassification(e.LocalEntity, payload.Entity); err == nil {
178182
// Scenario 5
179-
if _, err := evDeviceClassification.GetManufacturerDetails(); err == nil {
183+
if _, err := evDeviceClassification.GetManufacturerDetails(); err == nil && e.EventCB != nil {
180184
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateManufacturerData)
181185
}
182186
}
@@ -197,7 +201,7 @@ func (e *EVCC) evElectricalPermittedValuesUpdate(payload spineapi.EventPayload)
197201
filter := model.ElectricalConnectionParameterDescriptionDataType{
198202
ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal),
199203
}
200-
if evElectricalConnection.CheckEventPayloadDataForFilter(payload.Data, filter) {
204+
if evElectricalConnection.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
201205
// Scenario 6
202206
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateCurrentLimits)
203207
}

usecases/cem/evcem/events.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (e *EVCEM) evElectricalConnectionDescriptionDataUpdate(payload spineapi.Eve
8787
}
8888

8989
for _, item := range data.ElectricalConnectionDescriptionData {
90-
if item.ElectricalConnectionId != nil && item.AcConnectedPhases != nil {
90+
if item.ElectricalConnectionId != nil && item.AcConnectedPhases != nil && e.EventCB != nil {
9191
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdatePhasesConnected)
9292
return
9393
}
@@ -111,19 +111,19 @@ func (e *EVCEM) evMeasurementDataUpdate(payload spineapi.EventPayload) {
111111
filter := model.MeasurementDescriptionDataType{
112112
ScopeType: util.Ptr(model.ScopeTypeTypeACCurrent),
113113
}
114-
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
114+
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
115115
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateCurrentPerPhase)
116116
}
117117

118118
// Scenario 2
119119
filter.ScopeType = util.Ptr(model.ScopeTypeTypeACPower)
120-
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
120+
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
121121
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdatePowerPerPhase)
122122
}
123123

124124
// Scenario 3
125125
filter.ScopeType = util.Ptr(model.ScopeTypeTypeCharge)
126-
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
126+
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
127127
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateEnergyCharged)
128128
}
129129
}

usecases/cem/evsecc/events.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,22 @@ func (e *EVSECC) evseConnected(payload spineapi.EventPayload) {
4747
_, _ = evseDeviceDiagnosis.RequestState()
4848
}
4949

50-
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvseConnected)
50+
if e.EventCB != nil {
51+
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvseConnected)
52+
}
5153
}
5254

5355
// an EVSE was disconnected
5456
func (e *EVSECC) evseDisconnected(payload spineapi.EventPayload) {
55-
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvseDisconnected)
57+
if e.EventCB != nil {
58+
e.EventCB(payload.Ski, payload.Device, payload.Entity, EvseDisconnected)
59+
}
5660
}
5761

5862
// the manufacturer Data of an EVSE was updated
5963
func (e *EVSECC) evseManufacturerDataUpdate(payload spineapi.EventPayload) {
6064
if evDeviceClassification, err := client.NewDeviceClassification(e.LocalEntity, payload.Entity); err == nil {
61-
if _, err := evDeviceClassification.GetManufacturerDetails(); err == nil {
65+
if _, err := evDeviceClassification.GetManufacturerDetails(); err == nil && e.EventCB != nil {
6266
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateManufacturerData)
6367
}
6468
}
@@ -67,7 +71,7 @@ func (e *EVSECC) evseManufacturerDataUpdate(payload spineapi.EventPayload) {
6771
// the operating State of an EVSE was updated
6872
func (e *EVSECC) evseStateUpdate(payload spineapi.EventPayload) {
6973
if evDeviceDiagnosis, err := client.NewDeviceDiagnosis(e.LocalEntity, payload.Entity); err == nil {
70-
if _, err := evDeviceDiagnosis.GetState(); err == nil {
74+
if _, err := evDeviceDiagnosis.GetState(); err == nil && e.EventCB != nil {
7175
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateOperatingState)
7276
}
7377
}

usecases/cem/evsoc/events.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func (e *EVSOC) evMeasurementDataUpdate(payload spineapi.EventPayload) {
6262
filter := model.MeasurementDescriptionDataType{
6363
ScopeType: util.Ptr(model.ScopeTypeTypeStateOfCharge),
6464
}
65-
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
65+
if evMeasurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
6666
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateStateOfCharge)
6767
}
6868
}

usecases/cem/opev/events.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (e *OPEV) evLoadControlLimitDataUpdate(payload spineapi.EventPayload) {
8585
LimitCategory: util.Ptr(model.LoadControlCategoryTypeObligation),
8686
ScopeType: util.Ptr(model.ScopeTypeTypeOverloadProtection),
8787
}
88-
if lc.CheckEventPayloadDataForFilter(payload.Data, filter) {
88+
if lc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
8989
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateLimit)
9090
}
9191
}
@@ -114,7 +114,7 @@ func (e *OPEV) evElectricalPermittedValuesUpdate(payload spineapi.EventPayload)
114114
ElectricalConnectionId: values[0].ElectricalConnectionId,
115115
ParameterId: values[0].ParameterId,
116116
}
117-
if ec.CheckEventPayloadDataForFilter(payload.Data, filter1) {
117+
if ec.CheckEventPayloadDataForFilter(payload.Data, filter1) && e.EventCB != nil {
118118
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateCurrentLimits)
119119
}
120120
}

usecases/cem/oscev/events.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (e *OSCEV) evLoadControlLimitDataUpdate(payload spineapi.EventPayload) {
4343
ScopeType: util.Ptr(model.ScopeTypeTypeSelfConsumption),
4444
}
4545

46-
if lc.CheckEventPayloadDataForFilter(payload.Data, filter) {
46+
if lc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
4747
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateLimit)
4848
}
4949
}
@@ -72,7 +72,7 @@ func (e *OSCEV) evElectricalPermittedValuesUpdate(payload spineapi.EventPayload)
7272
ElectricalConnectionId: values[0].ElectricalConnectionId,
7373
ParameterId: values[0].ParameterId,
7474
}
75-
if ec.CheckEventPayloadDataForFilter(payload.Data, filter1) {
75+
if ec.CheckEventPayloadDataForFilter(payload.Data, filter1) && e.EventCB != nil {
7676
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateCurrentLimits)
7777
}
7878
}

usecases/cem/vabd/events.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,25 +86,25 @@ func (e *VABD) inverterMeasurementDataUpdate(payload spineapi.EventPayload) {
8686
filter := model.MeasurementDescriptionDataType{
8787
ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal),
8888
}
89-
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
89+
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
9090
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdatePower)
9191
}
9292

9393
// Scenario 2
9494
filter.ScopeType = util.Ptr(model.ScopeTypeTypeCharge)
95-
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
95+
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
9696
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateEnergyCharged)
9797
}
9898

9999
// Scenario 3
100100
filter.ScopeType = util.Ptr(model.ScopeTypeTypeDischarge)
101-
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
101+
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
102102
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateEnergyDischarged)
103103
}
104104

105105
// Scenario 4
106106
filter.ScopeType = util.Ptr(model.ScopeTypeTypeStateOfCharge)
107-
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
107+
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
108108
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateStateOfCharge)
109109
}
110110
}

usecases/cem/vapd/events.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func (e *VAPD) inverterConfigurationDataUpdate(payload spineapi.EventPayload) {
104104
KeyName: util.Ptr(model.DeviceConfigurationKeyNameTypePeakPowerOfPVSystem),
105105
ValueType: util.Ptr(model.DeviceConfigurationKeyValueTypeTypeScaledNumber),
106106
}
107-
if deviceConfiguration.CheckEventPayloadDataForFilter(payload.Data, filter) {
107+
if deviceConfiguration.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
108108
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdatePowerNominalPeak)
109109
}
110110
}
@@ -127,13 +127,13 @@ func (e *VAPD) inverterMeasurementDataUpdate(payload spineapi.EventPayload) {
127127
filter := model.MeasurementDescriptionDataType{
128128
ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal),
129129
}
130-
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
130+
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
131131
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdatePower)
132132
}
133133

134134
// Scenario 3
135135
filter.ScopeType = util.Ptr(model.ScopeTypeTypeACYieldTotal)
136-
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) {
136+
if measurement.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
137137
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdatePVYieldTotal)
138138
}
139139
}

usecases/cs/lpc/events.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (e *LPC) HandleEvent(payload spineapi.EventPayload) {
3232
return
3333
}
3434

35-
if internal.IsHeartbeat(payload) {
35+
if internal.IsHeartbeat(payload) && e.EventCB != nil {
3636
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateHeartbeat)
3737
return
3838
}
@@ -146,7 +146,7 @@ func (e *LPC) loadControlLimitDataUpdate(payload spineapi.EventPayload) {
146146
LimitDirection: util.Ptr(model.EnergyDirectionTypeConsume),
147147
ScopeType: util.Ptr(model.ScopeTypeTypeActivePowerLimit),
148148
}
149-
if lc.CheckEventPayloadDataForFilter(payload.Data, filter) {
149+
if lc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
150150
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateLimit)
151151
}
152152
}
@@ -158,13 +158,13 @@ func (e *LPC) configurationDataUpdate(payload spineapi.EventPayload) {
158158
filter := model.DeviceConfigurationKeyValueDescriptionDataType{
159159
KeyName: util.Ptr(model.DeviceConfigurationKeyNameTypeFailsafeConsumptionActivePowerLimit),
160160
}
161-
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) {
161+
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
162162
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateFailsafeConsumptionActivePowerLimit)
163163
}
164164
filter = model.DeviceConfigurationKeyValueDescriptionDataType{
165165
KeyName: util.Ptr(model.DeviceConfigurationKeyNameTypeFailsafeDurationMinimum),
166166
}
167-
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) {
167+
if dc.CheckEventPayloadDataForFilter(payload.Data, filter) && e.EventCB != nil {
168168
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateFailsafeDurationMinimum)
169169
}
170170
}

0 commit comments

Comments
 (0)