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.
Files changed (51) hide show
  1. s2_python-0.1.0.dist-info/METADATA +99 -0
  2. s2_python-0.1.0.dist-info/RECORD +50 -0
  3. {s2_python-0.0.0.dist-info → s2_python-0.1.0.dist-info}/WHEEL +1 -1
  4. s2python/__init__.py +1 -1
  5. s2python/common/__init__.py +12 -2
  6. s2python/common/duration.py +7 -4
  7. s2python/common/handshake.py +6 -3
  8. s2python/common/handshake_response.py +6 -3
  9. s2python/common/instruction_status_update.py +14 -5
  10. s2python/common/number_range.py +22 -10
  11. s2python/common/power_forecast.py +10 -5
  12. s2python/common/power_forecast_element.py +11 -5
  13. s2python/common/power_forecast_value.py +5 -2
  14. s2python/common/power_measurement.py +8 -5
  15. s2python/common/power_range.py +12 -4
  16. s2python/common/power_value.py +5 -2
  17. s2python/common/reception_status.py +8 -3
  18. s2python/common/resource_manager_details.py +18 -8
  19. s2python/common/revoke_object.py +7 -4
  20. s2python/common/role.py +5 -2
  21. s2python/common/select_control_type.py +6 -3
  22. s2python/common/session_request.py +6 -3
  23. s2python/common/support.py +19 -11
  24. s2python/common/timer.py +7 -4
  25. s2python/common/transition.py +16 -9
  26. s2python/frbc/__init__.py +3 -1
  27. s2python/frbc/frbc_actuator_description.py +99 -37
  28. s2python/frbc/frbc_actuator_status.py +13 -6
  29. s2python/frbc/frbc_fill_level_target_profile.py +21 -6
  30. s2python/frbc/frbc_fill_level_target_profile_element.py +17 -5
  31. s2python/frbc/frbc_instruction.py +9 -6
  32. s2python/frbc/frbc_leakage_behaviour.py +10 -5
  33. s2python/frbc/frbc_leakage_behaviour_element.py +13 -4
  34. s2python/frbc/frbc_operation_mode.py +32 -13
  35. s2python/frbc/frbc_operation_mode_element.py +20 -7
  36. s2python/frbc/frbc_storage_description.py +13 -4
  37. s2python/frbc/frbc_storage_status.py +6 -3
  38. s2python/frbc/frbc_system_description.py +16 -6
  39. s2python/frbc/frbc_timer_status.py +8 -5
  40. s2python/frbc/frbc_usage_forecast.py +10 -5
  41. s2python/frbc/frbc_usage_forecast_element.py +11 -4
  42. s2python/generated/gen_s2.py +476 -476
  43. s2python/s2_parser.py +113 -0
  44. s2python/s2_validation_error.py +4 -1
  45. s2python/utils.py +8 -3
  46. s2python/validate_values_mixin.py +90 -37
  47. s2python/version.py +1 -1
  48. s2_python-0.0.0.dist-info/METADATA +0 -50
  49. s2_python-0.0.0.dist-info/RECORD +0 -49
  50. {s2_python-0.0.0.dist-info → s2_python-0.1.0.dist-info}/entry_points.txt +0 -0
  51. {s2_python-0.0.0.dist-info → s2_python-0.1.0.dist-info}/top_level.txt +0 -0
@@ -12,145 +12,145 @@ from pydantic import BaseModel, Extra, Field, conint, constr
12
12
 
13
13
 
14
14
  class Commodity(Enum):
15
- GAS = 'GAS'
16
- HEAT = 'HEAT'
17
- ELECTRICITY = 'ELECTRICITY'
18
- OIL = '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 = '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'
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 = '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'
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 = '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'
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='Duration in milliseconds')
148
+ __root__: conint(ge=0) = Field(..., description="Duration in milliseconds")
149
149
 
150
150
 
151
151
  class EnergyManagementRole(Enum):
