Skip to content

Commit 82f4b31

Browse files
Fix: have CurrentLimits method in opev and oscev filter for LoadControlLimitDescription instead of MeasurementDescription (#144)
Since the "ScopeType" field in the LoadControlLimitDescription is more relevant (with a value of "overloadProtection" and "selfConsumption" for OPEV and OSCEV, respectively), it shall be used as the filter for obtaining the relevant ElectricalConnectionPermittedValueSetListData items in the CurrentLimits getters for [OPEV](https://github.com/enbility/eebus-go/blob/59e7016a7018364d209f72331685b0ef0ba97b67/usecases/cem/opev/public.go#L19) and [OSCEV](https://github.com/enbility/eebus-go/blob/59e7016a7018364d209f72331685b0ef0ba97b67/usecases/cem/oscev/public.go#L19). From the relevant LoadControlLimitDescriptionData items, one can get their corresponding measurement IDs and use them to filter for relevant parameter description items.
1 parent 59e7016 commit 82f4b31

File tree

4 files changed

+122
-32
lines changed

4 files changed

+122
-32
lines changed

usecases/cem/opev/public.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,38 @@ func (e *OPEV) CurrentLimits(entity spineapi.EntityRemoteInterface) ([]float64,
2626
return nil, nil, nil, err
2727
}
2828

29-
meas, err := client.NewMeasurement(e.LocalEntity, entity)
29+
lc, err := client.NewLoadControl(e.LocalEntity, entity)
3030
if err != nil {
3131
return nil, nil, nil, err
3232
}
3333

34-
filter := model.MeasurementDescriptionDataType{
35-
MeasurementType: util.Ptr(model.MeasurementTypeTypeCurrent),
36-
CommodityType: util.Ptr(model.CommodityTypeTypeElectricity),
37-
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
38-
ScopeType: util.Ptr(model.ScopeTypeTypeACCurrent),
34+
filter := model.LoadControlLimitDescriptionDataType {
35+
LimitType: util.Ptr(model.LoadControlLimitTypeTypeMaxValueLimit),
36+
LimitCategory: util.Ptr(model.LoadControlCategoryTypeObligation),
37+
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
38+
ScopeType: util.Ptr(model.ScopeTypeTypeOverloadProtection),
3939
}
40-
measDesc, err := meas.GetDescriptionsForFilter(filter)
40+
41+
limitDescs, err := lc.GetLimitDescriptionsForFilter(filter)
4142
if err != nil {
4243
return nil, nil, nil, err
4344
}
45+
if len(limitDescs) == 0 {
46+
return nil, nil, nil, api.ErrDataNotAvailable
47+
}
4448

45-
return ec.GetPhaseCurrentLimits(measDesc)
49+
measDescs := make([]model.MeasurementDescriptionDataType, 0)
50+
for _, ld := range limitDescs {
51+
measId := ld.MeasurementId
52+
if measId == nil {
53+
return nil, nil, nil, api.ErrDataNotAvailable
54+
}
55+
md := model.MeasurementDescriptionDataType{
56+
MeasurementId: measId,
57+
}
58+
measDescs = append(measDescs, md)
59+
}
60+
return ec.GetPhaseCurrentLimits(measDescs)
4661
}
4762

4863
// return the current loadcontrol obligation limits

usecases/cem/opev/public_test.go

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,51 @@ func (s *CemOPEVSuite) Test_Public() {
1616
_, _, _, err = s.sut.CurrentLimits(s.evEntity)
1717
assert.NotNil(s.T(), err)
1818

19+
lc := s.evEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer)
20+
assert.NotNil(s.T(), lc)
21+
1922
meas := s.evEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeMeasurement, model.RoleTypeServer)
2023
assert.NotNil(s.T(), meas)
2124

22-
mData := &model.MeasurementDescriptionListDataType{
23-
MeasurementDescriptionData: []model.MeasurementDescriptionDataType{
25+
lData := &model.LoadControlLimitDescriptionListDataType{
26+
LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{
27+
},
28+
}
29+
30+
_,errT := lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, lData, nil, nil)
31+
assert.Nil(s.T(), errT)
32+
33+
_, _, _, err = s.sut.CurrentLimits(s.evEntity)
34+
assert.NotNil(s.T(), err)
35+
36+
lData = &model.LoadControlLimitDescriptionListDataType{
37+
LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{
38+
{
39+
LimitId: util.Ptr(model.LoadControlLimitIdType(0)),
40+
LimitCategory: util.Ptr(model.LoadControlCategoryTypeObligation),
41+
LimitType: util.Ptr(model.LoadControlLimitTypeTypeMaxValueLimit),
42+
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
43+
ScopeType: util.Ptr(model.ScopeTypeTypeOverloadProtection),
44+
},
45+
},
46+
}
47+
48+
_,errT = lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, lData, nil, nil)
49+
assert.Nil(s.T(), errT)
50+
51+
_, _, _, err = s.sut.CurrentLimits(s.evEntity)
52+
assert.NotNil(s.T(), err)
53+
54+
lData = &model.LoadControlLimitDescriptionListDataType{
55+
LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{
2456
{
25-
MeasurementId: util.Ptr(model.MeasurementIdType(0)),
26-
MeasurementType: util.Ptr(model.MeasurementTypeTypeCurrent),
27-
CommodityType: util.Ptr(model.CommodityTypeTypeElectricity),
28-
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
29-
ScopeType: util.Ptr(model.ScopeTypeTypeACCurrent),
57+
LimitId: util.Ptr(model.LoadControlLimitIdType(0)),
58+
MeasurementId: util.Ptr(model.MeasurementIdType(0)),
3059
},
3160
},
3261
}
33-
_, errT := meas.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, mData, nil, nil)
62+
63+
_,errT = lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, lData, &model.FilterType{}, nil)
3464
assert.Nil(s.T(), errT)
3565

