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.

Files changed (74) hide show
  1. cactus_test_definitions/__init__.py +1 -1
  2. cactus_test_definitions/__pycache__/__init__.cpython-312.pyc +0 -0
  3. cactus_test_definitions/__pycache__/csipaus.cpython-312.pyc +0 -0
  4. cactus_test_definitions/client/__init__.py +4 -0
  5. cactus_test_definitions/client/__pycache__/__init__.cpython-312.pyc +0 -0
  6. cactus_test_definitions/client/__pycache__/actions.cpython-312.pyc +0 -0
  7. cactus_test_definitions/client/__pycache__/checks.cpython-312.pyc +0 -0
  8. cactus_test_definitions/client/actions.py +1 -0
  9. cactus_test_definitions/client/checks.py +1 -0
  10. cactus_test_definitions/client/procedures/ALL-09.yaml +18 -18
  11. cactus_test_definitions/client/procedures/ALL-12.yaml +34 -16
  12. cactus_test_definitions/client/procedures/ALL-18.yaml +6 -5
  13. cactus_test_definitions/client/procedures/ALL-28.yaml +0 -1
  14. cactus_test_definitions/client/procedures/GEN-10.yaml +58 -4
  15. cactus_test_definitions/client/procedures/GEN-11.yaml +32 -8
  16. cactus_test_definitions/client/procedures/GEN-12.yaml +33 -9
  17. cactus_test_definitions/client/procedures/LOA-03.yaml +1 -1
  18. cactus_test_definitions/client/procedures/LOA-04.yaml +1 -1
  19. cactus_test_definitions/client/procedures/LOA-10.yaml +61 -9
  20. cactus_test_definitions/client/procedures/LOA-11.yaml +32 -8
  21. cactus_test_definitions/client/procedures/LOA-12.yaml +32 -8
  22. cactus_test_definitions/csipaus.py +2 -0
  23. cactus_test_definitions/server/README.md +8 -6
  24. cactus_test_definitions/server/__init__.py +4 -0
  25. cactus_test_definitions/server/__pycache__/__init__.cpython-312.pyc +0 -0
  26. cactus_test_definitions/server/__pycache__/actions.cpython-312.pyc +0 -0
  27. cactus_test_definitions/server/__pycache__/checks.cpython-312.pyc +0 -0
  28. cactus_test_definitions/server/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
  29. cactus_test_definitions/server/actions.py +2 -1
  30. cactus_test_definitions/server/checks.py +35 -0
  31. cactus_test_definitions/server/procedures/S-ALL-01.yaml +3 -0
  32. cactus_test_definitions/server/procedures/S-ALL-06.yaml +111 -0
  33. cactus_test_definitions/server/procedures/S-ALL-07.yaml +100 -0
  34. cactus_test_definitions/server/procedures/S-ALL-08.yaml +77 -0
  35. cactus_test_definitions/server/procedures/S-ALL-09.yaml +43 -0
  36. cactus_test_definitions/server/procedures/S-ALL-10.yaml +68 -0
  37. cactus_test_definitions/server/procedures/S-ALL-11.yaml +36 -0
  38. cactus_test_definitions/server/procedures/S-ALL-12.yaml +36 -0
  39. cactus_test_definitions/server/procedures/S-ALL-13.yaml +36 -0
  40. cactus_test_definitions/server/procedures/S-ALL-14.yaml +36 -0
  41. cactus_test_definitions/server/procedures/S-ALL-15.yaml +79 -0
  42. cactus_test_definitions/server/procedures/S-ALL-16.yaml +79 -0
  43. cactus_test_definitions/server/procedures/S-ALL-17.yaml +39 -0
  44. cactus_test_definitions/server/procedures/S-ALL-18.yaml +35 -0
  45. cactus_test_definitions/server/procedures/S-ALL-19.yaml +34 -0
  46. cactus_test_definitions/server/procedures/S-ALL-20.yaml +34 -0
  47. cactus_test_definitions/server/procedures/S-ALL-21.yaml +34 -0
  48. cactus_test_definitions/server/procedures/S-ALL-22.yaml +34 -0
  49. cactus_test_definitions/server/procedures/S-ALL-23.yaml +34 -0
  50. cactus_test_definitions/server/procedures/S-ALL-24.yaml +37 -0
  51. cactus_test_definitions/server/procedures/S-ALL-25.yaml +151 -0
  52. cactus_test_definitions/server/procedures/S-ALL-41.yaml +343 -0
  53. cactus_test_definitions/server/procedures/S-ALL-42.yaml +81 -0
  54. cactus_test_definitions/server/procedures/S-ALL-43.yaml +146 -0
  55. cactus_test_definitions/server/procedures/S-ALL-44.yaml +51 -0
  56. cactus_test_definitions/server/procedures/S-ALL-45.yaml +34 -0
  57. cactus_test_definitions/server/procedures/S-ALL-48.yaml +29 -0
  58. cactus_test_definitions/server/procedures/S-ALL-49.yaml +56 -0
  59. cactus_test_definitions/server/procedures/S-ALL-51.yaml +35 -0
  60. cactus_test_definitions/server/procedures/S-ALL-52.yaml +35 -0
  61. cactus_test_definitions/server/procedures/S-ALL-53.yaml +42 -0
  62. cactus_test_definitions/server/procedures/S-ALL-55.yaml +45 -0
  63. cactus_test_definitions/server/procedures/S-ALL-56.yaml +36 -0
  64. cactus_test_definitions/server/procedures/S-ALL-57.yaml +62 -0
  65. cactus_test_definitions/server/procedures/S-OPT-03.yaml +9 -6
  66. cactus_test_definitions/server/procedures/S-OPT-05.yaml +33 -0
  67. cactus_test_definitions/server/test_procedures.py +34 -0
  68. {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/METADATA +1 -1
  69. {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/RECORD +74 -40
  70. tests/unit/client/test_validate.py +47 -0
  71. tests/unit/server/test_validate.py +17 -4
  72. {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/WHEEL +0 -0
  73. {cactus_test_definitions-1.6.0.dist-info → cactus_test_definitions-1.8.1.dist-info}/licenses/LICENSE.txt +0 -0
  74. {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` `modesEnabled_int: bool` | Sends a malformed DERSettings - expects a failure and that the server will NOT change anything |
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` | matches any DefaultDERControl with the specified values |
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
  ]
@@ -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
@@ -12,6 +12,9 @@ Preconditions:
12
12
 
13
13
  Steps:
14
14
  - id: DISCOVERY
15
+ repeat_until_pass: true
16
+ instructions:
17
+ - Create an EndDevice record with an lfdi/sfdi that matches your client. Ensure it has a single DER record.
15
18
  action:
16
19
  type: discovery
17
20
  parameters:
@@ -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