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
|
@@ -93,8 +93,8 @@ action:
|
|
|
93
93
|
|
|
94
94
|
| **name** | **params** | **description** |
|
|
95
95
|
| -------- | ---------- | --------------- |
|
|
96
|
-
| `discovery` | `resources: list[CSIPAusResource]` `next_polling_window: bool/None` | Performs a full discovery / refresh of the client's context from DeviceCapability downwards, looking to discover the specific resources. Can be delayed until the next polling window. |
|
|
97
|
-
| `notifications` | `collect: bool` `disable: bool` | If `collect`, consumes subscription notifications and inserts them into the current context, if `disable` causes the subscription notification webhook to simulate an outage (return HTTP 5XX) |
|
|
96
|
+
| `discovery` | `resources: list[CSIPAusResource]` `next_polling_window: bool/None` `list_limit: int/None` | Performs a full discovery / refresh of the client's context from DeviceCapability downwards, looking to discover the specific resources. Can be delayed until the next polling window and/or fixed to ONLY fetch a maximum number of entities. |
|
|
97
|
+
| `notifications` | `sub_id: str` `collect: bool/None` `disable: bool/None` | `sub_id` must match a previously created subscription. If `collect`, consumes subscription notifications and inserts them into the current context, if `disable` causes the subscription notification webhook to simulate an outage (return HTTP 5XX) |
|
|
98
98
|
| `wait` | `duration_seconds: int` | Performs no action for the nominated period of time |
|
|
99
99
|
| `refresh-resource` | `resource: CSIPAusResource` `expect_rejection: bool/None` `expect_rejection_or_empty: bool/None` | Forces a particular resource to be refreshed (using existing hrefs in context). Can be set to expect a HTTP 4XX ErrorResponse and/or an empty list resource (if appropriate). |
|
|
100
100
|
| `insert-end-device` | `force_lfdi: str/None` `expect_rejection: bool/None` | Causes the client to submit a new EndDevice registration and resolves the returned Location header |
|
|
@@ -104,7 +104,7 @@ action:
|
|
|
104
104
|
| `upsert-der-status` | `genConnectStatus: int/None` `operationalModeStatus: int/None` `alarmStatus: int/None` `expect_rejection: bool/None` | Sends DERStatus - validates that the server persisted the values correctly |
|
|
105
105
|
| `upsert-der-capability` | `type: int` `rtgMaxW: int` `modesSupported: int` `doeModesSupported: int` | Sends DERCapability - validates that the server persisted the values correctly |
|
|
106
106
|
| `upsert-der-settings` | `setMaxW: int` `setGradW: int` `modesEnabled: int` `doeModesEnabled: int` | Sends DERSettings - validates that the server persisted the values correctly |
|
|
107
|
-
| `send-malformed-der-settings` | `updatedTime_missing: bool`
|
|
107
|
+
| `send-malformed-der-settings` | `updatedTime_missing: bool` | Sends a malformed DERSettings - expects a failure and that the server will NOT change anything |
|
|
108
108
|
| `send-malformed-response` | `mrid_unknown: bool` `endDeviceLFDI_unknown: bool` `response_invalid: bool` | Sends a malformed Response (using the most recent DERControl replyTo) - expects a failure response |
|
|
109
109
|
| `create-subscription` | `sub_id: str` `resource: CSIPAusResource` | Sends a new Subscription - validates that the server persisted the values correctly via Location. `sub_id` will alias this subscription for future action calls. |
|
|
110
110
|
| `delete-subscription` | `sub_id: str` | Sends a deletion for a previously created Subscription. |
|
|
@@ -119,10 +119,12 @@ A `Check` is a boolean test of what the client has in its current context. They
|
|
|
119
119
|
| -------- | ---------- | --------------- |
|
|
120
120
|
| `discovered` | `resources: list[CSIPAusResource]` `links: list[CSIPAusResource]` | Does the client's context have the nominated resources (or the parent resource with an appropriate link). |
|
|
121
121
|
| `time-sync` | None | Does the client have a TimeResponse and does it closely map to the client's local time. |
|
|
122
|
+
| `function-set-assignment` | `minimum_count: int/None` `maximum_count: int/None` `matches_client_edev: bool/None` | Are there the correct number of FunctionSetAssignments that may or may not belong solely under the client's EndDevice (or any accessible EndDevice) |
|
|
123
|
+
| `end-device-list` | `minimum_count: int/None` `maximum_count: int/None` `poll_rate: int/None` `sub_id: str/None` | Are there a correct number of EndDeviceList that match the filter criteria |
|
|
122
124
|
| `end-device` | `matches_client: bool` `matches_pin` | Is there an EndDevice that matches the client's LFDI (can be negatively asserted) and does it have a specific Registration PIN |
|
|
123
|
-
| `der-program` | `minimum_count: int/None` `maximum_count: int/None` `primacy: int/None` `fsa_index: int/None` | Are there enough DERProgram(s) that satisfy the filter criteria? `fsa_index` matches DERPrograms that belong to the nth (0 based) FunctionSetAssignment |
|
|
124
|
-
| `der-control` | `minimum_count: int/None` `maximum_count: int/None` `latest: bool/None` `opModImpLimW: float/None` `opModExpLimW: float/None` `opModLoadLimW: float/None` `opModGenLimW: float/None` `opModEnergize: bool/None` `opModConnect: bool/None` `opModFixedW: float/None` `rampTms: int/None` `randomizeStart: int/None` `event_status: int/None` `responseRequired: int/None` `derp_primacy: int/None` | Are there enough DERProgram(s) that satisfy the filter criteria? `latest` will ONLY match the most recent DERControl. |
|
|
125
|
-
| `default-der-control` | `opModExpLimW: float/None` `opModLoadLimW: float/None` `opModGenLimW: float/None` `setGradW: int/None` |
|
|
125
|
+
| `der-program` | `minimum_count: int/None` `maximum_count: int/None` `primacy: int/None` `fsa_index: int/None` `sub_id: str/None` | Are there enough DERProgram(s) that satisfy the filter criteria? `fsa_index` matches DERPrograms that belong to the nth (0 based) FunctionSetAssignment (negative values count from end of list - eg -1 would match the last FSA) |
|
|
126
|
+
| `der-control` | `minimum_count: int/None` `maximum_count: int/None` `latest: bool/None` `opModImpLimW: float/None` `opModExpLimW: float/None` `opModLoadLimW: float/None` `opModGenLimW: float/None` `opModEnergize: bool/None` `opModConnect: bool/None` `opModFixedW: float/None` `rampTms: int/None` `randomizeStart: int/None` `event_status: int/None` `responseRequired: int/None` `derp_primacy: int/None` `sub_id: str/None` | Are there enough DERProgram(s) that satisfy the filter criteria? `latest` will ONLY match the most recent DERControl. |
|
|
127
|
+
| `default-der-control` | `minimum_count: int/None` `maximum_count: int/None` `opModExpLimW: float/None` `opModLoadLimW: float/None` `opModGenLimW: float/None` `setGradW: int/None` `sub_id: str/None` | Are there the correct number of DefaultDERControl instances with the specified values |
|
|
126
128
|
| `mirror-usage-point` | `matches: bool` `location: CSIPAusReadingLocation/None` `reading_types: list[CSIPAusReadingType]/None` `mmr_mrids: list[str]/None` `post_rate_seconds: int/None` | Does a MirrorUsagePoint exist with the specified values (or not exist if `matches` is false). Only asserts specified values. |
|
|
127
129
|
| `subscription` | `matches: bool` `resource: CSIPAusResource`| Does a Subscription exist for the specified resource (or not exist if `matches` is false). |
|
|
128
130
|
| `poll-rate` | `resource: CSIPAusResource` `poll_rate_seconds: int` | Does the nominated resource have the specified poll rate. |
|
|
@@ -7,6 +7,8 @@ from cactus_test_definitions.server.test_procedures import (
|
|
|
7
7
|
TestProcedureId,
|
|
8
8
|
get_all_test_procedures,
|
|
9
9
|
get_test_procedure,
|
|
10
|
+
get_yaml_contents,
|
|
11
|
+
parse_test_procedure,
|
|
10
12
|
)
|
|
11
13
|
|
|
12
14
|
__all__ = [
|
|
@@ -20,4 +22,6 @@ __all__ = [
|
|
|
20
22
|
"TestProcedure",
|
|
21
23
|
"get_all_test_procedures",
|
|
22
24
|
"get_test_procedure",
|
|
25
|
+
"get_yaml_contents",
|
|
26
|
+
"parse_test_procedure",
|
|
23
27
|
]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -38,8 +38,10 @@ ACTION_PARAMETER_SCHEMA: dict[str, dict[str, ParameterSchema]] = {
|
|
|
38
38
|
"next_polling_window": ParameterSchema(
|
|
39
39
|
False, ParameterType.Boolean
|
|
40
40
|
), # If set - delay this until the upcoming polling window (eg- wait for the next whole minute)
|
|
41
|
+
"list_limit": ParameterSchema(False, ParameterType.Integer),
|
|
41
42
|
}, # Performs a full discovery / refresh of the client's context from DeviceCapability downwards
|
|
42
43
|
"notifications": {
|
|
44
|
+
"sub_id": ParameterSchema(True, ParameterType.String), # Must match a previously created subscription
|
|
43
45
|
"collect": ParameterSchema(
|
|
44
46
|
False, ParameterType.Boolean
|
|
45
47
|
), # Collects latest subscription notifications into context
|
|
@@ -105,7 +107,6 @@ ACTION_PARAMETER_SCHEMA: dict[str, dict[str, ParameterSchema]] = {
|
|
|
105
107
|
}, # Sends DERSettings - validates that the server persisted the values correctly
|
|
106
108
|
"send-malformed-der-settings": {
|
|
107
109
|
"updatedTime_missing": ParameterSchema(True, ParameterType.Boolean), # If true - updatedTime will be stripped
|
|
108
|
-
"modesEnabled_int": ParameterSchema(True, ParameterType.Boolean), # If true - modesEnabled will send an int
|
|
109
110
|
}, # Sends a malformed DERSettings - expects a failure and that the server will NOT change anything
|
|
110
111
|
"send-malformed-response": {
|
|
111
112
|
"mrid_unknown": ParameterSchema(True, ParameterType.Boolean), # If true - mrid will be random
|
|
@@ -41,6 +41,26 @@ CHECK_PARAMETER_SCHEMA: dict[str, dict[str, ParameterSchema]] = {
|
|
|
41
41
|
"links": ParameterSchema(False, ParameterType.ListCSIPAusResource),
|
|
42
42
|
},
|
|
43
43
|
"time-synced": {}, # Passes if the current Time resource is synced with this client's date/time
|
|
44
|
+
"function-set-assignment": {
|
|
45
|
+
"minimum_count": ParameterSchema(False, ParameterType.Integer), # Needs at least this many FSAs to pass
|
|
46
|
+
"maximum_count": ParameterSchema(False, ParameterType.Integer), # Needs at most this many FSAs to pass
|
|
47
|
+
"matches_client_edev": ParameterSchema(
|
|
48
|
+
False, ParameterType.Boolean
|
|
49
|
+
), # If True - only FSAs assigned to the client's EndDevice will be counted
|
|
50
|
+
"sub_id": ParameterSchema(
|
|
51
|
+
False, ParameterType.String
|
|
52
|
+
), # If set - only FSAs received via this subscription will be counted
|
|
53
|
+
},
|
|
54
|
+
"end-device-list": {
|
|
55
|
+
"minimum_count": ParameterSchema(False, ParameterType.Integer), # Needs at least this many edev lists to pass
|
|
56
|
+
"maximum_count": ParameterSchema(False, ParameterType.Integer), # Needs at most this many edev lists to pass
|
|
57
|
+
"poll_rate": ParameterSchema(
|
|
58
|
+
False, ParameterType.Integer
|
|
59
|
+
), # If set - will only count an EndDeviceList with this exact pollRate
|
|
60
|
+
"sub_id": ParameterSchema(
|
|
61
|
+
False, ParameterType.String
|
|
62
|
+
), # If set - only EndDeviceLists received via this subscription will be counted
|
|
63
|
+
},
|
|
44
64
|
"end-device": {
|
|
45
65
|
"matches_client": ParameterSchema(
|
|
46
66
|
True, ParameterType.Boolean
|
|
@@ -56,6 +76,9 @@ CHECK_PARAMETER_SCHEMA: dict[str, dict[str, ParameterSchema]] = {
|
|
|
56
76
|
"fsa_index": ParameterSchema(
|
|
57
77
|
False, ParameterType.Integer
|
|
58
78
|
), # Filters derps that belong to the nth (0 based) FunctionSetAssignment index
|
|
79
|
+
"sub_id": ParameterSchema(
|
|
80
|
+
False, ParameterType.String
|
|
81
|
+
), # Filters derps to only those received via this named subscription
|
|
59
82
|
},
|
|
60
83
|
"der-control": {
|
|
61
84
|
"minimum_count": ParameterSchema(False, ParameterType.Integer), # Needs at least this many controls to pass
|
|
@@ -75,13 +98,25 @@ CHECK_PARAMETER_SCHEMA: dict[str, dict[str, ParameterSchema]] = {
|
|
|
75
98
|
"derp_primacy": ParameterSchema(
|
|
76
99
|
False, ParameterType.Integer
|
|
77
100
|
), # Filter to control's belonging to a DERProgram with this primacy value
|
|
101
|
+
"sub_id": ParameterSchema(
|
|
102
|
+
False, ParameterType.String
|
|
103
|
+
), # Filters control to only those received via this named subscription
|
|
104
|
+
"duration": ParameterSchema(False, ParameterType.Integer), # Filter on duration value
|
|
78
105
|
}, # Matches many DERControls (specified by minimum_count) against additional other filter criteria
|
|
79
106
|
"default-der-control": {
|
|
107
|
+
"minimum_count": ParameterSchema(False, ParameterType.Integer), # Needs at least this many default der controls
|
|
108
|
+
"maximum_count": ParameterSchema(False, ParameterType.Integer), # Needs at most this many default der controls
|
|
80
109
|
"opModImpLimW": ParameterSchema(False, ParameterType.Float),
|
|
81
110
|
"opModExpLimW": ParameterSchema(False, ParameterType.Float),
|
|
82
111
|
"opModGenLimW": ParameterSchema(False, ParameterType.Float),
|
|
83
112
|
"opModLoadLimW": ParameterSchema(False, ParameterType.Float),
|
|
84
113
|
"setGradW": ParameterSchema(False, ParameterType.Integer), # Hundredths of a percent / second
|
|
114
|
+
"sub_id": ParameterSchema(
|
|
115
|
+
False, ParameterType.String
|
|
116
|
+
), # Filters default control to only those received via this named subscription
|
|
117
|
+
"derp_primacy": ParameterSchema(
|
|
118
|
+
False, ParameterType.Integer
|
|
119
|
+
), # Filter to control's belonging to a DERProgram with this primacy value
|
|
85
120
|
}, # matches any DefaultDERControl with the specified values
|
|
86
121
|
"mirror-usage-point": {
|
|
87
122
|
"matches": ParameterSchema(True, ParameterType.Boolean), # True for positive assert, False for negative assert
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
Description: Mirror Usage Point Creation and Individual Readings
|
|
2
|
+
Category: Monitoring
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- Create an EndDevice registration for client.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DeviceCapability
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- DER
|
|
26
|
+
checks:
|
|
27
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
28
|
+
parameters:
|
|
29
|
+
matches_client: true
|
|
30
|
+
|
|
31
|
+
- id: 1 - DISCOVER INITIAL MUPS
|
|
32
|
+
repeat_until_pass: true
|
|
33
|
+
action:
|
|
34
|
+
type: discovery
|
|
35
|
+
parameters:
|
|
36
|
+
resources:
|
|
37
|
+
- MirrorUsagePoint
|
|
38
|
+
checks:
|
|
39
|
+
- type: mirror-usage-point
|
|
40
|
+
parameters:
|
|
41
|
+
matches: false # MirrorUsagePoints must be initially empty for client.
|
|
42
|
+
|
|
43
|
+
- id: 2,3A - CREATE MUP FOR SITE
|
|
44
|
+
action:
|
|
45
|
+
type: upsert-mup
|
|
46
|
+
parameters:
|
|
47
|
+
mup_id: mup_site
|
|
48
|
+
location: Site
|
|
49
|
+
reading_types:
|
|
50
|
+
- ActivePowerAverage
|
|
51
|
+
- ReactivePowerAverage
|
|
52
|
+
- FrequencyAverage
|
|
53
|
+
- VoltageSinglePhaseAverage
|
|
54
|
+
checks:
|
|
55
|
+
- type: mirror-usage-point
|
|
56
|
+
parameters:
|
|
57
|
+
location: Site
|
|
58
|
+
matches: true
|
|
59
|
+
reading_types:
|
|
60
|
+
- ActivePowerAverage
|
|
61
|
+
- ReactivePowerAverage
|
|
62
|
+
- FrequencyAverage
|
|
63
|
+
- VoltageSinglePhaseAverage
|
|
64
|
+
|
|
65
|
+
- id: 2,3B - CREATE MUP FOR DEVICE
|
|
66
|
+
action:
|
|
67
|
+
type: upsert-mup
|
|
68
|
+
parameters:
|
|
69
|
+
mup_id: mup_device
|
|
70
|
+
location: Device
|
|
71
|
+
reading_types:
|
|
72
|
+
- ActivePowerAverage
|
|
73
|
+
- ReactivePowerAverage
|
|
74
|
+
- FrequencyAverage
|
|
75
|
+
- VoltageSinglePhaseAverage
|
|
76
|
+
checks:
|
|
77
|
+
- type: mirror-usage-point
|
|
78
|
+
parameters:
|
|
79
|
+
location: Device
|
|
80
|
+
matches: true
|
|
81
|
+
reading_types:
|
|
82
|
+
- ActivePowerAverage
|
|
83
|
+
- ReactivePowerAverage
|
|
84
|
+
- FrequencyAverage
|
|
85
|
+
- VoltageSinglePhaseAverage
|
|
86
|
+
|
|
87
|
+
- id: 4A - POST READINGS TO SITE
|
|
88
|
+
action:
|
|
89
|
+
type: insert-readings
|
|
90
|
+
parameters:
|
|
91
|
+
mup_id: mup_site
|
|
92
|
+
values:
|
|
93
|
+
ActivePowerAverage: [5000, 5100, 5200, 5300]
|
|
94
|
+
ReactivePowerAverage: [1000, 1100, 1200, 1300]
|
|
95
|
+
FrequencyAverage: [50.0, 50.1, 49.9, 50.0]
|
|
96
|
+
VoltageSinglePhaseAverage: [230.0, 231.0, 229.0, 230.5]
|
|
97
|
+
|
|
98
|
+
- id: 4B - POST READINGS TO DEVICE
|
|
99
|
+
action:
|
|
100
|
+
type: insert-readings
|
|
101
|
+
parameters:
|
|
102
|
+
mup_id: mup_device
|
|
103
|
+
values:
|
|
104
|
+
ActivePowerAverage: [5000, 5100, 5200, 5300]
|
|
105
|
+
ReactivePowerAverage: [1000, 1100, 1200, 1300]
|
|
106
|
+
FrequencyAverage: [50.0, 50.1, 49.9, 50.0]
|
|
107
|
+
VoltageSinglePhaseAverage: [230.0, 231.0, 229.0, 230.5]
|
|
108
|
+
|
|
109
|
+
# NOTE: The final step of this test (5) is to verify that readings are retained correctly by the server.
|
|
110
|
+
# As href is optional, it is assumed many servers will not currently support this.
|
|
111
|
+
# While waiting for a discussion by the CIRG it has been decided to omit this step of testing for now.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
Description: S-ALL-07 Select Edge Cases for Telemetry Reporting
|
|
2
|
+
Category: Monitoring
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- Create an EndDevice registration for client.
|
|
18
|
+
- Configure utility server with client's Private Enterprise Number (PEN).
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DER
|
|
25
|
+
- MirrorUsagePoint
|
|
26
|
+
checks:
|
|
27
|
+
- type: end-device
|
|
28
|
+
parameters:
|
|
29
|
+
matches_client: true
|
|
30
|
+
|
|
31
|
+
- id: Create MUP # Post an initial MirrorUsagePoint to be overwritten later.
|
|
32
|
+
action:
|
|
33
|
+
type: upsert-mup
|
|
34
|
+
parameters:
|
|
35
|
+
mup_id: mup_mrid_1
|
|
36
|
+
reading_types:
|
|
37
|
+
- ActivePowerAverage
|
|
38
|
+
- VoltageSinglePhaseAverage
|
|
39
|
+
location: Site # Set the roleflage
|
|
40
|
+
checks:
|
|
41
|
+
- type: mirror-usage-point
|
|
42
|
+
parameters:
|
|
43
|
+
matches: true
|
|
44
|
+
reading_types:
|
|
45
|
+
- ActivePowerAverage
|
|
46
|
+
- VoltageSinglePhaseAverage
|
|
47
|
+
location: Site
|
|
48
|
+
|
|
49
|
+
- id: STEP 1 - UPDATE MUP ROLEFLAGS # Post same MirrorUsagePoint mRID with different roleFlags
|
|
50
|
+
action:
|
|
51
|
+
type: upsert-mup
|
|
52
|
+
parameters:
|
|
53
|
+
mup_id: mup_mrid_1
|
|
54
|
+
reading_types:
|
|
55
|
+
- ActivePowerAverage
|
|
56
|
+
- VoltageSinglePhaseAverage
|
|
57
|
+
location: Device # Update the roleflage
|
|
58
|
+
checks:
|
|
59
|
+
- type: mirror-usage-point
|
|
60
|
+
parameters:
|
|
61
|
+
matches: true
|
|
62
|
+
reading_types:
|
|
63
|
+
- ActivePowerAverage
|
|
64
|
+
- VoltageSinglePhaseAverage
|
|
65
|
+
location: Device
|
|
66
|
+
|
|
67
|
+
- id: POST INITIAL READING
|
|
68
|
+
action:
|
|
69
|
+
type: insert-readings
|
|
70
|
+
parameters:
|
|
71
|
+
mup_id: mup_mrid_1
|
|
72
|
+
values:
|
|
73
|
+
ActivePowerAverage: [5000]
|
|
74
|
+
VoltageSinglePhaseAverage: [240.0]
|
|
75
|
+
|
|
76
|
+
- id: STEP 2 - UPDATE READING # Post MirrorMeterReading with same mmr mRID but different value
|
|
77
|
+
action:
|
|
78
|
+
type: insert-readings
|
|
79
|
+
parameters:
|
|
80
|
+
mup_id: mup_mrid_1
|
|
81
|
+
values:
|
|
82
|
+
ActivePowerAverage: [6000] # The mmr mrid will automatically be the same as the initial reading
|
|
83
|
+
# NOTE: We do not have the option to request readings, so cannot verify the result of this upsert
|
|
84
|
+
|
|
85
|
+
- id: STEP 3 - Update MUP type # Post MirrorMeterReading with same mRID and no value (change the reading type)
|
|
86
|
+
action:
|
|
87
|
+
type: upsert-mup
|
|
88
|
+
parameters:
|
|
89
|
+
mup_id: mup_mrid_1
|
|
90
|
+
reading_types:
|
|
91
|
+
- ReactivePowerAverage
|
|
92
|
+
location: Device
|
|
93
|
+
checks:
|
|
94
|
+
- type: mirror-usage-point
|
|
95
|
+
parameters:
|
|
96
|
+
matches: true
|
|
97
|
+
reading_types:
|
|
98
|
+
- ReactivePowerAverage
|
|
99
|
+
- VoltageSinglePhaseAverage
|
|
100
|
+
location: Device
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Description: S-ALL-08 Connection Status
|
|
2
|
+
Category: Monitoring
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- Create an EndDevice registration for client.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DER
|
|
24
|
+
checks:
|
|
25
|
+
- type: end-device
|
|
26
|
+
parameters:
|
|
27
|
+
matches_client: true
|
|
28
|
+
- type: discovered
|
|
29
|
+
parameters:
|
|
30
|
+
links:
|
|
31
|
+
- DERStatus
|
|
32
|
+
|
|
33
|
+
- id: INITIALISE DER STATUS
|
|
34
|
+
action:
|
|
35
|
+
type: upsert-der-status
|
|
36
|
+
parameters:
|
|
37
|
+
genConnectStatus: 7 # 0111 - connected
|
|
38
|
+
|
|
39
|
+
- id: STEP 1 - DISCONNECT # bit 0 = 0
|
|
40
|
+
action:
|
|
41
|
+
type: upsert-der-status
|
|
42
|
+
parameters:
|
|
43
|
+
genConnectStatus: 6 # 0110
|
|
44
|
+
|
|
45
|
+
- id: STEP 2 - RECONNECT
|
|
46
|
+
action:
|
|
47
|
+
type: upsert-der-status
|
|
48
|
+
parameters:
|
|
49
|
+
genConnectStatus: 7
|
|
50
|
+
|
|
51
|
+
- id: STEP 3 - UNAVAILABLE # bit 1 = 0
|
|
52
|
+
action:
|
|
53
|
+
type: upsert-der-status
|
|
54
|
+
parameters:
|
|
55
|
+
genConnectStatus: 5 # 0101
|
|
56
|
+
|
|
57
|
+
- id: STEP 4 - RECONNECT
|
|
58
|
+
instructions:
|
|
59
|
+
- Reconnect DER
|
|
60
|
+
action:
|
|
61
|
+
type: upsert-der-status
|
|
62
|
+
parameters:
|
|
63
|
+
genConnectStatus: 7 # 0111
|
|
64
|
+
|
|
65
|
+
- id: STEP 5 - NON-OPERATING # bit 2 = 0
|
|
66
|
+
action:
|
|
67
|
+
type: upsert-der-status
|
|
68
|
+
parameters:
|
|
69
|
+
genConnectStatus: 3 # 0011
|
|
70
|
+
|
|
71
|
+
- id: STEP 6 - RECONNECT
|
|
72
|
+
instructions:
|
|
73
|
+
- Reconnect DER
|
|
74
|
+
action:
|
|
75
|
+
type: upsert-der-status
|
|
76
|
+
parameters:
|
|
77
|
+
genConnectStatus: 7
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Description: S-ALL-09 Operational Mode Status
|
|
2
|
+
Category: Monitoring
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- Create an EndDevice registration for client.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DER
|
|
24
|
+
checks:
|
|
25
|
+
- type: end-device
|
|
26
|
+
parameters:
|
|
27
|
+
matches_client: true
|
|
28
|
+
- type: discovered
|
|
29
|
+
parameters:
|
|
30
|
+
links:
|
|
31
|
+
- DERStatus
|
|
32
|
+
|
|
33
|
+
- id: STEP 1 - Set Online
|
|
34
|
+
action:
|
|
35
|
+
type: upsert-der-status
|
|
36
|
+
parameters:
|
|
37
|
+
operationalModeStatus: 1
|
|
38
|
+
|
|
39
|
+
- id: STEP 2 - Set Offline
|
|
40
|
+
action:
|
|
41
|
+
type: upsert-der-status
|
|
42
|
+
parameters:
|
|
43
|
+
operationalModeStatus: 2
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
Description: S-ALL-10 Capabilities and Settings
|
|
2
|
+
Category: Monitoring
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- Create an EndDevice registration for client.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DER
|
|
24
|
+
checks:
|
|
25
|
+
- type: end-device
|
|
26
|
+
parameters:
|
|
27
|
+
matches_client: true
|
|
28
|
+
- type: discovered
|
|
29
|
+
parameters:
|
|
30
|
+
links:
|
|
31
|
+
- DERCapability
|
|
32
|
+
- DERSettings
|
|
33
|
+
|
|
34
|
+
- id: STEP 1A - Put DERCapability
|
|
35
|
+
action:
|
|
36
|
+
type: upsert-der-capability
|
|
37
|
+
parameters:
|
|
38
|
+
type: 4
|
|
39
|
+
rtgMaxW: 10000
|
|
40
|
+
modesSupported: 3
|
|
41
|
+
doeModesSupported: 3
|
|
42
|
+
|
|
43
|
+
- id: STEP 1B - Put DERSettings
|
|
44
|
+
action:
|
|
45
|
+
type: upsert-der-settings
|
|
46
|
+
parameters:
|
|
47
|
+
setMaxW: 10000
|
|
48
|
+
setGradW: 1000
|
|
49
|
+
modesEnabled: 3
|
|
50
|
+
doeModesEnabled: 3
|
|
51
|
+
|
|
52
|
+
- id: STEP 2A - UPSERT DERCapability
|
|
53
|
+
action:
|
|
54
|
+
type: upsert-der-capability
|
|
55
|
+
parameters:
|
|
56
|
+
type: 5
|
|
57
|
+
rtgMaxW: 11000
|
|
58
|
+
modesSupported: 4
|
|
59
|
+
doeModesSupported: 4
|
|
60
|
+
|
|
61
|
+
- id: STEP 2B - UPSERT DERSettings
|
|
62
|
+
action:
|
|
63
|
+
type: upsert-der-settings
|
|
64
|
+
parameters:
|
|
65
|
+
setMaxW: 11000
|
|
66
|
+
setGradW: 1100
|
|
67
|
+
modesEnabled: 4
|
|
68
|
+
doeModesEnabled: 4
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Description: Active Control - Export Limit
|
|
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 = 0W and no rampTms attribute.
|
|
20
|
+
action:
|
|
21
|
+
type: discovery
|
|
22
|
+
parameters:
|
|
23
|
+
resources:
|
|
24
|
+
- EndDevice
|
|
25
|
+
- DERControlList
|
|
26
|
+
- DER
|
|
27
|
+
- DERControl
|
|
28
|
+
checks:
|
|
29
|
+
- type: end-device
|
|
30
|
+
parameters:
|
|
31
|
+
matches_client: true
|
|
32
|
+
- type: der-control
|
|
33
|
+
parameters:
|
|
34
|
+
minimum_count: 1
|
|
35
|
+
opModExpLimW: 0
|
|
36
|
+
rampTms: null
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Description: Active Control - Generation Limit
|
|
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 opModGenLimW = 0W and no rampTms attribute.
|
|
20
|
+
action:
|
|
21
|
+
type: discovery
|
|
22
|
+
parameters:
|
|
23
|
+
resources:
|
|
24
|
+
- EndDevice
|
|
25
|
+
- DERControlList
|
|
26
|
+
- DER
|
|
27
|
+
- DERControl
|
|
28
|
+
checks:
|
|
29
|
+
- type: end-device
|
|
30
|
+
parameters:
|
|
31
|
+
matches_client: true
|
|
32
|
+
- type: der-control
|
|
33
|
+
parameters:
|
|
34
|
+
minimum_count: 1
|
|
35
|
+
opModGenLimW: 0
|
|
36
|
+
rampTms: null
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Description: Active Control - Import Limit
|
|
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 opModImpLimW = 0W and no rampTms attribute.
|
|
20
|
+
action:
|
|
21
|
+
type: discovery
|
|
22
|
+
parameters:
|
|
23
|
+
resources:
|
|
24
|
+
- EndDevice
|
|
25
|
+
- DERControlList
|
|
26
|
+
- DER
|
|
27
|
+
- DERControl
|
|
28
|
+
checks:
|
|
29
|
+
- type: end-device
|
|
30
|
+
parameters:
|
|
31
|
+
matches_client: true
|
|
32
|
+
- type: der-control
|
|
33
|
+
parameters:
|
|
34
|
+
minimum_count: 1
|
|
35
|
+
opModImpLimW: 0
|
|
36
|
+
rampTms: null
|