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