From cc256e18d855161b822616e31f2fdb8c3b1b1222 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 12 Jul 2023 13:03:36 -0700 Subject: [PATCH 01/20] initalizing agent area dictionary correctly when None is provided. Updated message bus connection to occur at agent initialization --- .../field_interface/agents/agents.py | 94 +++++++++---------- .../gridappsd/field_interface/context.py | 6 +- .../field_interface/gridappsd_field_bus.py | 4 +- 3 files changed, 53 insertions(+), 51 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 873f2eb..1c3fe36 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -11,9 +11,9 @@ from cimgraph.models import DistributedModel, SecondaryArea, SwitchArea import gridappsd.topics as t -from gridappsd.field_interface.context import LocalContext -from gridappsd.field_interface.gridappsd_field_bus import GridAPPSDMessageBus -from gridappsd.field_interface.interfaces import (FieldMessageBus, +from gridappsd_field_interface.context import LocalContext +from gridappsd_field_interface.gridappsd_field_bus import GridAPPSDMessageBus +from gridappsd_field_interface.interfaces import (FieldMessageBus, MessageBusDefinition) cim = None @@ -64,7 +64,11 @@ def __init__(self, self.description = agent_config['description'] dt = datetime.now() ts = datetime.timestamp(dt) - self.agent_id = "da_" + self.app_id + "_" + str(int(ts)) + if ('context_manager' not in self.app_id): + self.agent_id = "da_" + self.app_id + "_" + str(int(ts)) + else: + self.agent_id = downstream_message_bus_def.id+'.context_manager' + self.agent_area_dict = agent_area_dict if upstream_message_bus_def is not None: @@ -87,7 +91,7 @@ def __init__(self, # self.addressable_equipments = agent_dict['addressable_equipment'] # self.unaddressable_equipments = agent_dict['unaddressable_equipment'] - def connect(self): + def _connect(self): if self.upstream_message_bus is not None: self.upstream_message_bus.connect() @@ -109,6 +113,13 @@ def connect(self): if ('context_manager' not in self.app_id): LocalContext.register_agent(self.downstream_message_bus, self.upstream_message_bus, self) + + def disconnect(self): + + if self.upstream_message_bus is not None: + self.upstream_message_bus.disconnect() + if self.downstream_message_bus is not None: + self.downstream_message_bus.disconnect() def subscribe_to_measurement(self): if self.simulation_id is None: @@ -144,18 +155,20 @@ def subscribe_to_messages(self): self.app_id), self.on_upstream_message) - _log.debug( - f"Subscribing to message on agents topics: \n {t.field_message_bus_agent_topic(self.downstream_message_bus.id, self.agent_id)} \ - \n {t.field_message_bus_agent_topic(self.upstream_message_bus.id, self.agent_id)}" - ) - self.downstream_message_bus.subscribe( - t.field_message_bus_agent_topic(self.downstream_message_bus.id, - self.agent_id), - self.on_downstream_message) - self.downstream_message_bus.subscribe( - t.field_message_bus_agent_topic(self.upstream_message_bus.id, - self.agent_id), - self.on_upstream_message) + + if ('context_manager' not in self.app_id): + _log.debug( + f"Subscribing to message on agents topics: \n {t.field_message_bus_agent_topic(self.downstream_message_bus.id, self.agent_id)} \ + \n {t.field_message_bus_agent_topic(self.upstream_message_bus.id, self.agent_id)}" + ) + self.downstream_message_bus.subscribe( + t.field_message_bus_agent_topic(self.downstream_message_bus.id, + self.agent_id), + self.on_downstream_message) + self.upstream_message_bus.subscribe( + t.field_message_bus_agent_topic(self.upstream_message_bus.id, + self.agent_id), + self.on_upstream_message) def subscribe_to_requests(self): @@ -231,22 +244,15 @@ def __init__(self, agent_config: Dict, feeder_dict=None, simulation_id=None): - super(FeederAgent, - self).__init__(upstream_message_bus_def, + super().__init__(upstream_message_bus_def, downstream_message_bus_def, agent_config, feeder_dict, simulation_id) self.feeder_area = None self.downstream_message_bus_def = downstream_message_bus_def - if self.agent_area_dict is not None: - feeder = cim.Feeder(mRID=self.downstream_message_bus_def.id) - self.feeder_area = DistributedModel(connection=self.connection, - feeder=feeder, - topology=self.agent_area_dict) - - def connect(self): - super().connect() - if self.feeder_area is None: + self._connect() + + if self.agent_area_dict is not None: feeder = cim.Feeder(mRID=self.downstream_message_bus_def.id) self.feeder_area = DistributedModel(connection=self.connection, feeder=feeder, @@ -265,17 +271,13 @@ def __init__(self, agent_config, switch_area_dict, simulation_id) self.switch_area = None self.downstream_message_bus_def = downstream_message_bus_def - if self.agent_area_dict is not None: - self.switch_area = SwitchArea(self.downstream_message_bus_def.id, - self.connection) - self.switch_area.initialize_switch_area(self.agent_area_dict) - - def connect(self): - super().connect() - if self.switch_area is None: + self._connect() + + if self.agent_area_dict is not None: self.switch_area = SwitchArea(self.downstream_message_bus_def.id, self.connection) + print(self.agent_area_dict) self.switch_area.initialize_switch_area(self.agent_area_dict) @@ -291,18 +293,17 @@ def __init__(self, agent_config, secondary_area_dict, simulation_id) self.secondary_area = None self.downstream_message_bus_def = downstream_message_bus_def - if self.agent_area_dict is not None: - self.secondary_area = SecondaryArea(self.downstream_message_bus_def.id, - self.connection) - self.secondary_area.initialize_secondary_area(self.agent_area_dict) - - def connect(self): - super().connect() - if self.secondary_area is None: + self._connect() + + if self.agent_area_dict is not None: + if len(self.agent_area_dict['addressable_equipment']) == 0: + _log.warn(f"No addressable equipment in the secondary area with down stream message bus id: {self.downstream_message_bus.id}.") + self.secondary_area = SecondaryArea(self.downstream_message_bus_def.id, self.connection) self.secondary_area.initialize_secondary_area(self.agent_area_dict) + class CoordinatingAgent: @@ -337,12 +338,11 @@ def __init__(self, # self.subscribe_to_feeder_bus() - def spawn_distributed_agent(self, distributed_agent: DistributedAgent): + +''' def spawn_distributed_agent(self, distributed_agent: DistributedAgent): distributed_agent.connect() self.distributed_agents.append(distributed_agent) - -''' def on_control(self, control): device_id = control.get('device') command = control.get('command') diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index 35dec86..188f4e1 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -1,4 +1,4 @@ -from gridappsd.field_interface.interfaces import FieldMessageBus +from gridappsd_field_interface.interfaces import FieldMessageBus import dataclasses import gridappsd.topics as t import json @@ -13,6 +13,8 @@ def get_context_by_feeder(cls, downstream_message_bus: FieldMessageBus, feeder_m request = {'request_type' : 'get_context', 'modelId': feeder_mrid, 'areaId': area_id} + print("*****************************") + print(t.context_request_queue(downstream_message_bus.id)) response = downstream_message_bus.get_response(t.context_request_queue(downstream_message_bus.id), request, timeout=10) return response @@ -23,7 +25,7 @@ def get_context_by_message_bus(cls, downstream_message_bus: FieldMessageBus): """ request = {'request_type' : 'get_context', - 'downstream_message_bus_id': downstream_message_bus.id + 'areaId': downstream_message_bus.id } return downstream_message_bus.get_response(t.context_request_queue(downstream_message_bus.id), request) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py b/gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py index 8cb1fa5..ea9cfda 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py @@ -53,6 +53,6 @@ def get_response(self, topic, message, timeout=5): def disconnect(self): """ - Disconnect the device from the concrete message bus. + Disconnect from the concrete message bus. """ - pass + self.gridappsd_obj.disconnect() From e7b6a3a7bd36640162335c66cba0d02bb6e142ae Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 12 Jul 2023 13:07:16 -0700 Subject: [PATCH 02/20] correcting import path --- .../gridappsd/field_interface/agents/agents.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 1c3fe36..5f67c02 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -11,9 +11,9 @@ from cimgraph.models import DistributedModel, SecondaryArea, SwitchArea import gridappsd.topics as t -from gridappsd_field_interface.context import LocalContext -from gridappsd_field_interface.gridappsd_field_bus import GridAPPSDMessageBus -from gridappsd_field_interface.interfaces import (FieldMessageBus, +from gridappsd.field_interface.context import LocalContext +from gridappsd.field_interface.gridappsd_field_bus import GridAPPSDMessageBus +from gridappsd.field_interface.interfaces import (FieldMessageBus, MessageBusDefinition) cim = None From 6b3f933142981d525f3146301a5fcedd3a3b521a Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 12 Jul 2023 13:26:42 -0700 Subject: [PATCH 03/20] removed print statement --- .../gridappsd/field_interface/agents/agents.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 5f67c02..b745630 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -277,7 +277,6 @@ def __init__(self, if self.agent_area_dict is not None: self.switch_area = SwitchArea(self.downstream_message_bus_def.id, self.connection) - print(self.agent_area_dict) self.switch_area.initialize_switch_area(self.agent_area_dict) From 5994ce74e1115b1f176fd9095c9a9f1810a6774f Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 12 Jul 2023 13:28:39 -0700 Subject: [PATCH 04/20] removed print statement --- gridappsd-field-bus-lib/gridappsd/field_interface/context.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index 188f4e1..bb0c17a 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -13,7 +13,6 @@ def get_context_by_feeder(cls, downstream_message_bus: FieldMessageBus, feeder_m request = {'request_type' : 'get_context', 'modelId': feeder_mrid, 'areaId': area_id} - print("*****************************") print(t.context_request_queue(downstream_message_bus.id)) response = downstream_message_bus.get_response(t.context_request_queue(downstream_message_bus.id), request, timeout=10) return response From 201edfb8ee6a6a03423a621765f7623c354fae6f Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 12 Jul 2023 14:48:54 -0700 Subject: [PATCH 05/20] Update context.py --- gridappsd-field-bus-lib/gridappsd/field_interface/context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index bb0c17a..7aad4ed 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -1,4 +1,4 @@ -from gridappsd_field_interface.interfaces import FieldMessageBus +from gridappsd.field_interface.interfaces import FieldMessageBus import dataclasses import gridappsd.topics as t import json From 255d1ea56d8143d1462a91a8daf14d9c26c22447 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Fri, 14 Jul 2023 16:35:07 -0700 Subject: [PATCH 06/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index b745630..7939661 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -65,7 +65,7 @@ def __init__(self, dt = datetime.now() ts = datetime.timestamp(dt) if ('context_manager' not in self.app_id): - self.agent_id = "da_" + self.app_id + "_" + str(int(ts)) + self.agent_id = "da_" + self.app_id else: self.agent_id = downstream_message_bus_def.id+'.context_manager' From 88d625bb417ebfe4386acedd0bad3ed38a53d16e Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Sun, 16 Jul 2023 22:57:30 -0700 Subject: [PATCH 07/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 7939661..7dcfc8e 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -138,7 +138,7 @@ def subscribe_to_messages(self): self.downstream_message_bus.subscribe( t.field_message_bus_topic(self.downstream_message_bus), self.on_downstream_message) - self.downstream_message_bus.subscribe( + self.upstream_message_bus.subscribe( t.field_message_bus_topic(self.upstream_message_bus), self.on_upstream_message) @@ -150,7 +150,7 @@ def subscribe_to_messages(self): t.field_message_bus_app_topic(self.downstream_message_bus.id, self.app_id), self.on_downstream_message) - self.downstream_message_bus.subscribe( + self.upstream_message_bus.subscribe( t.field_message_bus_app_topic(self.upstream_message_bus.id, self.app_id), self.on_upstream_message) @@ -180,7 +180,7 @@ def subscribe_to_requests(self): t.field_agent_request_queue(self.downstream_message_bus.id, self.agent_id), self.on_request_from_downstream) - self.downstream_message_bus.subscribe( + self.upstream_message_bus.subscribe( t.field_agent_request_queue(self.upstream_message_bus.id, self.agent_id), self.on_request_from_uptream) @@ -221,7 +221,7 @@ def publish_downstream(self, message): self.downstream_message_bus.send(t.field_message_bus_topic(self.downstream_message_bus), message) def publish_upstream(self, message): - self.downstream_message_bus.send(t.field_message_bus_topic(self.downstream_message_bus), message) + self.upstream_message_bus.send(t.field_message_bus_topic(self.upstream_message_bus), message) ''' TODO this has not been implemented yet, so we are commented them out for now. From 6fe6643367e12fed82e5fc2cbf04675f7c28faf2 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 00:01:24 -0700 Subject: [PATCH 08/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 7dcfc8e..b5530d4 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -136,10 +136,10 @@ def subscribe_to_measurement(self): def subscribe_to_messages(self): self.downstream_message_bus.subscribe( - t.field_message_bus_topic(self.downstream_message_bus), + t.field_message_bus_topic(self.downstream_message_bus.id), self.on_downstream_message) self.upstream_message_bus.subscribe( - t.field_message_bus_topic(self.upstream_message_bus), + t.field_message_bus_topic(self.upstream_message_bus.id), self.on_upstream_message) _log.debug( From 1cb76d44b8a10eb7625c6043fc7041c22734afae Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 00:21:42 -0700 Subject: [PATCH 09/20] Update topics.py --- gridappsd-python-lib/gridappsd/topics.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gridappsd-python-lib/gridappsd/topics.py b/gridappsd-python-lib/gridappsd/topics.py index 87bf567..2934abe 100644 --- a/gridappsd-python-lib/gridappsd/topics.py +++ b/gridappsd-python-lib/gridappsd/topics.py @@ -184,8 +184,8 @@ def field_message_bus_topic(message_bus_id:str, app_id: str=None, agent_id: str= :return: """ assert message_bus_id, "message_bus_id cannot be empty" - - return f"{BASE_FIELD_TOPIC}.{message_bus_id}.{app_id}.{agent_id}" + + return f"{BASE_FIELD_TOPIC}.{message_bus_id}" def field_message_bus_app_topic(message_bus_id, app_id=None): From 77c3e4384d998dd63a1ff92b2dbbc796529ec085 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 00:44:20 -0700 Subject: [PATCH 10/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index b5530d4..3e0851d 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -218,10 +218,10 @@ def get_registration_details(self): return dataclasses.asdict(details) def publish_downstream(self, message): - self.downstream_message_bus.send(t.field_message_bus_topic(self.downstream_message_bus), message) + self.downstream_message_bus.send(t.field_message_bus_topic(self.downstream_message_bus.id), message) def publish_upstream(self, message): - self.upstream_message_bus.send(t.field_message_bus_topic(self.upstream_message_bus), message) + self.upstream_message_bus.send(t.field_message_bus_topic(self.upstream_message_bus.id), message) ''' TODO this has not been implemented yet, so we are commented them out for now. From 4fd66b105719b639eb51adec83e8cf4c75fe211d Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 01:09:58 -0700 Subject: [PATCH 11/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 3e0851d..59b1063 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -65,7 +65,7 @@ def __init__(self, dt = datetime.now() ts = datetime.timestamp(dt) if ('context_manager' not in self.app_id): - self.agent_id = "da_" + self.app_id + self.agent_id = "da_" + self.app_id + "_" + self.downstream_message_bus_def.id else: self.agent_id = downstream_message_bus_def.id+'.context_manager' From e0a3fa0851d3cdfeca3e8807a67b84ec985593aa Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 01:25:51 -0700 Subject: [PATCH 12/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 59b1063..dd66d33 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -65,7 +65,7 @@ def __init__(self, dt = datetime.now() ts = datetime.timestamp(dt) if ('context_manager' not in self.app_id): - self.agent_id = "da_" + self.app_id + "_" + self.downstream_message_bus_def.id + self.agent_id = "da_" + self.app_id + "_" + self.downstream_message_bus.id else: self.agent_id = downstream_message_bus_def.id+'.context_manager' From 235a402a41fc8a5bfc3af1c239b9bce7b327f29f Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 01:37:27 -0700 Subject: [PATCH 13/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index dd66d33..9fb0170 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -100,7 +100,10 @@ def _connect(self): if self.downstream_message_bus is None and self.upstream_message_bus is None: raise ValueError( "Either upstream or downstream bus must be specified!") - + + if ('context_manager' not in self.app_id): + self.agent_id = "da_" + self.app_id + "_" + self.downstream_message_bus.id + if self.agent_area_dict is None: context = LocalContext.get_context_by_message_bus( self.downstream_message_bus) From 2aa85b2402258076e65720cffed09d114a6058bd Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Mon, 17 Jul 2023 01:46:59 -0700 Subject: [PATCH 14/20] Update agents.py --- .../gridappsd/field_interface/agents/agents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 9fb0170..c0d4ab8 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -65,7 +65,7 @@ def __init__(self, dt = datetime.now() ts = datetime.timestamp(dt) if ('context_manager' not in self.app_id): - self.agent_id = "da_" + self.app_id + "_" + self.downstream_message_bus.id + self.agent_id = "da_" + self.app_id else: self.agent_id = downstream_message_bus_def.id+'.context_manager' From 7305a2ffd85aec99c997c24163ab59e09bd60b85 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 9 Aug 2023 13:16:35 -0700 Subject: [PATCH 15/20] Update context.py --- gridappsd-field-bus-lib/gridappsd/field_interface/context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index 7aad4ed..ff8a163 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -26,7 +26,7 @@ def get_context_by_message_bus(cls, downstream_message_bus: FieldMessageBus): request = {'request_type' : 'get_context', 'areaId': downstream_message_bus.id } - return downstream_message_bus.get_response(t.context_request_queue(downstream_message_bus.id), request) + return downstream_message_bus.get_response(t.context_request_queue(downstream_message_bus.id), request, timeout=10) @classmethod def register_agent(cls, downstream_message_bus: FieldMessageBus, upstream_message_bus: FieldMessageBus, agent): From 20f533e2cd141b25370ca77f83c153aba053fe2d Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Fri, 6 Oct 2023 10:56:01 -0700 Subject: [PATCH 16/20] added control command for simulated env --- .../gridappsd/field_interface/agents/agents.py | 15 +++++++++++---- .../gridappsd/field_interface/context.py | 13 ++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index c0d4ab8..0881e02 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -10,6 +10,7 @@ from cimgraph.loaders.gridappsd import GridappsdConnection from cimgraph.models import DistributedModel, SecondaryArea, SwitchArea +from gridappsd import DifferenceBuilder import gridappsd.topics as t from gridappsd.field_interface.context import LocalContext from gridappsd.field_interface.gridappsd_field_bus import GridAPPSDMessageBus @@ -227,16 +228,22 @@ def publish_upstream(self, message): self.upstream_message_bus.send(t.field_message_bus_topic(self.upstream_message_bus.id), message) + def send_control_command(self, differenceBuilder : DifferenceBuilder): + if self.simulation_id is not None: + LocalContext.control_command(differenceBuilder) + ''' + TODO This block needs to be tested with device interface + else: + self.downstream_message_bus.send(devie_interface_topic, differenceBuilder) + ''' + ''' TODO this has not been implemented yet, so we are commented them out for now. # not all agent would use this def on_control(self, control): device_id = control.get('device') command = control.get('command') self.control_device(device_id, command) - - def control_device(self, device_id, command): - device_topic = self.devices.get(device_id) - self.secondary_message_bus.publish(device_topic, command)''' +''' class FeederAgent(DistributedAgent): diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index ff8a163..a479c32 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -1,3 +1,4 @@ +from gridappsd import DifferenceBuilder from gridappsd.field_interface.interfaces import FieldMessageBus import dataclasses import gridappsd.topics as t @@ -41,12 +42,22 @@ def register_agent(cls, downstream_message_bus: FieldMessageBus, upstream_messag @classmethod def get_agents(cls, downstream_message_bus: FieldMessageBus): - """ + """git sta Sends the newly created distributed agent's info to OT bus """ request = {'request_type' : 'get_agents'} return downstream_message_bus.get_response(t.context_request_queue(downstream_message_bus.id), request) + + @classmethod + def send_control_command(cls, downstream_message_bus: FieldMessageBus, difference_builder: DifferenceBuilder): + """ + Sends the control command to device + + """ + request = {'request_type' : 'control_command'} + downstream_message_bus.send(t.context_request_queue(downstream_message_bus.id), + difference_builder.get_message()) # Provide context based on router (ip trace) or PKI # Maybe able to emulate/simulate From 88c40792f05fc59bebf0f4a35684ee78b77b13a7 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Fri, 6 Oct 2023 11:02:06 -0700 Subject: [PATCH 17/20] added control command for simulated env --- gridappsd-field-bus-lib/gridappsd/field_interface/context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index a479c32..5740d71 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -42,7 +42,7 @@ def register_agent(cls, downstream_message_bus: FieldMessageBus, upstream_messag @classmethod def get_agents(cls, downstream_message_bus: FieldMessageBus): - """git sta + """ Sends the newly created distributed agent's info to OT bus """ From 79e1064f33f323ffb40742554e366fbb64f8fe28 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Fri, 6 Oct 2023 12:04:16 -0700 Subject: [PATCH 18/20] added control command for simulated env --- .../gridappsd/field_interface/agents/agents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py index 0881e02..d5041b0 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py @@ -230,7 +230,7 @@ def publish_upstream(self, message): def send_control_command(self, differenceBuilder : DifferenceBuilder): if self.simulation_id is not None: - LocalContext.control_command(differenceBuilder) + LocalContext.send_control_command(self.downstream_message_bus, differenceBuilder) ''' TODO This block needs to be tested with device interface else: From 4cf5176439df304817654207a9df903b45ae4a7b Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Fri, 6 Oct 2023 12:23:57 -0700 Subject: [PATCH 19/20] added control command for simulated env --- gridappsd-field-bus-lib/gridappsd/field_interface/context.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py index 5740d71..d29737f 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd/field_interface/context.py @@ -55,9 +55,10 @@ def send_control_command(cls, downstream_message_bus: FieldMessageBus, differenc Sends the control command to device """ - request = {'request_type' : 'control_command'} + request = {'request_type' : 'control_command', + 'difference_builder': difference_builder.get_message()} downstream_message_bus.send(t.context_request_queue(downstream_message_bus.id), - difference_builder.get_message()) + request) # Provide context based on router (ip trace) or PKI # Maybe able to emulate/simulate From fae5f4452a62442d5ce44496bb523d52fdd82288 Mon Sep 17 00:00:00 2001 From: Tonya Martin Date: Thu, 12 Oct 2023 09:26:45 -0700 Subject: [PATCH 20/20] Update version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f8a2099..adc02bf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gridappsd-python-workspace" -version = "2023.5.2a0" +version = "2023.9.0" description = "A GridAPPS-D Python Adapter" authors = [ "C. Allwardt <3979063+craig8@users.noreply.github.com>",