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