3666
_, _, _, err = s.sut.CurrentLimits(s.evEntity)

usecases/cem/oscev/public.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,38 @@ func (e *OSCEV) CurrentLimits(entity spineapi.EntityRemoteInterface) ([]float64,
2626
return nil, nil, nil, err
2727
}
2828

29-
meas, err := client.NewMeasurement(e.LocalEntity, entity)
29+
lc, err := client.NewLoadControl(e.LocalEntity, entity)
3030
if err != nil {
3131
return nil, nil, nil, err
3232
}
3333

34-
filter := model.MeasurementDescriptionDataType{
35-
MeasurementType: util.Ptr(model.MeasurementTypeTypeCurrent),
36-
CommodityType: util.Ptr(model.CommodityTypeTypeElectricity),
37-
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
38-
ScopeType: util.Ptr(model.ScopeTypeTypeACCurrent),
34+
filter := model.LoadControlLimitDescriptionDataType {
35+
LimitType: util.Ptr(model.LoadControlLimitTypeTypeMaxValueLimit),
36+
LimitCategory: util.Ptr(model.LoadControlCategoryTypeRecommendation),
37+
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
38+
ScopeType: util.Ptr(model.ScopeTypeTypeSelfConsumption),
3939
}
40-
measDesc, err := meas.GetDescriptionsForFilter(filter)
40+
41+
limitDescs, err := lc.GetLimitDescriptionsForFilter(filter)
4142
if err != nil {
4243
return nil, nil, nil, err
4344
}
45+
if len(limitDescs) == 0 {
46+
return nil, nil, nil, api.ErrDataNotAvailable
47+
}
4448

45-
return ec.GetPhaseCurrentLimits(measDesc)
49+
measDescs := make([]model.MeasurementDescriptionDataType, 0)
50+
for _, ld := range limitDescs {
51+
measId := ld.MeasurementId
52+
if measId == nil {
53+
return nil, nil, nil, api.ErrDataNotAvailable
54+
}
55+
md := model.MeasurementDescriptionDataType{
56+
MeasurementId: measId,
57+
}
58+
measDescs = append(measDescs, md)
59+
}
60+
return ec.GetPhaseCurrentLimits(measDescs)
4661
}
4762

4863
// return the current loadcontrol recommendation limits

usecases/cem/oscev/public_test.go

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,51 @@ func (s *CemOSCEVSuite) Test_Public() {
1616
_, _, _, err = s.sut.CurrentLimits(s.evEntity)
1717
assert.NotNil(s.T(), err)
1818

19+
lc := s.evEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer)
20+
assert.NotNil(s.T(), lc)
21+
1922
meas := s.evEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeMeasurement, model.RoleTypeServer)
2023
assert.NotNil(s.T(), meas)
2124

22-
mData := &model.MeasurementDescriptionListDataType{
23-
MeasurementDescriptionData: []model.MeasurementDescriptionDataType{
25+
lData := &model.LoadControlLimitDescriptionListDataType{
26+
LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{
27+
},
28+
}
29+
30+
_,errT := lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, lData, nil, nil)
31+
assert.Nil(s.T(), errT)
32+
33+
_, _, _, err = s.sut.CurrentLimits(s.evEntity)
34+
assert.NotNil(s.T(), err)
35+
36+
lData = &model.LoadControlLimitDescriptionListDataType{
37+
LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{
38+
{
39+
LimitId: util.Ptr(model.LoadControlLimitIdType(0)),
40+
LimitCategory: util.Ptr(model.LoadControlCategoryTypeRecommendation),
41+
LimitType: util.Ptr(model.LoadControlLimitTypeTypeMaxValueLimit),
42+
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
43+
ScopeType: util.Ptr(model.ScopeTypeTypeSelfConsumption),
44+
},
45+
},
46+
}
47+
48+
_,errT = lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, lData, nil, nil)
49+
assert.Nil(s.T(), errT)
50+
51+
_, _, _, err = s.sut.CurrentLimits(s.evEntity)
52+
assert.NotNil(s.T(), err)
53+
54+
lData = &model.LoadControlLimitDescriptionListDataType{
55+
LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{
2456
{
25-
MeasurementId: util.Ptr(model.MeasurementIdType(0)),
26-
MeasurementType: util.Ptr(model.MeasurementTypeTypeCurrent),
27-
CommodityType: util.Ptr(model.CommodityTypeTypeElectricity),
28-
Unit: util.Ptr(model.UnitOfMeasurementTypeA),
29-
ScopeType: util.Ptr(model.ScopeTypeTypeACCurrent),
57+
LimitId: util.Ptr(model.LoadControlLimitIdType(0)),
58+
MeasurementId: util.Ptr(model.MeasurementIdType(0)),
3059
},
3160
},
3261
}
33-
_, errT := meas.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, mData, nil, nil)
62+
63+
_,errT = lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, lData, &model.FilterType{}, nil)
3464
assert.Nil(s.T(), errT)
3565

3666
_, _, _, err = s.sut.CurrentLimits(s.evEntity)

0 commit comments

Comments
 (0)