s2-python 0.4.1__py3-none-any.whl → 0.6.0__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.
- {s2_python-0.4.1.dist-info → s2_python-0.6.0.dist-info}/METADATA +17 -12
- s2_python-0.6.0.dist-info/RECORD +89 -0
- {s2_python-0.4.1.dist-info → s2_python-0.6.0.dist-info}/WHEEL +1 -1
- s2_python-0.6.0.dist-info/licenses/LICENSE +201 -0
- s2python/common/__init__.py +32 -0
- s2python/common/duration.py +3 -1
- s2python/common/handshake.py +2 -2
- s2python/common/handshake_response.py +2 -2
- s2python/common/instruction_status_update.py +3 -3
- s2python/common/number_range.py +5 -2
- s2python/common/power_forecast.py +3 -3
- s2python/common/power_forecast_element.py +28 -6
- s2python/common/power_forecast_value.py +1 -1
- s2python/common/power_measurement.py +27 -5
- s2python/common/power_range.py +4 -2
- s2python/common/power_value.py +1 -1
- s2python/common/reception_status.py +2 -2
- s2python/common/resource_manager_details.py +6 -6
- s2python/common/revoke_object.py +3 -3
- s2python/common/role.py +1 -1
- s2python/common/select_control_type.py +2 -2
- s2python/common/session_request.py +2 -2
- s2python/common/timer.py +3 -3
- s2python/common/transition.py +8 -8
- s2python/ddbc/__init__.py +21 -0
- s2python/ddbc/ddbc_actuator_description.py +30 -0
- s2python/ddbc/ddbc_actuator_status.py +22 -0
- s2python/ddbc/ddbc_average_demand_rate_forecast.py +28 -0
- s2python/ddbc/ddbc_average_demand_rate_forecast_element.py +21 -0
- s2python/ddbc/ddbc_instruction.py +19 -0
- s2python/ddbc/ddbc_operation_mode.py +26 -0
- s2python/ddbc/ddbc_system_description.py +29 -0
- s2python/ddbc/ddbc_timer_status.py +18 -0
- s2python/frbc/__init__.py +19 -3
- s2python/frbc/frbc_actuator_description.py +15 -9
- s2python/frbc/frbc_actuator_status.py +5 -5
- s2python/frbc/frbc_fill_level_target_profile.py +3 -3
- s2python/frbc/frbc_fill_level_target_profile_element.py +7 -6
- s2python/frbc/frbc_instruction.py +5 -5
- s2python/frbc/frbc_leakage_behaviour.py +3 -3
- s2python/frbc/frbc_leakage_behaviour_element.py +9 -6
- s2python/frbc/frbc_operation_mode.py +13 -6
- s2python/frbc/frbc_operation_mode_element.py +5 -5
- s2python/frbc/frbc_storage_description.py +2 -2
- s2python/frbc/frbc_storage_status.py +2 -2
- s2python/frbc/frbc_system_description.py +4 -4
- s2python/frbc/frbc_timer_status.py +4 -4
- s2python/frbc/frbc_usage_forecast.py +3 -3
- s2python/frbc/frbc_usage_forecast_element.py +2 -2
- s2python/generated/gen_s2.py +508 -543
- s2python/message.py +101 -6
- s2python/ombc/__init__.py +5 -0
- s2python/ombc/ombc_instruction.py +19 -0
- s2python/ombc/ombc_operation_mode.py +25 -0
- s2python/ombc/ombc_status.py +17 -0
- s2python/ombc/ombc_system_description.py +25 -0
- s2python/ombc/ombc_timer_status.py +17 -0
- s2python/pebc/__init__.py +21 -0
- s2python/pebc/pebc_allowed_limit_range.py +42 -0
- s2python/pebc/pebc_energy_constraint.py +25 -0
- s2python/pebc/pebc_instruction.py +27 -0
- s2python/pebc/pebc_power_constraints.py +77 -0
- s2python/pebc/pebc_power_envelope.py +23 -0
- s2python/pebc/pebc_power_envelope_element.py +16 -0
- s2python/ppbc/__init__.py +15 -6
- s2python/ppbc/ppbc_end_interruption_instruction.py +6 -8
- s2python/ppbc/ppbc_power_profile_definition.py +4 -6
- s2python/ppbc/ppbc_power_profile_status.py +2 -4
- s2python/ppbc/ppbc_power_sequence.py +6 -6
- s2python/ppbc/ppbc_power_sequence_container.py +5 -7
- s2python/ppbc/ppbc_power_sequence_container_status.py +7 -9
- s2python/ppbc/ppbc_power_sequence_element.py +3 -5
- s2python/ppbc/ppbc_schedule_instruction.py +6 -8
- s2python/ppbc/ppbc_start_interruption_instruction.py +6 -8
- s2python/s2_connection.py +93 -32
- s2python/s2_control_type.py +36 -0
- s2python/s2_parser.py +4 -0
- s2python/s2_validation_error.py +3 -1
- s2python/validate_values_mixin.py +29 -14
- s2_python-0.4.1.dist-info/RECORD +0 -66
- {s2_python-0.4.1.dist-info → s2_python-0.6.0.dist-info}/entry_points.txt +0 -0
- {s2_python-0.4.1.dist-info → s2_python-0.6.0.dist-info}/top_level.txt +0 -0
s2python/generated/gen_s2.py
CHANGED
@@ -20,805 +20,782 @@ from typing_extensions import Literal
|
|
20
20
|
|
21
21
|
|
22
22
|
class Duration(RootModel[conint(ge=0)]):
|
23
|
-
root: conint(ge=0) = Field(
|
23
|
+
root: conint(ge=0) = Field( # pyright: ignore[reportInvalidTypeForm]
|
24
|
+
..., description="Duration in milliseconds"
|
25
|
+
)
|
24
26
|
|
25
27
|
|
26
|
-
class ID(RootModel[constr(pattern=r
|
27
|
-
root: constr(pattern=r
|
28
|
+
class ID(RootModel[constr(pattern=r"[a-zA-Z0-9\-_:]{2,64}")]):
|
29
|
+
root: constr(pattern=r"[a-zA-Z0-9\-_:]{2,64}") = ( # pyright: ignore[reportInvalidTypeForm]
|
30
|
+
Field(..., description="UUID")
|
31
|
+
)
|
28
32
|
|
29
33
|
|
30
34
|
class Currency(Enum):
|
31
|
-
AED =
|
32
|
-
ANG =
|
33
|
-
AUD =
|
34
|
-
CHE =
|
35
|
-
CHF =
|
36
|
-
CHW =
|
37
|
-
EUR =
|
38
|
-
GBP =
|
39
|
-
LBP =
|
40
|
-
LKR =
|
41
|
-
LRD =
|
42
|
-
LSL =
|
43
|
-
LYD =
|
44
|
-
MAD =
|
45
|
-
MDL =
|
46
|
-
MGA =
|
47
|
-
MKD =
|
48
|
-
MMK =
|
49
|
-
MNT =
|
50
|
-
MOP =
|
51
|
-
MRO =
|
52
|
-
MUR =
|
53
|
-
MVR =
|
54
|
-
MWK =
|
55
|
-
MXN =
|
56
|
-
MXV =
|
57
|
-
MYR =
|
58
|
-
MZN =
|
59
|
-
NAD =
|
60
|
-
NGN =
|
61
|
-
NIO =
|
62
|
-
NOK =
|
63
|
-
NPR =
|
64
|
-
NZD =
|
65
|
-
OMR =
|
66
|
-
PAB =
|
67
|
-
PEN =
|
68
|
-
PGK =
|
69
|
-
PHP =
|
70
|
-
PKR =
|
71
|
-
PLN =
|
72
|
-
PYG =
|
73
|
-
QAR =
|
74
|
-
RON =
|
75
|
-
RSD =
|
76
|
-
RUB =
|
77
|
-
RWF =
|
78
|
-
SAR =
|
79
|
-
SBD =
|
80
|
-
SCR =
|
81
|
-
SDG =
|
82
|
-
SEK =
|
83
|
-
SGD =
|
84
|
-
SHP =
|
85
|
-
SLL =
|
86
|
-
SOS =
|
87
|
-
SRD =
|
88
|
-
SSP =
|
89
|
-
STD =
|
90
|
-
SYP =
|
91
|
-
SZL =
|
92
|
-
THB =
|
93
|
-
TJS =
|
94
|
-
TMT =
|
95
|
-
TND =
|
96
|
-
TOP =
|
97
|
-
TRY =
|
98
|
-
TTD =
|
99
|
-
TWD =
|
100
|
-
TZS =
|
101
|
-
UAH =
|
102
|
-
UGX =
|
103
|
-
USD =
|
104
|
-
USN =
|
105
|
-
UYI =
|
106
|
-
UYU =
|
107
|
-
UZS =
|
108
|
-
VEF =
|
109
|
-
VND =
|
110
|
-
VUV =
|
111
|
-
WST =
|
112
|
-
XAG =
|
113
|
-
XAU =
|
114
|
-
XBA =
|
115
|
-
XBB =
|
116
|
-
XBC =
|
117
|
-
XBD =
|
118
|
-
XCD =
|
119
|
-
XOF =
|
120
|
-
XPD =
|
121
|
-
XPF =
|
122
|
-
XPT =
|
123
|
-
XSU =
|
124
|
-
XTS =
|
125
|
-
XUA =
|
126
|
-
XXX =
|
127
|
-
YER =
|
128
|
-
ZAR =
|
129
|
-
ZMW =
|
130
|
-
ZWL =
|
35
|
+
AED = "AED"
|
36
|
+
ANG = "ANG"
|
37
|
+
AUD = "AUD"
|
38
|
+
CHE = "CHE"
|
39
|
+
CHF = "CHF"
|
40
|
+
CHW = "CHW"
|
41
|
+
EUR = "EUR"
|
42
|
+
GBP = "GBP"
|
43
|
+
LBP = "LBP"
|
44
|
+
LKR = "LKR"
|
45
|
+
LRD = "LRD"
|
46
|
+
LSL = "LSL"
|
47
|
+
LYD = "LYD"
|
48
|
+
MAD = "MAD"
|
49
|
+
MDL = "MDL"
|
50
|
+
MGA = "MGA"
|
51
|
+
MKD = "MKD"
|
52
|
+
MMK = "MMK"
|
53
|
+
MNT = "MNT"
|
54
|
+
MOP = "MOP"
|
55
|
+
MRO = "MRO"
|
56
|
+
MUR = "MUR"
|
57
|
+
MVR = "MVR"
|
58
|
+
MWK = "MWK"
|
59
|
+
MXN = "MXN"
|
60
|
+
MXV = "MXV"
|
61
|
+
MYR = "MYR"
|
62
|
+
MZN = "MZN"
|
63
|
+
NAD = "NAD"
|
64
|
+
NGN = "NGN"
|
65
|
+
NIO = "NIO"
|
66
|
+
NOK = "NOK"
|
67
|
+
NPR = "NPR"
|
68
|
+
NZD = "NZD"
|
69
|
+
OMR = "OMR"
|
70
|
+
PAB = "PAB"
|
71
|
+
PEN = "PEN"
|
72
|
+
PGK = "PGK"
|
73
|
+
PHP = "PHP"
|
74
|
+
PKR = "PKR"
|
75
|
+
PLN = "PLN"
|
76
|
+
PYG = "PYG"
|
77
|
+
QAR = "QAR"
|
78
|
+
RON = "RON"
|
79
|
+
RSD = "RSD"
|
80
|
+
RUB = "RUB"
|
81
|
+
RWF = "RWF"
|
82
|
+
SAR = "SAR"
|
83
|
+
SBD = "SBD"
|
84
|
+
SCR = "SCR"
|
85
|
+
SDG = "SDG"
|
86
|
+
SEK = "SEK"
|
87
|
+
SGD = "SGD"
|
88
|
+
SHP = "SHP"
|
89
|
+
SLL = "SLL"
|
90
|
+
SOS = "SOS"
|
91
|
+
SRD = "SRD"
|
92
|
+
SSP = "SSP"
|
93
|
+
STD = "STD"
|
94
|
+
SYP = "SYP"
|
95
|
+
SZL = "SZL"
|
96
|
+
THB = "THB"
|
97
|
+
TJS = "TJS"
|
98
|
+
TMT = "TMT"
|
99
|
+
TND = "TND"
|
100
|
+
TOP = "TOP"
|
101
|
+
TRY = "TRY"
|
102
|
+
TTD = "TTD"
|
103
|
+
TWD = "TWD"
|
104
|
+
TZS = "TZS"
|
105
|
+
UAH = "UAH"
|
106
|
+
UGX = "UGX"
|
107
|
+
USD = "USD"
|
108
|
+
USN = "USN"
|
109
|
+
UYI = "UYI"
|
110
|
+
UYU = "UYU"
|
111
|
+
UZS = "UZS"
|
112
|
+
VEF = "VEF"
|
113
|
+
VND = "VND"
|
114
|
+
VUV = "VUV"
|
115
|
+
WST = "WST"
|
116
|
+
XAG = "XAG"
|
117
|
+
XAU = "XAU"
|
118
|
+
XBA = "XBA"
|
119
|
+
XBB = "XBB"
|
120
|
+
XBC = "XBC"
|
121
|
+
XBD = "XBD"
|
122
|
+
XCD = "XCD"
|
123
|
+
XOF = "XOF"
|
124
|
+
XPD = "XPD"
|
125
|
+
XPF = "XPF"
|
126
|
+
XPT = "XPT"
|
127
|
+
XSU = "XSU"
|
128
|
+
XTS = "XTS"
|
129
|
+
XUA = "XUA"
|
130
|
+
XXX = "XXX"
|
131
|
+
YER = "YER"
|
132
|
+
ZAR = "ZAR"
|
133
|
+
ZMW = "ZMW"
|
134
|
+
ZWL = "ZWL"
|
131
135
|
|
132
136
|
|
133
137
|
class SessionRequestType(Enum):
|
134
|
-
RECONNECT =
|
135
|
-
TERMINATE =
|
138
|
+
RECONNECT = "RECONNECT"
|
139
|
+
TERMINATE = "TERMINATE"
|
136
140
|
|
137
141
|
|
138
142
|
class RevokableObjects(Enum):
|
139
|
-
PEBC_PowerConstraints =
|
140
|
-
PEBC_EnergyConstraint =
|
141
|
-
PEBC_Instruction =
|
142
|
-
PPBC_PowerProfileDefinition =
|
143
|
-
PPBC_ScheduleInstruction =
|
144
|
-
PPBC_StartInterruptionInstruction =
|
145
|
-
PPBC_EndInterruptionInstruction =
|
146
|
-
OMBC_SystemDescription =
|
147
|
-
OMBC_Instruction =
|
148
|
-
FRBC_SystemDescription =
|
149
|
-
FRBC_Instruction =
|
150
|
-
DDBC_SystemDescription =
|
151
|
-
DDBC_Instruction =
|
143
|
+
PEBC_PowerConstraints = "PEBC.PowerConstraints"
|
144
|
+
PEBC_EnergyConstraint = "PEBC.EnergyConstraint"
|
145
|
+
PEBC_Instruction = "PEBC.Instruction"
|
146
|
+
PPBC_PowerProfileDefinition = "PPBC.PowerProfileDefinition"
|
147
|
+
PPBC_ScheduleInstruction = "PPBC.ScheduleInstruction"
|
148
|
+
PPBC_StartInterruptionInstruction = "PPBC.StartInterruptionInstruction"
|
149
|
+
PPBC_EndInterruptionInstruction = "PPBC.EndInterruptionInstruction"
|
150
|
+
OMBC_SystemDescription = "OMBC.SystemDescription"
|
151
|
+
OMBC_Instruction = "OMBC.Instruction"
|
152
|
+
FRBC_SystemDescription = "FRBC.SystemDescription"
|
153
|
+
FRBC_Instruction = "FRBC.Instruction"
|
154
|
+
DDBC_SystemDescription = "DDBC.SystemDescription"
|
155
|
+
DDBC_Instruction = "DDBC.Instruction"
|
152
156
|
|
153
157
|
|
154
158
|
class EnergyManagementRole(Enum):
|
155
|
-
CEM =
|
156
|
-
RM =
|
159
|
+
CEM = "CEM"
|
160
|
+
RM = "RM"
|
157
161
|
|
158
162
|
|
159
163
|
class ReceptionStatusValues(Enum):
|
160
|
-
INVALID_DATA =
|
161
|
-
INVALID_MESSAGE =
|
162
|
-
INVALID_CONTENT =
|
163
|
-
TEMPORARY_ERROR =
|
164
|
-
PERMANENT_ERROR =
|
165
|
-
OK =
|
164
|
+
INVALID_DATA = "INVALID_DATA"
|
165
|
+
INVALID_MESSAGE = "INVALID_MESSAGE"
|
166
|
+
INVALID_CONTENT = "INVALID_CONTENT"
|
167
|
+
TEMPORARY_ERROR = "TEMPORARY_ERROR"
|
168
|
+
PERMANENT_ERROR = "PERMANENT_ERROR"
|
169
|
+
OK = "OK"
|
166
170
|
|
167
171
|
|
168
172
|
class NumberRange(BaseModel):
|
169
173
|
model_config = ConfigDict(
|
170
|
-
extra=
|
171
|
-
)
|
172
|
-
start_of_range: float = Field(
|
173
|
-
..., description='Number that defines the start of the range'
|
174
|
-
)
|
175
|
-
end_of_range: float = Field(
|
176
|
-
..., description='Number that defines the end of the range'
|
174
|
+
extra="forbid",
|
177
175
|
)
|
176
|
+
start_of_range: float = Field(..., description="Number that defines the start of the range")
|
177
|
+
end_of_range: float = Field(..., description="Number that defines the end of the range")
|
178
178
|
|
179
179
|
|
180
180
|
class Transition(BaseModel):
|
181
181
|
model_config = ConfigDict(
|
182
|
-
extra=
|
182
|
+
extra="forbid",
|
183
|
+
populate_by_name=True
|
183
184
|
)
|
184
185
|
id: ID = Field(
|
185
186
|
...,
|
186
|
-
description=
|
187
|
+
description="ID of the Transition. Must be unique in the scope of the OMBC.SystemDescription, FRBC.ActuatorDescription or DDBC.ActuatorDescription in which it is used.",
|
187
188
|
)
|
188
189
|
from_: ID = Field(
|
189
190
|
...,
|
190
|
-
alias=
|
191
|
-
description=
|
191
|
+
alias="from",
|
192
|
+
description="ID of the OperationMode (exact type differs per ControlType) that should be switched from.",
|
192
193
|
)
|
193
194
|
to: ID = Field(
|
194
195
|
...,
|
195
|
-
description=
|
196
|
+
description="ID of the OperationMode (exact type differs per ControlType) that will be switched to.",
|
196
197
|
)
|
197
198
|
start_timers: List[ID] = Field(
|
198
199
|
...,
|
199
|
-
description=
|
200
|
+
description="List of IDs of Timers that will be (re)started when this transition is initiated",
|
200
201
|
max_length=1000,
|
201
202
|
min_length=0,
|
202
203
|
)
|
203
204
|
blocking_timers: List[ID] = Field(
|
204
205
|
...,
|
205
|
-
description=
|
206
|
+
description="List of IDs of Timers that block this Transition from initiating while at least one of these Timers is not yet finished",
|
206
207
|
max_length=1000,
|
207
208
|
min_length=0,
|
208
209
|
)
|
209
210
|
transition_costs: Optional[float] = Field(
|
210
211
|
None,
|
211
|
-
description=
|
212
|
+
description="Absolute costs for going through this Transition in the currency as described in the ResourceManagerDetails.",
|
212
213
|
)
|
213
214
|
transition_duration: Optional[Duration] = Field(
|
214
215
|
None,
|
215
|
-
description=
|
216
|
+
description="Indicates the time between the initiation of this Transition, and the time at which the device behaves according to the Operation Mode which is defined in the ‘to’ data element. When no value is provided it is assumed the transition duration is negligible.",
|
216
217
|
)
|
217
218
|
abnormal_condition_only: bool = Field(
|
218
219
|
...,
|
219
|
-
description=
|
220
|
+
description="Indicates if this Transition may only be used during an abnormal condition (see Clause )",
|
220
221
|
)
|
221
222
|
|
222
223
|
|
223
224
|
class Timer(BaseModel):
|
224
225
|
model_config = ConfigDict(
|
225
|
-
extra=
|
226
|
+
extra="forbid",
|
226
227
|
)
|
227
228
|
id: ID = Field(
|
228
229
|
...,
|
229
|
-
description=
|
230
|
+
description="ID of the Timer. Must be unique in the scope of the OMBC.SystemDescription, FRBC.ActuatorDescription or DDBC.ActuatorDescription in which it is used.",
|
230
231
|
)
|
231
232
|
diagnostic_label: Optional[str] = Field(
|
232
233
|
None,
|
233
|
-
description=
|
234
|
+
description="Human readable name/description of the Timer. This element is only intended for diagnostic purposes and not for HMI applications.",
|
234
235
|
)
|
235
236
|
duration: Duration = Field(
|
236
237
|
...,
|
237
|
-
description=
|
238
|
+
description="The time it takes for the Timer to finish after it has been started",
|
238
239
|
)
|
239
240
|
|
240
241
|
|
241
242
|
class PEBCPowerEnvelopeElement(BaseModel):
|
242
243
|
model_config = ConfigDict(
|
243
|
-
extra=
|
244
|
+
extra="forbid",
|
244
245
|
)
|
245
|
-
duration: Duration = Field(..., description=
|
246
|
+
duration: Duration = Field(..., description="The duration of the element")
|
246
247
|
upper_limit: float = Field(
|
247
248
|
...,
|
248
|
-
description=
|
249
|
+
description="Upper power limit according to the commodity_quantity of the containing PEBC.PowerEnvelope. The lower_limit must be smaller or equal to the upper_limit. The Resource Manager is requested to keep the power values for the given commodity quantity equal to or below the upper_limit. The upper_limit shall be in accordance with the constraints provided by the Resource Manager through any PEBC.AllowedLimitRange with limit_type UPPER_LIMIT.",
|
249
250
|
)
|
250
251
|
lower_limit: float = Field(
|
251
252
|
...,
|
252
|
-
description=
|
253
|
+
description="Lower power limit according to the commodity_quantity of the containing PEBC.PowerEnvelope. The lower_limit must be smaller or equal to the upper_limit. The Resource Manager is requested to keep the power values for the given commodity quantity equal to or above the lower_limit. The lower_limit shall be in accordance with the constraints provided by the Resource Manager through any PEBC.AllowedLimitRange with limit_type LOWER_LIMIT.",
|
253
254
|
)
|
254
255
|
|
255
256
|
|
256
257
|
class FRBCStorageDescription(BaseModel):
|
257
258
|
model_config = ConfigDict(
|
258
|
-
extra=
|
259
|
+
extra="forbid",
|
259
260
|
)
|
260
261
|
diagnostic_label: Optional[str] = Field(
|
261
262
|
None,
|
262
|
-
description=
|
263
|
+
description="Human readable name/description of the storage (e.g. hot water buffer or battery). This element is only intended for diagnostic purposes and not for HMI applications.",
|
263
264
|
)
|
264
265
|
fill_level_label: Optional[str] = Field(
|
265
266
|
None,
|
266
|
-
description=
|
267
|
+
description="Human readable description of the (physical) units associated with the fill_level (e.g. degrees Celsius or percentage state of charge). This element is only intended for diagnostic purposes and not for HMI applications.",
|
267
268
|
)
|
268
269
|
provides_leakage_behaviour: bool = Field(
|
269
270
|
...,
|
270
|
-
description=
|
271
|
+
description="Indicates whether the Storage could provide details of power leakage behaviour through the FRBC.LeakageBehaviour.",
|
271
272
|
)
|
272
273
|
provides_fill_level_target_profile: bool = Field(
|
273
274
|
...,
|
274
|
-
description=
|
275
|
+
description="Indicates whether the Storage could provide a target profile for the fill level through the FRBC.FillLevelTargetProfile.",
|
275
276
|
)
|
276
277
|
provides_usage_forecast: bool = Field(
|
277
278
|
...,
|
278
|
-
description=
|
279
|
+
description="Indicates whether the Storage could provide a UsageForecast through the FRBC.UsageForecast.",
|
279
280
|
)
|
280
281
|
fill_level_range: NumberRange = Field(
|
281
282
|
...,
|
282
|
-
description=
|
283
|
+
description="The range in which the fill_level should remain. It is expected of the CEM to keep the fill_level within this range. When the fill_level is not within this range, the Resource Manager can ignore instructions from the CEM (except during abnormal conditions). ",
|
283
284
|
)
|
284
285
|
|
285
286
|
|
286
287
|
class FRBCLeakageBehaviourElement(BaseModel):
|
287
288
|
model_config = ConfigDict(
|
288
|
-
extra=
|
289
|
+
extra="forbid",
|
289
290
|
)
|
290
291
|
fill_level_range: NumberRange = Field(
|
291
292
|
...,
|
292
|
-
description=
|
293
|
+
description="The fill level range for which this FRBC.LeakageBehaviourElement applies. The start of the range must be less than the end of the range.",
|
293
294
|
)
|
294
295
|
leakage_rate: float = Field(
|
295
296
|
...,
|
296
|
-
description=
|
297
|
+
description="Indicates how fast the momentary fill level will decrease per second due to leakage within the given range of the fill level. A positive value indicates that the fill level decreases over time due to leakage.",
|
297
298
|
)
|
298
299
|
|
299
300
|
|
300
301
|
class FRBCUsageForecastElement(BaseModel):
|
301
302
|
model_config = ConfigDict(
|
302
|
-
extra=
|
303
|
+
extra="forbid",
|
303
304
|
)
|
304
305
|
duration: Duration = Field(
|
305
|
-
..., description=
|
306
|
+
..., description="Indicator for how long the given usage_rate is valid."
|
306
307
|
)
|
307
308
|
usage_rate_upper_limit: Optional[float] = Field(
|
308
309
|
None,
|
309
|
-
description=
|
310
|
+
description="The upper limit of the range with a 100 % probability that the usage rate is within that range. A positive value indicates that the fill level will decrease due to usage.",
|
310
311
|
)
|
311
312
|
usage_rate_upper_95PPR: Optional[float] = Field(
|
312
313
|
None,
|
313
|
-
description=
|
314
|
+
description="The upper limit of the range with a 95 % probability that the usage rate is within that range. A positive value indicates that the fill level will decrease due to usage.",
|
314
315
|
)
|
315
316
|
usage_rate_upper_68PPR: Optional[float] = Field(
|
316
317
|
None,
|
317
|
-
description=
|
318
|
+
description="The upper limit of the range with a 68 % probability that the usage rate is within that range. A positive value indicates that the fill level will decrease due to usage.",
|
318
319
|
)
|
319
320
|
usage_rate_expected: float = Field(
|
320
321
|
...,
|
321
|
-
description=
|
322
|
+
description="The most likely value for the usage rate; the expected increase or decrease of the fill_level per second. A positive value indicates that the fill level will decrease due to usage.",
|
322
323
|
)
|
323
324
|
usage_rate_lower_68PPR: Optional[float] = Field(
|
324
325
|
None,
|
325
|
-
description=
|
326
|
+
description="The lower limit of the range with a 68 % probability that the usage rate is within that range. A positive value indicates that the fill level will decrease due to usage.",
|
326
327
|
)
|
327
328
|
usage_rate_lower_95PPR: Optional[float] = Field(
|
328
329
|
None,
|
329
|
-
description=
|
330
|
+
description="The lower limit of the range with a 95 % probability that the usage rate is within that range. A positive value indicates that the fill level will decrease due to usage.",
|
330
331
|
)
|
331
332
|
usage_rate_lower_limit: Optional[float] = Field(
|
332
333
|
None,
|
333
|
-
description=
|
334
|
+
description="The lower limit of the range with a 100 % probability that the usage rate is within that range. A positive value indicates that the fill level will decrease due to usage.",
|
334
335
|
)
|
335
336
|
|
336
337
|
|
337
338
|
class FRBCFillLevelTargetProfileElement(BaseModel):
|
338
339
|
model_config = ConfigDict(
|
339
|
-
extra=
|
340
|
+
extra="forbid",
|
340
341
|
)
|
341
|
-
duration: Duration = Field(..., description=
|
342
|
+
duration: Duration = Field(..., description="The duration of the element.")
|
342
343
|
fill_level_range: NumberRange = Field(
|
343
344
|
...,
|
344
|
-
description=
|
345
|
+
description="The target range in which the fill_level must be for the time period during which the element is active. The start of the range must be smaller or equal to the end of the range. The CEM must take best-effort actions to proactively achieve this target.",
|
345
346
|
)
|
346
347
|
|
347
348
|
|
348
349
|
class DDBCAverageDemandRateForecastElement(BaseModel):
|
349
350
|
model_config = ConfigDict(
|
350
|
-
extra=
|
351
|
+
extra="forbid",
|
351
352
|
)
|
352
|
-
duration: Duration = Field(..., description=
|
353
|
+
duration: Duration = Field(..., description="Duration of the element")
|
353
354
|
demand_rate_upper_limit: Optional[float] = Field(
|
354
355
|
None,
|
355
|
-
description=
|
356
|
+
description="The upper limit of the range with a 100 % probability that the demand rate is within that range",
|
356
357
|
)
|
357
358
|
demand_rate_upper_95PPR: Optional[float] = Field(
|
358
359
|
None,
|
359
|
-
description=
|
360
|
+
description="The upper limit of the range with a 95 % probability that the demand rate is within that range",
|
360
361
|
)
|
361
362
|
demand_rate_upper_68PPR: Optional[float] = Field(
|
362
363
|
None,
|
363
|
-
description=
|
364
|
+
description="The upper limit of the range with a 68 % probability that the demand rate is within that range",
|
364
365
|
)
|
365
366
|
demand_rate_expected: float = Field(
|
366
367
|
...,
|
367
|
-
description=
|
368
|
+
description="The most likely value for the demand rate; the expected increase or decrease of the fill_level per second",
|
368
369
|
)
|
369
370
|
demand_rate_lower_68PPR: Optional[float] = Field(
|
370
371
|
None,
|
371
|
-
description=
|
372
|
+
description="The lower limit of the range with a 68 % probability that the demand rate is within that range",
|
372
373
|
)
|
373
374
|
demand_rate_lower_95PPR: Optional[float] = Field(
|
374
375
|
None,
|
375
|
-
description=
|
376
|
+
description="The lower limit of the range with a 95 % probability that the demand rate is within that range",
|
376
377
|
)
|
377
378
|
demand_rate_lower_limit: Optional[float] = Field(
|
378
379
|
None,
|
379
|
-
description=
|
380
|
+
description="The lower limit of the range with a 100 % probability that the demand rate is within that range",
|
380
381
|
)
|
381
382
|
|
382
383
|
|
383
384
|
class RoleType(Enum):
|
384
|
-
ENERGY_PRODUCER =
|
385
|
-
ENERGY_CONSUMER =
|
386
|
-
ENERGY_STORAGE =
|
385
|
+
ENERGY_PRODUCER = "ENERGY_PRODUCER"
|
386
|
+
ENERGY_CONSUMER = "ENERGY_CONSUMER"
|
387
|
+
ENERGY_STORAGE = "ENERGY_STORAGE"
|
387
388
|
|
388
389
|
|
389
390
|
class Commodity(Enum):
|
390
|
-
GAS =
|
391
|
-
HEAT =
|
392
|
-
ELECTRICITY =
|
393
|
-
OIL =
|
391
|
+
GAS = "GAS"
|
392
|
+
HEAT = "HEAT"
|
393
|
+
ELECTRICITY = "ELECTRICITY"
|
394
|
+
OIL = "OIL"
|
394
395
|
|
395
396
|
|
396
397
|
class CommodityQuantity(Enum):
|
397
|
-
ELECTRIC_POWER_L1 =
|
398
|
-
ELECTRIC_POWER_L2 =
|
399
|
-
ELECTRIC_POWER_L3 =
|
400
|
-
ELECTRIC_POWER_3_PHASE_SYMMETRIC =
|
401
|
-
NATURAL_GAS_FLOW_RATE =
|
402
|
-
HYDROGEN_FLOW_RATE =
|
403
|
-
HEAT_TEMPERATURE =
|
404
|
-
HEAT_FLOW_RATE =
|
405
|
-
HEAT_THERMAL_POWER =
|
406
|
-
OIL_FLOW_RATE =
|
398
|
+
ELECTRIC_POWER_L1 = "ELECTRIC.POWER.L1"
|
399
|
+
ELECTRIC_POWER_L2 = "ELECTRIC.POWER.L2"
|
400
|
+
ELECTRIC_POWER_L3 = "ELECTRIC.POWER.L3"
|
401
|
+
ELECTRIC_POWER_3_PHASE_SYMMETRIC = "ELECTRIC.POWER.3_PHASE_SYMMETRIC"
|
402
|
+
NATURAL_GAS_FLOW_RATE = "NATURAL_GAS.FLOW_RATE"
|
403
|
+
HYDROGEN_FLOW_RATE = "HYDROGEN.FLOW_RATE"
|
404
|
+
HEAT_TEMPERATURE = "HEAT.TEMPERATURE"
|
405
|
+
HEAT_FLOW_RATE = "HEAT.FLOW_RATE"
|
406
|
+
HEAT_THERMAL_POWER = "HEAT.THERMAL_POWER"
|
407
|
+
OIL_FLOW_RATE = "OIL.FLOW_RATE"
|
407
408
|
|
408
409
|
|
409
410
|
class InstructionStatus(Enum):
|
410
|
-
NEW =
|
411
|
-
ACCEPTED =
|
412
|
-
REJECTED =
|
413
|
-
REVOKED =
|
414
|
-
STARTED =
|
415
|
-
SUCCEEDED =
|
416
|
-
ABORTED =
|
411
|
+
NEW = "NEW"
|
412
|
+
ACCEPTED = "ACCEPTED"
|
413
|
+
REJECTED = "REJECTED"
|
414
|
+
REVOKED = "REVOKED"
|
415
|
+
STARTED = "STARTED"
|
416
|
+
SUCCEEDED = "SUCCEEDED"
|
417
|
+
ABORTED = "ABORTED"
|
417
418
|
|
418
419
|
|
419
420
|
class ControlType(Enum):
|
420
|
-
POWER_ENVELOPE_BASED_CONTROL =
|
421
|
-
POWER_PROFILE_BASED_CONTROL =
|
422
|
-
OPERATION_MODE_BASED_CONTROL =
|
423
|
-
FILL_RATE_BASED_CONTROL =
|
424
|
-
DEMAND_DRIVEN_BASED_CONTROL =
|
425
|
-
NOT_CONTROLABLE =
|
426
|
-
NO_SELECTION =
|
421
|
+
POWER_ENVELOPE_BASED_CONTROL = "POWER_ENVELOPE_BASED_CONTROL"
|
422
|
+
POWER_PROFILE_BASED_CONTROL = "POWER_PROFILE_BASED_CONTROL"
|
423
|
+
OPERATION_MODE_BASED_CONTROL = "OPERATION_MODE_BASED_CONTROL"
|
424
|
+
FILL_RATE_BASED_CONTROL = "FILL_RATE_BASED_CONTROL"
|
425
|
+
DEMAND_DRIVEN_BASED_CONTROL = "DEMAND_DRIVEN_BASED_CONTROL"
|
426
|
+
NOT_CONTROLABLE = "NOT_CONTROLABLE"
|
427
|
+
NO_SELECTION = "NO_SELECTION"
|
427
428
|
|
428
429
|
|
429
430
|
class PEBCPowerEnvelopeLimitType(Enum):
|
430
|
-
UPPER_LIMIT =
|
431
|
-
LOWER_LIMIT =
|
431
|
+
UPPER_LIMIT = "UPPER_LIMIT"
|
432
|
+
LOWER_LIMIT = "LOWER_LIMIT"
|
432
433
|
|
433
434
|
|
434
435
|
class PEBCPowerEnvelopeConsequenceType(Enum):
|
435
|
-
VANISH =
|
436
|
-
DEFER =
|
436
|
+
VANISH = "VANISH"
|
437
|
+
DEFER = "DEFER"
|
437
438
|
|
438
439
|
|
439
440
|
class PPBCPowerSequenceStatus(Enum):
|
440
|
-
NOT_SCHEDULED =
|
441
|
-
SCHEDULED =
|
442
|
-
EXECUTING =
|
443
|
-
INTERRUPTED =
|
444
|
-
FINISHED =
|
445
|
-
ABORTED =
|
441
|
+
NOT_SCHEDULED = "NOT_SCHEDULED"
|
442
|
+
SCHEDULED = "SCHEDULED"
|
443
|
+
EXECUTING = "EXECUTING"
|
444
|
+
INTERRUPTED = "INTERRUPTED"
|
445
|
+
FINISHED = "FINISHED"
|
446
|
+
ABORTED = "ABORTED"
|
446
447
|
|
447
448
|
|
448
449
|
class OMBCTimerStatus(BaseModel):
|
449
450
|
model_config = ConfigDict(
|
450
|
-
extra=
|
451
|
+
extra="forbid",
|
451
452
|
)
|
452
|
-
message_type: Literal[
|
453
|
+
message_type: Literal["OMBC.TimerStatus"] = "OMBC.TimerStatus"
|
453
454
|
message_id: ID
|
454
|
-
timer_id: ID = Field(..., description=
|
455
|
+
timer_id: ID = Field(..., description="The ID of the timer this message refers to")
|
455
456
|
finished_at: AwareDatetime = Field(
|
456
457
|
...,
|
457
|
-
description=
|
458
|
+
description="Indicates when the Timer will be finished. If the DateTimeStamp is in the future, the timer is not yet finished. If the DateTimeStamp is in the past, the timer is finished. If the timer was never started, the value can be an arbitrary DateTimeStamp in the past.",
|
458
459
|
)
|
459
460
|
|
460
461
|
|
461
462
|
class FRBCTimerStatus(BaseModel):
|
462
463
|
model_config = ConfigDict(
|
463
|
-
extra=
|
464
|
+
extra="forbid",
|
464
465
|
)
|
465
|
-
message_type: Literal[
|
466
|
+
message_type: Literal["FRBC.TimerStatus"] = "FRBC.TimerStatus"
|
466
467
|
message_id: ID
|
467
|
-
timer_id: ID = Field(..., description=
|
468
|
-
actuator_id: ID = Field(
|
469
|
-
..., description='The ID of the actuator the timer belongs to'
|
470
|
-
)
|
468
|
+
timer_id: ID = Field(..., description="The ID of the timer this message refers to")
|
469
|
+
actuator_id: ID = Field(..., description="The ID of the actuator the timer belongs to")
|
471
470
|
finished_at: AwareDatetime = Field(
|
472
471
|
...,
|
473
|
-
description=
|
472
|
+
description="Indicates when the Timer will be finished. If the DateTimeStamp is in the future, the timer is not yet finished. If the DateTimeStamp is in the past, the timer is finished. If the timer was never started, the value can be an arbitrary DateTimeStamp in the past.",
|
474
473
|
)
|
475
474
|
|
476
475
|
|
477
476
|
class DDBCTimerStatus(BaseModel):
|
478
477
|
model_config = ConfigDict(
|
479
|
-
extra=
|
478
|
+
extra="forbid",
|
480
479
|
)
|
481
|
-
message_type: Literal[
|
480
|
+
message_type: Literal["DDBC.TimerStatus"] = "DDBC.TimerStatus"
|
482
481
|
message_id: ID
|
483
|
-
timer_id: ID = Field(..., description=
|
484
|
-
actuator_id: ID = Field(
|
485
|
-
..., description='The ID of the actuator the timer belongs to'
|
486
|
-
)
|
482
|
+
timer_id: ID = Field(..., description="The ID of the timer this message refers to")
|
483
|
+
actuator_id: ID = Field(..., description="The ID of the actuator the timer belongs to")
|
487
484
|
finished_at: AwareDatetime = Field(
|
488
485
|
...,
|
489
|
-
description=
|
486
|
+
description="Indicates when the Timer will be finished. If the DateTimeStamp is in the future, the timer is not yet finished. If the DateTimeStamp is in the past, the timer is finished. If the timer was never started, the value can be an arbitrary DateTimeStamp in the past.",
|
490
487
|
)
|
491
488
|
|
492
489
|
|
493
490
|
class SelectControlType(BaseModel):
|
494
491
|
model_config = ConfigDict(
|
495
|
-
extra=
|
492
|
+
extra="forbid",
|
496
493
|
)
|
497
|
-
message_type: Literal[
|
494
|
+
message_type: Literal["SelectControlType"] = "SelectControlType"
|
498
495
|
message_id: ID
|
499
496
|
control_type: ControlType = Field(
|
500
497
|
...,
|
501
|
-
description=
|
498
|
+
description="The ControlType to activate. Must be one of the available ControlTypes as defined in the ResourceManagerDetails",
|
502
499
|
)
|
503
500
|
|
504
501
|
|
505
502
|
class SessionRequest(BaseModel):
|
506
503
|
model_config = ConfigDict(
|
507
|
-
extra=
|
504
|
+
extra="forbid",
|
508
505
|
)
|
509
|
-
message_type: Literal[
|
506
|
+
message_type: Literal["SessionRequest"] = "SessionRequest"
|
510
507
|
message_id: ID
|
511
|
-
request: SessionRequestType = Field(..., description=
|
508
|
+
request: SessionRequestType = Field(..., description="The type of request")
|
512
509
|
diagnostic_label: Optional[str] = Field(
|
513
510
|
None,
|
514
|
-
description=
|
511
|
+
description="Optional field for a human readible descirption for debugging purposes",
|
515
512
|
)
|
516
513
|
|
517
514
|
|
518
515
|
class RevokeObject(BaseModel):
|
519
516
|
model_config = ConfigDict(
|
520
|
-
extra=
|
517
|
+
extra="forbid",
|
521
518
|
)
|
522
|
-
message_type: Literal[
|
519
|
+
message_type: Literal["RevokeObject"] = "RevokeObject"
|
523
520
|
message_id: ID
|
524
521
|
object_type: RevokableObjects = Field(
|
525
|
-
..., description=
|
522
|
+
..., description="The type of object that needs to be revoked"
|
526
523
|
)
|
527
|
-
object_id: ID = Field(..., description=
|
524
|
+
object_id: ID = Field(..., description="The ID of object that needs to be revoked")
|
528
525
|
|
529
526
|
|
530
527
|
class Handshake(BaseModel):
|
531
528
|
model_config = ConfigDict(
|
532
|
-
extra=
|
529
|
+
extra="forbid",
|
533
530
|
)
|
534
|
-
message_type: Literal[
|
531
|
+
message_type: Literal["Handshake"] = "Handshake"
|
535
532
|
message_id: ID
|
536
|
-
role: EnergyManagementRole = Field(
|
537
|
-
..., description='The role of the sender of this message'
|
538
|
-
)
|
533
|
+
role: EnergyManagementRole = Field(..., description="The role of the sender of this message")
|
539
534
|
supported_protocol_versions: Optional[List[str]] = Field(
|
540
535
|
None,
|
541
|
-
description=
|
536
|
+
description="Protocol versions supported by the sender of this message. This field is mandatory for the RM, but optional for the CEM.",
|
542
537
|
min_length=1,
|
543
538
|
)
|
544
539
|
|
545
540
|
|
546
541
|
class HandshakeResponse(BaseModel):
|
547
542
|
model_config = ConfigDict(
|
548
|
-
extra=
|
543
|
+
extra="forbid",
|
549
544
|
)
|
550
|
-
message_type: Literal[
|
545
|
+
message_type: Literal["HandshakeResponse"] = "HandshakeResponse"
|
551
546
|
message_id: ID
|
552
547
|
selected_protocol_version: str = Field(
|
553
|
-
..., description=
|
548
|
+
..., description="The protocol version the CEM selected for this session"
|
554
549
|
)
|
555
550
|
|
556
551
|
|
557
552
|
class ReceptionStatus(BaseModel):
|
558
553
|
model_config = ConfigDict(
|
559
|
-
extra=
|
560
|
-
)
|
561
|
-
message_type: Literal['ReceptionStatus'] = 'ReceptionStatus'
|
562
|
-
subject_message_id: ID = Field(
|
563
|
-
..., description='The message this ReceptionStatus refers to'
|
564
|
-
)
|
565
|
-
status: ReceptionStatusValues = Field(
|
566
|
-
..., description='Enumeration of status values'
|
554
|
+
extra="forbid",
|
567
555
|
)
|
556
|
+
message_type: Literal["ReceptionStatus"] = "ReceptionStatus"
|
557
|
+
subject_message_id: ID = Field(..., description="The message this ReceptionStatus refers to")
|
558
|
+
status: ReceptionStatusValues = Field(..., description="Enumeration of status values")
|
568
559
|
diagnostic_label: Optional[str] = Field(
|
569
560
|
None,
|
570
|
-
description=
|
561
|
+
description="Diagnostic label that can be used to provide additional information for debugging. However, not for HMI purposes.",
|
571
562
|
)
|
572
563
|
|
573
564
|
|
574
565
|
class InstructionStatusUpdate(BaseModel):
|
575
566
|
model_config = ConfigDict(
|
576
|
-
extra=
|
567
|
+
extra="forbid",
|
577
568
|
)
|
578
|
-
message_type: Literal[
|
569
|
+
message_type: Literal["InstructionStatusUpdate"] = "InstructionStatusUpdate"
|
579
570
|
message_id: ID
|
580
|
-
instruction_id: ID = Field(
|
581
|
-
|
582
|
-
)
|
583
|
-
status_type: InstructionStatus = Field(
|
584
|
-
..., description='Present status of this instruction.'
|
585
|
-
)
|
571
|
+
instruction_id: ID = Field(..., description="ID of this instruction (as provided by the CEM) ")
|
572
|
+
status_type: InstructionStatus = Field(..., description="Present status of this instruction.")
|
586
573
|
timestamp: AwareDatetime = Field(
|
587
|
-
..., description=
|
574
|
+
..., description="Timestamp when status_type has changed the last time."
|
588
575
|
)
|
589
576
|
|
590
577
|
|
591
578
|
class PEBCEnergyConstraint(BaseModel):
|
592
579
|
model_config = ConfigDict(
|
593
|
-
extra=
|
580
|
+
extra="forbid",
|
594
581
|
)
|
595
|
-
message_type: Literal[
|
582
|
+
message_type: Literal["PEBC.EnergyConstraint"] = "PEBC.EnergyConstraint"
|
596
583
|
message_id: ID
|
597
584
|
id: ID = Field(
|
598
585
|
...,
|
599
|
-
description=
|
586
|
+
description="Identifier of this PEBC.EnergyConstraints. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
600
587
|
)
|
601
588
|
valid_from: AwareDatetime = Field(
|
602
589
|
...,
|
603
|
-
description=
|
590
|
+
description="Moment this PEBC.EnergyConstraints information starts to be valid",
|
604
591
|
)
|
605
592
|
valid_until: AwareDatetime = Field(
|
606
593
|
...,
|
607
|
-
description=
|
594
|
+
description="Moment until this PEBC.EnergyConstraints information is valid.",
|
608
595
|
)
|
609
596
|
upper_average_power: float = Field(
|
610
597
|
...,
|
611
|
-
description=
|
598
|
+
description="Upper average power within the time period given by valid_from and valid_until. If the duration is multiplied with this power value, then the associated upper energy content can be derived. This is the highest amount of energy the resource will consume during that period of time. The Power Envelope created by the CEM must allow at least this much energy consumption (in case the number is positive). Must be greater than or equal to lower_average_power, and can be negative in case of energy production.",
|
612
599
|
)
|
613
600
|
lower_average_power: float = Field(
|
614
601
|
...,
|
615
|
-
description=
|
602
|
+
description="Lower average power within the time period given by valid_from and valid_until. If the duration is multiplied with this power value, then the associated lower energy content can be derived. This is the lowest amount of energy the resource will consume during that period of time. The Power Envelope created by the CEM must allow at least this much energy production (in case the number is negative). Must be greater than or equal to lower_average_power, and can be negative in case of energy production.",
|
616
603
|
)
|
617
604
|
commodity_quantity: CommodityQuantity = Field(
|
618
605
|
...,
|
619
|
-
description=
|
606
|
+
description="Type of power quantity which applies to upper_average_power and lower_average_power",
|
620
607
|
)
|
621
608
|
|
622
609
|
|
623
610
|
class PPBCScheduleInstruction(BaseModel):
|
624
611
|
model_config = ConfigDict(
|
625
|
-
extra=
|
612
|
+
extra="forbid",
|
626
613
|
)
|
627
|
-
message_type: Literal[
|
614
|
+
message_type: Literal["PPBC.ScheduleInstruction"] = "PPBC.ScheduleInstruction"
|
628
615
|
message_id: ID
|
629
616
|
id: ID = Field(
|
630
617
|
...,
|
631
|
-
description=
|
618
|
+
description="ID of the Instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
632
619
|
)
|
633
620
|
power_profile_id: ID = Field(
|
634
621
|
...,
|
635
|
-
description=
|
622
|
+
description="ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence is being selected and scheduled by the CEM.",
|
636
623
|
)
|
637
624
|
sequence_container_id: ID = Field(
|
638
625
|
...,
|
639
|
-
description=
|
626
|
+
description="ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence is being selected and scheduled by the CEM.",
|
640
627
|
)
|
641
628
|
power_sequence_id: ID = Field(
|
642
629
|
...,
|
643
|
-
description=
|
630
|
+
description="ID of the PPBC.PowerSequence that is being selected and scheduled by the CEM.",
|
644
631
|
)
|
645
632
|
execution_time: AwareDatetime = Field(
|
646
633
|
...,
|
647
|
-
description=
|
634
|
+
description="Indicates the moment the PPBC.PowerSequence shall start. When the specified execution time is in the past, execution must start as soon as possible.",
|
648
635
|
)
|
649
636
|
abnormal_condition: bool = Field(
|
650
637
|
...,
|
651
|
-
description=
|
638
|
+
description="Indicates if this is an instruction during an abnormal condition",
|
652
639
|
)
|
653
640
|
|
654
641
|
|
655
642
|
class PPBCStartInterruptionInstruction(BaseModel):
|
656
643
|
model_config = ConfigDict(
|
657
|
-
extra=
|
658
|
-
)
|
659
|
-
message_type: Literal['PPBC.StartInterruptionInstruction'] = (
|
660
|
-
'PPBC.StartInterruptionInstruction'
|
644
|
+
extra="forbid",
|
661
645
|
)
|
646
|
+
message_type: Literal["PPBC.StartInterruptionInstruction"] = "PPBC.StartInterruptionInstruction"
|
662
647
|
message_id: ID
|
663
648
|
id: ID = Field(
|
664
649
|
...,
|
665
|
-
description=
|
650
|
+
description="ID of the Instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
666
651
|
)
|
667
652
|
power_profile_id: ID = Field(
|
668
653
|
...,
|
669
|
-
description=
|
654
|
+
description="ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence is being interrupted by the CEM.",
|
670
655
|
)
|
671
656
|
sequence_container_id: ID = Field(
|
672
657
|
...,
|
673
|
-
description=
|
658
|
+
description="ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence is being interrupted by the CEM.",
|
674
659
|
)
|
675
660
|
power_sequence_id: ID = Field(
|
676
|
-
..., description=
|
661
|
+
..., description="ID of the PPBC.PowerSequence that the CEM wants to interrupt."
|
677
662
|
)
|
678
663
|
execution_time: AwareDatetime = Field(
|
679
664
|
...,
|
680
|
-
description=
|
665
|
+
description="Indicates the moment the PPBC.PowerSequence shall be interrupted. When the specified execution time is in the past, execution must start as soon as possible.",
|
681
666
|
)
|
682
667
|
abnormal_condition: bool = Field(
|
683
668
|
...,
|
684
|
-
description=
|
669
|
+
description="Indicates if this is an instruction during an abnormal condition",
|
685
670
|
)
|
686
671
|
|
687
672
|
|
688
673
|
class PPBCEndInterruptionInstruction(BaseModel):
|
689
674
|
model_config = ConfigDict(
|
690
|
-
extra=
|
691
|
-
)
|
692
|
-
message_type: Literal['PPBC.EndInterruptionInstruction'] = (
|
693
|
-
'PPBC.EndInterruptionInstruction'
|
675
|
+
extra="forbid",
|
694
676
|
)
|
677
|
+
message_type: Literal["PPBC.EndInterruptionInstruction"] = "PPBC.EndInterruptionInstruction"
|
695
678
|
message_id: ID
|
696
679
|
id: ID = Field(
|
697
680
|
...,
|
698
|
-
description=
|
681
|
+
description="ID of the Instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
699
682
|
)
|
700
683
|
power_profile_id: ID = Field(
|
701
684
|
...,
|
702
|
-
description=
|
685
|
+
description="ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence interruption is being ended by the CEM.",
|
703
686
|
)
|
704
687
|
sequence_container_id: ID = Field(
|
705
688
|
...,
|
706
|
-
description=
|
689
|
+
description="ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence interruption is being ended by the CEM.",
|
707
690
|
)
|
708
691
|
power_sequence_id: ID = Field(
|
709
692
|
...,
|
710
|
-
description=
|
693
|
+
description="ID of the PPBC.PowerSequence for which the CEM wants to end the interruption.",
|
711
694
|
)
|
712
695
|
execution_time: AwareDatetime = Field(
|
713
696
|
...,
|
714
|
-
description=
|
697
|
+
description="Indicates the moment PPBC.PowerSequence interruption shall end. When the specified execution time is in the past, execution must start as soon as possible.",
|
715
698
|
)
|
716
699
|
abnormal_condition: bool = Field(
|
717
700
|
...,
|
718
|
-
description=
|
701
|
+
description="Indicates if this is an instruction during an abnormal condition",
|
719
702
|
)
|
720
703
|
|
721
704
|
|
722
705
|
class OMBCStatus(BaseModel):
|
723
706
|
model_config = ConfigDict(
|
724
|
-
extra=
|
707
|
+
extra="forbid",
|
725
708
|
)
|
726
|
-
message_type: Literal[
|
709
|
+
message_type: Literal["OMBC.Status"] = "OMBC.Status"
|
727
710
|
message_id: ID
|
728
|
-
active_operation_mode_id: ID = Field(
|
729
|
-
..., description='ID of the active OMBC.OperationMode.'
|
730
|
-
)
|
711
|
+
active_operation_mode_id: ID = Field(..., description="ID of the active OMBC.OperationMode.")
|
731
712
|
operation_mode_factor: float = Field(
|
732
713
|
...,
|
733
|
-
description=
|
714
|
+
description="The number indicates the factor with which the OMBC.OperationMode should be configured. The factor should be greater than or equal than 0 and less or equal to 1.",
|
734
715
|
)
|
735
716
|
previous_operation_mode_id: Optional[ID] = Field(
|
736
717
|
None,
|
737
|
-
description=
|
718
|
+
description="ID of the OMBC.OperationMode that was previously active. This value shall always be provided, unless the active OMBC.OperationMode is the first OMBC.OperationMode the Resource Manager is aware of.",
|
738
719
|
)
|
739
720
|
transition_timestamp: Optional[AwareDatetime] = Field(
|
740
721
|
None,
|
741
|
-
description=
|
722
|
+
description="Time at which the transition from the previous OMBC.OperationMode to the active OMBC.OperationMode was initiated. This value shall always be provided, unless the active OMBC.OperationMode is the first OMBC.OperationMode the Resource Manager is aware of.",
|
742
723
|
)
|
743
724
|
|
744
725
|
|
745
726
|
class OMBCInstruction(BaseModel):
|
746
727
|
model_config = ConfigDict(
|
747
|
-
extra=
|
728
|
+
extra="forbid",
|
748
729
|
)
|
749
|
-
message_type: Literal[
|
730
|
+
message_type: Literal["OMBC.Instruction"] = "OMBC.Instruction"
|
750
731
|
message_id: ID
|
751
732
|
id: ID = Field(
|
752
733
|
...,
|
753
|
-
description=
|
734
|
+
description="ID of the instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
754
735
|
)
|
755
736
|
execution_time: AwareDatetime = Field(
|
756
737
|
...,
|
757
|
-
description=
|
738
|
+
description="Indicates the moment the execution of the instruction shall start. When the specified execution time is in the past, execution must start as soon as possible.",
|
758
739
|
)
|
759
740
|
operation_mode_id: ID = Field(
|
760
|
-
..., description=
|
741
|
+
..., description="ID of the OMBC.OperationMode that should be activated"
|
761
742
|
)
|
762
743
|
operation_mode_factor: float = Field(
|
763
744
|
...,
|
764
|
-
description=
|
745
|
+
description="The number indicates the factor with which the OMBC.OperationMode should be configured. The factor should be greater than or equal than 0 and less or equal to 1.",
|
765
746
|
)
|
766
747
|
abnormal_condition: bool = Field(
|
767
748
|
...,
|
768
|
-
description=
|
749
|
+
description="Indicates if this is an instruction during an abnormal condition",
|
769
750
|
)
|
770
751
|
|
771
752
|
|
772
753
|
class FRBCActuatorStatus(BaseModel):
|
773
754
|
model_config = ConfigDict(
|
774
|
-
extra=
|
755
|
+
extra="forbid",
|
775
756
|
)
|
776
|
-
message_type: Literal[
|
757
|
+
message_type: Literal["FRBC.ActuatorStatus"] = "FRBC.ActuatorStatus"
|
777
758
|
message_id: ID
|
778
|
-
actuator_id: ID = Field(
|
779
|
-
..., description='ID of the actuator this messages refers to'
|
780
|
-
)
|
759
|
+
actuator_id: ID = Field(..., description="ID of the actuator this messages refers to")
|
781
760
|
active_operation_mode_id: ID = Field(
|
782
|
-
..., description=
|
761
|
+
..., description="ID of the FRBC.OperationMode that is presently active."
|
783
762
|
)
|
784
763
|
operation_mode_factor: float = Field(
|
785
764
|
...,
|
786
|
-
description=
|
765
|
+
description="The number indicates the factor with which the FRBC.OperationMode is configured. The factor should be greater than or equal than 0 and less or equal to 1.",
|
787
766
|
)
|
788
767
|
previous_operation_mode_id: Optional[ID] = Field(
|
789
768
|
None,
|
790
|
-
description=
|
769
|
+
description="ID of the FRBC.OperationMode that was active before the present one. This value shall always be provided, unless the active FRBC.OperationMode is the first FRBC.OperationMode the Resource Manager is aware of.",
|
791
770
|
)
|
792
771
|
transition_timestamp: Optional[AwareDatetime] = Field(
|
793
772
|
None,
|
794
|
-
description=
|
773
|
+
description="Time at which the transition from the previous FRBC.OperationMode to the active FRBC.OperationMode was initiated. This value shall always be provided, unless the active FRBC.OperationMode is the first FRBC.OperationMode the Resource Manager is aware of.",
|
795
774
|
)
|
796
775
|
|
797
776
|
|
798
777
|
class FRBCStorageStatus(BaseModel):
|
799
778
|
model_config = ConfigDict(
|
800
|
-
extra=
|
779
|
+
extra="forbid",
|
801
780
|
)
|
802
|
-
message_type: Literal[
|
781
|
+
message_type: Literal["FRBC.StorageStatus"] = "FRBC.StorageStatus"
|
803
782
|
message_id: ID
|
804
|
-
present_fill_level: float = Field(
|
805
|
-
..., description='Present fill level of the Storage'
|
806
|
-
)
|
783
|
+
present_fill_level: float = Field(..., description="Present fill level of the Storage")
|
807
784
|
|
808
785
|
|
809
786
|
class FRBCLeakageBehaviour(BaseModel):
|
810
787
|
model_config = ConfigDict(
|
811
|
-
extra=
|
788
|
+
extra="forbid",
|
812
789
|
)
|
813
|
-
message_type: Literal[
|
790
|
+
message_type: Literal["FRBC.LeakageBehaviour"] = "FRBC.LeakageBehaviour"
|
814
791
|
message_id: ID
|
815
792
|
valid_from: AwareDatetime = Field(
|
816
793
|
...,
|
817
|
-
description=
|
794
|
+
description="Moment this FRBC.LeakageBehaviour starts to be valid. If the FRBC.LeakageBehaviour is immediately valid, the DateTimeStamp should be now or in the past.",
|
818
795
|
)
|
819
796
|
elements: List[FRBCLeakageBehaviourElement] = Field(
|
820
797
|
...,
|
821
|
-
description=
|
798
|
+
description="List of elements that model the leakage behaviour of the buffer. The fill_level_ranges of the elements must be contiguous.",
|
822
799
|
max_length=288,
|
823
800
|
min_length=1,
|
824
801
|
)
|
@@ -826,46 +803,44 @@ class FRBCLeakageBehaviour(BaseModel):
|
|
826
803
|
|
827
804
|
class FRBCInstruction(BaseModel):
|
828
805
|
model_config = ConfigDict(
|
829
|
-
extra=
|
806
|
+
extra="forbid",
|
830
807
|
)
|
831
|
-
message_type: Literal[
|
808
|
+
message_type: Literal["FRBC.Instruction"] = "FRBC.Instruction"
|
832
809
|
message_id: ID
|
833
810
|
id: ID = Field(
|
834
811
|
...,
|
835
|
-
description=
|
836
|
-
)
|
837
|
-
actuator_id: ID = Field(
|
838
|
-
..., description='ID of the actuator this instruction belongs to.'
|
812
|
+
description="ID of the instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
839
813
|
)
|
814
|
+
actuator_id: ID = Field(..., description="ID of the actuator this instruction belongs to.")
|
840
815
|
operation_mode: ID = Field(
|
841
|
-
..., description=
|
816
|
+
..., description="ID of the FRBC.OperationMode that should be activated."
|
842
817
|
)
|
843
818
|
operation_mode_factor: float = Field(
|
844
819
|
...,
|
845
|
-
description=
|
820
|
+
description="The number indicates the factor with which the FRBC.OperationMode should be configured. The factor should be greater than or equal to 0 and less or equal to 1.",
|
846
821
|
)
|
847
822
|
execution_time: AwareDatetime = Field(
|
848
823
|
...,
|
849
|
-
description=
|
824
|
+
description="Indicates the moment the execution of the instruction shall start. When the specified execution time is in the past, execution must start as soon as possible.",
|
850
825
|
)
|
851
826
|
abnormal_condition: bool = Field(
|
852
827
|
...,
|
853
|
-
description=
|
828
|
+
description="Indicates if this is an instruction during an abnormal condition.",
|
854
829
|
)
|
855
830
|
|
856
831
|
|
857
832
|
class FRBCUsageForecast(BaseModel):
|
858
833
|
model_config = ConfigDict(
|
859
|
-
extra=
|
834
|
+
extra="forbid",
|
860
835
|
)
|
861
|
-
message_type: Literal[
|
836
|
+
message_type: Literal["FRBC.UsageForecast"] = "FRBC.UsageForecast"
|
862
837
|
message_id: ID
|
863
838
|
start_time: AwareDatetime = Field(
|
864
|
-
..., description=
|
839
|
+
..., description="Time at which the FRBC.UsageForecast starts."
|
865
840
|
)
|
866
841
|
elements: List[FRBCUsageForecastElement] = Field(
|
867
842
|
...,
|
868
|
-
description=
|
843
|
+
description="Further elements that model the profile. There shall be at least one element. Elements must be placed in chronological order.",
|
869
844
|
max_length=288,
|
870
845
|
min_length=1,
|
871
846
|
)
|
@@ -873,16 +848,16 @@ class FRBCUsageForecast(BaseModel):
|
|
873
848
|
|
874
849
|
class FRBCFillLevelTargetProfile(BaseModel):
|
875
850
|
model_config = ConfigDict(
|
876
|
-
extra=
|
851
|
+
extra="forbid",
|
877
852
|
)
|
878
|
-
message_type: Literal[
|
853
|
+
message_type: Literal["FRBC.FillLevelTargetProfile"] = "FRBC.FillLevelTargetProfile"
|
879
854
|
message_id: ID
|
880
855
|
start_time: AwareDatetime = Field(
|
881
|
-
..., description=
|
856
|
+
..., description="Time at which the FRBC.FillLevelTargetProfile starts."
|
882
857
|
)
|
883
858
|
elements: List[FRBCFillLevelTargetProfileElement] = Field(
|
884
859
|
...,
|
885
|
-
description=
|
860
|
+
description="List of different fill levels that have to be targeted within a given duration. There shall be at least one element. Elements must be placed in chronological order.",
|
886
861
|
max_length=288,
|
887
862
|
min_length=1,
|
888
863
|
)
|
@@ -890,71 +865,65 @@ class FRBCFillLevelTargetProfile(BaseModel):
|
|
890
865
|
|
891
866
|
class DDBCActuatorStatus(BaseModel):
|
892
867
|
model_config = ConfigDict(
|
893
|
-
extra=
|
868
|
+
extra="forbid",
|
894
869
|
)
|
895
|
-
message_type: Literal[
|
870
|
+
message_type: Literal["DDBC.ActuatorStatus"] = "DDBC.ActuatorStatus"
|
896
871
|
message_id: ID
|
897
|
-
actuator_id: ID = Field(
|
898
|
-
..., description='ID of the actuator this messages refers to'
|
899
|
-
)
|
872
|
+
actuator_id: ID = Field(..., description="ID of the actuator this messages refers to")
|
900
873
|
active_operation_mode_id: ID = Field(
|
901
874
|
...,
|
902
|
-
description=
|
875
|
+
description="The operation mode that is presently active for this actuator.",
|
903
876
|
)
|
904
877
|
operation_mode_factor: float = Field(
|
905
878
|
...,
|
906
|
-
description=
|
879
|
+
description="The number indicates the factor with which the DDBC.OperationMode is configured. The factor should be greater than or equal to 0 and less or equal to 1.",
|
907
880
|
)
|
908
881
|
previous_operation_mode_id: Optional[ID] = Field(
|
909
882
|
None,
|
910
|
-
description=
|
883
|
+
description="ID of the DDBC,OperationMode that was active before the present one. This value shall always be provided, unless the active DDBC.OperationMode is the first DDBC.OperationMode the Resource Manager is aware of.",
|
911
884
|
)
|
912
885
|
transition_timestamp: Optional[AwareDatetime] = Field(
|
913
886
|
None,
|
914
|
-
description=
|
887
|
+
description="Time at which the transition from the previous DDBC.OperationMode to the active DDBC.OperationMode was initiated. This value shall always be provided, unless the active DDBC.OperationMode is the first DDBC.OperationMode the Resource Manager is aware of.",
|
915
888
|
)
|
916
889
|
|
917
890
|
|
918
891
|
class DDBCInstruction(BaseModel):
|
919
892
|
model_config = ConfigDict(
|
920
|
-
extra=
|
893
|
+
extra="forbid",
|
921
894
|
)
|
922
|
-
message_type: Literal[
|
895
|
+
message_type: Literal["DDBC.Instruction"] = "DDBC.Instruction"
|
923
896
|
message_id: ID
|
924
897
|
id: ID = Field(
|
925
898
|
...,
|
926
|
-
description=
|
899
|
+
description="Identifier of this DDBC.Instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
927
900
|
)
|
928
901
|
execution_time: AwareDatetime = Field(
|
929
902
|
...,
|
930
|
-
description=
|
903
|
+
description="Indicates the moment the execution of the instruction shall start. When the specified execution time is in the past, execution must start as soon as possible.",
|
931
904
|
)
|
932
905
|
abnormal_condition: bool = Field(
|
933
906
|
...,
|
934
|
-
description=
|
935
|
-
)
|
936
|
-
actuator_id: ID = Field(
|
937
|
-
..., description='ID of the actuator this Instruction belongs to.'
|
907
|
+
description="Indicates if this is an instruction during an abnormal condition",
|
938
908
|
)
|
939
|
-
|
909
|
+
actuator_id: ID = Field(..., description="ID of the actuator this Instruction belongs to.")
|
910
|
+
operation_mode_id: ID = Field(..., description="ID of the DDBC.OperationMode")
|
940
911
|
operation_mode_factor: float = Field(
|
941
912
|
...,
|
942
|
-
description=
|
913
|
+
description="The number indicates the factor with which the OMBC.OperationMode should be configured. The factor should be greater than or equal to 0 and less or equal to 1.",
|
943
914
|
)
|
944
915
|
|
945
916
|
|
946
917
|
class DDBCAverageDemandRateForecast(BaseModel):
|
947
918
|
model_config = ConfigDict(
|
948
|
-
extra=
|
949
|
-
)
|
950
|
-
message_type: Literal['DDBC.AverageDemandRateForecast'] = (
|
951
|
-
'DDBC.AverageDemandRateForecast'
|
919
|
+
extra="forbid",
|
952
920
|
)
|
921
|
+
message_type: Literal["DDBC.AverageDemandRateForecast"] = "DDBC.AverageDemandRateForecast"
|
953
922
|
message_id: ID
|
954
|
-
start_time: AwareDatetime = Field(..., description=
|
923
|
+
start_time: AwareDatetime = Field(..., description="Start time of the profile.")
|
955
924
|
elements: List[DDBCAverageDemandRateForecastElement] = Field(
|
956
925
|
...,
|
957
|
-
description=
|
926
|
+
description="Elements of the profile. Elements must be placed in chronological order.",
|
958
927
|
max_length=288,
|
959
928
|
min_length=1,
|
960
929
|
)
|
@@ -962,84 +931,82 @@ class DDBCAverageDemandRateForecast(BaseModel):
|
|
962
931
|
|
963
932
|
class PowerValue(BaseModel):
|
964
933
|
model_config = ConfigDict(
|
965
|
-
extra=
|
934
|
+
extra="forbid",
|
966
935
|
)
|
967
936
|
commodity_quantity: CommodityQuantity = Field(
|
968
|
-
..., description=
|
937
|
+
..., description="The power quantity the value refers to"
|
969
938
|
)
|
970
939
|
value: float = Field(
|
971
940
|
...,
|
972
|
-
description=
|
941
|
+
description="Power value expressed in the unit associated with the CommodityQuantity",
|
973
942
|
)
|
974
943
|
|
975
944
|
|
976
945
|
class PowerForecastValue(BaseModel):
|
977
946
|
model_config = ConfigDict(
|
978
|
-
extra=
|
947
|
+
extra="forbid",
|
979
948
|
)
|
980
949
|
value_upper_limit: Optional[float] = Field(
|
981
950
|
None,
|
982
|
-
description=
|
951
|
+
description="The upper boundary of the range with 100 % certainty the power value is in it",
|
983
952
|
)
|
984
953
|
value_upper_95PPR: Optional[float] = Field(
|
985
954
|
None,
|
986
|
-
description=
|
955
|
+
description="The upper boundary of the range with 95 % certainty the power value is in it",
|
987
956
|
)
|
988
957
|
value_upper_68PPR: Optional[float] = Field(
|
989
958
|
None,
|
990
|
-
description=
|
959
|
+
description="The upper boundary of the range with 68 % certainty the power value is in it",
|
991
960
|
)
|
992
|
-
value_expected: float = Field(..., description=
|
961
|
+
value_expected: float = Field(..., description="The expected power value.")
|
993
962
|
value_lower_68PPR: Optional[float] = Field(
|
994
963
|
None,
|
995
|
-
description=
|
964
|
+
description="The lower boundary of the range with 68 % certainty the power value is in it",
|
996
965
|
)
|
997
966
|
value_lower_95PPR: Optional[float] = Field(
|
998
967
|
None,
|
999
|
-
description=
|
968
|
+
description="The lower boundary of the range with 95 % certainty the power value is in it",
|
1000
969
|
)
|
1001
970
|
value_lower_limit: Optional[float] = Field(
|
1002
971
|
None,
|
1003
|
-
description=
|
972
|
+
description="The lower boundary of the range with 100 % certainty the power value is in it",
|
1004
973
|
)
|
1005
974
|
commodity_quantity: CommodityQuantity = Field(
|
1006
|
-
..., description=
|
975
|
+
..., description="The power quantity the value refers to"
|
1007
976
|
)
|
1008
977
|
|
1009
978
|
|
1010
979
|
class PowerRange(BaseModel):
|
1011
980
|
model_config = ConfigDict(
|
1012
|
-
extra=
|
981
|
+
extra="forbid",
|
1013
982
|
)
|
1014
983
|
start_of_range: float = Field(
|
1015
|
-
..., description=
|
1016
|
-
)
|
1017
|
-
end_of_range: float = Field(
|
1018
|
-
..., description='Power value that defines the end of the range.'
|
984
|
+
..., description="Power value that defines the start of the range."
|
1019
985
|
)
|
986
|
+
end_of_range: float = Field(..., description="Power value that defines the end of the range.")
|
1020
987
|
commodity_quantity: CommodityQuantity = Field(
|
1021
|
-
..., description=
|
988
|
+
..., description="The power quantity the values refer to"
|
1022
989
|
)
|
1023
990
|
|
1024
991
|
|
1025
992
|
class Role(BaseModel):
|
1026
993
|
model_config = ConfigDict(
|
1027
|
-
extra=
|
994
|
+
extra="forbid",
|
1028
995
|
)
|
1029
996
|
role: RoleType = Field(
|
1030
|
-
..., description=
|
997
|
+
..., description="Role type of the Resource Manager for the given commodity"
|
1031
998
|
)
|
1032
|
-
commodity: Commodity = Field(..., description=
|
999
|
+
commodity: Commodity = Field(..., description="Commodity the role refers to.")
|
1033
1000
|
|
1034
1001
|
|
1035
1002
|
class PowerForecastElement(BaseModel):
|
1036
1003
|
model_config = ConfigDict(
|
1037
|
-
extra=
|
1004
|
+
extra="forbid",
|
1038
1005
|
)
|
1039
|
-
duration: Duration = Field(..., description=
|
1006
|
+
duration: Duration = Field(..., description="Duration of the PowerForecastElement")
|
1040
1007
|
power_values: List[PowerForecastValue] = Field(
|
1041
1008
|
...,
|
1042
|
-
description=
|
1009
|
+
description="The values of power that are expected for the given period of time. There shall be at least one PowerForecastValue, and at most one PowerForecastValue per CommodityQuantity.",
|
1043
1010
|
max_length=10,
|
1044
1011
|
min_length=1,
|
1045
1012
|
)
|
@@ -1047,39 +1014,39 @@ class PowerForecastElement(BaseModel):
|
|
1047
1014
|
|
1048
1015
|
class PEBCAllowedLimitRange(BaseModel):
|
1049
1016
|
model_config = ConfigDict(
|
1050
|
-
extra=
|
1017
|
+
extra="forbid",
|
1051
1018
|
)
|
1052
1019
|
commodity_quantity: CommodityQuantity = Field(
|
1053
|
-
..., description=
|
1020
|
+
..., description="Type of power quantity this PEBC.AllowedLimitRange applies to"
|
1054
1021
|
)
|
1055
1022
|
limit_type: PEBCPowerEnvelopeLimitType = Field(
|
1056
1023
|
...,
|
1057
|
-
description=
|
1024
|
+
description="Indicates if this ranges applies to the upper limit or the lower limit",
|
1058
1025
|
)
|
1059
1026
|
range_boundary: NumberRange = Field(
|
1060
1027
|
...,
|
1061
|
-
description=
|
1028
|
+
description="Boundaries of the power range of this PEBC.AllowedLimitRange. The CEM is allowed to choose values within this range for the power envelope for the limit as described in limit_type. The start of the range shall be smaller or equal than the end of the range. ",
|
1062
1029
|
)
|
1063
1030
|
abnormal_condition_only: bool = Field(
|
1064
1031
|
...,
|
1065
|
-
description=
|
1032
|
+
description="Indicates if this PEBC.AllowedLimitRange may only be used during an abnormal condition",
|
1066
1033
|
)
|
1067
1034
|
|
1068
1035
|
|
1069
1036
|
class PEBCPowerEnvelope(BaseModel):
|
1070
1037
|
model_config = ConfigDict(
|
1071
|
-
extra=
|
1038
|
+
extra="forbid",
|
1072
1039
|
)
|
1073
1040
|
id: ID = Field(
|
1074
1041
|
...,
|
1075
|
-
description=
|
1042
|
+
description="Identifier of this PEBC.PowerEnvelope. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1076
1043
|
)
|
1077
1044
|
commodity_quantity: CommodityQuantity = Field(
|
1078
|
-
..., description=
|
1045
|
+
..., description="Type of power quantity this PEBC.PowerEnvelope applies to"
|
1079
1046
|
)
|
1080
1047
|
power_envelope_elements: List[PEBCPowerEnvelopeElement] = Field(
|
1081
1048
|
...,
|
1082
|
-
description=
|
1049
|
+
description="The elements of this PEBC.PowerEnvelope. Shall contain at least one element. Elements must be placed in chronological order.",
|
1083
1050
|
max_length=288,
|
1084
1051
|
min_length=1,
|
1085
1052
|
)
|
@@ -1087,14 +1054,12 @@ class PEBCPowerEnvelope(BaseModel):
|
|
1087
1054
|
|
1088
1055
|
class PPBCPowerSequenceElement(BaseModel):
|
1089
1056
|
model_config = ConfigDict(
|
1090
|
-
extra=
|
1091
|
-
)
|
1092
|
-
duration: Duration = Field(
|
1093
|
-
..., description='Duration of the PPBC.PowerSequenceElement.'
|
1057
|
+
extra="forbid",
|
1094
1058
|
)
|
1059
|
+
duration: Duration = Field(..., description="Duration of the PPBC.PowerSequenceElement.")
|
1095
1060
|
power_values: List[PowerForecastValue] = Field(
|
1096
1061
|
...,
|
1097
|
-
description=
|
1062
|
+
description="The value of power and deviations for the given duration. The array should contain at least one PowerForecastValue and at most one PowerForecastValue per CommodityQuantity.",
|
1098
1063
|
max_length=10,
|
1099
1064
|
min_length=1,
|
1100
1065
|
)
|
@@ -1102,163 +1067,163 @@ class PPBCPowerSequenceElement(BaseModel):
|
|
1102
1067
|
|
1103
1068
|
class PPBCPowerSequenceContainerStatus(BaseModel):
|
1104
1069
|
model_config = ConfigDict(
|
1105
|
-
extra=
|
1070
|
+
extra="forbid",
|
1106
1071
|
)
|
1107
1072
|
power_profile_id: ID = Field(
|
1108
1073
|
...,
|
1109
|
-
description=
|
1074
|
+
description="ID of the PPBC.PowerProfileDefinition of which the data element ‘sequence_container_id’ refers to. ",
|
1110
1075
|
)
|
1111
1076
|
sequence_container_id: ID = Field(
|
1112
1077
|
...,
|
1113
|
-
description=
|
1078
|
+
description="ID of the PPBC.PowerSequenceContainer this PPBC.PowerSequenceContainerStatus provides information about.",
|
1114
1079
|
)
|
1115
1080
|
selected_sequence_id: Optional[ID] = Field(
|
1116
1081
|
None,
|
1117
|
-
description=
|
1082
|
+
description="ID of selected PPBC.PowerSequence. When no ID is given, no sequence was selected yet.",
|
1118
1083
|
)
|
1119
1084
|
progress: Optional[Duration] = Field(
|
1120
1085
|
None,
|
1121
|
-
description=
|
1086
|
+
description="Time that has passed since the selected sequence has started. A value must be provided, unless no sequence has been selected or the selected sequence hasn’t started yet.",
|
1122
1087
|
)
|
1123
1088
|
status: PPBCPowerSequenceStatus = Field(
|
1124
|
-
..., description=
|
1089
|
+
..., description="Status of the selected PPBC.PowerSequence"
|
1125
1090
|
)
|
1126
1091
|
|
1127
1092
|
|
1128
1093
|
class OMBCOperationMode(BaseModel):
|
1129
1094
|
model_config = ConfigDict(
|
1130
|
-
extra=
|
1095
|
+
extra="forbid",
|
1131
1096
|
)
|
1132
1097
|
id: ID = Field(
|
1133
1098
|
...,
|
1134
|
-
description=
|
1099
|
+
description="ID of the OBMC.OperationMode. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1135
1100
|
)
|
1136
1101
|
diagnostic_label: Optional[str] = Field(
|
1137
1102
|
None,
|
1138
|
-
description=
|
1103
|
+
description="Human readable name/description of the OMBC.OperationMode. This element is only intended for diagnostic purposes and not for HMI applications.",
|
1139
1104
|
)
|
1140
1105
|
power_ranges: List[PowerRange] = Field(
|
1141
1106
|
...,
|
1142
|
-
description=
|
1107
|
+
description="The power produced or consumed by this operation mode. The start of each PowerRange is associated with an operation_mode_factor of 0, the end is associated with an operation_mode_factor of 1. In the array there must be at least one PowerRange, and at most one PowerRange per CommodityQuantity.",
|
1143
1108
|
max_length=10,
|
1144
1109
|
min_length=1,
|
1145
1110
|
)
|
1146
1111
|
running_costs: Optional[NumberRange] = Field(
|
1147
1112
|
None,
|
1148
|
-
description=
|
1113
|
+
description="Additional costs per second (e.g. wear, services) associated with this operation mode in the currency defined by the ResourceManagerDetails , excluding the commodity cost. The range is expressing uncertainty and is not linked to the operation_mode_factor.",
|
1149
1114
|
)
|
1150
1115
|
abnormal_condition_only: bool = Field(
|
1151
1116
|
...,
|
1152
|
-
description=
|
1117
|
+
description="Indicates if this OMBC.OperationMode may only be used during an abnormal condition.",
|
1153
1118
|
)
|
1154
1119
|
|
1155
1120
|
|
1156
1121
|
class FRBCOperationModeElement(BaseModel):
|
1157
1122
|
model_config = ConfigDict(
|
1158
|
-
extra=
|
1123
|
+
extra="forbid",
|
1159
1124
|
)
|
1160
1125
|
fill_level_range: NumberRange = Field(
|
1161
1126
|
...,
|
1162
|
-
description=
|
1127
|
+
description="The range of the fill level for which this FRBC.OperationModeElement applies. The start of the NumberRange shall be smaller than the end of the NumberRange.",
|
1163
1128
|
)
|
1164
1129
|
fill_rate: NumberRange = Field(
|
1165
1130
|
...,
|
1166
|
-
description=
|
1131
|
+
description="Indicates the change in fill_level per second. The lower_boundary of the NumberRange is associated with an operation_mode_factor of 0, the upper_boundary is associated with an operation_mode_factor of 1. ",
|
1167
1132
|
)
|
1168
1133
|
power_ranges: List[PowerRange] = Field(
|
1169
1134
|
...,
|
1170
|
-
description=
|
1135
|
+
description="The power produced or consumed by this operation mode. The start of each PowerRange is associated with an operation_mode_factor of 0, the end is associated with an operation_mode_factor of 1. In the array there must be at least one PowerRange, and at most one PowerRange per CommodityQuantity.",
|
1171
1136
|
max_length=10,
|
1172
1137
|
min_length=1,
|
1173
1138
|
)
|
1174
1139
|
running_costs: Optional[NumberRange] = Field(
|
1175
1140
|
None,
|
1176
|
-
description=
|
1141
|
+
description="Additional costs per second (e.g. wear, services) associated with this operation mode in the currency defined by the ResourceManagerDetails, excluding the commodity cost. The range is expressing uncertainty and is not linked to the operation_mode_factor.",
|
1177
1142
|
)
|
1178
1143
|
|
1179
1144
|
|
1180
1145
|
class DDBCOperationMode(BaseModel):
|
1181
1146
|
model_config = ConfigDict(
|
1182
|
-
extra=
|
1147
|
+
extra="forbid",
|
1183
1148
|
)
|
1184
1149
|
Id: ID = Field(
|
1185
1150
|
...,
|
1186
|
-
description=
|
1151
|
+
description="ID of this operation mode. Must be unique in the scope of the DDBC.ActuatorDescription in which it is used.",
|
1187
1152
|
)
|
1188
1153
|
diagnostic_label: Optional[str] = Field(
|
1189
1154
|
None,
|
1190
|
-
description=
|
1155
|
+
description="Human readable name/description of the DDBC.OperationMode. This element is only intended for diagnostic purposes and not for HMI applications.",
|
1191
1156
|
)
|
1192
1157
|
power_ranges: List[PowerRange] = Field(
|
1193
1158
|
...,
|
1194
|
-
description=
|
1159
|
+
description="The power produced or consumed by this operation mode. The start of each PowerRange is associated with an operation_mode_factor of 0, the end is associated with an operation_mode_factor of 1. In the array there must be at least one PowerRange, and at most one PowerRange per CommodityQuantity.",
|
1195
1160
|
max_length=10,
|
1196
1161
|
min_length=1,
|
1197
1162
|
)
|
1198
1163
|
supply_range: NumberRange = Field(
|
1199
1164
|
...,
|
1200
|
-
description=
|
1165
|
+
description="The supply rate this DDBC.OperationMode can deliver for the CEM to match the demand rate. The start of the NumberRange is associated with an operation_mode_factor of 0, the end is associated with an operation_mode_factor of 1.",
|
1201
1166
|
)
|
1202
1167
|
running_costs: Optional[NumberRange] = Field(
|
1203
1168
|
None,
|
1204
|
-
description=
|
1169
|
+
description="Additional costs per second (e.g. wear, services) associated with this operation mode in the currency defined by the ResourceManagerDetails, excluding the commodity cost. The range is expressing uncertainty and is not linked to the operation_mode_factor.",
|
1205
1170
|
)
|
1206
1171
|
abnormal_condition_only: bool = Field(
|
1207
1172
|
...,
|
1208
|
-
description=
|
1173
|
+
description="Indicates if this DDBC.OperationMode may only be used during an abnormal condition.",
|
1209
1174
|
)
|
1210
1175
|
|
1211
1176
|
|
1212
1177
|
class ResourceManagerDetails(BaseModel):
|
1213
1178
|
model_config = ConfigDict(
|
1214
|
-
extra=
|
1179
|
+
extra="forbid",
|
1215
1180
|
)
|
1216
|
-
message_type: Literal[
|
1181
|
+
message_type: Literal["ResourceManagerDetails"] = "ResourceManagerDetails"
|
1217
1182
|
message_id: ID
|
1218
1183
|
resource_id: ID = Field(
|
1219
1184
|
...,
|
1220
|
-
description=
|
1185
|
+
description="Identifier of the Resource Manager. Must be unique within the scope of the CEM.",
|
1221
1186
|
)
|
1222
|
-
name: Optional[str] = Field(None, description=
|
1187
|
+
name: Optional[str] = Field(None, description="Human readable name given by user")
|
1223
1188
|
roles: List[Role] = Field(
|
1224
1189
|
...,
|
1225
|
-
description=
|
1190
|
+
description="Each Resource Manager provides one or more energy Roles",
|
1226
1191
|
max_length=3,
|
1227
1192
|
min_length=1,
|
1228
1193
|
)
|
1229
|
-
manufacturer: Optional[str] = Field(None, description=
|
1194
|
+
manufacturer: Optional[str] = Field(None, description="Name of Manufacturer")
|
1230
1195
|
model: Optional[str] = Field(
|
1231
1196
|
None,
|
1232
|
-
description=
|
1197
|
+
description="Name of the model of the device (provided by the manufacturer)",
|
1233
1198
|
)
|
1234
1199
|
serial_number: Optional[str] = Field(
|
1235
|
-
None, description=
|
1200
|
+
None, description="Serial number of the device (provided by the manufacturer)"
|
1236
1201
|
)
|
1237
1202
|
firmware_version: Optional[str] = Field(
|
1238
1203
|
None,
|
1239
|
-
description=
|
1204
|
+
description="Version identifier of the firmware used in the device (provided by the manufacturer)",
|
1240
1205
|
)
|
1241
1206
|
instruction_processing_delay: Duration = Field(
|
1242
1207
|
...,
|
1243
|
-
description=
|
1208
|
+
description="The average time the combination of Resource Manager and HBES/BACS/SASS or (Smart) device needs to process and execute an instruction",
|
1244
1209
|
)
|
1245
1210
|
available_control_types: List[ControlType] = Field(
|
1246
1211
|
...,
|
1247
|
-
description=
|
1212
|
+
description="The control types supported by this Resource Manager.",
|
1248
1213
|
max_length=5,
|
1249
1214
|
min_length=1,
|
1250
1215
|
)
|
1251
1216
|
currency: Optional[Currency] = Field(
|
1252
1217
|
None,
|
1253
|
-
description=
|
1218
|
+
description="Currency to be used for all information regarding costs. Mandatory if cost information is published.",
|
1254
1219
|
)
|
1255
1220
|
provides_forecast: bool = Field(
|
1256
1221
|
...,
|
1257
|
-
description=
|
1222
|
+
description="Indicates whether the ResourceManager is able to provide PowerForecasts",
|
1258
1223
|
)
|
1259
1224
|
provides_power_measurement_types: List[CommodityQuantity] = Field(
|
1260
1225
|
...,
|
1261
|
-
description=
|
1226
|
+
description="Array of all CommodityQuantities that this Resource Manager can provide measurements for. ",
|
1262
1227
|
max_length=10,
|
1263
1228
|
min_length=1,
|
1264
1229
|
)
|
@@ -1266,16 +1231,16 @@ class ResourceManagerDetails(BaseModel):
|
|
1266
1231
|
|
1267
1232
|
class PowerMeasurement(BaseModel):
|
1268
1233
|
model_config = ConfigDict(
|
1269
|
-
extra=
|
1234
|
+
extra="forbid",
|
1270
1235
|
)
|
1271
|
-
message_type: Literal[
|
1236
|
+
message_type: Literal["PowerMeasurement"] = "PowerMeasurement"
|
1272
1237
|
message_id: ID
|
1273
1238
|
measurement_timestamp: AwareDatetime = Field(
|
1274
|
-
..., description=
|
1239
|
+
..., description="Timestamp when PowerValues were measured."
|
1275
1240
|
)
|
1276
1241
|
values: List[PowerValue] = Field(
|
1277
1242
|
...,
|
1278
|
-
description=
|
1243
|
+
description="Array of measured PowerValues. Must contain at least one item and at most one item per ‘commodity_quantity’ (defined inside the PowerValue).",
|
1279
1244
|
max_length=10,
|
1280
1245
|
min_length=1,
|
1281
1246
|
)
|
@@ -1283,16 +1248,16 @@ class PowerMeasurement(BaseModel):
|
|
1283
1248
|
|
1284
1249
|
class PowerForecast(BaseModel):
|
1285
1250
|
model_config = ConfigDict(
|
1286
|
-
extra=
|
1251
|
+
extra="forbid",
|
1287
1252
|
)
|
1288
|
-
message_type: Literal[
|
1253
|
+
message_type: Literal["PowerForecast"] = "PowerForecast"
|
1289
1254
|
message_id: ID
|
1290
1255
|
start_time: AwareDatetime = Field(
|
1291
|
-
..., description=
|
1256
|
+
..., description="Start time of time period that is covered by the profile."
|
1292
1257
|
)
|
1293
1258
|
elements: List[PowerForecastElement] = Field(
|
1294
1259
|
...,
|
1295
|
-
description=
|
1260
|
+
description="Elements of which this forecast consists. Contains at least one element. Elements must be placed in chronological order.",
|
1296
1261
|
max_length=288,
|
1297
1262
|
min_length=1,
|
1298
1263
|
)
|
@@ -1300,27 +1265,27 @@ class PowerForecast(BaseModel):
|
|
1300
1265
|
|
1301
1266
|
class PEBCPowerConstraints(BaseModel):
|
1302
1267
|
model_config = ConfigDict(
|
1303
|
-
extra=
|
1268
|
+
extra="forbid",
|
1304
1269
|
)
|
1305
|
-
message_type: Literal[
|
1270
|
+
message_type: Literal["PEBC.PowerConstraints"] = "PEBC.PowerConstraints"
|
1306
1271
|
message_id: ID
|
1307
1272
|
id: ID = Field(
|
1308
1273
|
...,
|
1309
|
-
description=
|
1274
|
+
description="Identifier of this PEBC.PowerConstraints. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1310
1275
|
)
|
1311
1276
|
valid_from: AwareDatetime = Field(
|
1312
|
-
..., description=
|
1277
|
+
..., description="Moment this PEBC.PowerConstraints start to be valid"
|
1313
1278
|
)
|
1314
1279
|
valid_until: Optional[AwareDatetime] = Field(
|
1315
1280
|
None,
|
1316
|
-
description=
|
1281
|
+
description="Moment until this PEBC.PowerConstraints is valid. If valid_until is not present, there is no determined end time of this PEBC.PowerConstraints.",
|
1317
1282
|
)
|
1318
1283
|
consequence_type: PEBCPowerEnvelopeConsequenceType = Field(
|
1319
|
-
..., description=
|
1284
|
+
..., description="Type of consequence of limiting power"
|
1320
1285
|
)
|
1321
1286
|
allowed_limit_ranges: List[PEBCAllowedLimitRange] = Field(
|
1322
1287
|
...,
|
1323
|
-
description=
|
1288
|
+
description="The actual constraints. There shall be at least one PEBC.AllowedLimitRange for the UPPER_LIMIT and at least one AllowedLimitRange for the LOWER_LIMIT. It is allowed to have multiple PEBC.AllowedLimitRange objects with identical CommodityQuantities and LimitTypes.",
|
1324
1289
|
max_length=100,
|
1325
1290
|
min_length=2,
|
1326
1291
|
)
|
@@ -1328,29 +1293,29 @@ class PEBCPowerConstraints(BaseModel):
|
|
1328
1293
|
|
1329
1294
|
class PEBCInstruction(BaseModel):
|
1330
1295
|
model_config = ConfigDict(
|
1331
|
-
extra=
|
1296
|
+
extra="forbid",
|
1332
1297
|
)
|
1333
|
-
message_type: Literal[
|
1298
|
+
message_type: Literal["PEBC.Instruction"] = "PEBC.Instruction"
|
1334
1299
|
message_id: ID
|
1335
1300
|
id: ID = Field(
|
1336
1301
|
...,
|
1337
|
-
description=
|
1302
|
+
description="Identifier of this PEBC.Instruction. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1338
1303
|
)
|
1339
1304
|
execution_time: AwareDatetime = Field(
|
1340
1305
|
...,
|
1341
|
-
description=
|
1306
|
+
description="Indicates the moment the execution of the instruction shall start. When the specified execution time is in the past, execution must start as soon as possible.",
|
1342
1307
|
)
|
1343
1308
|
abnormal_condition: bool = Field(
|
1344
1309
|
...,
|
1345
|
-
description=
|
1310
|
+
description="Indicates if this is an instruction during an abnormal condition.",
|
1346
1311
|
)
|
1347
1312
|
power_constraints_id: ID = Field(
|
1348
1313
|
...,
|
1349
|
-
description=
|
1314
|
+
description="Identifier of the PEBC.PowerConstraints this PEBC.Instruction was based on.",
|
1350
1315
|
)
|
1351
1316
|
power_envelopes: List[PEBCPowerEnvelope] = Field(
|
1352
1317
|
...,
|
1353
|
-
description=
|
1318
|
+
description="The PEBC.PowerEnvelope(s) that should be followed by the Resource Manager. There shall be at least one PEBC.PowerEnvelope, but at most one PEBC.PowerEnvelope for each CommodityQuantity.",
|
1354
1319
|
max_length=10,
|
1355
1320
|
min_length=1,
|
1356
1321
|
)
|
@@ -1358,13 +1323,13 @@ class PEBCInstruction(BaseModel):
|
|
1358
1323
|
|
1359
1324
|
class PPBCPowerProfileStatus(BaseModel):
|
1360
1325
|
model_config = ConfigDict(
|
1361
|
-
extra=
|
1326
|
+
extra="forbid",
|
1362
1327
|
)
|
1363
|
-
message_type: Literal[
|
1328
|
+
message_type: Literal["PPBC.PowerProfileStatus"] = "PPBC.PowerProfileStatus"
|
1364
1329
|
message_id: ID
|
1365
1330
|
sequence_container_status: List[PPBCPowerSequenceContainerStatus] = Field(
|
1366
1331
|
...,
|
1367
|
-
description=
|
1332
|
+
description="Array with status information for all PPBC.PowerSequenceContainers in the PPBC.PowerProfileDefinition.",
|
1368
1333
|
max_length=1000,
|
1369
1334
|
min_length=1,
|
1370
1335
|
)
|
@@ -1372,29 +1337,29 @@ class PPBCPowerProfileStatus(BaseModel):
|
|
1372
1337
|
|
1373
1338
|
class OMBCSystemDescription(BaseModel):
|
1374
1339
|
model_config = ConfigDict(
|
1375
|
-
extra=
|
1340
|
+
extra="forbid",
|
1376
1341
|
)
|
1377
|
-
message_type: Literal[
|
1342
|
+
message_type: Literal["OMBC.SystemDescription"] = "OMBC.SystemDescription"
|
1378
1343
|
message_id: ID
|
1379
1344
|
valid_from: AwareDatetime = Field(
|
1380
1345
|
...,
|
1381
|
-
description=
|
1346
|
+
description="Moment this OMBC.SystemDescription starts to be valid. If the system description is immediately valid, the DateTimeStamp should be now or in the past.",
|
1382
1347
|
)
|
1383
1348
|
operation_modes: List[OMBCOperationMode] = Field(
|
1384
1349
|
...,
|
1385
|
-
description=
|
1350
|
+
description="OMBC.OperationModes available for the CEM in order to coordinate the device behaviour.",
|
1386
1351
|
max_length=100,
|
1387
1352
|
min_length=1,
|
1388
1353
|
)
|
1389
1354
|
transitions: List[Transition] = Field(
|
1390
1355
|
...,
|
1391
|
-
description=
|
1356
|
+
description="Possible transitions to switch from one OMBC.OperationMode to another.",
|
1392
1357
|
max_length=1000,
|
1393
1358
|
min_length=0,
|
1394
1359
|
)
|
1395
1360
|
timers: List[Timer] = Field(
|
1396
1361
|
...,
|
1397
|
-
description=
|
1362
|
+
description="Timers that control when certain transitions can be made.",
|
1398
1363
|
max_length=1000,
|
1399
1364
|
min_length=0,
|
1400
1365
|
)
|
@@ -1402,89 +1367,89 @@ class OMBCSystemDescription(BaseModel):
|
|
1402
1367
|
|
1403
1368
|
class PPBCPowerSequence(BaseModel):
|
1404
1369
|
model_config = ConfigDict(
|
1405
|
-
extra=
|
1370
|
+
extra="forbid",
|
1406
1371
|
)
|
1407
1372
|
id: ID = Field(
|
1408
1373
|
...,
|
1409
|
-
description=
|
1374
|
+
description="ID of the PPBC.PowerSequence. Must be unique in the scope of the PPBC.PowerSequnceContainer in which it is used.",
|
1410
1375
|
)
|
1411
1376
|
elements: List[PPBCPowerSequenceElement] = Field(
|
1412
1377
|
...,
|
1413
|
-
description=
|
1378
|
+
description="List of PPBC.PowerSequenceElements. Shall contain at least one element. Elements must be placed in chronological order.",
|
1414
1379
|
max_length=288,
|
1415
1380
|
min_length=1,
|
1416
1381
|
)
|
1417
1382
|
is_interruptible: bool = Field(
|
1418
1383
|
...,
|
1419
|
-
description=
|
1384
|
+
description="Indicates whether the option of pausing a sequence is available.",
|
1420
1385
|
)
|
1421
1386
|
max_pause_before: Optional[Duration] = Field(
|
1422
1387
|
None,
|
1423
|
-
description=
|
1388
|
+
description="The maximum duration for which a device can be paused between the end of the previous running sequence and the start of this one",
|
1424
1389
|
)
|
1425
1390
|
abnormal_condition_only: bool = Field(
|
1426
1391
|
...,
|
1427
|
-
description=
|
1392
|
+
description="Indicates if this PPBC.PowerSequence may only be used during an abnormal condition",
|
1428
1393
|
)
|
1429
1394
|
|
1430
1395
|
|
1431
1396
|
class FRBCOperationMode(BaseModel):
|
1432
1397
|
model_config = ConfigDict(
|
1433
|
-
extra=
|
1398
|
+
extra="forbid",
|
1434
1399
|
)
|
1435
1400
|
id: ID = Field(
|
1436
1401
|
...,
|
1437
|
-
description=
|
1402
|
+
description="ID of the FRBC.OperationMode. Must be unique in the scope of the FRBC.ActuatorDescription in which it is used.",
|
1438
1403
|
)
|
1439
1404
|
diagnostic_label: Optional[str] = Field(
|
1440
1405
|
None,
|
1441
|
-
description=
|
1406
|
+
description="Human readable name/description of the FRBC.OperationMode. This element is only intended for diagnostic purposes and not for HMI applications.",
|
1442
1407
|
)
|
1443
1408
|
elements: List[FRBCOperationModeElement] = Field(
|
1444
1409
|
...,
|
1445
|
-
description=
|
1410
|
+
description="List of FRBC.OperationModeElements, which describe the properties of this FRBC.OperationMode depending on the fill_level. The fill_level_ranges of the items in the Array must be contiguous.",
|
1446
1411
|
max_length=100,
|
1447
1412
|
min_length=1,
|
1448
1413
|
)
|
1449
1414
|
abnormal_condition_only: bool = Field(
|
1450
1415
|
...,
|
1451
|
-
description=
|
1416
|
+
description="Indicates if this FRBC.OperationMode may only be used during an abnormal condition",
|
1452
1417
|
)
|
1453
1418
|
|
1454
1419
|
|
1455
1420
|
class DDBCActuatorDescription(BaseModel):
|
1456
1421
|
model_config = ConfigDict(
|
1457
|
-
extra=
|
1422
|
+
extra="forbid",
|
1458
1423
|
)
|
1459
1424
|
id: ID = Field(
|
1460
1425
|
...,
|
1461
|
-
description=
|
1426
|
+
description="ID of this DDBC.ActuatorDescription. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1462
1427
|
)
|
1463
1428
|
diagnostic_label: Optional[str] = Field(
|
1464
1429
|
None,
|
1465
|
-
description=
|
1430
|
+
description="Human readable name/description of the actuator. This element is only intended for diagnostic purposes and not for HMI applications.",
|
1466
1431
|
)
|
1467
1432
|
supported_commodites: List[Commodity] = Field(
|
1468
1433
|
...,
|
1469
|
-
description=
|
1434
|
+
description="Commodities supported by the operation modes of this actuator. There shall be at least one commodity",
|
1470
1435
|
max_length=4,
|
1471
1436
|
min_length=1,
|
1472
1437
|
)
|
1473
1438
|
operation_modes: List[DDBCOperationMode] = Field(
|
1474
1439
|
...,
|
1475
|
-
description=
|
1440
|
+
description="List of all Operation Modes that are available for this actuator. There shall be at least one DDBC.OperationMode.",
|
1476
1441
|
max_length=100,
|
1477
1442
|
min_length=1,
|
1478
1443
|
)
|
1479
1444
|
transitions: List[Transition] = Field(
|
1480
1445
|
...,
|
1481
|
-
description=
|
1446
|
+
description="List of Transitions between Operation Modes. Shall contain at least one Transition.",
|
1482
1447
|
max_length=1000,
|
1483
1448
|
min_length=0,
|
1484
1449
|
)
|
1485
1450
|
timers: List[Timer] = Field(
|
1486
1451
|
...,
|
1487
|
-
description=
|
1452
|
+
description="List of Timers associated with Transitions for this Actuator. Can be empty.",
|
1488
1453
|
max_length=1000,
|
1489
1454
|
min_length=0,
|
1490
1455
|
)
|
@@ -1492,40 +1457,40 @@ class DDBCActuatorDescription(BaseModel):
|
|
1492
1457
|
|
1493
1458
|
class DDBCSystemDescription(BaseModel):
|
1494
1459
|
model_config = ConfigDict(
|
1495
|
-
extra=
|
1460
|
+
extra="forbid",
|
1496
1461
|
)
|
1497
|
-
message_type: Literal[
|
1462
|
+
message_type: Literal["DDBC.SystemDescription"] = "DDBC.SystemDescription"
|
1498
1463
|
message_id: ID
|
1499
1464
|
valid_from: AwareDatetime = Field(
|
1500
1465
|
...,
|
1501
|
-
description=
|
1466
|
+
description="Moment this DDBC.SystemDescription starts to be valid. If the system description is immediately valid, the DateTimeStamp should be now or in the past.",
|
1502
1467
|
)
|
1503
1468
|
actuators: List[DDBCActuatorDescription] = Field(
|
1504
1469
|
...,
|
1505
|
-
description=
|
1470
|
+
description="List of all available actuators in the system. Must contain at least one DDBC.ActuatorAggregated.",
|
1506
1471
|
max_length=10,
|
1507
1472
|
min_length=1,
|
1508
1473
|
)
|
1509
1474
|
present_demand_rate: NumberRange = Field(
|
1510
|
-
..., description=
|
1475
|
+
..., description="Present demand rate that needs to be satisfied by the system"
|
1511
1476
|
)
|
1512
1477
|
provides_average_demand_rate_forecast: bool = Field(
|
1513
1478
|
...,
|
1514
|
-
description=
|
1479
|
+
description="Indicates whether the Resource Manager could provide a demand rate forecast through the DDBC.AverageDemandRateForecast.",
|
1515
1480
|
)
|
1516
1481
|
|
1517
1482
|
|
1518
1483
|
class PPBCPowerSequenceContainer(BaseModel):
|
1519
1484
|
model_config = ConfigDict(
|
1520
|
-
extra=
|
1485
|
+
extra="forbid",
|
1521
1486
|
)
|
1522
1487
|
id: ID = Field(
|
1523
1488
|
...,
|
1524
|
-
description=
|
1489
|
+
description="ID of the PPBC.PowerSequenceContainer. Must be unique in the scope of the PPBC.PowerProfileDefinition in which it is used.",
|
1525
1490
|
)
|
1526
1491
|
power_sequences: List[PPBCPowerSequence] = Field(
|
1527
1492
|
...,
|
1528
|
-
description=
|
1493
|
+
description="List of alternative Sequences where one could be chosen by the CEM",
|
1529
1494
|
max_length=288,
|
1530
1495
|
min_length=1,
|
1531
1496
|
)
|
@@ -1533,37 +1498,37 @@ class PPBCPowerSequenceContainer(BaseModel):
|
|
1533
1498
|
|
1534
1499
|
class FRBCActuatorDescription(BaseModel):
|
1535
1500
|
model_config = ConfigDict(
|
1536
|
-
extra=
|
1501
|
+
extra="forbid",
|
1537
1502
|
)
|
1538
1503
|
id: ID = Field(
|
1539
1504
|
...,
|
1540
|
-
description=
|
1505
|
+
description="ID of the Actuator. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1541
1506
|
)
|
1542
1507
|
diagnostic_label: Optional[str] = Field(
|
1543
1508
|
None,
|
1544
|
-
description=
|
1509
|
+
description="Human readable name/description for the actuator. This element is only intended for diagnostic purposes and not for HMI applications.",
|
1545
1510
|
)
|
1546
1511
|
supported_commodities: List[Commodity] = Field(
|
1547
1512
|
...,
|
1548
|
-
description=
|
1513
|
+
description="List of all supported Commodities.",
|
1549
1514
|
max_length=4,
|
1550
1515
|
min_length=1,
|
1551
1516
|
)
|
1552
1517
|
operation_modes: List[FRBCOperationMode] = Field(
|
1553
1518
|
...,
|
1554
|
-
description=
|
1519
|
+
description="Provided FRBC.OperationModes associated with this actuator",
|
1555
1520
|
max_length=100,
|
1556
1521
|
min_length=1,
|
1557
1522
|
)
|
1558
1523
|
transitions: List[Transition] = Field(
|
1559
1524
|
...,
|
1560
|
-
description=
|
1525
|
+
description="Possible transitions between FRBC.OperationModes associated with this actuator.",
|
1561
1526
|
max_length=1000,
|
1562
1527
|
min_length=0,
|
1563
1528
|
)
|
1564
1529
|
timers: List[Timer] = Field(
|
1565
1530
|
...,
|
1566
|
-
description=
|
1531
|
+
description="List of Timers associated with this actuator",
|
1567
1532
|
max_length=1000,
|
1568
1533
|
min_length=0,
|
1569
1534
|
)
|
@@ -1571,25 +1536,25 @@ class FRBCActuatorDescription(BaseModel):
|
|
1571
1536
|
|
1572
1537
|
class PPBCPowerProfileDefinition(BaseModel):
|
1573
1538
|
model_config = ConfigDict(
|
1574
|
-
extra=
|
1539
|
+
extra="forbid",
|
1575
1540
|
)
|
1576
|
-
message_type: Literal[
|
1541
|
+
message_type: Literal["PPBC.PowerProfileDefinition"] = "PPBC.PowerProfileDefinition"
|
1577
1542
|
message_id: ID
|
1578
1543
|
id: ID = Field(
|
1579
1544
|
...,
|
1580
|
-
description=
|
1545
|
+
description="ID of the PPBC.PowerProfileDefinition. Must be unique in the scope of the Resource Manager, for at least the duration of the session between Resource Manager and CEM.",
|
1581
1546
|
)
|
1582
1547
|
start_time: AwareDatetime = Field(
|
1583
1548
|
...,
|
1584
|
-
description=
|
1549
|
+
description="Indicates the first possible time the first PPBC.PowerSequence could start",
|
1585
1550
|
)
|
1586
1551
|
end_time: AwareDatetime = Field(
|
1587
1552
|
...,
|
1588
|
-
description=
|
1553
|
+
description="Indicates when the last PPBC.PowerSequence shall be finished at the latest",
|
1589
1554
|
)
|
1590
1555
|
power_sequences_containers: List[PPBCPowerSequenceContainer] = Field(
|
1591
1556
|
...,
|
1592
|
-
description=
|
1557
|
+
description="The PPBC.PowerSequenceContainers that make up this PPBC.PowerProfileDefinition. There shall be at least one PPBC.PowerSequenceContainer that includes at least one PPBC.PowerSequence. PPBC.PowerSequenceContainers must be placed in chronological order.",
|
1593
1558
|
max_length=1000,
|
1594
1559
|
min_length=1,
|
1595
1560
|
)
|
@@ -1597,15 +1562,15 @@ class PPBCPowerProfileDefinition(BaseModel):
|
|
1597
1562
|
|
1598
1563
|
class FRBCSystemDescription(BaseModel):
|
1599
1564
|
model_config = ConfigDict(
|
1600
|
-
extra=
|
1565
|
+
extra="forbid",
|
1601
1566
|
)
|
1602
|
-
message_type: Literal[
|
1567
|
+
message_type: Literal["FRBC.SystemDescription"] = "FRBC.SystemDescription"
|
1603
1568
|
message_id: ID
|
1604
1569
|
valid_from: AwareDatetime = Field(
|
1605
1570
|
...,
|
1606
|
-
description=
|
1571
|
+
description="Moment this FRBC.SystemDescription starts to be valid. If the system description is immediately valid, the DateTimeStamp should be now or in the past.",
|
1607
1572
|
)
|
1608
1573
|
actuators: List[FRBCActuatorDescription] = Field(
|
1609
|
-
..., description=
|
1574
|
+
..., description="Details of all Actuators.", max_length=10, min_length=1
|
1610
1575
|
)
|
1611
|
-
storage: FRBCStorageDescription = Field(..., description=
|
1576
|
+
storage: FRBCStorageDescription = Field(..., description="Details of the storage.")
|