""" Add a server and action mapping via SDK Bridge gRPC """ import asyncio import sys sys.path.insert(0, r'C:\DEV\COPILOT\geutebruck-api\src\api\protos') import grpc import configuration_pb2 import configuration_pb2_grpc async def add_server_and_mapping(): channel = grpc.aio.insecure_channel('localhost:50051') # 1. Create a new server (id=19) print("=" * 60) print("CREATING SERVER ID=19") print("=" * 60) config_stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) server_request = configuration_pb2.CreateServerRequest( server=configuration_pb2.ServerData( id="19", alias="Test Server 19 via API", host="192.168.1.119", user="admin", password="test123", enabled=True, deactivate_echo=False, deactivate_live_check=False ) ) try: response = await config_stub.CreateServer(server_request, timeout=10.0) print(f"[OK] Server created successfully") print(f" ID: {response.server.id}") print(f" Alias: {response.server.alias}") print(f" Host: {response.server.host}") print(f" Enabled: {response.server.enabled} (bool type)") except grpc.RpcError as e: print(f"[ERROR] Server creation failed: {e.code()} - {e.details()}") print() # 2. Create a new action mapping print("=" * 60) print("CREATING ACTION MAPPING") print("=" * 60) # Action mapping creation is in the configuration service mapping_request = configuration_pb2.CreateActionMappingRequest( mapping=configuration_pb2.ActionMappingInput( name="Test Mapping - Digital Input 1", input_actions=[ configuration_pb2.ActionDefinition( action="DigitalContactChanged", parameters=[ configuration_pb2.ActionParameter(name="Contact", value="1"), configuration_pb2.ActionParameter(name="State", value="closed") ] ) ], output_actions=[ configuration_pb2.ActionDefinition( action="SystemInfo", parameters=[ configuration_pb2.ActionParameter(name="Message", value="Digital Input 1 triggered") ] ) ], video_input=101027 # Optional video input association ) ) try: response = await config_stub.CreateActionMapping(mapping_request, timeout=10.0) print(f"[OK] Action mapping created successfully") print(f" Name: {response.mapping.name}") print(f" Input actions: {len(response.mapping.input_actions)}") print(f" Output actions: {len(response.mapping.output_actions)}") except grpc.RpcError as e: print(f"[ERROR] Action mapping creation failed: {e.code()} - {e.details()}") await channel.close() print() print("=" * 60) print("DONE - You can now check GeViSet to verify the changes") print("=" * 60) if __name__ == "__main__": asyncio.run(add_server_and_mapping())