152
- CEM = 'CEM'
153
- RM = '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='Indicator for how long the given usage_rate is valid.'
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='The most likely value for the usage rate; the expected increase or decrease of the fill_level per second',
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='The lower limit of the range with a 68\xa0% probability that the usage rate is within that range',
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='The lower limit of the range with a 95\xa0% probability that the usage rate is within that range',
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='The lower limit of the range with a 100\xa0% probability that the usage rate is within that range',
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='The upper limit of the range with a 68\xa0% probability that the usage rate is within that range',
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='The upper limit of the range with a 95\xa0% probability that the usage rate is within that range. ',
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='The upper limit of the range with a 100\xa0% probability that the usage rate is within that range.',
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'[a-zA-Z0-9\-_:]{2,64}') = Field(
195
- ..., description='An identifier expressed as a UUID'
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 = 'NEW'
201
- ACCEPTED = 'ACCEPTED'
202
- REJECTED = 'REJECTED'
203
- REVOKED = 'REVOKED'
204
- STARTED = 'STARTED'
205
- SUCCEEDED = 'SUCCEEDED'
206
- ABORTED = '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='ID of this instruction (as provided by the CEM) '
214
+ ..., description="ID of this instruction (as provided by the CEM) "
215
215
  )
216
- message_id: ID = Field(..., description='ID of this message')
217
- message_type: str = Field('InstructionStatusUpdate', const=True)
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='Present status of this instruction.'
219
+ ..., description="Present status of this instruction."
220
220
  )
221
221
  timestamp: datetime = Field(
222
- ..., description='Timestamp when status_type has changed the last time.'
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='Number that defines the end of the range'
231
+ ..., description="Number that defines the end of the range"
232
232
  )
233
233
  start_of_range: float = Field(
234
- ..., description='Number that defines the start of the range'
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='Indicates if this is an instruction during an abnormal condition',
244
+ description="Indicates if this is an instruction during an abnormal condition",
245
245
  )
246
246
  execution_time: datetime = Field(
247
- ..., description='Time when instruction should be executed.'
247
+ ..., description="Time when instruction should be executed."
248
248
  )
249
249
  id: ID = Field(
250
250
  ...,
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.',
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='ID of this message')
254
- message_type: str = Field('OMBC.Instruction', const=True)
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='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.',
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='ID of the OMBC.OperationMode that should be activated'
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='ID of the active OMBC.OperationMode.'
269
+ ..., description="ID of the active OMBC.OperationMode."
270
270
  )
271
- message_id: ID = Field(..., description='ID of this message')
272
- message_type: str = Field('OMBC.Status', const=True)
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='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.',
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='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.',
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='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.',
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='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.',
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='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')
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='Type of power quantity which applies to upper_average_power and lower_average_power',
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='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.',
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='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. ',
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='ID of this message')
317
- message_type: str = Field('PEBC.EnergyConstraint', const=True)
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='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.',
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='Moment this PEBC.EnergyConstraints information starts to be valid',
324
+ description="Moment this PEBC.EnergyConstraints information starts to be valid",
325
325
  )
326
326
  valid_until: datetime = Field(
327
327
  ...,
328
- description='Moment until this PEBC.EnergyConstraints information is valid.',
328
+ description="Moment until this PEBC.EnergyConstraints information is valid.",
329
329
  )
330
330
 
331
331
 
332
332
  class PEBCPowerEnvelopeConsequenceType(Enum):
333
- VANISH = 'VANISH'
334
- DEFER = '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='The duration of the element')
341
+ duration: Duration = Field(..., description="The duration of the element")
342
342
  lower_limit: float = Field(
343
343
  ...,
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.',
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='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.',
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 = 'UPPER_LIMIT'
354
- LOWER_LIMIT = '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='Indicates if this is an instruction during an abnormal condition',
363
+ description="Indicates if this is an instruction during an abnormal condition",
364
364
  )
365
365
  execution_time: datetime = Field(
366
- ..., description='End time of Interruption of the PPBC.PowerSequence.'
366
+ ..., description="End time of Interruption of the PPBC.PowerSequence."
367
367
  )
368
368
  id: ID = Field(
369
369
  ...,
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.',
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='ID of this message')
373
- message_type: str = Field('PPBC.EndInterruptionInstruction', const=True)
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='ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence interruption is being ended by the CEM.',
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='ID of the PPBC.PowerSequence for which the CEM wants to end the interruption.',
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='ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence interruption is being ended by the CEM.',
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 = 'NOT_SCHEDULED'
390
- SCHEDULED = 'SCHEDULED'
391
- EXECUTING = 'EXECUTING'
392
- INTERRUPTED = 'INTERRUPTED'
393
- FINISHED = 'FINISHED'
394
- ABORTED = '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='Indicates if this is an instruction during an abnormal condition',
403
+ description="Indicates if this is an instruction during an abnormal condition",
404
404
  )
