From 64a49609653ab97f3844511818cf2667865bb511 Mon Sep 17 00:00:00 2001 From: Dr Maurice Hendrix Date: Wed, 12 Mar 2025 15:31:06 +0100 Subject: [PATCH 1/5] Update example_frbc_rm.py Make frbc example take an (optional) url via command line and also make it importable by moving the "action" into an if __name__ == "__main__": --- examples/example_frbc_rm.py | 56 ++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/examples/example_frbc_rm.py b/examples/example_frbc_rm.py index 774d936..9517305 100644 --- a/examples/example_frbc_rm.py +++ b/examples/example_frbc_rm.py @@ -1,3 +1,5 @@ +import re +from functools import partial import logging import sys import uuid @@ -150,30 +152,32 @@ def activate(self, conn: S2Connection) -> None: def deactivate(self, conn: S2Connection) -> None: print("The control type NoControl is now deactivated.") - -s2_conn = S2Connection( - url="ws://localhost:8080/backend/rm/s2python-frbc/cem/dummy_model/ws", - role=EnergyManagementRole.RM, - control_types=[MyFRBCControlType(), MyNoControlControlType()], - asset_details=AssetDetails( - resource_id=str(uuid.uuid4()), - name="Some asset", - instruction_processing_delay=Duration.from_milliseconds(20), - roles=[Role(role=RoleType.ENERGY_CONSUMER, commodity=Commodity.ELECTRICITY)], - currency=Currency.EUR, - provides_forecast=False, - provides_power_measurements=[CommodityQuantity.ELECTRIC_POWER_L1], - ), - reconnect=True, -) - - -def stop(signal_num, _current_stack_frame): +def stop(s2_connection, signal_num, _current_stack_frame): print(f"Received signal {signal_num}. Will stop S2 connection.") - s2_conn.stop() - - -signal.signal(signal.SIGINT, stop) -signal.signal(signal.SIGTERM, stop) - -s2_conn.start_as_rm() + s2_connection.stop() + +def start_s2_session(url): + s2_conn = S2Connection( + url=url, + role=EnergyManagementRole.RM, + control_types=[MyFRBCControlType(), MyNoControlControlType()], + asset_details=AssetDetails( + resource_id=str(uuid.uuid4()), + name="Some asset", + instruction_processing_delay=Duration.from_milliseconds(20), + roles=[Role(role=RoleType.ENERGY_CONSUMER, commodity=Commodity.ELECTRICITY)], + currency=Currency.EUR, + provides_forecast=False, + provides_power_measurements=[CommodityQuantity.ELECTRIC_POWER_L1] + ), + reconnect=True, + verify_certificate=False + ) + signal.signal(signal.SIGINT, partial(stop, s2_conn)) + signal.signal(signal.SIGTERM, partial(stop, s2_conn)) + + s2_conn.start_as_rm() + +if __name__ == "__main__": + start_s2_session(sys.argv[1] if len(sys.argv) > 1 and re.match(r'^ws{1,2}://', sys.argv[1]) + else "ws://localhost:8080/backend/rm/s2python-frbc/cem/dummy_model/ws") From 2ecf88f93292910526866f76862a41d44e752156 Mon Sep 17 00:00:00 2001 From: Maurice Hendrix Date: Wed, 12 Mar 2025 16:01:53 +0100 Subject: [PATCH 2/5] make start_session take optional client_id (for later in pairing example) --- examples/example_frbc_rm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/example_frbc_rm.py b/examples/example_frbc_rm.py index 9517305..4fcf883 100644 --- a/examples/example_frbc_rm.py +++ b/examples/example_frbc_rm.py @@ -156,13 +156,13 @@ def stop(s2_connection, signal_num, _current_stack_frame): print(f"Received signal {signal_num}. Will stop S2 connection.") s2_connection.stop() -def start_s2_session(url): +def start_s2_session(url, client_node_id=str(uuid.uuid4())): s2_conn = S2Connection( url=url, role=EnergyManagementRole.RM, control_types=[MyFRBCControlType(), MyNoControlControlType()], asset_details=AssetDetails( - resource_id=str(uuid.uuid4()), + resource_id=client_node_id, name="Some asset", instruction_processing_delay=Duration.from_milliseconds(20), roles=[Role(role=RoleType.ENERGY_CONSUMER, commodity=Commodity.ELECTRICITY)], From 8d3b7c32c8452638074b45f0d84d41e738cb5471 Mon Sep 17 00:00:00 2001 From: Maurice Hendrix Date: Wed, 12 Mar 2025 16:13:51 +0100 Subject: [PATCH 3/5] using argparse instead of sys.argv --- examples/example_frbc_rm.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/example_frbc_rm.py b/examples/example_frbc_rm.py index 4fcf883..8c2390e 100644 --- a/examples/example_frbc_rm.py +++ b/examples/example_frbc_rm.py @@ -1,3 +1,4 @@ +import argparse import re from functools import partial import logging @@ -179,5 +180,8 @@ def start_s2_session(url, client_node_id=str(uuid.uuid4())): s2_conn.start_as_rm() if __name__ == "__main__": - start_s2_session(sys.argv[1] if len(sys.argv) > 1 and re.match(r'^ws{1,2}://', sys.argv[1]) - else "ws://localhost:8080/backend/rm/s2python-frbc/cem/dummy_model/ws") + parser = argparse.ArgumentParser(description="A simple S2 reseource manager example.") + parser.add_argument('endpoint', type=str, help="WebSocket endpoint uri for the server (CEM) e.h. ws://localhost:8080/websocket/s2/my-first-websocket-rm") + args = parser.parse_args() + + start_s2_session(args.endpoint) From e22ec703e8b13ca3eb7da914b59b9d4253f9ceb0 Mon Sep 17 00:00:00 2001 From: Dr Maurice Hendrix Date: Wed, 12 Mar 2025 16:22:49 +0100 Subject: [PATCH 4/5] Update example_frbc_rm.py --- examples/example_frbc_rm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example_frbc_rm.py b/examples/example_frbc_rm.py index 8c2390e..824e0f0 100644 --- a/examples/example_frbc_rm.py +++ b/examples/example_frbc_rm.py @@ -181,7 +181,7 @@ def start_s2_session(url, client_node_id=str(uuid.uuid4())): if __name__ == "__main__": parser = argparse.ArgumentParser(description="A simple S2 reseource manager example.") - parser.add_argument('endpoint', type=str, help="WebSocket endpoint uri for the server (CEM) e.h. ws://localhost:8080/websocket/s2/my-first-websocket-rm") + parser.add_argument('endpoint', type=str, help="WebSocket endpoint uri for the server (CEM) e.g. ws://localhost:8080/websocket/s2/my-first-websocket-rm") args = parser.parse_args() start_s2_session(args.endpoint) From 076bf8a7990aafa1ae17f2263a833f5c3696c7f8 Mon Sep 17 00:00:00 2001 From: Dr Maurice Hendrix Date: Wed, 12 Mar 2025 16:29:59 +0100 Subject: [PATCH 5/5] Update example_frbc_rm.py --- examples/example_frbc_rm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example_frbc_rm.py b/examples/example_frbc_rm.py index 824e0f0..36d8fb7 100644 --- a/examples/example_frbc_rm.py +++ b/examples/example_frbc_rm.py @@ -181,7 +181,7 @@ def start_s2_session(url, client_node_id=str(uuid.uuid4())): if __name__ == "__main__": parser = argparse.ArgumentParser(description="A simple S2 reseource manager example.") - parser.add_argument('endpoint', type=str, help="WebSocket endpoint uri for the server (CEM) e.g. ws://localhost:8080/websocket/s2/my-first-websocket-rm") + parser.add_argument('endpoint', type=str, help="WebSocket endpoint uri for the server (CEM) e.g. ws://localhost:8080/backend/rm/s2python-frbc/cem/dummy_model/ws") args = parser.parse_args() start_s2_session(args.endpoint)