cactus-test-definitions 1.6.0__py3-none-any.whl → 1.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cactus-test-definitions might be problematic. Click here for more details.
- cactus_test_definitions/__init__.py +1 -1
- cactus_test_definitions/__pycache__/__init__.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/csipaus.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__init__.py +4 -0
- cactus_test_definitions/client/__pycache__/__init__.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__pycache__/actions.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__pycache__/checks.cpython-312.pyc +0 -0
- cactus_test_definitions/client/actions.py +1 -0
- cactus_test_definitions/client/checks.py +1 -0
- cactus_test_definitions/client/procedures/ALL-09.yaml +18 -18
- cactus_test_definitions/client/procedures/ALL-12.yaml +34 -16
- cactus_test_definitions/client/procedures/ALL-18.yaml +6 -5
- cactus_test_definitions/client/procedures/ALL-28.yaml +0 -1
- cactus_test_definitions/client/procedures/GEN-10.yaml +58 -4
- cactus_test_definitions/client/procedures/GEN-11.yaml +32 -8
- cactus_test_definitions/client/procedures/GEN-12.yaml +33 -9
- cactus_test_definitions/client/procedures/LOA-03.yaml +1 -1
- cactus_test_definitions/client/procedures/LOA-04.yaml +1 -1
- cactus_test_definitions/client/procedures/LOA-10.yaml +61 -9
- cactus_test_definitions/client/procedures/LOA-11.yaml +32 -8
- cactus_test_definitions/client/procedures/LOA-12.yaml +32 -8
- cactus_test_definitions/csipaus.py +2 -0
- cactus_test_definitions/server/README.md +8 -6
- cactus_test_definitions/server/__init__.py +4 -0
- cactus_test_definitions/server/__pycache__/__init__.cpython-312.pyc +0 -0
- cactus_test_definitions/server/__pycache__/actions.cpython-312.pyc +0 -0
- cactus_test_definitions/server/__pycache__/checks.cpython-312.pyc +0 -0
- cactus_test_definitions/server/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
- cactus_test_definitions/server/actions.py +2 -1
- cactus_test_definitions/server/checks.py +35 -0
- cactus_test_definitions/server/procedures/S-ALL-01.yaml +3 -0
- cactus_test_definitions/server/procedures/S-ALL-06.yaml +111 -0
- cactus_test_definitions/server/procedures/S-ALL-07.yaml +100 -0
- cactus_test_definitions/server/procedures/S-ALL-08.yaml +77 -0
- cactus_test_definitions/server/procedures/S-ALL-09.yaml +43 -0
- cactus_test_definitions/server/procedures/S-ALL-10.yaml +68 -0
- cactus_test_definitions/server/procedures/S-ALL-11.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-12.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-13.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-14.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-15.yaml +79 -0
- cactus_test_definitions/server/procedures/S-ALL-16.yaml +79 -0
- cactus_test_definitions/server/procedures/S-ALL-17.yaml +39 -0
- cactus_test_definitions/server/procedures/S-ALL-18.yaml +35 -0
- cactus_test_definitions/server/procedures/S-ALL-19.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-20.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-21.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-22.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-23.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-24.yaml +37 -0
- cactus_test_definitions/server/procedures/S-ALL-25.yaml +151 -0
- cactus_test_definitions/server/procedures/S-ALL-41.yaml +343 -0
- cactus_test_definitions/server/procedures/S-ALL-42.yaml +81 -0
- cactus_test_definitions/server/procedures/S-ALL-43.yaml +146 -0
- cactus_test_definitions/server/procedures/S-ALL-44.yaml +51 -0
- cactus_test_definitions/server/procedures/S-ALL-45.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-48.yaml +29 -0
- cactus_test_definitions/server/procedures/S-ALL-49.yaml +56 -0
- cactus_test_definitions/server/procedures/S-ALL-51.yaml +35 -0
- cactus_test_definitions/server/procedures/S-ALL-52.yaml +35 -0
- cactus_test_definitions/server/procedures/S-ALL-53.yaml +42 -0
- cactus_test_definitions/server/procedures/S-ALL-55.yaml +45 -0
- cactus_test_definitions/server/procedures/S-ALL-56.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-57.yaml +62 -0
- cactus_test_definitions/server/procedures/S-OPT-03.yaml +9 -6
- cactus_test_definitions/server/procedures/S-OPT-05.yaml +33 -0
- cactus_test_definitions/server/test_procedures.py +34 -0
- {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/METADATA +1 -1
- {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/RECORD +74 -40
- tests/unit/client/test_validate.py +47 -0
- tests/unit/server/test_validate.py +17 -4
- {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/WHEEL +0 -0
- {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/licenses/LICENSE.txt +0 -0
- {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
Description: Control Responses
|
|
2
|
+
Category: Control
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: (A) PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
client: client
|
|
17
|
+
instructions:
|
|
18
|
+
- Create an EndDevice registration.
|
|
19
|
+
- Configure an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power, responseRequired = 03, and replyTo set to the response endpoint on the test utility server.
|
|
20
|
+
action:
|
|
21
|
+
type: discovery
|
|
22
|
+
parameters:
|
|
23
|
+
resources:
|
|
24
|
+
- EndDevice
|
|
25
|
+
- DERControl
|
|
26
|
+
checks:
|
|
27
|
+
- type: end-device
|
|
28
|
+
parameters:
|
|
29
|
+
matches_client: true
|
|
30
|
+
- type: der-control
|
|
31
|
+
parameters:
|
|
32
|
+
minimum_count: 1
|
|
33
|
+
maximum_count: 1
|
|
34
|
+
opModExpLimW: $(setMaxW * 2)
|
|
35
|
+
opModImpLimW: $(setMaxW * 2)
|
|
36
|
+
# replyTo should also be set but this check is implicit in later communications
|
|
37
|
+
event_status: 0 # Scheduled
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
################################## TEST SECTION 1 - Receive, Start, Complete ##################################
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
- id: (1b) DERControl 1 - Received
|
|
44
|
+
client: client
|
|
45
|
+
action:
|
|
46
|
+
type: respond-der-controls # send response status = 1 (received) immediately after it is sent
|
|
47
|
+
|
|
48
|
+
- id: (2) DERControl 1 - Active
|
|
49
|
+
repeat_until_pass: True # The first DER Control can start any time and be of any duration.
|
|
50
|
+
client: client
|
|
51
|
+
action:
|
|
52
|
+
type: refresh-resource
|
|
53
|
+
parameters:
|
|
54
|
+
resource: DERControl
|
|
55
|
+
checks:
|
|
56
|
+
- type: der-control # Check event status has been updated
|
|
57
|
+
parameters:
|
|
58
|
+
minimum_count: 1
|
|
59
|
+
maximum_count: 1
|
|
60
|
+
opModExpLimW: $(setMaxW * 2)
|
|
61
|
+
opModImpLimW: $(setMaxW * 2)
|
|
62
|
+
event_status: 1 # Active
|
|
63
|
+
|
|
64
|
+
- id: (2b) DERControl 1 - Started
|
|
65
|
+
client: client
|
|
66
|
+
action:
|
|
67
|
+
type: respond-der-controls # send response status = 2 (started)
|
|
68
|
+
|
|
69
|
+
- id: (3) DERControl 1 - Completed
|
|
70
|
+
repeat_until_pass: true # Wait until event status has been updated
|
|
71
|
+
client: client
|
|
72
|
+
action:
|
|
73
|
+
type: refresh-resource
|
|
74
|
+
parameters:
|
|
75
|
+
resource: DERControl
|
|
76
|
+
checks:
|
|
77
|
+
- type: der-control # Check event status has been updated
|
|
78
|
+
parameters:
|
|
79
|
+
minimum_count: 1
|
|
80
|
+
maximum_count: 1
|
|
81
|
+
opModExpLimW: $(setMaxW * 2)
|
|
82
|
+
opModImpLimW: $(setMaxW * 2)
|
|
83
|
+
event_status: 2 # Completed
|
|
84
|
+
|
|
85
|
+
- id: (3b) DERControl 1 - Completed
|
|
86
|
+
client: client
|
|
87
|
+
action:
|
|
88
|
+
type: respond-der-controls # send response status = 3 (Completed)
|
|
89
|
+
|
|
90
|
+
- id: WAIT for completed DERControl to be removed from server (20 seconds buffer from completion time)
|
|
91
|
+
client: client
|
|
92
|
+
action:
|
|
93
|
+
type: wait
|
|
94
|
+
parameters:
|
|
95
|
+
duration_seconds: 20
|
|
96
|
+
|
|
97
|
+
- id: CLEAR OUT DERControls
|
|
98
|
+
client: client
|
|
99
|
+
instructions: The server should clear out the completed control ready to begin the next controls.
|
|
100
|
+
action:
|
|
101
|
+
type: discovery
|
|
102
|
+
parameters:
|
|
103
|
+
resources:
|
|
104
|
+
- DERControl
|
|
105
|
+
checks:
|
|
106
|
+
- type: der-control
|
|
107
|
+
parameters:
|
|
108
|
+
maximum_count: 0 # Empty list of controls
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
################################## TEST SECTION 2 - CANCELLATION ##################################
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
- id: (4) DERControl 2
|
|
115
|
+
repeat_until_pass: true
|
|
116
|
+
client: client
|
|
117
|
+
instructions:
|
|
118
|
+
- The utility server is configured with an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power, responseRequired = 03 and replyTo set to the response endpoint on the test utility server, to begin in 5 minutes.
|
|
119
|
+
action:
|
|
120
|
+
type: discovery
|
|
121
|
+
parameters:
|
|
122
|
+
resources:
|
|
123
|
+
- DERControl
|
|
124
|
+
checks:
|
|
125
|
+
- type: der-control
|
|
126
|
+
parameters:
|
|
127
|
+
minimum_count: 1
|
|
128
|
+
maximum_count: 1
|
|
129
|
+
opModExpLimW: $(setMaxW * 2)
|
|
130
|
+
opModImpLimW: $(setMaxW * 2)
|
|
131
|
+
responseRequired: 3
|
|
132
|
+
# replyTo should also be set but this check is implicit in later communications
|
|
133
|
+
event_status: 0 # Scheduled
|
|
134
|
+
# start time should be set to 5 mins, check is implicit in the next step
|
|
135
|
+
|
|
136
|
+
- id: (4b) DERControl 2 - Received
|
|
137
|
+
client: client
|
|
138
|
+
action:
|
|
139
|
+
type: respond-der-controls # send response status = 1 (Received)
|
|
140
|
+
|
|
141
|
+
- id: WAIT for DERControl start time
|
|
142
|
+
client: client
|
|
143
|
+
action:
|
|
144
|
+
type: wait
|
|
145
|
+
parameters:
|
|
146
|
+
duration_seconds: 320 # 5 minutes and 20 second buffer
|
|
147
|
+
|
|
148
|
+
- id: (4c) DERControl 2 - Started
|
|
149
|
+
client: client
|
|
150
|
+
action:
|
|
151
|
+
type: refresh-resource
|
|
152
|
+
parameters:
|
|
153
|
+
resource: DERControl
|
|
154
|
+
checks:
|
|
155
|
+
- type: der-control # Check event status has been updated
|
|
156
|
+
parameters:
|
|
157
|
+
minimum_count: 1
|
|
158
|
+
maximum_count: 1
|
|
159
|
+
opModExpLimW: $(setMaxW * 2)
|
|
160
|
+
opModImpLimW: $(setMaxW * 2)
|
|
161
|
+
event_status: 1 # Active
|
|
162
|
+
|
|
163
|
+
- id: (4d) DERControl 2 - Started
|
|
164
|
+
client: client
|
|
165
|
+
action:
|
|
166
|
+
type: respond-der-controls # send response status = 2 (Started)
|
|
167
|
+
|
|
168
|
+
- id: (5) DERControl 2 - Cancelled.
|
|
169
|
+
repeat_until_pass: true
|
|
170
|
+
client: client
|
|
171
|
+
instructions:
|
|
172
|
+
- The utility server is configured to cancel the active control while it is still active.
|
|
173
|
+
action:
|
|
174
|
+
type: refresh-resource
|
|
175
|
+
parameters:
|
|
176
|
+
resource: DERControl
|
|
177
|
+
checks:
|
|
178
|
+
- type: der-control
|
|
179
|
+
parameters:
|
|
180
|
+
minimum_count: 1
|
|
181
|
+
maximum_count: 1
|
|
182
|
+
opModExpLimW: $(setMaxW * 2)
|
|
183
|
+
opModImpLimW: $(setMaxW * 2)
|
|
184
|
+
responseRequired: 3
|
|
185
|
+
event_status: 2 # Cancelled
|
|
186
|
+
|
|
187
|
+
- id: CHECK pt. 1 - Cancelled DERControl isnt just removed immediately (client has a chance to see cancellation)
|
|
188
|
+
client: client
|
|
189
|
+
action:
|
|
190
|
+
type: wait
|
|
191
|
+
parameters:
|
|
192
|
+
duration_seconds: 10 # little buffer to check behaviour
|
|
193
|
+
|
|
194
|
+
- id: CHECK pt. 2 - Cancelled DERControl isnt just removed immediately (client has a chance to see cancellation)
|
|
195
|
+
client: client
|
|
196
|
+
action:
|
|
197
|
+
type: refresh-resource
|
|
198
|
+
parameters:
|
|
199
|
+
resource: DERControl
|
|
200
|
+
checks:
|
|
201
|
+
- type: der-control # Check DER Control still exists
|
|
202
|
+
parameters:
|
|
203
|
+
minimum_count: 1
|
|
204
|
+
maximum_count: 1
|
|
205
|
+
opModExpLimW: $(setMaxW * 2)
|
|
206
|
+
opModImpLimW: $(setMaxW * 2)
|
|
207
|
+
event_status: 2 # Cancelled
|
|
208
|
+
|
|
209
|
+
- id: (5b) DERControl 2 - Respond to cancelled DERControl
|
|
210
|
+
client: client
|
|
211
|
+
action:
|
|
212
|
+
type: respond-der-controls # Will post control response status = 6 (cancelled).
|
|
213
|
+
|
|
214
|
+
- id: CLEAR OUT DERControls for next section of the test
|
|
215
|
+
repeat_until_pass: true
|
|
216
|
+
client: client
|
|
217
|
+
instructions: The server should clear out the cancelled control ready to begin the next controls (not written but makes next section easier to test).
|
|
218
|
+
action:
|
|
219
|
+
type: discovery
|
|
220
|
+
parameters:
|
|
221
|
+
resources:
|
|
222
|
+
- DERControl
|
|
223
|
+
checks:
|
|
224
|
+
- type: der-control
|
|
225
|
+
parameters:
|
|
226
|
+
maximum_count: 0 # Empty list of controls
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
################################## TEST SECTION 3 - SUPERSEEDED ##################################
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
- id: (6) DERControl 3
|
|
233
|
+
repeat_until_pass: true
|
|
234
|
+
client: client
|
|
235
|
+
instructions:
|
|
236
|
+
- The utility server is configured with an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power, responseRequired = 03 and replyTo set to the response endpoint on the test utility server, to begin in 10 minutes.
|
|
237
|
+
action:
|
|
238
|
+
type: discovery
|
|
239
|
+
parameters:
|
|
240
|
+
resources:
|
|
241
|
+
- DERControl
|
|
242
|
+
checks:
|
|
243
|
+
- type: der-control
|
|
244
|
+
parameters:
|
|
245
|
+
minimum_count: 1
|
|
246
|
+
maximum_count: 1
|
|
247
|
+
opModExpLimW: $(setMaxW * 2)
|
|
248
|
+
opModImpLimW: $(setMaxW * 2)
|
|
249
|
+
responseRequired: 3
|
|
250
|
+
# replyTo should also be set but this check is implicit in later communications
|
|
251
|
+
event_status: 0 # Scheduled
|
|
252
|
+
# start time should be set to 10 mins but we do not check here
|
|
253
|
+
|
|
254
|
+
- id: (6b) Respond to scheduled DERControl 3
|
|
255
|
+
client: client
|
|
256
|
+
action:
|
|
257
|
+
type: respond-der-controls # Respond status = 1 (received).
|
|
258
|
+
|
|
259
|
+
- id: (7) DERControl 3 - Cancel
|
|
260
|
+
repeat_until_pass: true
|
|
261
|
+
client: client
|
|
262
|
+
instructions:
|
|
263
|
+
- The utility server is configured to cancel the scheduled control before it is active.
|
|
264
|
+
action:
|
|
265
|
+
type: refresh-resource
|
|
266
|
+
parameters:
|
|
267
|
+
resource: DERControl
|
|
268
|
+
checks:
|
|
269
|
+
- type: der-control
|
|
270
|
+
parameters:
|
|
271
|
+
minimum_count: 1
|
|
272
|
+
maximum_count: 1
|
|
273
|
+
opModExpLimW: $(setMaxW * 2)
|
|
274
|
+
opModImpLimW: $(setMaxW * 2)
|
|
275
|
+
responseRequired: 3
|
|
276
|
+
event_status: 2 # Cancelled
|
|
277
|
+
|
|
278
|
+
- id: (7b) Respond to cancelled DERControl 3
|
|
279
|
+
client: client
|
|
280
|
+
action:
|
|
281
|
+
type: respond-der-controls # Will post control response status = 6 (cancelled).
|
|
282
|
+
|
|
283
|
+
- id: (8) DERControl 4
|
|
284
|
+
repeat_until_pass: true
|
|
285
|
+
client: client
|
|
286
|
+
instructions:
|
|
287
|
+
- The utility server configures an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power to begin in 10 minutes.
|
|
288
|
+
action:
|
|
289
|
+
type: refresh-resource
|
|
290
|
+
parameters:
|
|
291
|
+
resource: DERControl
|
|
292
|
+
checks:
|
|
293
|
+
- type: der-control
|
|
294
|
+
parameters:
|
|
295
|
+
minimum_count: 1
|
|
296
|
+
maximum_count: 1
|
|
297
|
+
opModExpLimW: $(setMaxW * 2)
|
|
298
|
+
opModImpLimW: $(setMaxW * 2)
|
|
299
|
+
event_status: 0 # Scheduled
|
|
300
|
+
|
|
301
|
+
- id: (8b) Respond to scheduled DERControl 4
|
|
302
|
+
client: client
|
|
303
|
+
action:
|
|
304
|
+
type: respond-der-controls # Will post control response status = 1 (received).
|
|
305
|
+
|
|
306
|
+
- id: (9) DERControl 5
|
|
307
|
+
repeat_until_pass: true
|
|
308
|
+
client: client
|
|
309
|
+
instructions:
|
|
310
|
+
- The utility server configures an active control with the same primacy and an overlapping control window.
|
|
311
|
+
action:
|
|
312
|
+
type: refresh-resource
|
|
313
|
+
parameters:
|
|
314
|
+
resource: DERControl
|
|
315
|
+
checks:
|
|
316
|
+
- type: der-control
|
|
317
|
+
parameters:
|
|
318
|
+
minimum_count: 1 # The control above should now be set to superseeded not scheduled, so still only one expected.
|
|
319
|
+
maximum_count: 1
|
|
320
|
+
opModExpLimW: $(setMaxW * 2)
|
|
321
|
+
opModImpLimW: $(setMaxW * 2)
|
|
322
|
+
event_status: 0 # Scheduled
|
|
323
|
+
|
|
324
|
+
- id: (9b) Respond to scheduled DERControls 4 and 5
|
|
325
|
+
client: client
|
|
326
|
+
action:
|
|
327
|
+
type: respond-der-controls # Send both: control 4 (7 superseeded), and control 5 (1 scheduled).
|
|
328
|
+
|
|
329
|
+
- id: (9c) Check DERControl 4 is superseeded
|
|
330
|
+
repeat_until_pass: true
|
|
331
|
+
client: client
|
|
332
|
+
action:
|
|
333
|
+
type: refresh-resource
|
|
334
|
+
parameters:
|
|
335
|
+
resource: DERControl
|
|
336
|
+
checks:
|
|
337
|
+
- type: der-control
|
|
338
|
+
parameters:
|
|
339
|
+
opModExpLimW: $(setMaxW * 2)
|
|
340
|
+
opModImpLimW: $(setMaxW * 2)
|
|
341
|
+
event_status: 4 # Superseeded
|
|
342
|
+
minimum_count: 1
|
|
343
|
+
maximum_count: 1
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
Description: Delayed Response to Cancelled Export Control
|
|
2
|
+
Category: Control
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: (A) PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
client: client
|
|
17
|
+
instructions:
|
|
18
|
+
- The client has a DER that is exporting at the connection point at least 50% of its rated active power.
|
|
19
|
+
- The utility server has a current active control in operation with opModExpLimW set to 200% of the DER's rated active power, and a default DER control in-place with opModExpLimW set to 30% of the DER's rated active power.
|
|
20
|
+
action:
|
|
21
|
+
type: discovery
|
|
22
|
+
parameters:
|
|
23
|
+
resources:
|
|
24
|
+
- EndDevice
|
|
25
|
+
- DERControl
|
|
26
|
+
- DefaultDERControl
|
|
27
|
+
checks:
|
|
28
|
+
- type: end-device
|
|
29
|
+
parameters:
|
|
30
|
+
matches_client: true
|
|
31
|
+
- type: der-control
|
|
32
|
+
parameters:
|
|
33
|
+
minimum_count: 1
|
|
34
|
+
maximum_count: 1
|
|
35
|
+
opModExpLimW: $(setMaxW * 2)
|
|
36
|
+
event_status: 1 # Active
|
|
37
|
+
- type: default-der-control
|
|
38
|
+
parameters:
|
|
39
|
+
opModExpLimW: $(setMaxW * 0.3)
|
|
40
|
+
|
|
41
|
+
- id: (1) Cancel active controls
|
|
42
|
+
repeat_until_pass: True
|
|
43
|
+
instructions: The server should set all active controls to cancelled.
|
|
44
|
+
client: client
|
|
45
|
+
action:
|
|
46
|
+
type: refresh-resource
|
|
47
|
+
parameters:
|
|
48
|
+
resource: DERControl
|
|
49
|
+
checks:
|
|
50
|
+
- type: der-control # Check event status has been updated
|
|
51
|
+
parameters:
|
|
52
|
+
minimum_count: 1
|
|
53
|
+
maximum_count: 1
|
|
54
|
+
opModExpLimW: $(setMaxW * 2)
|
|
55
|
+
event_status: 2 # Cancelled
|
|
56
|
+
|
|
57
|
+
- id: WAIT to see that cancelled responses are not immediately removed
|
|
58
|
+
client: client
|
|
59
|
+
action:
|
|
60
|
+
type: wait
|
|
61
|
+
parameters:
|
|
62
|
+
duration_seconds: 60
|
|
63
|
+
|
|
64
|
+
- id: (2) CHECK to see that cancelled responses are not immediately removed
|
|
65
|
+
client: client
|
|
66
|
+
action:
|
|
67
|
+
type: refresh-resource
|
|
68
|
+
parameters:
|
|
69
|
+
resource: DERControl
|
|
70
|
+
checks:
|
|
71
|
+
- type: der-control
|
|
72
|
+
parameters:
|
|
73
|
+
minimum_count: 1
|
|
74
|
+
maximum_count: 1
|
|
75
|
+
opModExpLimW: $(setMaxW * 2)
|
|
76
|
+
event_status: 2 # Cancelled
|
|
77
|
+
|
|
78
|
+
- id: (3) Response
|
|
79
|
+
client: client
|
|
80
|
+
action:
|
|
81
|
+
type: respond-der-controls # send response status = 6 (Cancelled)
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Description: Update Poll Rates
|
|
2
|
+
Category: Control
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: (A) PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
client: client
|
|
17
|
+
instructions:
|
|
18
|
+
- The client has a device with DeviceCapability, EndDeviceList and FunctionSetAssignmentsList poll-rate set to 300s, DERProgramList, DERList and MirrorUsagePoint to 60s.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DeviceCapability
|
|
25
|
+
- EndDeviceList
|
|
26
|
+
- FunctionSetAssignmentsList
|
|
27
|
+
- DERProgramList
|
|
28
|
+
- DERList
|
|
29
|
+
- MirrorUsagePoint
|
|
30
|
+
checks:
|
|
31
|
+
- type: poll-rate
|
|
32
|
+
parameters:
|
|
33
|
+
resource: DeviceCapability
|
|
34
|
+
poll_rate_seconds: 300
|
|
35
|
+
- type: poll-rate
|
|
36
|
+
parameters:
|
|
37
|
+
resource: EndDeviceList
|
|
38
|
+
poll_rate_seconds: 300
|
|
39
|
+
- type: poll-rate
|
|
40
|
+
parameters:
|
|
41
|
+
resource: FunctionSetAssignmentsList
|
|
42
|
+
poll_rate_seconds: 300
|
|
43
|
+
- type: poll-rate
|
|
44
|
+
parameters:
|
|
45
|
+
resource: DERProgramList
|
|
46
|
+
poll_rate_seconds: 60
|
|
47
|
+
- type: poll-rate
|
|
48
|
+
parameters:
|
|
49
|
+
resource: DERList
|
|
50
|
+
poll_rate_seconds: 60
|
|
51
|
+
- type: poll-rate
|
|
52
|
+
parameters:
|
|
53
|
+
resource: MirrorUsagePoint
|
|
54
|
+
poll_rate_seconds: 60
|
|
55
|
+
|
|
56
|
+
- id: (1) UPDATE DeviceCapability poll-rate
|
|
57
|
+
repeat_until_pass: true
|
|
58
|
+
client: client
|
|
59
|
+
instructions:
|
|
60
|
+
- Set DeviceCapabilitypoll poll rate to 60s.
|
|
61
|
+
action:
|
|
62
|
+
type: refresh-resource
|
|
63
|
+
parameters:
|
|
64
|
+
resource: DeviceCapability
|
|
65
|
+
checks:
|
|
66
|
+
- type: poll-rate
|
|
67
|
+
parameters:
|
|
68
|
+
resource: DeviceCapability
|
|
69
|
+
poll_rate_seconds: 60
|
|
70
|
+
|
|
71
|
+
- id: (2) UPDATE EndDeviceList poll-rate
|
|
72
|
+
repeat_until_pass: true
|
|
73
|
+
client: client
|
|
74
|
+
instructions:
|
|
75
|
+
- Set EndDeviceList poll rate to 60s.
|
|
76
|
+
action:
|
|
77
|
+
type: refresh-resource
|
|
78
|
+
parameters:
|
|
79
|
+
resource: EndDeviceList
|
|
80
|
+
checks:
|
|
81
|
+
- type: poll-rate
|
|
82
|
+
parameters:
|
|
83
|
+
resource: EndDeviceList
|
|
84
|
+
poll_rate_seconds: 60
|
|
85
|
+
|
|
86
|
+
- id: (3) UPDATE FunctionSetAssignments poll-rate
|
|
87
|
+
repeat_until_pass: true
|
|
88
|
+
client: client
|
|
89
|
+
instructions:
|
|
90
|
+
- Set FunctionSetAssignments poll rate to 60s.
|
|
91
|
+
action:
|
|
92
|
+
type: refresh-resource
|
|
93
|
+
parameters:
|
|
94
|
+
resource: FunctionSetAssignments
|
|
95
|
+
checks:
|
|
96
|
+
- type: poll-rate
|
|
97
|
+
parameters:
|
|
98
|
+
resource: FunctionSetAssignments
|
|
99
|
+
poll_rate_seconds: 60
|
|
100
|
+
|
|
101
|
+
- id: (4) UPDATE DERProgramList poll-rate
|
|
102
|
+
repeat_until_pass: true
|
|
103
|
+
client: client
|
|
104
|
+
instructions:
|
|
105
|
+
- Set DERProgramList poll rate to 120s.
|
|
106
|
+
action:
|
|
107
|
+
type: refresh-resource
|
|
108
|
+
parameters:
|
|
109
|
+
resource: DERProgramList
|
|
110
|
+
checks:
|
|
111
|
+
- type: poll-rate
|
|
112
|
+
parameters:
|
|
113
|
+
resource: DERProgramList
|
|
114
|
+
poll_rate_seconds: 120
|
|
115
|
+
|
|
116
|
+
- id: (5) UPDATE DERList poll-rate
|
|
117
|
+
repeat_until_pass: true
|
|
118
|
+
client: client
|
|
119
|
+
instructions:
|
|
120
|
+
- Set DERList poll rate to 120s.
|
|
121
|
+
action:
|
|
122
|
+
type: refresh-resource
|
|
123
|
+
parameters:
|
|
124
|
+
resource: DERList
|
|
125
|
+
checks:
|
|
126
|
+
- type: poll-rate
|
|
127
|
+
parameters:
|
|
128
|
+
resource: DERList
|
|
129
|
+
poll_rate_seconds: 120
|
|
130
|
+
|
|
131
|
+
- id: (6) UPDATE MirrorUsagePoint poll-rate
|
|
132
|
+
repeat_until_pass: true
|
|
133
|
+
client: client
|
|
134
|
+
instructions:
|
|
135
|
+
- Set MirrorUsagePoint poll rate to 120s.
|
|
136
|
+
action:
|
|
137
|
+
type: refresh-resource
|
|
138
|
+
parameters:
|
|
139
|
+
resource: MirrorUsagePoint
|
|
140
|
+
checks:
|
|
141
|
+
- type: poll-rate
|
|
142
|
+
parameters:
|
|
143
|
+
resource: MirrorUsagePoint
|
|
144
|
+
poll_rate_seconds: 120
|
|
145
|
+
|
|
146
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Description: Scheduling
|
|
2
|
+
Category: Control
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: (A) PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
client: client
|
|
17
|
+
instructions:
|
|
18
|
+
- The utility server is configured to generate a schedule of 24 sequential, non-overlapping controls with a range of export and/or import limits, each with 1min duration.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DERControl
|
|
25
|
+
checks:
|
|
26
|
+
- type: der-control
|
|
27
|
+
parameters:
|
|
28
|
+
minimum_count: 24
|
|
29
|
+
opModExpLimW: $(setMaxW * 2)
|
|
30
|
+
opModImpLimW: $(setMaxW)
|
|
31
|
+
event_status: 0 # Scheduled (will ensure non overlapping , superseeded)
|
|
32
|
+
duration: 60
|
|
33
|
+
|
|
34
|
+
- id: (1) DERControlQuery
|
|
35
|
+
client: client
|
|
36
|
+
action:
|
|
37
|
+
type: discovery
|
|
38
|
+
parameters:
|
|
39
|
+
list_limit: 10 # sets s=0, l=10 for paging
|
|
40
|
+
resources:
|
|
41
|
+
- DERControl
|
|
42
|
+
checks:
|
|
43
|
+
- type: der-control
|
|
44
|
+
parameters:
|
|
45
|
+
minimum_count: 10
|
|
46
|
+
maximum_count: 10
|
|
47
|
+
opModExpLimW: $(setMaxW * 2)
|
|
48
|
+
opModImpLimW: $(setMaxW)
|
|
49
|
+
event_status: 0
|
|
50
|
+
duration: 60
|
|
51
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Description: Randomisation
|
|
2
|
+
Category: Control
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: (A) PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
client: client
|
|
17
|
+
instructions:
|
|
18
|
+
- The utility server is configured with five sequential, non-overlapping active controls, each with - Duration = 120s, randomizeStart = 60s, opModExpLimW = 200% of the DER's rated active power.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DERControl
|
|
25
|
+
checks:
|
|
26
|
+
- type: der-control
|
|
27
|
+
parameters:
|
|
28
|
+
minimum_count: 5
|
|
29
|
+
maximum_count: 5
|
|
30
|
+
opModExpLimW: $(setMaxW * 2)
|
|
31
|
+
randomizeStart: 60
|
|
32
|
+
event_status: 0 # Scheduled (non-overlapping)
|
|
33
|
+
duration: 120
|
|
34
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Description: Changing Ramp-Rates
|
|
2
|
+
Category: Control
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: (A) PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
client: client
|
|
17
|
+
instructions:
|
|
18
|
+
- The utility server is configured with a DefaultDERControl with setGradW = 1% per second.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DefaultDERControl
|
|
25
|
+
checks:
|
|
26
|
+
- type: default-der-control
|
|
27
|
+
parameters:
|
|
28
|
+
minimum_count: 1
|
|
29
|
+
setGradW: 1
|