405
405
  execution_time: datetime = Field(
406
- ..., description='Start time of the PPBC.PowerSequence.'
406
+ ..., description="Start time of the PPBC.PowerSequence."
407
407
  )
408
408
  id: ID = Field(
409
409
  ...,
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.',
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='ID of this message')
413
- message_type: str = Field('PPBC.ScheduleInstruction', const=True)
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='ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence is being selected and scheduled by the CEM.',
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='ID of the PPBC.PowerSequence that is being selected and scheduled by the CEM.',
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='ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence is being selected and scheduled by the CEM.',
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='Indicates if this is an instruction during an abnormal condition',
434
+ description="Indicates if this is an instruction during an abnormal condition",
435
435
  )
436
436
  execution_time: datetime = Field(
437
- ..., description='Start time of the interruption of the PPBC.PowerSequence.'
437
+ ..., description="Start time of the interruption of the PPBC.PowerSequence."
438
438
  )
439
439
  id: ID = Field(
440
440
  ...,
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.',
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='ID of this message')
444
- message_type: str = Field('PPBC.StartInterruptionInstruction', const=True)
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='ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence is being interrupted by the CEM.',
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='ID of the PPBC.PowerSequence that the CEM wants to interrupt.'
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='ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence is being interrupted by the CEM.',
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='The power quantity the value refers to'
463
+ ..., description="The power quantity the value refers to"
464
464
  )
465
- value_expected: float = Field(..., description='The expected power value.')
465
+ value_expected: float = Field(..., description="The expected power value.")
466
466
  value_lower_68PPR: Optional[float] = Field(
467
467
  None,
468
- description='The lower boundary of the range with 68\xa0% certainty the power value is in it',
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='The lower boundary of the range with 95\xa0% certainty the power value is in it',
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='The lower boundary of the range with 100\xa0% certainty the power value is in it',
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='The upper boundary of the range with 68\xa0% certainty the power value is in it',
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='The upper boundary of the range with 95\xa0% certainty the power value is in it',
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='The upper boundary of the range with 100\xa0% certainty the power value is in it',
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='The power quantity the values refer to'
497
+ ..., description="The power quantity the values refer to"
498
498
  )
499
499
  end_of_range: float = Field(
500
- ..., description='Power value that defines the end of the range.'
500
+ ..., description="Power value that defines the end of the range."
501
501
  )
502
502
  start_of_range: float = Field(
503
- ..., description='Power value that defines the start of the range.'
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='The power quantity the value refers to'
512
+ ..., description="The power quantity the value refers to"
513
513
  )
514
514
  value: float = Field(
515
515
  ...,
516
- description='Power value expressed in the unit associated with the CommodityQuantity',
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 = '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'
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 = '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'
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='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')
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='The type of object that needs to be revoked'
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 = 'ENERGY_PRODUCER'
559
- ENERGY_CONSUMER = 'ENERGY_CONSUMER'
560
- ENERGY_STORAGE = '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='The ControlType to activate. Must be one of the available ControlTypes as defined in the ResourceManagerDetails',
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='ID of this message')
572
- message_type: str = Field('SelectControlType', const=True)
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 = 'RECONNECT'
577
- TERMINATE = '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='Human readable name/description of the Timer. This element is only intended for diagnostic purposes and not for HMI applications.',
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='The time it takes for the Timer to finish after it has been started',
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='ID of the Timer. Must be unique in the scope of the OMBC.SystemDescription, FRBC.ActuatorDescription or DDBC.ActuatorDescription in which it is used.',
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='Indicates if this Transition may only be used during an abnormal condition (see Clause )',
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='List of IDs of Timers that block this Transition from initiating while at least one of these Timers is not yet finished',
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='from',
615
- description='ID of the OperationMode (exact type differs per ControlType) that should be switched from.',
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='ID of the Transition. Must be unique in the scope of the OMBC.SystemDescription, FRBC.ActuatorDescription or DDBC.ActuatorDescription in which it is used.',
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='List of IDs of Timers that will be (re)started when this transition is initiated',
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='ID of the OperationMode (exact type differs per ControlType) that will be switched to.',
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='Absolute costs for going through this Transition in the currency as described in the ResourceManagerDetails.',
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='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.',
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='The operation mode that is presently active for this actuator.',
647
+ description="The operation mode that is presently active for this actuator.",
648
648
  )
