From cc256e18d855161b822616e31f2fdb8c3b1b1222 Mon Sep 17 00:00:00 2001 From: poorva1209 Date: Wed, 12 Jul 2023 13:03:36 -0700 Subject: [PATCH 1/4] 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 2/4] 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 3/4] 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 4/4] 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