Skip to content

Commit b969581

Browse files
committed
support device class in opt payloads
1 parent 212e28c commit b969581

3 files changed

Lines changed: 15 additions & 2 deletions

File tree

openleadr/client.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,8 @@ async def sync_events(self):
586586
###########################################################################
587587

588588
async def create_opt(self, opt_type, opt_reason, targets, vavailability=None, event_id=None,
589-
modification_number=None, opt_id=None, request_id=None, market_context=None):
589+
modification_number=None, opt_id=None, request_id=None, market_context=None,
590+
signal_target_mrid=None):
590591
"""
591592
Send a new opt to the VTN, either to communicate a temporary availability
592593
schedule or to qualify the resources participating in an event.
@@ -624,7 +625,8 @@ async def create_opt(self, opt_type, opt_reason, targets, vavailability=None, ev
624625
event_id=event_id,
625626
modification_number=modification_number,
626627
targets=targets,
627-
market_context=market_context
628+
market_context=market_context,
629+
signal_target_mrid=signal_target_mrid
628630
)
629631
self.opts.append(opt)
630632

openleadr/objects.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ class Opt:
346346
targets: List[Target] = None
347347
targets_by_type: Dict = None
348348
market_context: str = None
349+
signal_target_mrid: str = None
349350

350351
def __post_init__(self):
351352
if self.opt_type not in enums.OPT.values:
@@ -354,6 +355,9 @@ def __post_init__(self):
354355
if self.opt_reason not in enums.OPT_REASON.values:
355356
raise ValueError(f"""The opt_reason must be one of '{"', '".join(enums.OPT_REASON.values)}', """
356357
f"""you specified: '{self.opt_type}'.""")
358+
if self.signal_target_mrid is not None and self.signal_target_mrid not in enums.SIGNAL_TARGET_MRID.values and not self.signal_target_mrid.startswith('x-'):
359+
raise ValueError(f"""The signal_target_mrid must be one of '{"', '".join(enums.SIGNAL_TARGET_MRID.values)}', """
360+
f"""you specified: '{self.signal_target_mrid}'.""")
357361
if self.event_id is None and self.vavailability is None:
358362
raise ValueError(
359363
"You must supply either 'event_id' or 'vavailability'.")

openleadr/templates/oadrCreateOpt.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,12 @@
3434
{% for target in targets %}
3535
{% include 'parts/eiTarget.xml' %}
3636
{% endfor %}
37+
{% if signal_target_mrid is defined and signal_target_mrid is not none %}
38+
<oadr:oadrDeviceClass>
39+
<power:endDeviceAsset>
40+
<power:mrid>{{ signal_target_mrid }}</power:mrid>
41+
</power:endDeviceAsset>
42+
</oadr:oadrDeviceClass>
43+
{% endif %}
3744
</oadr:oadrCreateOpt>
3845
</oadr:oadrSignedObject>

0 commit comments

Comments
 (0)