s2-python 0.4.0__py3-none-any.whl → 0.5.0__py3-none-any.whl

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