Skip to content
This repository was archived by the owner on Jun 29, 2024. It is now read-only.

Commit 487c1de

Browse files
committed
Filter usecase specific limitIds
1 parent 27b9b62 commit 487c1de

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

uclpcserver/uclpc.go

+27-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,33 @@ func (e *UCLPCServer) loadControlWriteCB(msg *spineapi.Message) {
5252
e.pendingMux.Lock()
5353
defer e.pendingMux.Unlock()
5454

55-
if msg.RequestHeader == nil || msg.RequestHeader.MsgCounter == nil {
55+
if msg.RequestHeader == nil || msg.RequestHeader.MsgCounter == nil ||
56+
msg.Cmd.LoadControlLimitListData == nil {
57+
return
58+
}
59+
60+
descriptions := util.GetLocalLimitDescriptionsForTypeCategoryDirectionScope(
61+
e.service,
62+
model.LoadControlLimitTypeTypeSignDependentAbsValueLimit,
63+
model.LoadControlCategoryTypeObligation,
64+
model.EnergyDirectionTypeConsume,
65+
model.ScopeTypeTypeActivePowerLimit,
66+
)
67+
if len(descriptions) != 1 || descriptions[0].LimitId == nil {
68+
return
69+
}
70+
description := descriptions[0]
71+
72+
data := msg.Cmd.LoadControlLimitListData
73+
74+
if data == nil || data.LoadControlLimitData == nil || len(data.LoadControlLimitData) == 0 {
75+
return
76+
}
77+
78+
// we assume there is always only one limit
79+
element := data.LoadControlLimitData[0]
80+
81+
if description.LimitId == nil || element.LimitId == nil || *description.LimitId != *element.LimitId {
5682
return
5783
}
5884

uclpcserver/uclpc_test.go

+38
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package uclpcserver
22

33
import (
4+
"time"
5+
46
eebusutil "github.com/enbility/eebus-go/util"
57
spineapi "github.com/enbility/spine-go/api"
68
"github.com/enbility/spine-go/model"
@@ -16,6 +18,42 @@ func (s *UCLPCServerSuite) Test_loadControlWriteCB() {
1618
RequestHeader: &model.HeaderType{
1719
MsgCounter: eebusutil.Ptr(model.MsgCounterType(500)),
1820
},
21+
Cmd: model.CmdType{
22+
LoadControlLimitListData: &model.LoadControlLimitListDataType{},
23+
},
24+
}
25+
26+
s.sut.loadControlWriteCB(msg)
27+
28+
msg.Cmd = model.CmdType{
29+
LoadControlLimitListData: &model.LoadControlLimitListDataType{
30+
LoadControlLimitData: []model.LoadControlLimitDataType{},
31+
},
32+
}
33+
34+
s.sut.loadControlWriteCB(msg)
35+
36+
msg.Cmd = model.CmdType{
37+
LoadControlLimitListData: &model.LoadControlLimitListDataType{
38+
LoadControlLimitData: []model.LoadControlLimitDataType{
39+
{},
40+
},
41+
},
42+
}
43+
44+
s.sut.loadControlWriteCB(msg)
45+
46+
msg.Cmd = model.CmdType{
47+
LoadControlLimitListData: &model.LoadControlLimitListDataType{
48+
LoadControlLimitData: []model.LoadControlLimitDataType{
49+
{
50+
LimitId: eebusutil.Ptr(model.LoadControlLimitIdType(0)),
51+
IsLimitActive: eebusutil.Ptr(true),
52+
Value: model.NewScaledNumberType(1000),
53+
TimePeriod: model.NewTimePeriodTypeWithRelativeEndTime(time.Minute * 2),
54+
},
55+
},
56+
},
1957
}
2058

2159
s.sut.loadControlWriteCB(msg)

0 commit comments

Comments
 (0)