649
649
  actuator_id: ID = Field(
650
- ..., description='ID of the actuator this messages refers to'
650
+ ..., description="ID of the actuator this messages refers to"
651
651
  )
652
- message_id: ID = Field(..., description='ID of this message')
653
- message_type: str = Field('DDBC.ActuatorStatus', const=True)
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='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.',
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='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.',
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='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.',
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='The most likely value for the demand rate; the expected increase or decrease of the fill_level per second',
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='The lower limit of the range with a 68\xa0% probability that the demand rate is within that range',
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='The lower limit of the range with a 95\xa0% probability that the demand rate is within that range',
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='The lower limit of the range with a 100\xa0% probability that the demand rate is within that range',
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='The upper limit of the range with a 68\xa0% probability that the demand rate is within that range',
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='The upper limit of the range with a 95\xa0% probability that the demand rate is within that range',
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='The upper limit of the range with a 100\xa0% probability that the demand rate is within that range',
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='Duration of the element')
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='Indicates if this is an instruction during an abnormal condition',
709
+ description="Indicates if this is an instruction during an abnormal condition",
710
710
  )
711
711
  actuator_id: ID = Field(
712
- ..., description='ID of the actuator this Instruction belongs to.'
712
+ ..., description="ID of the actuator this Instruction belongs to."
713
713
  )
714
714
  execution_time: datetime = Field(
715
715
  ...,
716
- description='Indicates the moment the execution of the instruction shall start',
716
+ description="Indicates the moment the execution of the instruction shall start",
717
717
  )
718
718
  id: ID = Field(
719
719
  ...,
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.',
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='ID of this message')
723
- message_type: str = Field('DDBC.Instruction', const=True)
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='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.',
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='ID of the DDBC.OperationMode')
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='ID of this operation mode. Must be unique in the scope of the DDBC.ActuatorDescription in which it is used.',
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='Indicates if this DDBC.OperationMode may only be used during an abnormal condition.',
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='Human readable name/description of the DDBC.OperationMode. This element is only intended for diagnostic purposes and not for HMI applications.',
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='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.',
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='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.',
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='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.',
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='The ID of the actuator the timer belongs to'
768
+ ..., description="The ID of the actuator the timer belongs to"
769
769
  )
770
770
  finished_at: datetime = Field(
771
771
  ...,
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.',
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='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')
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='ID of the FRBC.OperationMode that is presently active.'
784
+ ..., description="ID of the FRBC.OperationMode that is presently active."
785
785
  )
786
786
  actuator_id: ID = Field(
787
- ..., description='ID of the actuator this messages refers to'
787
+ ..., description="ID of the actuator this messages refers to"
788
788
  )
789
- message_id: ID = Field(..., description='ID of this message')
790
- message_type: str = Field('FRBC.ActuatorStatus', const=True)
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='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.',
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='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.',
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='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.',
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='The duration of the element.')
809
+ duration: Duration = Field(..., description="The duration of the element.")
810
810
  fill_level_range: NumberRange = Field(
811
811
  ...,
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.',
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='Indicates if this is an instruction during an abnormal condition.',
822
+ description="Indicates if this is an instruction during an abnormal condition.",
823
823
  )
824
824
  actuator_id: ID = Field(
825
- ..., description='ID of the actuator this instruction belongs to.'
825
+ ..., description="ID of the actuator this instruction belongs to."
826
826
  )
827
827
  execution_time: datetime = Field(
828
- ..., description='Time when instruction should be executed.'
828
+ ..., description="Time when instruction should be executed."
829
829
  )
