Skip to content

Commit 2cd13fc

Browse files
committed
Fix LoadControl for 1 phase connected EVSE
- If an EVSE is connected via 1 phase, `LoadControlLimits` should not add empty data for non existing phases, otherwise this will lead to invalid data for consumers. E.g. checking if any phase is active will always fail, as these are always returning false - Add more tests for Audi Mobile Connect setup with 1 phase - Add more tests for Elli Connect/Pro Gen 1 with 1 phase setup
1 parent 8544b35 commit 2cd13fc

File tree

4 files changed

+301
-14
lines changed

4 files changed

+301
-14
lines changed

features/internal/electricalconnection_test.go

Lines changed: 118 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -549,25 +549,77 @@ func (s *ElectricalConnectionSuite) Test_GetLimitsForParameterId() {
549549
assert.Equal(s.T(), defaultV, 0.1)
550550
}
551551

552+
func (s *ElectricalConnectionSuite) Test_GetLimitsForParameterId_Elli_1Phase() {
553+
filter := model.ElectricalConnectionPermittedValueSetDataType{
554+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(0)),
555+
}
556+
minV, maxV, defaultV, err := s.localSut.GetPermittedValueDataForFilter(filter)
557+
assert.NotNil(s.T(), err)
558+
assert.Equal(s.T(), minV, 0.0)
559+
assert.Equal(s.T(), maxV, 0.0)
560+
assert.Equal(s.T(), defaultV, 0.0)
561+
minV, maxV, defaultV, err = s.remoteSut.GetPermittedValueDataForFilter(filter)
562+
assert.NotNil(s.T(), err)
563+
assert.Equal(s.T(), minV, 0.0)
564+
assert.Equal(s.T(), maxV, 0.0)
565+
assert.Equal(s.T(), defaultV, 0.0)
566+
567+
s.addParamDescription_Elli_1Phase()
568+
s.addPermittedValueSetEmptyElli()
569+
570+
minV, maxV, defaultV, err = s.localSut.GetPermittedValueDataForFilter(filter)
571+
assert.Nil(s.T(), err)
572+
assert.Equal(s.T(), minV, 0.0)
573+
assert.Equal(s.T(), maxV, 0.0)
574+
assert.Equal(s.T(), defaultV, 0.0)
575+
minV, maxV, defaultV, err = s.remoteSut.GetPermittedValueDataForFilter(filter)
576+
assert.Nil(s.T(), err)
577+
assert.Equal(s.T(), minV, 0.0)
578+
assert.Equal(s.T(), maxV, 0.0)
579+
assert.Equal(s.T(), defaultV, 0.0)
580+
}
581+
552582
func (s *ElectricalConnectionSuite) Test_AdjustValueToBeWithinPermittedValuesForParameter() {
553583
parameterId := model.ElectricalConnectionParameterIdType(1)
554584
s.addPermittedValueSet()
555585
s.addParamDescriptionCurrents()
556586

557587
value := s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId)
558-
assert.Equal(s.T(), value, 16.0)
588+
assert.Equal(s.T(), 16.0, value)
589+
value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId)
590+
assert.Equal(s.T(), 16.0, value)
591+
592+
value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId)
593+
assert.Equal(s.T(), 2.0, value)
594+
value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId)
595+
assert.Equal(s.T(), 2.0, value)
596+
597+
value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId)
598+
assert.Equal(s.T(), 0.1, value)
599+
value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId)
600+
assert.Equal(s.T(), 0.1, value)
601+
}
602+
603+
func (s *ElectricalConnectionSuite) Test_AdjustValueToBeWithinPermittedValuesForParameter_Elli_1Phase() {
604+
parameterId := model.ElectricalConnectionParameterIdType(1)
605+
606+
s.addPermittedValueSetEmptyElli()
607+
s.addParamDescription_Elli_1Phase()
608+
609+
value := s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId)
610+
assert.Equal(s.T(), value, 20.0)
559611
value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId)
560-
assert.Equal(s.T(), value, 16.0)
612+
assert.Equal(s.T(), value, 20.0)
561613

562614
value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId)
563615
assert.Equal(s.T(), value, 2.0)
564616
value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId)
565617
assert.Equal(s.T(), value, 2.0)
566618

567619
value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId)
568-
assert.Equal(s.T(), value, 0.1)
620+
assert.Equal(s.T(), value, 1.0)
569621
value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId)
570-
assert.Equal(s.T(), value, 0.1)
622+
assert.Equal(s.T(), value, 1.0)
571623
}
572624

573625
func (s *ElectricalConnectionSuite) Test_GetCharacteristics() {
@@ -972,6 +1024,68 @@ func (s *ElectricalConnectionSuite) addParamDescriptionPower() {
9721024
_, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil)
9731025
}
9741026

1027+
func (s *ElectricalConnectionSuite) addParamDescription_Elli_1Phase() {
1028+
fData := &model.ElectricalConnectionParameterDescriptionListDataType{
1029+
ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{
1030+
{
1031+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1032+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(0)),
1033+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeAbc),
1034+
ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal),
1035+
},
1036+
{
1037+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1038+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(1)),
1039+
MeasurementId: util.Ptr(model.MeasurementIdType(0)),
1040+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA),
1041+
AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms),
1042+
},
1043+
{
1044+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1045+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(2)),
1046+
MeasurementId: util.Ptr(model.MeasurementIdType(1)),
1047+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeB),
1048+
AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms),
1049+
},
1050+
{
1051+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1052+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(3)),
1053+
MeasurementId: util.Ptr(model.MeasurementIdType(2)),
1054+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeC),
1055+
AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms),
1056+
},
1057+
{
1058+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1059+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(4)),
1060+
MeasurementId: util.Ptr(model.MeasurementIdType(3)),
1061+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA),
1062+
},
1063+
{
1064+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1065+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(5)),
1066+
MeasurementId: util.Ptr(model.MeasurementIdType(4)),
1067+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeB),
1068+
},
1069+
{
1070+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1071+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(6)),
1072+
MeasurementId: util.Ptr(model.MeasurementIdType(5)),
1073+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeC),
1074+
},
1075+
{
1076+
ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)),
1077+
ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(7)),
1078+
MeasurementId: util.Ptr(model.MeasurementIdType(6)),
1079+
VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc),
1080+
AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeAbc),
1081+
AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal),
1082+
},
1083+
},
1084+
}
1085+
_ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil)
1086+
_, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil)
1087+
}
1088+
9751089
func (s *ElectricalConnectionSuite) addPermittedValueSet() {
9761090
fData := &model.ElectricalConnectionPermittedValueSetListDataType{
9771091
ElectricalConnectionPermittedValueSetData: []model.ElectricalConnectionPermittedValueSetDataType{

usecases/cem/evcem/public_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase_AudiConnect() {
307307

308308
data, err = s.sut.CurrentPerPhase(s.evEntity)
309309
assert.Nil(s.T(), err)
310+
assert.Equal(s.T(), 1, len(data))
310311
assert.Equal(s.T(), 10.0, data[0])
311312
}
312313

usecases/internal/loadcontrol.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func LoadControlLimits(
4949
elParamDesc, err := evElectricalConnection.GetParameterDescriptionsForFilter(filter)
5050
if err != nil || len(elParamDesc) == 0 || elParamDesc[0].MeasurementId == nil {
5151
// there is no data for this phase, the phase may not exist
52-
result = append(result, ucapi.LoadLimitsPhase{Phase: phaseName})
52+
// so do not add id to the result
5353
continue
5454
}
5555

0 commit comments

Comments
 (0)