830
830
  id: ID = Field(
831
831
  ...,
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.',
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='ID of this message')
835
- message_type: str = Field('FRBC.Instruction', const=True)
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='ID of the FRBC.OperationMode that should be activated.'
837
+ ..., description="ID of the FRBC.OperationMode that should be activated."
838
838
  )
839
839
  operation_mode_factor: float = Field(
840
840
  ...,
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.',
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='The fill level range for which this FRBC.LeakageBehaviourElement applies. The start of the range must be less than the end of the range.',
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='Indicates how fast the momentary fill level will decrease per second due to leakage within the given range of the fill level.',
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='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.',
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='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. ',
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='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.',
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='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.',
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='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.',
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='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.',
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='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). ',
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='Indicates whether the Storage could provide a target profile for the fill level through the FRBC.FillLevelTargetProfile.',
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='Indicates whether the Storage could provide details of power leakage behaviour through the FRBC.LeakageBehaviour.',
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='Indicates whether the Storage could provide a UsageForecast through the FRBC.UsageForecast.',
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='ID of this message')
918
- message_type: str = Field('FRBC.StorageStatus', const=True)
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='Present fill level of the Storage'
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='The ID of the actuator the timer belongs to'
929
+ ..., description="The ID of the actuator the timer belongs to"
930
930
  )
931
931
  finished_at: datetime = Field(
932
932
  ...,
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.',
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='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')
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='Further elements that model the profile. There shall be at least one element. Elements must be placed in chronological order.',
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='ID of this message')
951
- message_type: str = Field('FRBC.UsageForecast', const=True)
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='Time at which the FRBC.UsageForecast starts.'
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='ID of this message')
962
- message_type: str = Field('Handshake', const=True)
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='The role of the sender of this message'
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='Protocol versions supported by the sender of this message. This field is mandatory for the RM, but optional for the CEM.',
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='ID of this message')
978
- message_type: str = Field('HandshakeResponse', const=True)
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='The protocol version the CEM selected for this session'
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='Indicates if this OMBC.OperationMode may only be used during an abnormal condition.',
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='Human readable name/description of the OMBC.OperationMode. This element is only intended for diagnostic purposes and not for HMI applications.',
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='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.',
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='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.',
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='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.',
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='ID of this message')
1017
- message_type: str = Field('OMBC.SystemDescription', const=True)
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='OMBC.OperationModes available for the CEM in order to coordinate the device behaviour.',
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='Timers that control when certain transitions can be made.',
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='Possible transitions to switch from one OMBC.OperationMode to another.',
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='Moment this OMBC.SystemDescription starts to be valid. If the system description is immediately valid, the DateTimeStamp should be now or in the past.',
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='Indicates if this PEBC.AllowedLimitRange may only be used during an abnormal condition',
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='Type of power quantity this PEBC.AllowedLimitRange applies to'
1051
+ ..., description="Type of power quantity this PEBC.AllowedLimitRange applies to"
1052
1052
  )
1053
1053
  limit_type: PEBCPowerEnvelopeLimitType = Field(
1054
1054
  ...,
1055
- description='Indicates if this ranges applies to the upper limit or the lower limit',
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='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. ',
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='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.',
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='Type of consequence of limiting power'
1074
+ ..., description="Type of consequence of limiting power"
1075
1075
  )
1076
1076
  id: ID = Field(
1077
1077
  ...,
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.',
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='ID of this message')
1081
- message_type: str = Field('PEBC.PowerConstraints', const=True)
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='Moment this PEBC.PowerConstraints start to be valid'
1083
+ ..., description="Moment this PEBC.PowerConstraints start to be valid"
1084
1084
  )
1085
1085
  valid_until: Optional[datetime] = Field(
1086
1086
  None,
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.',
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='Type of power quantity this PEBC.PowerEnvelope applies to'
1096
+ ..., description="Type of power quantity this PEBC.PowerEnvelope applies to"
1097
1097
  )
1098
1098
  id: ID = Field(
1099
1099
  ...,
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.',
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='The elements of this PEBC.PowerEnvelope. Shall contain at least one element. Elements must be placed in chronological order.',
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='ID of the PPBC.PowerProfileDefinition of which the data element ‘sequence_container_id’ refers to. ',
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='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.',
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='ID of selected PPBC.PowerSequence. When no ID is given, no sequence was selected yet.',
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='ID of the PPBC.PowerSequenceContainer this PPBC.PowerSequenceContainerStatus provides information about.',
1128
+ description="ID of the PPBC.PowerSequenceContainer this PPBC.PowerSequenceContainerStatus provides information about.",
1129
1129
  )
1130
1130
  status: PPBCPowerSequenceStatus = Field(
1131
- ..., description='Status of the selected PPBC.PowerSequence'
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='Duration of the PPBC.PowerSequenceElement.'
1140
+ ..., description="Duration of the PPBC.PowerSequenceElement."
1141
1141
  )
1142
1142
  power_values: List[PowerForecastValue] = Field(
1143
1143
  ...,
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.',
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='Duration of the PowerForecastElement')
1154
+ duration: Duration = Field(..., description="Duration of the PowerForecastElement")
1155
1155
  power_values: List[PowerForecastValue] = Field(
1156
1156
  ...,
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.',
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='Timestamp when PowerValues were measured.'
1168
+ ..., description="Timestamp when PowerValues were measured."
1169
1169
  )
1170
- message_id: ID = Field(..., description='ID of this message')
1171
- message_type: str = Field('PowerMeasurement', const=True)
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='Array of measured PowerValues. Must contain at least one item and at most one item per ‘commodity_quantity’ (defined inside the PowerValue).',
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='Diagnostic label that can be used to provide additional information for debugging. However, not for HMI purposes.',
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('ReceptionStatus', const=True)
1188
+ message_type: str = Field("ReceptionStatus", const=True)
1189
1189
  status: ReceptionStatusValues = Field(
1190
- ..., description='Enumeration of status values'
1190
+ ..., description="Enumeration of status values"
1191
1191
  )
1192
1192
  subject_message_id: ID = Field(
1193
- ..., description='The message this ReceptionStatus refers to'
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='Commodity the role refers to.')
1201
+ commodity: Commodity = Field(..., description="Commodity the role refers to.")
1202
1202
  role: RoleType = Field(
1203
- ..., description='Role type of the Resource Manager for the given commodity'
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='Optional field for a human readible descirption for debugging purposes',
1213
+ description="Optional field for a human readible descirption for debugging purposes",
1214
1214
  )
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')
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='Human readable name/description of the actuator. This element is only intended for diagnostic purposes and not for HMI applications.',
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='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.',
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='List of all Operation Modes that are available for this actuator. There shall be at least one DDBC.OperationMode.',
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='Commodities supported by the operation modes of this actuator. There shall be at least one commodity',
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='List of Timers associated with Transitions for this Actuator. Can be empty.',
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='List of Transitions between Operation Modes. Shall contain at least one Transition.',
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='Elements of the profile. Elements must be placed in chronological order.',
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='ID of this message')
1269
- message_type: str = Field('DDBC.AverageDemandRateForecast', const=True)
1270
- start_time: datetime = Field(..., description='Start time of the profile.')
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='List of all available actuators in the system. Must contain at least one DDBC.ActuatorAggregated.',
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='ID of this message')
1284
- message_type: str = Field('DDBC.SystemDescription', const=True)
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='Present demand rate that needs to be satisfied by the system'
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='Indicates whether the Resource Manager could provide a demand rate forecast through the DDBC.AverageDemandRateForecast.',
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='Moment this DDBC.SystemDescription starts to be valid. If the system description is immediately valid, the DateTimeStamp should be now or in the past.',
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='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.',
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='ID of this message')
1309
- message_type: str = Field('FRBC.FillLevelTargetProfile', const=True)
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='Time at which the FRBC.FillLevelTargetProfile starts.'
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='List of elements that model the leakage behaviour of the buffer. The fill_level_ranges of the elements must be contiguous.',
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='ID of this message')
1326
- message_type: str = Field('FRBC.LeakageBehaviour', const=True)
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='Moment this FRBC.LeakageBehaviour starts to be valid. If the FRBC.LeakageBehaviour is immediately valid, the DateTimeStamp should be now or in the past.',
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='Indicates if this FRBC.OperationMode may only be used during an abnormal condition',
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='Human readable name/description of the FRBC.OperationMode. This element is only intended for diagnostic purposes and not for HMI applications.',
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='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.',
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='ID of the FRBC.OperationMode. Must be unique in the scope of the FRBC.ActuatorDescription in which it is used.',
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='Indicates if this is an instruction during an abnormal condition.',
1363
+ description="Indicates if this is an instruction during an abnormal condition.",
1364
1364
  )
1365
1365
  execution_time: datetime = Field(
1366
1366
  ...,
1367
- description='Indicates the moment the execution of the instruction shall start.',
1367
+ description="Indicates the moment the execution of the instruction shall start.",
1368
1368
  )
1369
1369
  id: ID = Field(
1370
1370
  ...,
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.',
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='ID of this message')
1374
- message_type: str = Field('PEBC.Instruction', const=True)
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='Identifier of the PEBC.PowerConstraints this PEBC.Instruction was based on.',
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='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.',
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='ID of this message')
1392
- message_type: str = Field('PPBC.PowerProfileStatus', const=True)
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='Array with status information for all PPBC.PowerSequenceContainers in the PPBC.PowerProfileDefinition.',
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='Indicates if this PPBC.PowerSequence may only be used during an abnormal condition',
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='List of PPBC.PowerSequenceElements. Shall contain at least one element. Elements must be placed in chronological order.',
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='ID of the PPBC.PowerSequence. Must be unique in the scope of the PPBC.PowerSequnceContainer in which it is used.',
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='Indicates whether the option of pausing a sequence is available.',
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='The maximum duration for which a device can be paused between the end of the previous running sequence and the start of this one',
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='ID of the PPBC.PowerSequenceContainer. Must be unique in the scope of the PPBC.PowerProfileDefinition in which it is used.',
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='List of alternative Sequences where one could be chosen by the CEM',
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='Elements of which this forecast consists. Contains at least one element. Elements must be placed in chronological order.',
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='ID of this message')
1456
- message_type: str = Field('PowerForecast', const=True)
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='Start time of time period that is covered by the profile.'
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='The control types supported by this Resource Manager.',
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='Currency to be used for all information regarding costs. Mandatory if cost information is published.',
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='Version identifier of the firmware used in the device (provided by the manufacturer)',
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='The average time the combination of Resource Manager and HBES/BACS/SASS or (Smart) device needs to process and execute an instruction',
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='Name of Manufacturer')
1485
- message_id: ID = Field(..., description='ID of this message')
1486
- message_type: str = Field('ResourceManagerDetails', const=True)
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='Name of the model of the device (provided by the manufacturer)',
1489
+ description="Name of the model of the device (provided by the manufacturer)",
1490
1490
  )
1491
- name: Optional[str] = Field(None, description='Human readable name given by user')
1491
+ name: Optional[str] = Field(None, description="Human readable name given by user")
1492
1492
  provides_forecast: bool = Field(
1493
1493
  ...,
1494
- description='Indicates whether the ResourceManager is able to provide PowerForecasts',
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='Array of all CommodityQuantities that this Resource Manager can provide measurements for. ',
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='Identifier of the Resource Manager. Must be unique within the scope of the CEM.',
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='Each Resource Manager provides one or more energy Roles',
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='Serial number of the device (provided by the manufacturer)'
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='Human readable name/description for the actuator. This element is only intended for diagnostic purposes and not for HMI applications.',
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='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.',
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='Provided FRBC.OperationModes associated with this actuator',
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='List of all supported Commodities.', max_items=4, min_items=1
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='List of Timers associated with this actuator',
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='Possible transitions between FRBC.OperationModes associated with this actuator.',
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='Details of all Actuators.', max_items=10, min_items=1
1557
+ ..., description="Details of all Actuators.", max_items=10, min_items=1
1558
1558
  )
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.')
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='Moment this FRBC.SystemDescription starts to be valid. If the system description is immediately valid, the DateTimeStamp should be now or in the past.',
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='Indicates when the last PPBC.PowerSequence shall be finished at the latest',
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='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.',
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='ID of this message')
1581
- message_type: str = Field('PPBC.PowerProfileDefinition', const=True)
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='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.',
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='Indicates the first possible time the first PPBC.PowerSequence could start',
1590
+ description="Indicates the first possible time the first PPBC.PowerSequence could start",
1591
1591
  )